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

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

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

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

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

а почему должна быть ?
...
Рейтинг: 0 / 0
29.04.2014, 13:30
    #38628791
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
такой код, уже будет работать полностью w "Stroca 1",!
 w "Stroca 2",!
 d 
 .w "Stroca 3",!
 .w "Stroca 4",!
 w "Stroca 5",!
 q
...
Рейтинг: 0 / 0
29.04.2014, 13:33
    #38628800
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
DAiMor,
Я понимаю, что должно быть условие и команда DO.
Просто это ошибка была в старом коде, где строка с условием было закоментированна ...
Нашли очень трудно. Догадаться же надо..
Если компилятор указал бы на неправильного блока программы - другое дело.
...
Рейтинг: 0 / 0
29.04.2014, 13:36
    #38628804
Petr0vi4444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
Да, кажется это работает в связке с Do. Если добавить условие к Do
Do:var=value, то все строки, начинающиеся с точки будут выполняться только если условие верно.
...
Рейтинг: 0 / 0
29.04.2014, 13:38
    #38628810
EvLaUy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
DAiMorтакой код, уже будет работать полностью
Это-то понятно, что с do эти строчки будут отрабатывать. А без do... Вопрос топикстартера отдает некоторой схоластичностью, практическая ценность этой проблемой невелика. Ибо кто в своих прогах будет так писать?!
Мне кажется, что и в других языках компиляторы в случае недостижимости кода ограничиваются предупреждением, но не выдают ошибку. Во всяком случае, в C/C++ компилятор предупреждает, что код в такой-то строке никогда не будет достигнут.
Я думаю, что если разработчик пишет на Cache и код не предполагается к портированию куда-либо наподобие GT.M, вообще нет смысла использовать точки. Код с фигурными скобочками и оператором continue куда как более понятен. Если же он должен быть в будущем переносим на GT.M - другое дело, конечно.
Может я и неправ, но тут личный опыт давлеет, ибо я не являюсь "старым мампсистом", начинал сразу с Cache.
...
Рейтинг: 0 / 0
29.04.2014, 13:43
    #38628821
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
полагаю, такое теоретически возможно просто при опечатке
но в любом случае, проверить это задача не компилятора, хотя и его наверно тоже, а самого редактора кода
и проблема кашевого компилятора в том что у него нет предупреждений, а только ошибки, так что компилятор бы и не смог нормально скомпилировать но при этом предупредить пользователя о возможной проблеме
...
Рейтинг: 0 / 0
29.04.2014, 13:48
    #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
29.04.2014, 13:48
    #38628838
Petr0vi4444
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
А много ли можно проанализировать в языке со слабой типизацией?
...
Рейтинг: 0 / 0
29.04.2014, 13:58
    #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
29.04.2014, 14:10
    #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
29.04.2014, 14:15
    #38628893
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
опс, сорри, в каше goto из контекста с точками работает иначе.
...
Рейтинг: 0 / 0
29.04.2014, 14:27
    #38628928
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
EvLaUy Я думаю, что если разработчик пишет на Cache и код не предполагается к портированию куда-либо наподобие GT.M, вообще нет смысла использовать точки.
Если же он должен быть в будущем переносим на GT.M - другое дело, конечно
Я именно об этом...
К стати, в GT.M тоже компилятор не предупреждает, что это не совсем правильно ;)
...
Рейтинг: 0 / 0
29.04.2014, 14:29
    #38628934
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
Неожиданно родился паззл. Кто сумеет предсказать (или хотя бы объяснить) вывод кода:  do
Lab     . goto Lab+2
  . write 1,!
  write 2,!
  goto Lab+1
  . write 3,!
  quit
...
Рейтинг: 0 / 0
30.04.2014, 06:20
    #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
30.04.2014, 07:07
    #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
30.04.2014, 08:58
    #38629681
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
Еще одна причина почему надо использовать сборщики кода.
Мы собираем свой проект потому что поставляем его закрытым.
Но при сборке есть. Есть возможность проверить компилируемость на всех поддерживаемых нами версиях каше
И есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком.
Сейчас я вижу вполне объективные причины добавить в проверку поиск кода с точками и ликвидировать любое его использование.
Так же думаю стоит добавить такую проверку в нашу интеграцию в студии с системой контроля версии. Чтобы разработчику выводилось предупреждение на использование принятых в компании недопустимыми конструкций.
Либо это делать перед коммитом. В общем надо будет немного доработать нашу интеграцию.
Чего и советую остальным. Чтобы подобных проблем не было в будущем.
...
Рейтинг: 0 / 0
30.04.2014, 09:11
    #38629704
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
DAiMorИ есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком. #If / #IfDef
...
Рейтинг: 0 / 0
30.04.2014, 09:17
    #38629712
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
servitDAiMorИ есть дополнительный анализ исходного кода. Например сейчас это поиск использования отладочных глобалов разработчиком. #If / #IfDef нууу это конечно можно использовать. Но дополнительный контроль за разработчиком не повредит, а только поможет быть вашему продукту быть лучше. А программисту не нужно постоянно заморачиваться на написание таких блоков.
...
Рейтинг: 0 / 0
30.04.2014, 09:26
    #38629724
logist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему компилятор считает, что это не ошибка ?
DAiMor,

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

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


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