powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / $compile
5 сообщений из 5, страница 1 из 1
$compile
    #39496690
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наткнулся в доке на красивую функцию - $compile.
Пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SourceCode
  SET src(0)=4
  SET src(1)="TestA "
  SET src(2)=" WRITE ""Hello "" "
  SET src(3)=" WRITE ""World"",!"
  SET src(4)=" QUIT"
CompileSource
  SET stat=$COMPILE(src,0,errs,TestA)
  IF stat=0 {WRITE "Compile successful" }
  ELSE {WRITE "status=",stat,!
        WRITE "number of compile errors=",$LISTLENGTH(errs) }


В переменной TestA получаем многострочный объектный код, соответствующий структуре SourceCode.
Хочется сохранить его в базе, и выполнять по мере надобности.
Но xecute не может выполнить этот код:
Код: sql
1.
2.
3.
4.
5.
USER>x TestA
 
X TestA
^
<SYNTAX>


Xecute может выполнить только одну строку М-кода:(

Предложение: расширить возможности команды Xecute :
- выполнять многострочный код;
- выполнять многострочный объектный код;

П.С. Согласен, если многострочный объектный код будет выполнять команда DO, что-то вроде do @TestA.

П.П.С.Можно, конечно, сохранять объектный код, как объектную программу. Я сейчас генерирую
программы с помощью класса %Routine. Мне не нравится, что в списке int-программ сотни модулей по паре строк в каждом.
Причем, имена у них сгенерированы автоматически, типа: pOT01SKVXo0Xm22Xc3Xd20150201.
...
Рейтинг: 0 / 0
$compile
    #39496933
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDR,

Как вариант - все рутины генерировать с одним предопределенным именем, скажем TEMPCOMPILE, компилировать как рутину, полученный объектный код из ^rOBJ("TEMPCOMPILE") сохранить себе.
Для выполнения его вставить скажем в ^rOBJ("TEMPEXEC") и выполнять рутину d ^TEMPEXEC.
Для выполнения исходники (INT) не нужны, можно удалить.
...
Рейтинг: 0 / 0
$compile
    #39496959
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я,

А интерфейс %Library.Routine не удобнее будет для этого?
...
Рейтинг: 0 / 0
$compile
    #39497484
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне казалось, я в этот пост в топик "новые фичи" запостил. Не годится?
ИМХО, не очень сложная доработка. Раз Cache выполняет объектный код из глобали ^rOBJ("TEMPEXEC"),
почему бы не выполнить такой же код из глобали, скажем, ^MyObj(ObjType, AtrType, Date).

ну я,

Из соображений производительности не хочется гонять объектный код из глобали в глобаль, чтобы выполнить как программу.
В описании функции $compile сказано, что она может сохранять код сразу в ^rOBJ.
Надо проверить, будет ли формироваться int-модуль, почему-то думаю, что не должен.
...
Рейтинг: 0 / 0
$compile
    #39497822
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDR,

Действительно, в ^rOBJ записывается, а в ^ROUTINE - нет. Попробую использовать, как вариант.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / $compile
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]