powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Почему компилятор считает, что это не ошибка ?
25 сообщений из 39, страница 1 из 2
Почему компилятор считает, что это не ошибка ?
    #38628763
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня !

Имеется допустим код в старом синтаксисе:w "Stroca 1",!
w "Stroca 2",!
.w "Stroca 3",!
.w "Stroca 4",!
w "Stroca 5",!
qздесь явно видно, что строки 3 и 4 не будут выполнятся.
Почему в таком случае при компиляции не указывается, что это ошибка ???
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628780
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu,

Какая версия, и вообще Caché ли это ?
у меня на 2014.1, такой код компилируется и работает без проблем
какая ошибка компиляции ?
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628782
Petr0vi4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

3 и 4 строки не сработал Write (Caché 2014.1)
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628783
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petr0vi4444DAiMor,

3 и 4 строки не сработал Write (Caché 2014.1)Это логично, все работает верно, вопрос был про ошибку компиляции.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628785
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, не заметил, оказывается вопрос был, почему нету ошибки компиляции

а почему должна быть ?
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628791
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такой код, уже будет работать полностью w "Stroca 1",!
 w "Stroca 2",!
 d 
 .w "Stroca 3",!
 .w "Stroca 4",!
 w "Stroca 5",!
 q
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628800
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Я понимаю, что должно быть условие и команда DO.
Просто это ошибка была в старом коде, где строка с условием было закоментированна ...
Нашли очень трудно. Догадаться же надо..
Если компилятор указал бы на неправильного блока программы - другое дело.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628804
Petr0vi4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, кажется это работает в связке с Do. Если добавить условие к Do
Do:var=value, то все строки, начинающиеся с точки будут выполняться только если условие верно.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628810
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorтакой код, уже будет работать полностью
Это-то понятно, что с do эти строчки будут отрабатывать. А без do... Вопрос топикстартера отдает некоторой схоластичностью, практическая ценность этой проблемой невелика. Ибо кто в своих прогах будет так писать?!
Мне кажется, что и в других языках компиляторы в случае недостижимости кода ограничиваются предупреждением, но не выдают ошибку. Во всяком случае, в C/C++ компилятор предупреждает, что код в такой-то строке никогда не будет достигнут.
Я думаю, что если разработчик пишет на Cache и код не предполагается к портированию куда-либо наподобие GT.M, вообще нет смысла использовать точки. Код с фигурными скобочками и оператором continue куда как более понятен. Если же он должен быть в будущем переносим на GT.M - другое дело, конечно.
Может я и неправ, но тут личный опыт давлеет, ибо я не являюсь "старым мампсистом", начинал сразу с Cache.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628821
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полагаю, такое теоретически возможно просто при опечатке
но в любом случае, проверить это задача не компилятора, хотя и его наверно тоже, а самого редактора кода
и проблема кашевого компилятора в том что у него нет предупреждений, а только ошибки, так что компилятор бы и не смог нормально скомпилировать но при этом предупредить пользователя о возможной проблеме
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628837
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628838
Petr0vi4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А много ли можно проанализировать в языке со слабой типизацией?
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628858
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
USER>d ^test
Stroca 1
Stroca 2
Stroca 3_
Stroca 4_
Stroca 3_1
Stroca 4_1
Stroca 5
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628884
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 может прилететь откуда угодно ))))
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628893
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опс, сорри, в каше goto из контекста с точками работает иначе.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628928
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUy Я думаю, что если разработчик пишет на Cache и код не предполагается к портированию куда-либо наподобие GT.M, вообще нет смысла использовать точки.
Если же он должен быть в будущем переносим на GT.M - другое дело, конечно
Я именно об этом...
К стати, в GT.M тоже компилятор не предупреждает, что это не совсем правильно ;)
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38628934
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неожиданно родился паззл. Кто сумеет предсказать (или хотя бы объяснить) вывод кода:  do
Lab     . goto Lab+2
  . write 1,!
  write 2,!
  goto Lab+1
  . write 3,!
  quit
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629628
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 будет уже последний уровень стека, конец блока приведет к выходу из программы.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629640
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 будет уже последний уровень стека, конец блока приведет к выходу из программы.
Неисповедимы пути твои, Господи!
Всегда находится ёкнутый бабай, который вставляет такой пазл в рабочий код ))
Обнаружив такой пазл и убив бабая ощущаешь себя спасителем множества мозгов машиночеловеческих ))
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629681
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна причина почему надо использовать сборщики кода.
Мы собираем свой проект потому что поставляем его закрытым.
Но при сборке есть. Есть возможность проверить компилируемость на всех поддерживаемых нами версиях каше
И есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком.
Сейчас я вижу вполне объективные причины добавить в проверку поиск кода с точками и ликвидировать любое его использование.
Так же думаю стоит добавить такую проверку в нашу интеграцию в студии с системой контроля версии. Чтобы разработчику выводилось предупреждение на использование принятых в компании недопустимыми конструкций.
Либо это делать перед коммитом. В общем надо будет немного доработать нашу интеграцию.
Чего и советую остальным. Чтобы подобных проблем не было в будущем.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629704
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorИ есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком. #If / #IfDef
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629712
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitDAiMorИ есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком. #If / #IfDef нууу это конечно можно использовать. Но дополнительный контроль за разработчиком не повредит, а только поможет быть вашему продукту быть лучше. А программисту не нужно постоянно заморачиваться на написание таких блоков.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629724
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Ну надо сказать что у оператора goto довольно ограниченная область применения, как раз больше рассчитанная на синтаксис с точками
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629811
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logistDAiMor,

Ну надо сказать что у оператора goto довольно ограниченная область применения, как раз больше рассчитанная на синтаксис с точкамиGOTO тоже зло, и не думаю что стоит его сейчас использовать.
...
Рейтинг: 0 / 0
Почему компилятор считает, что это не ошибка ?
    #38629838
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorGOTO тоже зло, и не думаю что стоит его сейчас использовать.Всё во зло, если используется без меры и рассуждения.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Почему компилятор считает, что это не ошибка ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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