OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 14:46

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: компиляторы для .NET: Oberon.NET, GPCP, Zonnon
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 11:40 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
появилась необходимость почитать книжку по дотнету (для расширения кругозора)
книг на русском туча: по сишарпу, по самому фрэймворку(использование библиотек и внутреннее устройство), про написание фронтэнда/бэкэнда компилятора под дотнет, по визуалстудии, по асп.нет и тд
понятно, что качество представления разное(есть откровенно хлам), но есть из чего выбрать + есть книги рассчитанные на новичков, если что-то непонятно описано в одном месте есть куда заглянуть еще.

большинство книг либо сишарп либо визуалбэйсик(

начал читать на примерах с сишарпом
сишный синтаксис(

решил поискать реализации оберонов под дотнет, хочу одни и те же примеры прорабатывать на шарпе и обероне
особых требований к среде не ставилось, текстовый редактор + консольный компилятор вполне хватает, но работаю под линуксом (моно и виня установлены)...

какие реализации нашел:

oberon.net
(исторически) в ETH начали разработку компилятора оберона под дотнет с прицелом на реализацию активного оберона. изначально назывался лайтнинг оберон, когда ввели поддержку активных обектов назвали актив оберон. из-за некоторых проблем активности не дореализовали. в итоге вырезали поддержку активностей, урезали до оберон-1 и назвали оберон.нет. опыт активностей перенесли в зоннон. (проект 7/7+ ?)

особенности:
реализация под дотнет 1.0 (скачать), через System.Reflection (источник)
сам реализован на дотнете (работает через моно), вроде не требует виню
исходники есть (не ковырял) (скачать)
есть не решенные проблемы (баги)
не развивается (последний релиз 2003-02-13)

низкоуровнево встраиваться в визуалстудию не может, архитектура компилятора не позволяет (faq)
сред разработки нет
нужно писать программы в текстовом редакторе


запуск в линуксе: работает, но:
1) для запуска и для компиляции (faq) приложений в папке проекта должен быть OBERON.dll
2) пришлось переименовать Obgen.DLL в Obgen.dll и Obscan.DLL в Obscan.dll (в линуксе адреса регистрозависимые)
3) создать запускной фаил ILasm с содержимым (из-за регистрозависимости, компилятор вызывает "ILasm"):
Код:
#!/bin/bash
ilasm $1 $2 $3 $4 $5

4) компиляция командой: Oberon.exe HelloWorld.mod


GPCP (Gardens Point Component Pascal)

реализация компонентного паскаля для дотнет и явы. разработан в QUT. статья автора компилятора (тут).
есть книга ("Programming in the .NET environment"), где упоминается про реализацию (тут , стр 383)
рус перевод ("Программирование на платформе .NET"), в электронном виде не нашел (тут)
есть книга от автора компилятора ("Compiling for the .NET Common Language Runtime"), в электронном виде не нашел (тут , тут отрывки есть: 1 2)

особенности:
реализация под дотнет 1.1 и 2.0. (брать тут). через System.Reflection
исходники есть(не ковырял)
не развивается (23-01-2007?)

низкоуровнево встраиваться в визуалстудию не может, архитектура компилятора не позволяет
есть плагины для встраивания в эклипс, визуалстудию 2002 и 2003? (тут)
есть среда разработки CPIde (требует версию под 2.0). бесплатная версия накладывает ограничения на размер исходников (5кб). есть платные версии (стандарт 45$, про 90$). (тут)
можно писать программы в текстовом редакторе

запуск в линуксе:
дотнет версия. запускается с параметром /help нормально. не смог заставить компилировать. подозрение на пролемы с переменной CPROOT. что можно покрутить?
Код:
"Listing:

   1 MODULE Hello;
**** ^ Compiler raised an internal exception
**** Exception: System.NullReferenceException: Object reference not set to an instance of an object
  at GPBinFiles.GPBinFiles.findOnPath (System.Char[] pathName, System.Char[] fileName) [0x00000]
  at NewSymFileRW.SymFileReader.Parse (IdDesc.BlkId scope) [0x00000]
  at NewSymFileRW.ImpResScope.ReadThisImport (IdDesc.BlkId imp) [0x00000]
  at NewSymFileRW.NewSymFileRW.WalkImports (Symbols.ScpSeq& imps, IdDesc.BlkId modI) [0x00000]
  at CPascalP.CPascalP.ImportList (IdDesc.BlkId modScope) [0x00000]
  at CPascalP.CPascalP.CPmodule () [0x00000]
  at CPascalP.CPascalP.Module () [0x00000]
  at CPascalP.CPascalP.Parse () [0x00000]
  at CPascal.CPascal.Compile (System.Char[] nam, System.Int32& retVal) [0x00000]
   2   IMPORT CPmain, Console;
   3 BEGIN
   4   Console.WriteString("Hello CP World"); Console.WriteLn;
   5 END Hello.

There were:  1 error, and No warnings"


ява, линукс версия (под яву не сильно интересовало, но попытался). совсем не запускается.
Код:
Exception in thread "main" java.lang.NoClassDefFoundError: CP//
Caused by: java.lang.ClassNotFoundException: CP..
   at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
Could not find the main class: CP... Program will exit.


запуск в винде:
плагин для эклипса не смог заставить работать (пробовал версию эклипса для которой разрабатывался плагин 3.0.0 и 3.0.1). не может создать проект. вроде требуется версия компилятора под яву.

в CPIde должен работать, но не проверял.

если побороть компилятор и плагин, то под линуксом можно было бы использовать явовскую версию под эклипсом либо дотнетовскую в текстовом редакторе.

Zonnon

экспериментальный язык, включивший наработки по активностям и протоколам. компилятор реализуется через CCI (презентация1 , презентация2 , презентация3 , презентация4 , презентация5 , статья1 , статья2 , статья3 )

особенности:
реализация под дотнет 2.0 и 3.5. (брать тут). через CCI
исходники не нашел
сообщение о языке и некоторые курсы(тут)
есть
развивается (20-11-2009)

может встраиваться в визуалстудию (через CCI) 2005 или 2008 про (вс платная). в визуалстудию экспресс(бесплатная) встраиваться не умеет. в визуал студию шел(бесплатная) встраиваться не умеет.
есть плагины для встраивания в эклипс (ссылка1 , ссылка2 , презентация , статья)
есть среда разработки ZonnonBuilder. бесплатная. входит в инсталлятор. (ссылка1 , ссылка2)
можно писать программы в текстовом редакторе

запуск в линуксе: работает, но:
1) для запуска откомпилированных приложений в папке проекта должен быть Zonnon.RTL.dll
2) компиляция командой: zc.exe /quiet /entry:hello hello.znn
3) в экслипс встраивается. скопировать папку в /usr/lib/eclipse/plugins . не забыть права доступа для пользователя разрешить. но работает странно. каждый раз нужно ран-ран указывать новый профиль


Последний раз редактировалось ___ Четверг, 03 Декабрь, 2009 09:57, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 11:42 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
про зоннон
ожидал, что это грубо говоря active oberon++
но все же нет
в актвном обероне старались сохранить совместимость с синтаксисом оберона, тут нет

что показалось непривычным по сравнению с КП:
1) компилируемые сущности: модули, объекты, описания, реализации
2) области видимости: объявленный в модуле объект
Код:
module M;

type
O = object
var {public}
i: integer;
var {private}
I:integer;

procedure {public} p;
begin
end p;

procedure {private} P;
begin
end P;

end O;

var
V:O;

begin
V.i:=0;
V.p;

(*нельзя
V.I:=0;
V.P;*)

end M;

из этого модуля доступ к i и p есть, а к I и P нет
3) связанные процедуры(методы) пишутся в теле объекта
4) объект может импортировать сущности
5) запись частный случай объекта
Код:
RecordType = record { VariableDeclaration ";" } end ident.

связанных процедур у записей вроде нет
6) все модификаторы прописываются (public, private, value и тд), нету *, - (если не знаком с КП, то более читабельно)


Последний раз редактировалось ___ Понедельник, 30 Ноябрь, 2009 11:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 11:43 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
как можно пошаманить, чтобы GPCP заработал?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 12:29 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Полезно нарыто, спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 12:41 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
___ писал(а):
появилась необходимость почитать книжку по дотнету (для расширения кругозора)
...
начал читать на примерах с сишарпом
сишный синтаксис(
...
решил поискать реализации оберонов под дотнет

Оберон-машина (т.е. runtime system) принципиально отличается от дотнетной.
1) В оберонах записи расширяемы, а в дотнете структуры не расширяемы.
2) В оберонах массивы собственнозначные типы (vaue type), а в дотнете они ссылочные (reference type).
3) В дотнете вместо модулей так называемые сборки и их можно только загрузить, но нельзя выгрузить.
Поэтому эффективная реализация какого-либо оберона под дотнетом невозможна: обероны шире чем дотнет, им в его узких рамках тесно. Короче, если Вашей целью является изучение дотнета, то Вы должны изучить C# как канонический язык этой машины (всё на что способна дотнетная машина -- всё это выражено в C# как 1:1).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 13:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Почитайте Рихтера про .NET.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:27 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Сергей Губанов писал(а):
Оберон-машина (т.е. runtime system) принципиально отличается от дотнетной. ... обероны шире чем дотнет, им в его узких рамках тесно. ...
Ну и ладушки. Можно спокойно и на .NET забить :)

(Скопировал для цитирования на с/к.)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 18:24 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Info21 писал(а):
Ну и ладушки. Можно спокойно и на .NET забить :)
Не надо спешить забивать на .NET. А то будете опять строить социализм в отдельно взятой стране.
Microsoft .NET ist die Basis


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 18:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
А что там ловить. Java и .NET с точки зрения системного программирования не оправдали ожиданий (они не удовлетворительны для ниши тех же Сей; а замена Сям очень нужна). С точки зрения прикладных задач... Не связанный разного рода путами народ выбирает что-то полегче. Из тех же интерпретируемых языков. Потом упирается в чрезмерную дальность от машины, не-компилируемость, проблемы дин. типизации. Из-за этого многие таки используют всё равно Java и .NET. Но сказать, что очень счастливы - сомневаюсь.

Вот Гугол неспроста строит у себя этот самый "социализм в отдельно взятой стране".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Ноябрь, 2009 17:08 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Сергей Губанов писал(а):
2) В оберонах массивы собственнозначные типы (vaue type), а в дотнете они ссылочные (reference type).


По-поводу value types, например, в указанной ссылке о реализации gpcp сказано следующее:
Цитата:
Reference Surrogates
The mechanism by which structures with value semantics in some source language are implemented by means of reference objects in an implementation framework has been described as reference surrogacy. In effect, a dynamically allocated object in the implementation framework is created to act as a surrogate for an object with value semantics in the source language program. Whenever an operation in the source code requires value copies to be made, the code in the implementation framework does whatever field-by-field or element-by-element copying is required to maintain semantic consistency with the source language view. Similarly, values that are implicitly created in the source code may require explicit invocations of new in the implementation framework, if they are implemented by reference surrogates.

т.е. реализация создает динамические объекты для value types. Если такие динамические объекты создаются однократно при инициализации особой нагрузки на сборщик мусора вроде быть не должно? Т.е. вопрос о том, так ли уж неэффективна реализация КП на .Net?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 15:13 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Peter Almazov писал(а):
Info21 писал(а):
Ну и ладушки. Можно спокойно и на .NET забить :)
Не надо спешить забивать на .NET. А то будете опять строить социализм в отдельно взятой стране.
Microsoft .NET ist die Basis


На самом деле ситуация несколько сложнее: есть инфомация о том, что Oberon microsystems в настоящее время использует BlackBox в качестве основной IDE для разработки приложений под .NET и Java. Т.е. ничто не забыто.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 19:06 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
QWERTYProgrammer писал(а):
На самом деле ситуация несколько сложнее: есть инфомация о том, что Oberon microsystems в настоящее время использует BlackBox в качестве основной IDE для разработки приложений под .NET и Java. Т.е. ничто не забыто.

А откуда такая информация, что Oberon microsystems разрабатывает приложения под .NET и Java?
Или их заказчики Компонентный паскаль не признают, а признаю только .NET и Java?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 19:35 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Просто в сфере инструментария сегодня трудно иметь коммерческую нишу, для небольшой компании.
Разрабатывая инструменты (framework-и) над .NET (mobile), Ominc, видимо, эту нишу имеют.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 23:25 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
QWERTYProgrammer писал(а):
Если такие динамические объекты создаются однократно при инициализации особой нагрузки на сборщик мусора вроде быть не должно? Т.е. вопрос о том, так ли уж неэффективна реализация КП на .Net?

А при не однократной?

Простой пример:
Код:
PROCEDURE F (...)
  VAR x, y, z: ARRAY 4096 OF BYTE;
  ...
BEGIN
  ....

При трансляции в дотнет возникнут три паразитных объекта:
byte[] x = new byte[4096];
byte[] y = new byte[4096];
byte[] x = new byte[4096];
которые будут создаваться при каждом вызове процедуры. Попробуйте теперь её вызвать, ну, например, пятьдесят тысяч раз в секунду.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 10:00 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Сергей Губанов писал(а):
Поэтому эффективная реализация какого-либо оберона под дотнетом невозможна: обероны шире чем дотнет, им в его узких рамках тесно. Короче, если Вашей целью является изучение дотнета, то Вы должны изучить C# как канонический язык этой машины (всё на что способна дотнетная машина -- всё это выражено в C# как 1:1).

пусть эффективная по сравнени с др оберонами невозможна, по сравнению с дотнетным сишарпом будет тоже самое(ну или примерно тоже самое, даже если хуже всё равно для текущих задач эффективность не важна), а синтаксис привычней (не криптографичесский сишный). учебные примеры хочу писать на шарпе и обероноподоном, что бы сравнивать, что и где у них по разному.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 10:25 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
раскопки GPCP:
пробовал 2 модуля:
1) совсем простой без импорта
2) стандартный Hello.cp

во первых с переменными окружения (нужно перед запуском компилятора):
PATH=$PATH:$HOME/gpcp-CLR_1.3.9/bin
export PATH
CPSYM=.:$HOME/gpcp-CLR_1.3.9/libs:$HOME/gpcp-CLR_1.3.9/libs/NetSystem
export CPSYM

если компилировать 1 модуль, то говорит:
Код:
ApplicationName='/usr/lib/mono/2.0\ilasm', CommandLine='/dll /debug /nologo /quiet a1.il', CurrentDirectory=''

если компилировать 2, то не находит импортируемые модули (хотя переменная CPSYM есть)
если взглянуть на ошибку, то в глаза бросится: /usr/lib/mono/2.0\ilasm
слеш не тот...
я подумал, что мб из-за этого и модули не видит

1) нашел файл:
gpcp-CLR_1.3.9/source/libs/csharp/GPFiles.cs
изменил переменные в нем
с:
Код:
public static char pathSep = ';';
public static char fileSep = '\\';
public static char optChar = '/';

на:
Код:
public static char pathSep = ':';
public static char fileSep = '\u002F';
public static char optChar = '-';

скомпилированный файл поместил в gpcp-CLR_1.3.9/bins
Код:
csc /t:library /debug GPFiles.cs

поместил в gpcp-CLR_1.3.9/bins
исправился глюк импорта, но глюк вызова приложения ilasm не прошел

теперь оба модуля нормально компилирутся с ключем -nocode (не делает сборку)
2)
нашел еще 1 фаил (в эту папку нужно положить RTS.dll)
gpcp-CLR_1.3.9/source/gpcp/csharp/MsilAsm.cs
изменения в нем:
с:
Код:
return System.IO.Directory.GetParent(s).ToString() + "\\";
asm.StartInfo.FileName = GetDotNetRuntimeInstallDirectory() + "ilasm";

на:
Код:
return System.IO.Directory.GetParent(s).ToString() + "\u002F";
asm.StartInfo.FileName = GetDotNetRuntimeInstallDirectory() + "ilasm.exe";

или
Код:
asm.StartInfo.FileName = "ilasm2";

или
Код:
asm.StartInfo.FileName = "ilasm";

скомпилировал
Код:
csc /t:library /r:RTS.dll /debug MsilAsm.cs

поместил в gpcp-CLR_1.3.9/bins

ошибка вызова ilasm исчезла, но сам он стал говорить:
Код:
Hello.il (28, 9) : Error : irrecoverable syntax error

***** FAILURE *****

   1 MODULE Hello;
**** -------^ ILASM failed to assemble IL file

попробовал вручную натравить ilasm на Hello.il:
Код:
Hello.il (28, 9) : Error : irrecoverable syntax error

***** FAILURE *****


попробовал в винде подсунуть этот Hello.il в майкросовтовский ilasm - компилируется нормально
в виндовый моно подсунул, таже ошибка возникает

значит косяк уже в моно? или GPCP недокументируемые возможности IL кода использует?
что можно придумать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 11:12 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
___ писал(а):
пусть эффективная по сравнени с др оберонами невозможна, по сравнению с дотнетным сишарпом будет тоже самое
Тормоза будут если в C# по тупому наколбасить для временного локального буфера byte[] x = new byte[4096], но кто же будучи в здравом уме будет такое писать если ему известно как часто этот локальный буфер создаваться должен? Нормальный программист создаст некий кэш буферов и будет из него при необходимости буфер брать на время, потом возвращать. В результате нагрузки на сборщик мусора не будет, чего нельзя сказать в случае закулисных манипуляций компилятора GPCP.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 23:29 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Попробовал потестировать gpcp на простых примерах: как и говорил Сергей Губанов для gpcp разницы в быстродействии между ARRAY и POINTER TO ARRAY + NEW нет. Сборщик мусора, правда, работал значительно быстрее, чем в ББ, но разумеется не так быстро, как ARRAY в ББ. Т.е. работая с gpcp просто необходимо учитывать, что на самом деле это надстройка над .NET :cry:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 01 Декабрь, 2009 11:04 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Сергей Губанов писал(а):
В результате нагрузки на сборщик мусора не будет, чего нельзя сказать в случае закулисных манипуляций компилятора GPCP.

Сергей, думаю вы правы, что если писать что-то серьезное на дотнете, то лучше использовать родной дотнетный язык (про него все известно и тд), но вопрос то не в этом...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 29 Декабрь, 2009 16:53 

Зарегистрирован: Воскресенье, 04 Январь, 2009 12:00
Сообщения: 52
Мда, негусто с реализациями оберона под .NET.
А вот есть еще GNAT 2009 который умеет компилировать под .NET и Java-платформу.
Насколько серьезный инструмент? То-есть возможно ли применение в реальной разработке и насколько сложнее оберона?

Еще как вариант delphi prism, но он чисто коммерческий.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB