crypt of decay - о бедном глобале замолвите слово... [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

о бедном глобале замолвите слово... [Sep. 14th, 2020|12:08 am]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|]

«хороший стиль программирования» — вещь местами очень зависимая от языка. например, выносить одно короткое выражение в отдельную функцию на сишечке — редко когда будет хорошим стилем. в форте всё примерно наоборот. (ну, плюс-минус погода на луне, как и с любым общим утверждением.)

то же самое относится и к глобальным переменным: принято считать, что глобалы — это плохо. хотя опять же: смотря какие. глобальные переменные уровня модуля, например, уже не всегда считаются абсолютным злом: это, вроде как, внутреннее дело реализации, находится в более-менее контролируемом окружении, поэтому не так страшно. у форта есть средства организации модулей (словари), но на деле программа обычно представляет из себя группы в пол-десятка/десяток слов, которые по сути являются независимыми модулями, но обычно не выносятся в отдельный словарь (потому что с этим больше хлопот, чем профитов). поэтому в форте намного чаще используют глобалы — и ничего страшного в этом нет.

собственно, я как раз о том, что не бойтесь создать глобальную переменную, если форт-код просто напрашивается на это. если вы разбивали-разбивали слово на кучку других, но всё ещё приходится таскать за собой сито на палке по всему этому коду — оно так и просится быть положеным в глобальную переменную. как и во многих других вещах, понять, когда вы просто неправильно разбили, а когда просится глобал — дело скорее опыта и чутья, чем каких-то формальных правил. но если явно видно, что один глобал сделает весь код понятней и чище — не сомневайтесь, делайте глобал. только не надо пытаться реюзнуть какой-то временный глобал, который уже есть в другой части программы: если вам нужен глобал именно здесь — и объявите его именно здесь. даже на восьмибитках это было дёшево, а сейчас и тем более.

если же вдруг есть переживания по поводу того, что вдруг придётся потоки тащить, а мы уставшие и с глобалом — то для этого в форте придуманы user variables. аналог thread locals. если понадобится — замените вашу variable на user-variable, и все дела.

да, в форте можно делать локальные переменные (элементарно добавляются в компилятор), но никаких особенных выигрышей они не дают. наоборот, способствуют написанию плохого форт-кода, потому что позволяют вместо разбивания большого плохо контролируемого слова на части поменьше зафигачить огромную простыню. это не то, как имеет смысл писать на форте. именно поэтому в UrForth из коробки локалов нет: мне не нужно. и глобалов там тоже очень мало, но в Стратегических Местах я спокойно их создаю и использую. а, и ещё локалы медленней глобалов, потому что требуют пролога и эпилога, уменьшая этим преимущество разбиения на маленькие слова.
Linkmeow!

Comments:
From:(Anonymous)
Date:September 14th, 2020 - 02:35 am
(Link)
Форт все равно не нужен. Малопопулярное говно.
(Replies frozen) (Thread)
[User Picture]
From:[info]ketmar
Date:September 14th, 2020 - 02:51 am
(Link)
это охуенно важная, ценная и новая мысль. поэтому я её тут оставлю, а остальные подобные откровения буду удалять.
(Replies frozen) (Parent)