|
Почему компилятор считает, что это не ошибка ?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=39&msg=38629640&tid=1556899]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 136ms |
0 / 0 |