OberonCore
https://forum.oberoncore.ru/

клон ББ для gpcp-jvm
https://forum.oberoncore.ru/viewtopic.php?f=117&t=3465
Страница 1 из 1

Автор:  Пётр Кушнир [ Среда, 01 Июнь, 2011 17:51 ]
Заголовок сообщения:  клон ББ для gpcp-jvm

Скачал тут GPCP. без задачи осваивать как-то неинтересно было. выдумал задачу.
как-бы результат вот http://bitbucket.org/petryxa/jvm-bb
вот, если у кого есть желание и отличное от нуля знание джавы, типа того :)

Автор:  Иван Кузьмицкий [ Среда, 01 Июнь, 2011 20:18 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

А как его?.. С какого боку?.. Куда нажимать, на что смотреть?

Автор:  Пётр Кушнир [ Среда, 01 Июнь, 2011 22:54 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

установить gpcp для джавы и нажать c.bat, если всё ок - нажать run.bat

Автор:  Роман М. [ Воскресенье, 05 Июнь, 2011 14:37 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

Похоже на попытку перенять модель работы с модулями БлэкБокса в GPCP. Только абстракция получилась местами не совсем точная. Модулю StdLoader следовало бы использовать преимущественно средства модуля Kernel, без обращения к целевым средствам, как java_lang.

В Ubuntu 10.04 при запуске выдаёт такой ответ:
Код:
$ ./cprun Init
started
load class CP.StdLoader.StdLoader_Instance
installed
load class CP.HostFiles.HostFilesException in thread "main" java.lang.ClassNotFoundException: CP.HostFiles.HostFiles
   at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
   at CP.StdLoader.StdLoader_JavaLoader.loadClass(StdLoader.cp:24)
   at CP.StdLoader.StdLoader_Instance.LoadMod(StdLoader.cp:31)
   at CP.Kernel.Kernel.LoadMod(Kernel.cp:18)
   at CP.Init.Init.main(Init.cp:8)


Код:
Listing:

   1 MODULE Init;
**** ^ 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
   3         IMPORT CPmain, Kernel, StdLoader, StdApp;
   4
   5 BEGIN
   6         Kernel.Init;
   7         StdLoader.Init;
   8         Kernel.LoadMod('HostFiles');
   9         Kernel.LoadMod('HostApp');
  10         StdApp.Run;
  11 END Init.

There were:  1 error, and No warnings

Автор:  Пётр Кушнир [ Воскресенье, 05 Июнь, 2011 17:20 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

а что такое средства модуля Kernel как не обращение к целевым x86 инструкциям? К тому же, StdLoader юзает SYSTEM для загрузки модулей. Цель не повторить ББ в точности, а сделать достаточно похожий интерфейс среды выполнения для сторонних компонент, которым нет разницы, как реализован механизм работы загрузчика. Абстракция в принципе, такая же, как и в ББ.

А вы, откомпилируйте Host часть руками. я тут обнаружил, что CPmake её не видит. Видимо, придётся хост-часть оформить отдельным списком компиляции.

Автор:  Пётр Кушнир [ Понедельник, 01 Август, 2011 18:37 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

а вот например, после долгой задержки, реализация модуля HostFiles, который получился хоть и попроще (без внутренних буферов), зато реализует абстракцию модуля Files вполне точно (ну, вроде того :)).
по крайней мере тестовый пример обхода дерева каталогов, который я написал в ББ, откомпилировался в gpcp и показал те же результаты в консоли джавы.

Автор:  Пётр Кушнир [ Четверг, 11 Август, 2011 12:52 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

столкнулся с непроходимой трудностью. при компиляции данного кода:
Код:
PROCEDURE (h: Handler) Do* (op: INTEGER; f, g: Views.Frame; VAR msg: Views.CtrlMessage; VAR mark, front, req: BOOLEAN);
<...>   WITH msg: CursorMessage DO
            msg.x := msg.x + f.gx - g.gx;
            msg.y := msg.y + f.gy - g.gy
         ELSE
         END
<...>
   END Do;

компилятор выдаёт:
Код:
 402                                 msg.x := msg.x + f.gx - g.gx;
**** This variable is read-only------^
 403                                 msg.y := msg.y + f.gy - g.gy
**** This variable is read-only------^


казалось бы, VAR параметр. и если написать тестовый модуль, то компилятор пропускает такую конструкцию:

Код:
   PROCEDURE DoMy*(VAR m: MyMsg);
   BEGIN
      m.x:=0;
   END DoMy;

однако стоит ввести абстрактный/расширяемый тип записи и оформить процедуру вот так:
Код:
   PROCEDURE Do*(VAR m: Msg);
   BEGIN   
      WITH m: MyMsg DO
         m.x:=0;
      ELSE END;
   END Do;

получим то же самое предупреждение от компилятора:
Код:
  14                         m.x:=0;
**** ------------------------^ This variable is read-only


собственно, такое поведение описано в ReleaseNotes
Цитата:
The semantics of the WITH statement have been slightly modified so as to strengthen
the guarantees on the properties of the selected variable. In the code —
WITH x : TypeTi DO
... (* guarded region *)
| x : TypeTj DO
... (* guarded region *)
END;
the variable x is asserted to have the specified type throughout the so-called guarded
region. The base language guarantees that the type of the selected variable cannot be
“widened” in the guarded region, but might possibly be narrowed. In gpcp the selected
variable is treated as a constant, and neither the type nor the value can be modified
either directly or indirectly. Any attempt to do so attracts a compile-time error message.


это сводит все возможности реализации хоть какого-то подобия ББ к нулю, потому что, если посмотреть код хэндлеров сообщений реализаций Views.View то мы увидим, что в половине из них присваиваются значения внутри секций WITH а значит код становится непотрируемым. проще говоря, если у меня не получится просто взять и перетащить свой прикладной модуль без правок в будущий возможный клон GPCP то этот клон не имеет смысла.
такие вот дела.

Автор:  Пётр Кушнир [ Четверг, 11 Август, 2011 12:56 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

вариант сломать компилятор наверное не стоит рассматривать. хотя...

Автор:  Пётр Кушнир [ Четверг, 11 Август, 2011 13:26 ]
Заголовок сообщения:  Re: клон ББ для gpcp-jvm

есть ещё дотнет компилятор, конечно же, но джава вроде и более кроссплатформенная, нежели дотнет.

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