Автор Тема: локальные переменные в отдельной декларативной части  (Прочитано 44143 раз)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Цитата: vlad
А КАПС хорошо смотрелся на монохромном (два цвета) мониторе...
Однажды проходя мимо коллеги, внезапно увидел знакомые "BEGIN - END". Когда я спросил его, что это, он ответил, что VHDL, а ключевые слова хоть и не регистрозависимые, но заглавными буквами ему удобней. Я посмеялся, вспомнив широко известную в узких кругах спецолимпиаду. Человеку 24 года, об Обероне не слышал, программирует на Си.

Раньше часто в разных источниках видел код на VHDL, в основном прописью, и вот сейчас когда вижу код на VHDL строчными буквами -- просто не узнаю этот язык. Так что тут дело привычки. Синдром утёнка, да.

На Аде когда-то тоже писали прописью (а синтаксис VHDL основан на синтаксисе Ады), но сейчас в основном всё же на Аде пишут ключевые слова строчными. То есть можно и перепривыкнуть. Никаких бонусов на самом деле верхний регистр ключевых слов в редакторах кода с подсветкой синтаксиса не даёт.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
А причем тут глобальность - переменная используется в секции инициализации(телу) модуля, для которой данная переменная локальна. Единственное, что можно было бы сделать - как в старших Оберонах - произвольное расположение секций, тогда секцию VAR с этой переменной можно было бы прижать к телу модуля

Это не единственное, что можно сделать :) Можно набраться критического мышления и смелости и сказать, что секция VAR вообще ненужна, а локальные переменные объявлять по мере надобности, максимально ограничивая их область видимости.

Да не нужны тут никакие смелость и критическое мышление. Достаточно просто других привычек. Тех, в которых просто нет секции VAR, а таких языков сейчас подавляющее большинство.

Так что смелость нужна скорее для отстаивания нужности секции VAR...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
valexey: Это типа хороший код ты привел?  :D

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Да не нужны тут никакие смелость и критическое мышление. Достаточно просто других привычек. Тех, в которых просто нет секции VAR, а таких языков сейчас подавляющее большинство.
Это довольно странно. Ибо я привык писать как раз в стиле произвольного объявления. В 1С вообще в 99% случаев нет никаких объявлений. Обычно объявление - это первое присваивание.
Но это не значит, что мне нравится такой подход. Особенно в чужом коде.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Это очень олдовые сишники, пришибленные еще С89, в котором по другму было и нельзя.

Угу. Сам с этого начинал. Но видимо не успело в привычку перейти. Переход на плюсовые объявления по месту произошел легко и естественно.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
valexey: Это типа хороший код ты привел?  :D
Это типа код который пишут те, кто гарантированно знает язык в полном объеме.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Это очень олдовые сишники, пришибленные еще С89, в котором по другму было и нельзя.

Угу. Сам с этого начинал. Но видимо не успело в привычку перейти. Переход на плюсовые объявления по месту произошел легко и естественно.

Кстати, в указанном коде использование typedef для обявления структур тоже неиллюзорно намекает на Си.

https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/framework/CmdSystem.cpp#L46

В случае С++ это абсолютная ненужная дичь.

Ну а в плане качества кода.. Циклы там как раз такие о которых на оберонкоре любят беседовать долгими зимними вечерами:
https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/framework/CmdSystem.cpp#L156
https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/framework/CmdSystem.cpp#L386
https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/framework/CmdSystem.cpp#L469
Y = λf.(λx.f (x x)) (λx.f (x x))

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
В общем vlad смотри: https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/framework/CmdSystem.cpp
Православные сишники внезапно объявляют переменные всегда (за редким исключением) в начале блока. Вот же парадокс! И с чего это им вздумалось VAR эмулировать?
Можно, ещё, посмотреть в исходники ReactOS и увидеть то же самое.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
А причем тут глобальность - переменная используется в секции инициализации(телу) модуля, для которой данная переменная локальна. Единственное, что можно было бы сделать - как в старших Оберонах - произвольное расположение секций, тогда секцию VAR с этой переменной можно было бы прижать к телу модуля

Это не единственное, что можно сделать :) Можно набраться критического мышления и смелости и сказать, что секция VAR вообще ненужна, а локальные переменные объявлять по мере надобности, максимально ограничивая их область видимости.
В Модуле-3 секция VAR может предшествовать блоку BEGIN END, находящемуся в любом месте, а также перед FOR - это по репорту, по факту - перед любым блочным оператором, и даже вообще не объявляться, первое присваивание и определит тип переменной, но это явно плохой подход.
Секция VAR заставляет продумывать решение, остальные должны страдать

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Весь этот спор по уровню и осмысленности похож на то, если бы вдруг кому-то вздумалось спорить что лучше packed формат пикселей или же planar? :-)

Цитировать
YUV formats fall into two distinct groups, the packed formats where Y, U (Cb) and V (Cr) samples are packed together into macropixels which are stored in a single array, and the planar formats where each component is stored as a separate array, the final image being a fusing of the three separate planes.

Причем спор такой, что типа нужно решить кто из них кошерней, а другой выпилить нафиг раз и навсегда.

Так вот - реальность она другая, в реальности в некоторых случаях planar лучше, а в некоторых packed. А в некоторых смесь (скажем YUY2). Зависит от того, какие операции чаще будем делать вот с этим вот изображением. Таким образом нужно иметь возможность использовать packed когда это нужно, а когду нужен planar, использовать planar. А также произвольно их смешивать.

По моему и в случае объявления переменных всем вполне очевидны преимущества одного и другого подхода. Не понимаю о чем тут можно спорить вообще.
Y = λf.(λx.f (x x)) (λx.f (x x))

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
В общем vlad смотри: https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/framework/CmdSystem.cpp
Православные сишники внезапно объявляют переменные всегда (за редким исключением) в начале блока. Вот же парадокс! И с чего это им вздумалось VAR эмулировать?
Можно, ещё, посмотреть в исходники ReactOS и увидеть то же самое.
Эка невидаль! Народ может просто языка не знать! :)
Такое бывает.
У меня коллега всё время путает в каком из .... С или С++ можно где угодно переменную описывать, а где - только сразу после открывающей фигурной.

А по мне, как в Go - тоже ничеGo...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
В общем vlad смотри: https://github.com/id-Software/DOOM-3-BFG/blob/master/neo/framework/CmdSystem.cpp
Православные сишники внезапно объявляют переменные всегда (за редким исключением) в начале блока. Вот же парадокс! И с чего это им вздумалось VAR эмулировать?
Можно, ещё, посмотреть в исходники ReactOS и увидеть то же самое.
Эка невидаль! Народ может просто языка не знать! :)
Такое бывает.
У меня коллега всё время путает в каком из .... С или С++ можно где угодно переменную описывать, а где - только сразу после открывающей фигурной.

А по мне, как в Go - тоже ничеGo...
Между прочим, ReactOS писана на 89 процентов на Си.  А с учетом того, что MSVS не умеет C99, становится очевидно почему же там переменные вначале блока объявляют - другие варианты этот язык просто не поддерживает.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
valexey: Это типа хороший код ты привел?  :D

Это типа код который пишут те, кто гарантированно знает язык в полном объеме.

А разве такое возможно применительно к С++?
Тут вот даже с обероном выясняются постоянно новые нюансы, что уж говорить о С++, который постоянно меняется, к тому же...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
valexey: Это типа хороший код ты привел?  :D

Это типа код который пишут те, кто гарантированно знает язык в полном объеме.

А разве такое возможно применительно к С++?
Тут вот даже с обероном выясняются постоянно новые нюансы, что уж говорить о С++, который постоянно меняется, к тому же...
А у них есть выбор? Они же компилятор пишут :-)

Ну и ты учти, что С++ описан все же лучше и полнее чем Оберон в репорте.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Какая замечательная профессия "программист"!
Можно писать какое угодно говно и этому всегда найдется оправдание.