OberonCore
https://forum.oberoncore.ru/

компиляторы для .NET: Oberon.NET, GPCP, Zonnon
https://forum.oberoncore.ru/viewtopic.php?f=21&t=2128
Страница 1 из 2

Автор:  ___ [ Пятница, 27 Ноябрь, 2009 11:40 ]
Заголовок сообщения:  компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

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

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

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

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

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 . не забыть права доступа для пользователя разрешить. но работает странно. каждый раз нужно ран-ран указывать новый профиль

Автор:  ___ [ Пятница, 27 Ноябрь, 2009 11:42 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

про зоннон
ожидал, что это грубо говоря 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 и тд), нету *, - (если не знаком с КП, то более читабельно)

Автор:  ___ [ Пятница, 27 Ноябрь, 2009 11:43 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

как можно пошаманить, чтобы GPCP заработал?

Автор:  Info21 [ Пятница, 27 Ноябрь, 2009 12:29 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

Полезно нарыто, спасибо.

Автор:  Сергей Губанов [ Пятница, 27 Ноябрь, 2009 12:41 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

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

Автор:  Илья Ермаков [ Пятница, 27 Ноябрь, 2009 13:55 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

Почитайте Рихтера про .NET.

Автор:  Info21 [ Пятница, 27 Ноябрь, 2009 15:27 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

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

Автор:  Peter Almazov [ Пятница, 27 Ноябрь, 2009 18:24 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

Info21 писал(а):
Ну и ладушки. Можно спокойно и на .NET забить :)
Не надо спешить забивать на .NET. А то будете опять строить социализм в отдельно взятой стране.
Microsoft .NET ist die Basis

Автор:  Илья Ермаков [ Пятница, 27 Ноябрь, 2009 18:41 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

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

Автор:  QWERTYProgrammer [ Суббота, 28 Ноябрь, 2009 17:08 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

Сергей Губанов писал(а):
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?

Автор:  QWERTYProgrammer [ Воскресенье, 29 Ноябрь, 2009 15:13 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

Peter Almazov писал(а):
Info21 писал(а):
Ну и ладушки. Можно спокойно и на .NET забить :)
Не надо спешить забивать на .NET. А то будете опять строить социализм в отдельно взятой стране.
Microsoft .NET ist die Basis


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

Автор:  Rifat [ Воскресенье, 29 Ноябрь, 2009 19:06 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

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

Автор:  Илья Ермаков [ Воскресенье, 29 Ноябрь, 2009 19:35 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

Просто в сфере инструментария сегодня трудно иметь коммерческую нишу, для небольшой компании.
Разрабатывая инструменты (framework-и) над .NET (mobile), Ominc, видимо, эту нишу имеют.

Автор:  Сергей Губанов [ Воскресенье, 29 Ноябрь, 2009 23:25 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

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

Автор:  ___ [ Понедельник, 30 Ноябрь, 2009 10:25 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

раскопки 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 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

Автор:  QWERTYProgrammer [ Понедельник, 30 Ноябрь, 2009 23:29 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

Автор:  ___ [ Вторник, 01 Декабрь, 2009 11:04 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

Сергей Губанов писал(а):
В результате нагрузки на сборщик мусора не будет, чего нельзя сказать в случае закулисных манипуляций компилятора GPCP.

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

Автор:  perloid [ Вторник, 29 Декабрь, 2009 16:53 ]
Заголовок сообщения:  Re: компиляторы для .NET: Oberon.NET, GPCP, Zonnon

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

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

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/