Forth
http://fforum.winglion.ru/

Forth-2012
http://fforum.winglion.ru/viewtopic.php?f=9&t=3083
Страница 4 из 6

Автор:  Hishnik [ Вт дек 08, 2015 20:29 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
И любой поднаторевший в этом деле фортер знает, что 2+ относится не к яблокам, а адресам, не потому, что видит CELL+, а потому, что видит, что это слово явно имеет дело с адресной арифметикой.

Мало ли поводов прибавлять к числу 2...

Численные выражения в тексте вообще признак плохого стиля. Если вот так вот взять и поменять в программе 100 на 1000, потому что захотелось увеличить размер массива, то под раздачу попадет и температура кипения воды. Не говоря уже о том, что заменить значение константы в заголовке программы существенно проще, чем гоняться за ней по всему тексту (а потом еще раз гоняться, чтобы вернуть обратно).

gudleifr писал(а):
Избыточно больших.

Только вот если потратить массу усилий на сокращение объемов кода, видимый эффект будет стремиться к нулю. Все равно ОС по необходимости управляет памятью самостоятельно, подгружая нужные страницы. Это происходит независимо от того, предусмотрели мы оверлеи в явном виде или же нет.

gudleifr писал(а):
Так за рулем-то те же ямщики. И качество их работы только ухудшается. Только еще и бензином воняет. Впрочем, Вы, кажется, раньше уже радовались тому, как стало лучше от внедрения компьютеров в повседневную жизнь, так что замнем.

А это факт. И с машинами, и с компьютерами. От него никуда не деться. Замечу, что фактом тут является не оценка полезности или прогрессивности, а просто количество машин/лошадей и компьютеров. Я не призываю любить какое-то определенное направление, например, процесс разработки онлайн-RPG или интернет-магазинов. Просто эти вещи имеют место в современной IT-индустрии, и кто-то этим всем занимается. Соответственно, формирует требования к инструментам разработки, дает работу дизайнерам и художникам, и т.д. Если принципиально идти поперек течения, никому от этого лучше не станет. А информационный повод от декларирования 16 бит, блоков текста, доступа только к 3,5-дюймовым дискетам и CGA-монитору отдает скорее скандалом, чем благородным налетом понимания основ.

gudleifr писал(а):
И не надо, я же приводил пример - 10 строк на определение примитивов работы со списками, а дальше уже они... Причем, лучше было бы в течение следующих 20 строк перейти на более крупные примитивы, но у меня не получилось...

До ~1000 строк можно и не особенно задумываться о структуре программы. Разве что для пользы дела и выработки стиля. А вот дальше уже просто необходимо. И чем меньше будет подводных камней, тем лучше. Помнить в этой ситуации про 2+ - это примерно как гордиться хождением зимой без шапки ("а Васька из соседнего подъезда так не может!").

Автор:  gudleifr [ Вт дек 08, 2015 20:40 ]
Заголовок сообщения:  Re: Forth-2012

Hishnik писал(а):
Численные выражения в тексте вообще признак плохого стиля.
Угу, "ЧИСЛО-ПОРОСЯТ ПОРОСЕНКА", "ЧИСЛО-ВОЛКОВ ВОЛК И ЧИСЛО-КОЗЛЯТ КОЗЛЯТ"... См. Броуди.
Hishnik писал(а):
Только вот если потратить массу усилий на сокращение объемов кода...
Т.к. речь идет о пределах того, что мы можем запрограммировать, то приходится.
Hishnik писал(а):
До ~1000 строк можно и не особенно задумываться о структуре программы.
1000 строк кода, это по современным нормам ок.30 оставшихся после отладки ошибок. Так что тоже приходится. Если, с точки зрения писания 1000 строк - это фигня, то с точки зрения работы программы или чтения программы другим - это, практически, детективный роман.

И речь, повторю, не в том, чтобы горевать или радоваться 64-разрядным "солитерам" и "лайнсам", а в том. чтобы не считать "слова, инкапсулирующие размер ячейки" чем-то важным для стандартизации.

Автор:  VoidVolker [ Вт дек 08, 2015 22:33 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Так, что думаю, очевидно, что о необходимости размещения всей этой хрени в одном сегменте кода речь не идет. Повторю, найдите алгоритм на 30-страниц русского текста - и приходите.

Эммм... Так вот же он и есть. Несколько мегабайт кода. Один мегабайт - это 1024 килобайта, а один килобайт - это 1024 байта. Или символа. 30 станиц - это примерно 50 килобайт. 1Мб > 50кб. Что не так то?

Автор:  Hishnik [ Вт дек 08, 2015 22:33 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Угу, "ЧИСЛО-ПОРОСЯТ ПОРОСЕНКА", "ЧИСЛО-ВОЛКОВ ВОЛК И ЧИСЛО-КОЗЛЯТ КОЗЛЯТ"... См. Броуди.

Нет, 3 ПОРОСЕНКА 1 ВОЛК 7 КОЗЛЯТ. В данном случае речь идет о введении в программу констант, которые определяются один раз и будут использоваться на всем протяжении. ЧИСЛО-ПОРОСЯТ - лишняя сущность, поскольку используется один раз, для определения дублирующей по смыслу константы. Однако:

ЧИСЛО-ПОРОСЯТ ЧИСЛО-КОЗЛЯТ + CONSTANT ЧИСЛО-ЖЕРТВ-ВОЛКА

Впоследствии сюда можно добавить учет Красной Шапочки. А если

11 CONSTANT ЧИСЛО-ЖЕРТВ-ВОЛКА , то еще поди догадайся, что это сумма поросят, козлят и Красной Шапочки. Хотя вроде сказки все читали, после объяснения очевидно. Правда, потом можно забыть, почему 11, и это была Красная Шапочка, или еще и ее бабушка. И вот такого по проекту будет навалом.

gudleifr писал(а):
И речь, повторю, не в том, чтобы горевать или радоваться 64-разрядным "солитерам" и "лайнсам", а в том. чтобы не считать "слова, инкапсулирующие размер ячейки" чем-то важным для стандартизации.


Сами по себе слова - вряд ли. Важен подход, заключающийся в том, что Форт должен иметь механизмы контроля и тестирования возможностей, а не замыкаться в том, что "всем очевидно". Ну очевидно же, что 3.1415 - слово двойной длины? Речь же идет о марте 1415 года, разве не понятно? В стандарте ведь именно так трактуется запись с точкой. С очевидными последствиями со стороны тех, кто может написать свою реализацию. Поэтому стандартизация начинается с выработки основных целевых положений и понимания того, зачем именно он нужен, кого и с какой целью собирается объединять, и какие для них будут соотношения выгод и компромиссов. Пока что ANS работает по принципу "создадим уродца, чтобы отличия от общепринятых подходов бросались в глаза, спровоцируем таким образом программистов на критику, чтобы выглядеть жертвами и объяснять таким образом отсутствие практического выхода". Еще можно стараться внедрить в практику как можно больше подходов, плохо сочетаемых с другими инструментами программирования, формируя группку программистов с гипертрофированными навыками, и привязывая их к вожаку. А потом воспитанный ANS "форт-Гуинплен", умеющий писать только на 16-битных числах с фиксированной точкой, уже просто никуда не денется.

Автор:  gudleifr [ Вт дек 08, 2015 23:13 ]
Заголовок сообщения:  Re: Forth-2012

VoidVolker писал(а):
1Мб > 50кб. Что не так то?
Давайте рассмотрим регулятор Уатта... А почему не адронный коллайдер? Он, ведь больше...
Ваш текст нам не подходит по очень простой причине - его анализ займет очень много времени. И, думаю, даст заведомо неудобный для Вас результат (навскидку два-три процесса гораздо легче 64K). Не потому, что я хочу Вас обидеть, а потому, что "так всегда бывает". Так что вместо "большого муравейника" прошу показать мне "одного большого муравья".
Hishnik писал(а):
чет Красной Шапочки
Это Вы Броуди расскажите. По своему опыту могу только сказать, что использование констант порождает большее число ошибок, чем "просто числа". Например, даже в такой простой программе, как упомянутые выше "танчики", есть ошибочная константа.
Hishnik писал(а):
Важен подход...
Вы опять путаете "понимать, что такое размерность" с "считать все сущее 16-разрядным". Наверное, умышленно?

Автор:  Hishnik [ Вт дек 08, 2015 23:34 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Это Вы Броуди расскажите.

Так он вроде на пенсии, чего ему рассказывать? К тому же кроме Броуди есть, например, Макконнелл, активно критикующий "магические числа".

gudleifr писал(а):
Вы опять путаете "понимать, что такое размерность" с "считать все сущее 16-разрядным". Наверное, умышленно?

Можно подумать, "понимание размерности" - какое-то сакральное знание :) Получается, 2+ надо писать в программе, чтобы никто не заподозрил программиста в неспособности по прошествии некоторого времени сопоставить разрядность процессора с размером ячейки для одного числа?

Автор:  gudleifr [ Вт дек 08, 2015 23:47 ]
Заголовок сообщения:  Re: Forth-2012

Hishnik писал(а):
К тому же кроме Броуди есть, например, Макконнелл, активно критикующий "магические числа".
Имя им - Легион.
Hishnik писал(а):
Получается, 2+ надо писать в программе, чтобы никто не заподозрил программиста в неспособности по прошествии некоторого времени сопоставить разрядность процессора с размером ячейки для одного числа?
Ну, как бы, люди ходят в туалет не для того, чтобы никто их не заподозрил в неумении спускать воду. Просто 2+ ставить естественнее (ведь, 2 байта-то). Если нет отдельных операций сложения для яблок, коров и драконов, то зачем отдельное сложение для адресов?

Автор:  Hishnik [ Ср дек 09, 2015 00:16 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Имя им - Легион.



Избегайте «магических чисел» Магические числа — это
обычные числа, такие как 100 или 47524, которые появляются в программе без объяснений. Если вы программируете на языке, поддерживающем именованные константы, используйте их вместо магических чисел. Если вы не можете
применить именованные константы, применяйте глобальные переменные, когда это возможно.
Исключение магических чисел дает три преимущества.
- Изменения можно сделать более надежно. Если вы используете именованные константы, нет нужды искать каждое из чисел 100, и вы не измените по ошибке те из этих чисел, что ссылаются на что-либо иное.
- Изменения сделать проще. Когда максимальное число элементов меняется со100 на 200, используя магические числа, вы должны найти каждое число 100 и изменить его на 200. Если вы используете 100+1 или 100%1, вы также должны найти и изменить все числа 101 и 99 на 201 и 199 соответственно. При использовании именованных констант вы просто меняете определение константы со 100 на 200 в одном месте.
- Ваша программа лучше читается. Конечно, в выражении:
for i = 0 to 99 do ...
можно предположить, что 99 определяет максимальное число элементов. А вот
выражение:
for i = 0 to MAX_ENTRIES-1 do ...
не оставляет на этот счет сомнений. Даже если вы уверены, что это число никогда не изменится, применяя именованные константы, вы получите более читабельную программу.
Применяйте жестко заданные нули и единицы по необходимости Значения 0 и 1 используются для инкремента, декремента, а также в начале цикловпри нумерации первого элемента массива. 0 в конструкции:
for i = 0 to CONSTANT do ...
вполне приемлем, так же как 1 в выражении:
total = total + 1
Вот хорошее правило: используйте в программе как константы только 0 и 1, а любые
другие числа определите как литералы с понятными именами.



gudleifr писал(а):
Если нет отдельных операций сложения для яблок, коров и драконов

Ну приехали! Прирост драконов зависит от того, построено ли соответствующее здание, а также от наличия Цитадели и Замка, также могут быть захвачены внешние строения и поставлен Грааль :) Поэтому имеет смысл написать ДРАКОНЫ+ и уже внутрь спрятать логику расчета конкретного прироста.

Автор:  gudleifr [ Ср дек 09, 2015 00:30 ]
Заголовок сообщения:  Re: Forth-2012

Hishnik писал(а):
...
Приведеннаяцитата очень напоминает творчество тех же евролузеров. Правдоподобные рассуждения. Посмотрим на канонический пример из Броуди:
Изображение
Изображение
Для Win32FORTH у меня получилось:
Код:
: NOTHING ;
: DOER   CREATE  ['] NOTHING  >BODY ,  DOES> @ >R ;
VARIABLE MRKR
: (MAKE)  R>  DUP 4 +  DUP 4 + SWAP @ >BODY !
   @ ?DUP IF >R THEN ;
: MAKE   STATE @ IF ( compiling)
   COMPILE (MAKE)  HERE MRKR !  0 ,
   ELSE  HERE  [COMPILE] ' >BODY !
   [COMPILE] ]  THEN ;   IMMEDIATE
: ;AND   COMPILE EXIT  HERE MRKR @ ! ;   IMMEDIATE
: UNDO   ['] NOTHING  >BODY  [COMPILE] '  >BODY ! ;

И кого здесь спасет CELL+ ?

Автор:  Hishnik [ Ср дек 09, 2015 01:07 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Приведеннаяцитата очень напоминает творчество тех же евролузеров. Правдоподобные рассуждения.

Вообще-то, это вещи, к которым так или иначе приходят очень многие программисты, независимо от того, прочитали они об этом, или же сами дошли.

gudleifr писал(а):
И кого здесь спасет CELL+ ?

Здесь - никого. Он для того, чтобы в большом проекте каждый раз не задумываться. И он не сам по себе, а как часть общего подхода. Форт как язык не привязан к разрядности ячейки данных, размеру области кода, порядку следования полей в словарной статье. Поэтому от таких деталей нужно максимально уходить, если не делая код универсальным, то хотя бы давая программисту определять эти параметры в рантайме.

Автор:  gudleifr [ Ср дек 09, 2015 01:36 ]
Заголовок сообщения:  Re: Forth-2012

Hishnik писал(а):
Вообще-то, это вещи, к которым так или иначе приходят очень многие программисты,
Это объяснимо, вера во что-то простое гораздо привлекательнее понимания чего-то сложного.
Hishnik писал(а):
Форт как язык не привязан к разрядности ячейки данных, размеру области кода, порядку следования полей в словарной статье.
Ну, во-первых, FORTH - не язык. А, во-вторых, если сделать его независимым от собственного устройства, проще перейти на любой из общепринятых компилирующих языков. Это как независимость lex от регулярных выражений или yacc от грамматики.

Автор:  VoidVolker [ Ср дек 09, 2015 14:12 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Давайте рассмотрим регулятор Уатта... А почему не адронный коллайдер? Он, ведь больше...
Да, больше. И намного сложнее. Я просто использовал наиболее простые примеры. А так да - в БАК, например в детекторах частиц для первичного анализа результатов столкновения частиц используются алгоритмы, реализованные непосредственно в железе. Эти железки генерируют терабайтные потоки данных, которые расходятся на фильтры и идут на более высокие уровни логики.
gudleifr писал(а):
Ваш текст нам не подходит по очень простой причине - его анализ займет очень много времени. И, думаю, даст заведомо неудобный для Вас результат (навскидку два-три процесса гораздо легче 64K). Не потому, что я хочу Вас обидеть, а потому, что "так всегда бывает". Так что вместо "большого муравейника" прошу показать мне "одного большого муравья".

Ну так вот же он - ннкрон, например. Или браузер. Или вообще любая программа.

Автор:  Hishnik [ Ср дек 09, 2015 14:14 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Это объяснимо, вера во что-то простое гораздо привлекательнее понимания чего-то сложного.

Я даже не удивляюсь :) Не заводить константы - признак начинающего программиста. Упорствовать в том, что так и надо - это уже показатель того, что человек советы воспринимал в штыки, и ни разу не делал проект такой сложности, чтобы собственные заморочки отвалились за ненадобностью.
gudleifr писал(а):
Ну, во-первых, FORTH - не язык.

Конечно, не язык!
"Средь богов он - Великий Брахма,
Среди птиц он могучий Гаруда,
Средь наставников - мудрый Дрона
Среди дваждырожденных - Арджуна..."

(Услышанное во сне после чтения Махабхараты и книги "Язык Форт и его реализации")

И пока одни спорят о терминах и установлении иерархии среди оставшихся полутора лузеров, другим надо писать программы.

Автор:  gudleifr [ Ср дек 09, 2015 14:33 ]
Заголовок сообщения:  Re: Forth-2012

VoidVolker писал(а):
Ну так вот же он - ннкрон, например. Или браузер. Или вообще любая программа.
Хорошо, рассматриваем программу, состоящую из 100500 команд "OR EAX, EAX". Видим, что ее можно заменить менее, чем 64K-блоком. Ч.Т.Д.
Hishnik писал(а):
Не заводить константы - признак начинающего программиста.
Сейчас, скорее, наоборот. Но, речь не о том, заводить или не заводить константы, а в том, чтобы понимать, зачем они нужны. Обратите, например, внимание на константу DOES-PFA на экр. 24 приведенного выше листинга.
Hishnik писал(а):
про Брахму
Заголовок Форума читали? Кончайте троллинг...

Автор:  Hishnik [ Ср дек 09, 2015 15:03 ]
Заголовок сообщения:  Re: Forth-2012

gudleifr писал(а):
Сейчас, скорее, наоборот.

Это сейчас-то наоборот? Сейчас годятся любые методы повышения продуктивности программиста и сохранения его контроля над процессом разработки. Способности к концентрации конечны, и засорять память элементарными деталями в угоду некоему "пониманию базовых вещей" попросту вредно. Покажите мне сначала человека, активно пишущего на Форте, который не понимает, сколько надо прибавить к адресу для перехода к следующей ячейке. Годами будем мусолить идею "понимания размера"? А работать уже когда?

gudleifr писал(а):
Обратите, например, внимание на константу DOES-PFA на экр. 24 приведенного выше листинга.

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

gudleifr писал(а):
Заголовок Форума читали?

Нет, я его писал :)

Страница 4 из 6 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/