OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 13 Декабрь, 2019 10:15

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Динамическая генерация кода
СообщениеДобавлено: Вторник, 17 Декабрь, 2013 08:54 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Как можно сделать следующий трюк?

Имеется такая запись:

Код:
S := "
MODULE TmpMdl1;

   IMPORT StdLog;

PROCEDURE Hello*();
BEGIN
   StdLog.String('Hello world');
END Hello;

BEGIN
   Hello;
END TmpMdl1.";

Eval(S);


Что должна вызывать несуществующая пока процедура Eval?
В Лиспе, с которым я проработал достаточно много, это вообще не проблема, там "код как данные" и никаких проблем.

А в ББ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая генерация кода
СообщениеДобавлено: Вторник, 17 Декабрь, 2013 10:05 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2639
Откуда: Россия, Ярославль
Насколько я могу предположить, в компилируемом КП+ББ можно сделать только так:
Код:
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 11:29, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая генерация кода
СообщениеДобавлено: Вторник, 17 Декабрь, 2013 10:13 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Класс, я примерно такое же решение уже обдумывал!

Не понял только слово «компилируемый» в данном контексте.
Лисп уже давно компилируемый язык (есть, впрочем, и интерпретируемые реализации).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая генерация кода
СообщениеДобавлено: Вторник, 17 Декабрь, 2013 11:45 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2639
Откуда: Россия, Ярославль
Димыч писал(а):
Не понял только слово «компилируемый» в данном контексте.
Лисп уже давно компилируемый язык (есть, впрочем, и интерпретируемые реализации).
Ну я скорее не про лисп, а про eval, потому что раньше обдумывал эту проблему и ориентировался на принципы работы eval в жаваскрипте и пхп.
Димыч писал(а):
Класс, я примерно такое же решение уже обдумывал!
Единственное, что лично я бы добавил - это свою инсталлируемую Files.Directory, чтобы компиляция модулей производилась в память. Так быстрее.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 0


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

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