OberonCore https://forum.oberoncore.ru/ |
|
Динамическая генерация кода https://forum.oberoncore.ru/viewtopic.php?f=1&t=4896 |
Страница 1 из 1 |
Автор: | Димыч [ Вторник, 17 Декабрь, 2013 08:54 ] |
Заголовок сообщения: | Динамическая генерация кода |
Как можно сделать следующий трюк? Имеется такая запись: Код: S := " MODULE TmpMdl1; IMPORT StdLog; PROCEDURE Hello*(); BEGIN StdLog.String('Hello world'); END Hello; BEGIN Hello; END TmpMdl1."; Eval(S); Что должна вызывать несуществующая пока процедура Eval? В Лиспе, с которым я проработал достаточно много, это вообще не проблема, там "код как данные" и никаких проблем. А в ББ? |
Автор: | Пётр Кушнир [ Вторник, 17 Декабрь, 2013 10:05 ] |
Заголовок сообщения: | Re: Динамическая генерация кода |
Насколько я могу предположить, в компилируемом КП+ББ можно сделать только так: Код: s:="MODULE MyMod; PROCEDURE Do*; BEGIN END Do; END MyMod."; text:=TextModels.dir.NewFromString(s); DevCompiler.CompileText (text, 0, error); IF ~error THEN Dialog.Call("MyMod.Do", "error while loading", res); m:=Kernel.ThisLoadedMod("MyMod"); IF m#NIL THEN Kernel.UnloadMod(m) END; Files.dir.Delete(Files.dir.This('My/Code'), 'Mod'); Files.dir.Delete(Files.dir.This('My/Sym'), 'Mod'); END; или аналогично. |
Автор: | Димыч [ Вторник, 17 Декабрь, 2013 10:13 ] |
Заголовок сообщения: | Re: Динамическая генерация кода |
Класс, я примерно такое же решение уже обдумывал! Не понял только слово «компилируемый» в данном контексте. Лисп уже давно компилируемый язык (есть, впрочем, и интерпретируемые реализации). |
Автор: | Пётр Кушнир [ Вторник, 17 Декабрь, 2013 11:45 ] |
Заголовок сообщения: | Re: Динамическая генерация кода |
Димыч писал(а): Не понял только слово «компилируемый» в данном контексте. Ну я скорее не про лисп, а про eval, потому что раньше обдумывал эту проблему и ориентировался на принципы работы eval в жаваскрипте и пхп.Лисп уже давно компилируемый язык (есть, впрочем, и интерпретируемые реализации). Димыч писал(а): Класс, я примерно такое же решение уже обдумывал! Единственное, что лично я бы добавил - это свою инсталлируемую Files.Directory, чтобы компиляция модулей производилась в память. Так быстрее.
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |