powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / не запускается на исполнение gt.m програмка
14 сообщений из 14, страница 1 из 1
не запускается на исполнение gt.m програмка
    #38861999
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот текст:prog3   s i=0,per=12
experem(per)    s i=i+1
        w i," ",per,!
        q:(i=10)
        d experem(per)
        ;
файл с программкой называется prog3.m

компилирую командой:

zl "prog3"

при компиляции ошибок не выдаёт и файл prog3.o получается

запускаю командой:

d ^prog3

и получаю:

Код: plaintext
1.
2.
%GTM-E-FALLINTOFLST, Fall-through to a label with formallist is not allowed
                At M source location prog3^prog3

если немного изменить программку:prog3   s i=0,per=12
experem s i=i+1
        w i," ",per,!
        q:(i=10)
        d experem
        ;
написав не experem(per), а experem

то всё компилируется без ошибок и исполняется без ошибок.
В результате выполнения получаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
1 12
2 12
3 12
4 12
5 12
6 12
7 12
8 12
9 12
10 12

И ещё один вопрос.

после неудачного компилирования и выполнения первого варианта, если пытаюсь скомпилировать второй вариант, то получаю такое сообщение:

Код: plaintext
%GTM-E-LOADRUNNING, Cannot ZLINK an active routine prog3

приходиться выходить и обратно запускать gtm

почему так, как убрать этот активный старый шаблон с компилирования старого варианта prog3?

За помощь заранее благодарен!
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862014
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567,

если первый скомпилированный вариант запустить вот так:

d prog3^prog3

то выдаёт ту же ошибку.
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862052
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если выполнение кода передается при переходе на следующую строку в которой метка с параметрами, то выполнение этой строки недопустимая операция, поскольку нет сопоставления фактических параметров формальным. В этом случае должен выполняться неявный quit. Либо если по-старому, то кидаться ошибка о недопустимости передачи управления на такую строку.
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862054
SergeyLee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виталийv4567,

во-первых, по ошибке:

Код: plaintext
1.
2.
3.
4.
FALLINTOFLST, Fall-through to a label with formallist is not allowed
Runtime Error: This error indicates that M code reached a label with a formallist by falling through
from the previous label.
Action: Revisit your code to ensure that all invocations of labels with a formallist occur using a DO
command or extrinsic function ($$).

я попробовал правильное выполнение функции:prog3   s i=0,per=12
experem(per)    s i=i+1
        w i," ",per,!
        q:(i=10)
        s r=$$experem(per)
        ;
но ошибка все та же.

я так не писал еще ни разу, потому как бы новичок в М, я больше по С/С++/Python.
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862101
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567 ,
Пример для Caché, но должен работать и на GT.Mprog3  s i=0,per=12
  d experem(per)
  q  ; можно эту команду и опустить
experem(per)
  s i=i+1
  w i," ",per,!
  q:(i=10)
  d experem(per)Виталийv4567И ещё один вопрос.

<...>

почему так, как убрать этот активный старый шаблон с компилирования старого варианта prog3? http://tinco.pair.com/bhaskar/gtm/doc/books/pg/UNIX_manual/ch06s37.html]ZL[ink] SergeyLeeя попробовал правильное выполнение функции experem - ни разу не функция, так как не возвращает значение ( q:(i=10) ).
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862416
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

prog3  s i=0,per=12
  d experem(per)
  q  ; можно эту команду и опустить
experem(per)
  s i=i+1
  w i," ",per,!
  q:(i=10)
  d experem(per)Да действительно этот код работает.
Непонятно зачем делать вызов функции experem(per) ?

пробовал вот такой код:prog3  s i=0,per=12
  d experem(per)
  q  ; можно эту команду и опустить
experem(per)
  s i=i+1
  w i," ",per,!
  q:(i=10) 0
  d experem(per)теперь функция возвращала значение - этот код не работает, ошибка та же.

по поводу второго вопроса, прочитал по ссылке - не понял почему после неудачного запуска далее не компилируются и не запускаются программки.
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862418
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567,

In GT.M, the name of the source file determines the name of the GT.M routine. The file name of the object file is not required to match the name of the routine. Linking the object file makes the internal routine name (derived from the source file) known to GT.M. This can lead to potential confusion, however, since both ZLINK and auto-ZLINK use the name of the object file to find the routine. When the object file name differs from the name of the routine, auto-ZLINK generates a run-time error.

Может здесь объяснение по поводу моего второго вопроса, но я ничего не понял.
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862462
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567,

А если после неудачного выполнения при проблеме компилирования выполнить другую программку из одного quit и попробовать снова компилировать первую? Может такое быть, что текущей рутиной процесса остается последняя выполненная и она просто залочена в кеше сервера?
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862754
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я,

Если компилировать другую программку (правильно написанную), то она нормально компилируется и выполняется. Если попробовать после этого опять скомпилировать первую программку то она не скомпилируется и выдаст всё то же:

Код: plaintext
1.
%GTM-E-LOADRUNNING, Cannot ZLINK an active routine prog3

Как убрать её из рутины процесса?

И опять по коду.

Я так и не понял почему нельзя выполнить подпрограмму с переданным ей параметром после блока самой этой подпрограммы?
Кстати действительно как писалось ранее если выполнить эту подпрограммку до блока самой этой подпрограммки, то всё компилируется и исполняется без ошибок.
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862755
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567,

по коду - в трёх книжках ответа не нашёл!
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862773
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567,

Получается что дело не в том где находится ссылка на подпрограмму, до её кода или после. Просто ссылка с параметром не должна попасть на исполнение.
Вот такой код компилируется без ошибок:prog3
        s i=0,per=12
experem(per)
        s i=i+1
        w i," ",per,!
        q
        ;но не исполняется - выдаёт вот что:
Код: plaintext
1.
2.
3.
4.
GTM>zl "prog3"

GTM>d ^prog3
%GTM-E-FALLINTOFLST, Fall-through to a label with formallist is not allowed
                At M source location prog3+1^prog3

вот такой код то же компилируется но не исполняется:prog3
        s i=0,per=12
        d experem(per)
experem(per)
        s i=i+1
        w i," ",per,!
        q
        ;
Код: plaintext
1.
2.
3.
4.
5.
GTM>zl "prog3"

GTM>d ^prog3
1 12
%GTM-E-FALLINTOFLST, Fall-through to a label with formallist is not allowed
                At M source location prog3+2^prog3

первый раз выполнилось - строка d experem(per) а далее когда пришло на ссылку - experem(per) выдало ошибку.

А вот такой код склмпилируется и выполнится без ошибок.prog3
        s i=0,per=12
        d experem(per)
        q
experem(per)
        s i=i+1
        w i," ",per,!
        q
        ;
Код: plaintext
1.
2.
3.
GTM>zl "prog3"

GTM>d ^prog3
1 12

до ссылки - experem(per) дело не дошло, поэтому не было и ошибок.

Почему ссылка с параметром при исполнении даёт ошибку!
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862964
Виталийv4567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567,

По первому вопросу тему наверное можно закрывать.
Действительно метка с параметрами не должна исполняться в результате поочерёдного исполнения строк кода.
Вот что нашёл в книге:

Если метка была объявлена с параметрами , то на неё нельзя перейти безусловным переходом, поскольку исполняющая машина (интерпретатор) MUMPS не знает как и что сопоставить этим параметрам как локальным переменным нового контекста, при безусловном переходе не создаётся новый контекст или фрейм на стеке.
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862972
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567до ссылки - experem(per) дело не дошло, поэтому не было и ошибок.В Caché подразумевается неявный quit перед объявлением процедурного блока, поэтому можно как c quit, так и без него - ошибки не будет:Документация CachéExecution encounters the next procedure block (a label with parameter parentheses). Execution stops when encountering a label line with parentheses, even if there are no parameters within the parentheses.В GT.M похоже не так: нужно обязательно указывать quit, иначе возникнет ошибка. Виталийv4567Почему ссылка с параметром при исполнении даёт ошибку!Потому что:
  • Fall-through to a label with formallist is not allowed
  • Ссылка с параметром - уже не совсем ссылка, а объявление процедурного блока:Документация CachéA label can include or omit parameter parentheses. If included, these parentheses may be empty or may include one or more comma-separated parameter names. A label with parentheses identifies a procedure block. Labels Особенно обратите внимание на последний пример в разделе Ending a Labelled Section of Code
...
Рейтинг: 0 / 0
не запускается на исполнение gt.m програмка
    #38862982
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталийv4567ну я,

Если компилировать другую программку (правильно написанную), то она нормально компилируется и выполняется. Если попробовать после этого опять скомпилировать первую программку то она не скомпилируется и выдаст всё то же:

Код: plaintext
%GTM-E-LOADRUNNING, Cannot ZLINK an active routine prog3

Как убрать её из рутины процесса?Вы указанную выше ссылку открывали?ZLink Important

An active routine is displayed with $STACK() or ZSHOW "S" of the M virtual stack. By default, an attempt to replace an active routine results in a run-time error . To replace an active routine with a new version, either use VIEW "LINK":"RECURSIVE" or remove the active routine from the stack using ZGOTO or the appropriate number of QUITs and then execute the ZLINK command.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / не запускается на исполнение gt.m програмка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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