|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Доброго дня ! Имеется допустим код в старом синтаксисе:w "Stroca 1",! w "Stroca 2",! .w "Stroca 3",! .w "Stroca 4",! w "Stroca 5",! qздесь явно видно, что строки 3 и 4 не будут выполнятся. Почему в таком случае при компиляции не указывается, что это ошибка ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:13 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Valeriu, Какая версия, и вообще Caché ли это ? у меня на 2014.1, такой код компилируется и работает без проблем какая ошибка компиляции ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:24 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMor, 3 и 4 строки не сработал Write (Caché 2014.1) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:26 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Petr0vi4444DAiMor, 3 и 4 строки не сработал Write (Caché 2014.1)Это логично, все работает верно, вопрос был про ошибку компиляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:27 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
ой, не заметил, оказывается вопрос был, почему нету ошибки компиляции а почему должна быть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:28 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
такой код, уже будет работать полностью w "Stroca 1",! w "Stroca 2",! d .w "Stroca 3",! .w "Stroca 4",! w "Stroca 5",! q ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:30 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMor, Я понимаю, что должно быть условие и команда DO. Просто это ошибка была в старом коде, где строка с условием было закоментированна ... Нашли очень трудно. Догадаться же надо.. Если компилятор указал бы на неправильного блока программы - другое дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:33 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Да, кажется это работает в связке с Do. Если добавить условие к Do Do:var=value, то все строки, начинающиеся с точки будут выполняться только если условие верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:36 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorтакой код, уже будет работать полностью Это-то понятно, что с do эти строчки будут отрабатывать. А без do... Вопрос топикстартера отдает некоторой схоластичностью, практическая ценность этой проблемой невелика. Ибо кто в своих прогах будет так писать?! Мне кажется, что и в других языках компиляторы в случае недостижимости кода ограничиваются предупреждением, но не выдают ошибку. Во всяком случае, в C/C++ компилятор предупреждает, что код в такой-то строке никогда не будет достигнут. Я думаю, что если разработчик пишет на Cache и код не предполагается к портированию куда-либо наподобие GT.M, вообще нет смысла использовать точки. Код с фигурными скобочками и оператором continue куда как более понятен. Если же он должен быть в будущем переносим на GT.M - другое дело, конечно. Может я и неправ, но тут личный опыт давлеет, ибо я не являюсь "старым мампсистом", начинал сразу с Cache. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:38 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
полагаю, такое теоретически возможно просто при опечатке но в любом случае, проверить это задача не компилятора, хотя и его наверно тоже, а самого редактора кода и проблема кашевого компилятора в том что у него нет предупреждений, а только ошибки, так что компилятор бы и не смог нормально скомпилировать но при этом предупредить пользователя о возможной проблеме ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:43 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
ValeriuДоброго дня ! здесь явно видно, что строки 3 и 4 не будут выполнятся. Почему в таком случае при компиляции не указывается, что это ошибка ??? w "Stroca 1",! w "Stroca 2",! .w "Stroca 3",! .w "Stroca 4",! w "Stroca 5",! q Нашли очень трудно. Догадаться же надо.. Помоему это прекрасный пример, почему отказались от точечной нотации в пользу фигурных скобок, потому как "найти такие ошибки очень трудно". ИМХО более явно видно в таком виде: w "Stroca 1",! w "Stroca 2",! d { w "Stroca 3",! w "Stroca 4",! } w "Stroca 5",! q ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:48 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
А много ли можно проанализировать в языке со слабой типизацией? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:48 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
ValeriuПочему в таком случае при компиляции не указывается, что это ошибка ???Полагаю, что отсутствие do равносильно do:0, потому и нет ошибки компиляции w "Stroca 1",! w "Stroca 2",! .w "Stroca 3",! .w "Stroca 4",! d:0 .w "Stroca 3_0",! .w "Stroca 4_0",! d .w "Stroca 3_",! .w "Stroca 4_",! d:1 .w "Stroca 3_1",! .w "Stroca 4_1",! w "Stroca 5",! q Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 13:58 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Valeriu, А почему это ошибка? Вот вполне корректный код:label w "Stroca 1",! w "Stroca 2",! . w "Stroca 3",! . w "Stroca 4",! w "Stroca 5",! d . w "other",! . g:'$d(var) label+3Вполне себе выполняется, если есть на то необходимость. Причем этот goto может прилететь откуда угодно )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 14:10 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
опс, сорри, в каше goto из контекста с точками работает иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 14:15 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
EvLaUy Я думаю, что если разработчик пишет на Cache и код не предполагается к портированию куда-либо наподобие GT.M, вообще нет смысла использовать точки. Если же он должен быть в будущем переносим на GT.M - другое дело, конечно Я именно об этом... К стати, в GT.M тоже компилятор не предупреждает, что это не совсем правильно ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 14:27 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Неожиданно родился паззл. Кто сумеет предсказать (или хотя бы объяснить) вывод кода: do Lab . goto Lab+2 . write 1,! write 2,! goto Lab+1 . write 3,! quit ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2014, 14:29 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Alexey Maslov, Если добавить вывод уровня стека, будет немного понятнее do Lab . write "ST:",$st,! goto Lab+2 . write 1," ST:",$st,! write 2," ST:",$st,! write "ST:",$st,! goto Lab+1 . write 3," ST:",$st,! quitGoto в Каше не меняет уровень стека. Поэтому, когда мы перепрыгиваем в Lab на Lab+2, уровень стека остается равным 2. Когда в Lab+3 перепрыгиваем на Lab+1, он по прежнему равен двум, но Lab+1 при переходе на Lab+2 уменьшает уровень на 1 (выполняется неявный quit в конце блока). Потом процесс повторяется, но поскольку в Lab+1 будет уже последний уровень стека, конец блока приведет к выходу из программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 06:20 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
logistAlexey Maslov, Если добавить вывод уровня стека, будет немного понятнее do Lab . write "ST:",$st,! goto Lab+2 . write 1," ST:",$st,! write 2," ST:",$st,! write "ST:",$st,! goto Lab+1 . write 3," ST:",$st,! quitGoto в Каше не меняет уровень стека. Поэтому, когда мы перепрыгиваем в Lab на Lab+2, уровень стека остается равным 2. Когда в Lab+3 перепрыгиваем на Lab+1, он по прежнему равен двум, но Lab+1 при переходе на Lab+2 уменьшает уровень на 1 (выполняется неявный quit в конце блока). Потом процесс повторяется, но поскольку в Lab+1 будет уже последний уровень стека, конец блока приведет к выходу из программы. Неисповедимы пути твои, Господи! Всегда находится ёкнутый бабай, который вставляет такой пазл в рабочий код )) Обнаружив такой пазл и убив бабая ощущаешь себя спасителем множества мозгов машиночеловеческих )) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 07:07 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Еще одна причина почему надо использовать сборщики кода. Мы собираем свой проект потому что поставляем его закрытым. Но при сборке есть. Есть возможность проверить компилируемость на всех поддерживаемых нами версиях каше И есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком. Сейчас я вижу вполне объективные причины добавить в проверку поиск кода с точками и ликвидировать любое его использование. Так же думаю стоит добавить такую проверку в нашу интеграцию в студии с системой контроля версии. Чтобы разработчику выводилось предупреждение на использование принятых в компании недопустимыми конструкций. Либо это делать перед коммитом. В общем надо будет немного доработать нашу интеграцию. Чего и советую остальным. Чтобы подобных проблем не было в будущем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 08:58 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorИ есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком. #If / #IfDef ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 09:11 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
servitDAiMorИ есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком. #If / #IfDef нууу это конечно можно использовать. Но дополнительный контроль за разработчиком не повредит, а только поможет быть вашему продукту быть лучше. А программисту не нужно постоянно заморачиваться на написание таких блоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 09:17 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMor, Ну надо сказать что у оператора goto довольно ограниченная область применения, как раз больше рассчитанная на синтаксис с точками ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 09:26 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
logistDAiMor, Ну надо сказать что у оператора goto довольно ограниченная область применения, как раз больше рассчитанная на синтаксис с точкамиGOTO тоже зло, и не думаю что стоит его сейчас использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 10:21 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorGOTO тоже зло, и не думаю что стоит его сейчас использовать.Всё во зло, если используется без меры и рассуждения. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 10:38 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Объяснение Сергея (logist-a) зачётное, хотя можно объяснить и проще: do с точками - это вызов (безымянной) подпрограммы, а goto разрешены как внутрь тела подпрограммы, так и за пределы её. Насчёт goto: даже некоторые классики когда-то признали, что в некоторых случаях он может быть полезен. Например, при отрицательном результате проверки входных параметров функции, лучше cделать goto на метку перед выходом из неё, чем "тянуть" длинную проверку условий через всё тело функции. Почему сразу не выйти? Потому что нередко хочется выполнить какие-то общие действия перед выходом, записать что-то в отладочный лог, например. Альтернативные решения, как например try/catch через всё тело функции с искусственной генерацией ошибок для их последующего перехвата, имхо, ничуть не нагляднее goto. Насчёт паззлов: есть несколько забавных у Charlie Boo; если кому-то интересно, могу скинуть их в наш форум (не все ведь читают comp.lang.mumps). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 10:52 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Извините, ответил не в том топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 10:53 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
Alexey MaslovИзвините, ответил не в том топике.Ничего страшного, модераторы всегда помогут. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 10:59 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
> Насчёт goto: даже некоторые классики когда-то признали, что в некоторых случаях он может быть полезен. Еще один, уже более специфический для Каше случай - проход по длинным (в части количества индексов) деревьям. Как для улучшения читаемости (не создается куча вложенных циклов), так и для улучшения производительности (не происходит переключения уровней стека). Если посмотреть на код, который генерит SQL Compiler, там goto очень плотно используется. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 11:30 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
ладно, ладно, уговорили, goto оставляем, но точки то точно нужно ликвидировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 11:36 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorладно, ладно, уговорили, goto оставляем, но точки то точно нужно ликвидировать.Конечно, ведь и документация это (мягко говоря) советует:The argumentless version of the DO command is considered legacy as of Caché 4.0, and should not be used in new programming. DO (legacy version) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 11:45 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorладно, ладно, уговорили, goto оставляем, но точки то точно нужно ликвидировать. И то, только для компилируемого кода и в случаях, когда с goto работает быстрее ) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 11:59 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorладно, ладно, уговорили, goto оставляем, но точки то точно нужно ликвидировать. А не проще сделать язык на основе JavaScript с поддержкой операций MUMPS? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 12:20 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
ну яDAiMorладно, ладно, уговорили, goto оставляем, но точки то точно нужно ликвидировать. А не проще сделать язык на основе JavaScript с поддержкой операций MUMPS?Сделать где ? и кому проще ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 12:23 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorСделать где ? и кому проще ? В М-системах. Разработчикам М-систем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 12:43 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
DAiMorСделать где ? и кому проще ? А чем JS лучше MUMPS? Ни точки , ни goto не проблема. Проблема непонимание задания, а это плохо лечится выбором языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2014, 20:05 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
misha_shar, > А чем JS лучше MUMPS? Больше народу знает язык, не надо переучиваться. В резюме/объявлении о найме будет современная широко используемая технология. JS - (полу)функциональный язык, можно делать интересные вещи. Почему до сих пор не сделали - вопрос в том числе к ну я, как разработчику М-систем. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2014, 03:50 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
logistПочему до сих пор не сделали - вопрос Rob Tweed вообще продвигает идею и реализацию замены MUMPSа на JS в качестве прикладного языка, оставляя MUMPS как хранилище данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2014, 08:48 |
|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#18+
logistmisha_shar, > А чем JS лучше MUMPS? Больше народу знает язык, не надо переучиваться. В резюме/объявлении о найме будет современная широко используемая технология. JS - (полу)функциональный язык, можно делать интересные вещи. Почему до сих пор не сделали - вопрос в том числе к ну я, как разработчику М-систем. По моему GlobalDb для того и сделали что бы писать на JS и обращаться к базе данных на CACHE. Чем не решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 06:39 |
|
|
start [/forum/topic.php?all=1&fid=39&tid=1556899]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 316ms |
total: | 453ms |
0 / 0 |