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/ |