Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Hishnik писал(а): Разумеется. К сожалению, "так у Мура"... А у кого иначе?
[quote="Hishnik"]Разумеется. К сожалению, "так у Мура"...[/quote]А у кого иначе?
|
|
|
|
Добавлено: Вт апр 04, 2017 18:11 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Victor__v писал(а): Зачем формировать строку из числа в паде если без этого можно обойтись? Конечно, отладочные слова прорабатываются в последнюю очередь, но всё же...
Разумеется. К сожалению, "так у Мура" частенько принимается за признак какой-то элитарности и мистического тайного смысла. Алгоритмы печати чисел вполне известны, можно пользоваться любым. Victor__v писал(а): И ещё хочется обсудить идею навешивания обработчиков на слова. Основной посыл таков: иногда требуется связать компиляцию слова с некоторым доп.действием. К примеру, поддержка лок.переменных при использовании операций >R R> 2>R 2R> и пр Хорошее дело. Обработчики, как говорится, лежат и каши не просят. Хорош сам подход, когда то, что можно сделать средствами Форта (и при этом несложно), делается именно средствами Форта и потом, а то, что требует вмешательства в движок, предусматривается заранее. Причем я не конкретно в защиту локальных переменных в таком качестве, а просто про факт обеспечения способа расширения функциональности.
[quote="Victor__v"]Зачем формировать строку из числа в паде если без этого можно обойтись? Конечно, отладочные слова прорабатываются в последнюю очередь, но всё же... [/quote] Разумеется. К сожалению, "так у Мура" частенько принимается за признак какой-то элитарности и мистического тайного смысла. Алгоритмы печати чисел вполне известны, можно пользоваться любым. [quote="Victor__v"]И ещё хочется обсудить идею навешивания обработчиков на слова. Основной посыл таков: иногда требуется связать компиляцию слова с некоторым доп.действием. К примеру, поддержка лок.переменных при использовании операций >R R> 2>R 2R> и пр[/quote] Хорошее дело. Обработчики, как говорится, лежат и каши не просят. Хорош сам подход, когда то, что можно сделать средствами Форта (и при этом несложно), делается именно средствами Форта и потом, а то, что требует вмешательства в движок, предусматривается заранее.
Причем я не конкретно в защиту локальных переменных в таком качестве, а просто про факт обеспечения способа расширения функциональности.
|
|
|
|
Добавлено: Вт апр 04, 2017 17:55 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Victor__v писал(а): Судя по кол-ву реализаций... ... можно только констатировать детскую болезнь забивания гвоздей транзисторным приемником. Вам дали механизм для создания новых языков, а Вы стремитесь написать "еще один C++", чтобы на уже нем "писать всерьез". Как обычно: вместо писания того, что надо, пишем то, что легко написать. Кстати "количество реализаций" как раз и свидетельствует о низком уровне реализаторов. Victor__v писал(а): нужные некоторым людям в т.ч. мне В том-то и дело, что еще никому здесь не удалось придумать полезное применение этой фигне. Все время находились более простые FORTH-способы. Victor__v писал(а): Это механизм для корректности операций. В FORTH нет понятия корректности операции. Victor__v писал(а): Зачем уведомлять пользователя об имеющихся механизмах? В смысле: нагадим в подъезде и вывернем лампочку?
[quote="Victor__v"]Судя по кол-ву реализаций...[/quote]... можно только констатировать детскую болезнь забивания гвоздей транзисторным приемником. Вам дали механизм для создания новых языков, а Вы стремитесь написать "еще один C++", чтобы на уже нем "писать всерьез". Как обычно: вместо писания того, что надо, пишем то, что легко написать. Кстати "количество реализаций" как раз и свидетельствует о низком уровне реализаторов.
[quote="Victor__v"]нужные некоторым людям в т.ч. мне[/quote]В том-то и дело, что еще никому здесь не удалось придумать полезное применение этой фигне. Все время находились более простые FORTH-способы.
[quote="Victor__v"]Это механизм для корректности операций.[/quote]В FORTH нет понятия корректности операции.
[quote="Victor__v"]Зачем уведомлять пользователя об имеющихся механизмах?[/quote]В смысле: нагадим в подъезде и вывернем лампочку?
|
|
|
|
Добавлено: Вт апр 04, 2017 15:30 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Цитата: Наоборот. Вы реализуете никому не нужные локальные переменные Судя по кол-ву реализаций всё-таки нужные некоторым людям в т.ч. мне Цитата: Затем - изобретаете механизм их сокрытия Сокрытия от чего? Это механизм для корректности операций. Цитата: без всякого желания (и даже уведомления) пользователя. Зачем уведомлять пользователя об имеющихся механизмах? Для понта? Вот я такой крутой, у меня на С++ множественное наследование класса job? Конечного пользователя вообще не интересует всё фичи и как написано. Лишь бы работало без сбоев.
[quote]Наоборот. Вы реализуете никому не нужные локальные переменные[/quote] Судя по кол-ву реализаций всё-таки нужные некоторым людям в т.ч. мне [quote]Затем - изобретаете механизм их сокрытия[/quote] Сокрытия от чего? Это механизм для корректности операций. [quote]без всякого желания (и даже уведомления) пользователя.[/quote] Зачем уведомлять пользователя об имеющихся механизмах? Для понта? Вот я такой крутой, у меня на С++ множественное наследование класса job? Конечного пользователя вообще не интересует всё фичи и как написано. Лишь бы работало без сбоев.
|
|
|
|
Добавлено: Вт апр 04, 2017 15:08 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Victor__v писал(а): Опять расширение пространства для ошибок. Наоборот. Вы реализуете никому не нужные локальные переменные. Затем - изобретаете механизм их сокрытия. Т.е. на момент написания пользовательской программы два мощных источника ошибок уже "на борту" без всякого желания (и даже уведомления) пользователя. Victor__v писал(а): А тут не делание чего-то нового, тут совместимость нового с уже имеющимся. В FORTH не должно быть ничего имеющегося. Все должно писаться с нуля. Victor__v писал(а): И всё же интересно мнение участников форума по поводу навешивания обработчиков на слова. Видимо, просто никто не понял, что имеется в виду.
[quote="Victor__v"]Опять расширение пространства для ошибок.[/quote]Наоборот. Вы реализуете никому не нужные локальные переменные. Затем - изобретаете механизм их сокрытия. Т.е. на момент написания пользовательской программы два мощных источника ошибок уже "на борту" без всякого желания (и даже уведомления) пользователя.
[quote="Victor__v"]А тут не делание чего-то нового, тут совместимость нового с уже имеющимся.[/quote]В FORTH не должно быть ничего имеющегося. Все должно писаться с нуля.
[quote="Victor__v"]И всё же интересно мнение участников форума по поводу навешивания обработчиков на слова.[/quote]Видимо, просто никто не понял, что имеется в виду.
|
|
|
|
Добавлено: Вт апр 04, 2017 14:01 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Цитата: Зачем? Определите какие-нибудь >>R или R>> Опять расширение пространства для ошибок. Да ещё помнить, а есть ли здесь лок.переменные. Доп.нагрузка на память программиста, оно надо? Цитата: Если Вы делаете что-то новое - придумывайте новые слова А тут не делание чего-то нового, тут совместимость нового с уже имеющимся. Немножко другой аспект. И всё же интересно мнение участников форума по поводу навешивания обработчиков на слова.
[quote]Зачем? Определите какие-нибудь >>R или R>>[/quote] Опять расширение пространства для ошибок. Да ещё помнить, а есть ли здесь лок.переменные. Доп.нагрузка на память программиста, оно надо?
[quote]Если Вы делаете что-то новое - придумывайте новые слова[/quote] А тут не делание чего-то нового, тут совместимость нового с уже имеющимся. Немножко другой аспект.
И всё же интересно мнение участников форума по поводу навешивания обработчиков на слова.
|
|
|
|
Добавлено: Вт апр 04, 2017 13:33 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
vpn289 писал(а): Ха! Много раз. "Это Форт, кто мне запретит?" Никто, "мы живем в свободной стране".
[quote="vpn289"]Ха! Много раз. "Это Форт, кто мне запретит?"[/quote]Никто, "мы живем в свободной стране".
|
|
|
|
Добавлено: Сб апр 01, 2017 14:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Ха! Много раз. "Это Форт, кто мне запретит?"
Ха! Много раз. "Это Форт, кто мне запретит?"
|
|
|
|
Добавлено: Сб апр 01, 2017 14:25 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
vpn289 писал(а): ... Добавлять в программу "структурность" путем использования запрещенного в структурном программировании приема? "Либо крестик снимите, либо трусы наденьте".
[quote="vpn289"]...[/quote]Добавлять в программу "структурность" путем использования запрещенного в структурном программировании приема? "Либо крестик снимите, либо трусы наденьте".
|
|
|
|
Добавлено: Сб апр 01, 2017 13:55 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Цитата: Будет, и уже есть кстати в СПФ Не помню кто в devel имеет такую наработку. Иногда ей пользуюсь. Ага. Нашел. ~ygrek/lib/enum.f У меня немножко отличается реализация VARIABLES Код: VOCABULARY variables ALSO variables DEFINITIONS
: NOTFOUND (addr u -- ) CREATED 0 , ; : ;VARIABLES PREVIOUS ;
PREVIOUS DEFINITIONS
: VARIABLES: ALSO variables ;
Пример: Код: VARIABLES: a b cdef ;VARIABLES VALUES инициализированные нулем Код: VOCABULARY values ALSO values DEFINITIONS
: ;VALUES PREVIOUS DROP ; : NOTFOUND VALUED 0 ;
PREVIOUS DEFINITIONS : VALUES: ALSO values 0 ;
Общий принцип: заводим новый контекст, в котором определяем слово закрывающий тег. В этом же контексте определяем NOTFOUND как определяющее слово. И все происходит само. Числа кладутся на стек, слова определяют сами себя. Вычисления также доступны. Можно в контекст добавить слово-паразит, которое может улучшить читаемость. Оно служит разделителем между вычисляемой частью определения (параметром) и именем определения. В таком случае переопределять NOTFOUND не нужно. Функция определяющего слова вешается на слово-паразит. В отличие от определяющего слова, слово-паразит очень короткое ( = ТО is -> и т.п ). И одно и тоже слово можно использовать в разных блоках определений. Вариант со словом-паразитом. Код: VOCABULARY values ALSO values DEFINITIONS
: ;VALUES PREVIOUS ; : is VALUE ;
PREVIOUS DEFINITIONS : VALUES: ALSO values ; Примеры Код: VALUES: 11 is aa 22 1980 * is bb aa bb + is cc ;VALUES Код: CONSTANTS: 11 is aa 22 1980 * is bb aa bb + is cc ;CONSTANTS
[quote] Будет, и уже есть кстати в СПФ :) Не помню кто в devel имеет такую наработку. Иногда ей пользуюсь.[/quote] Ага. Нашел. ~ygrek/lib/enum.f
У меня немножко отличается реализация VARIABLES [code] VOCABULARY variables ALSO variables DEFINITIONS
: NOTFOUND (addr u -- ) CREATED 0 , ; : ;VARIABLES PREVIOUS ;
PREVIOUS DEFINITIONS
: VARIABLES: ALSO variables ; [/code] Пример: [code]VARIABLES: a b cdef ;VARIABLES[/code]
VALUES инициализированные нулем [code]VOCABULARY values ALSO values DEFINITIONS
: ;VALUES PREVIOUS DROP ; : NOTFOUND VALUED 0 ;
PREVIOUS DEFINITIONS : VALUES: ALSO values 0 ; [/code]
Общий принцип: заводим новый контекст, в котором определяем слово закрывающий тег. В этом же контексте определяем NOTFOUND как определяющее слово. И все происходит само. Числа кладутся на стек, слова определяют сами себя. Вычисления также доступны. Можно в контекст добавить слово-паразит, которое может улучшить читаемость. Оно служит разделителем между вычисляемой частью определения (параметром) и именем определения. В таком случае переопределять NOTFOUND не нужно. Функция определяющего слова вешается на слово-паразит. В отличие от определяющего слова, слово-паразит очень короткое ( = ТО is -> и т.п ). И одно и тоже слово можно использовать в разных блоках определений.
Вариант со словом-паразитом. [code]VOCABULARY values ALSO values DEFINITIONS
: ;VALUES PREVIOUS ; : is VALUE ;
PREVIOUS DEFINITIONS : VALUES: ALSO values ;[/code]
Примеры [code]VALUES: 11 is aa 22 1980 * is bb aa bb + is cc ;VALUES[/code]
[code]CONSTANTS: 11 is aa 22 1980 * is bb aa bb + is cc ;CONSTANTS [/code]
|
|
|
|
Добавлено: Сб апр 01, 2017 12:41 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Victor__v писал(а): Можно, но также можно сделать и проще. Например? gudleifr писал(а): И? мне каждый раз писать Зачем? Определите какие-нибудь >>R или R>> . Если Вы делаете что-то новое - придумывайте новые слова! Не старайтесь заранее предугадать все возможные случаи применения Вашего кода!
[quote="Victor__v"]Можно, но также можно сделать и проще.[/quote]Например? [quote="gudleifr"]И? мне каждый раз писать [/quote]Зачем? Определите какие-нибудь >>R или R>> . Если Вы делаете что-то новое - придумывайте новые слова! Не старайтесь заранее предугадать все возможные случаи применения Вашего кода!
|
|
|
|
Добавлено: Сб апр 01, 2017 10:53 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Цитата: Так проще всего обработать символы, появляющиеся задом-наперед Проще, согласен Но касательно преобразования числа в строку это выглядит как использование бектрекинга вместо begin again Можно, но также можно сделать и проще. Цитата: Пока хватает этих оснований Когда делаю примитивы для своего форт-асма, делаю всё в 2-й системе. Но и это слишком много. Лучше тетрадами мыслить типа 0101t1100 Цитата: Предположим, необходимо определить группу констант Будет ли более приятной такая запись? Будет, и уже есть кстати в СПФ Не помню кто в devel имеет такую наработку. Иногда ей пользуюсь. Цитата: IMMEDIATE-слова могут при компиляции производить любые действия И? мне каждый раз писать Код: ... >R [ cell local-depth +! ] ? Ошибки, батенька, приумножатся. И перегружать тоже не красиво.
[quote]Так проще всего обработать символы, появляющиеся задом-наперед[/quote] Проще, согласен Но касательно преобразования числа в строку это выглядит как использование бектрекинга вместо begin again Можно, но также можно сделать и проще.
[quote]Пока хватает этих оснований[/quote] Когда делаю примитивы для своего форт-асма, делаю всё в 2-й системе. Но и это слишком много. Лучше тетрадами мыслить типа 0101t1100 [quote]Предположим, необходимо определить группу констант Будет ли более приятной такая запись?[/quote] Будет, и уже есть кстати в СПФ :) Не помню кто в devel имеет такую наработку. Иногда ей пользуюсь.
[quote]IMMEDIATE-слова могут при компиляции производить любые действия[/quote] И? мне каждый раз писать [code] ... >R [ cell local-depth +! ] [/code]? Ошибки, батенька, приумножатся. И перегружать тоже не красиво.
|
|
|
|
Добавлено: Сб апр 01, 2017 10:40 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
P.S. Kopa писал(а): Не найдя подходящего топика создал новый для обсуждения. Вообще, раздел вредный. В FORTH нет полезных слов (и, тем более, полезных идей "уровня слов"). Ибо сказано: Мур писал(а): Основной Принцип имеет следствие: НЕ ПРЕДПОЛАГАЙТЕ! Не пишите код, который может пригодиться когда-то в будущем. Не оставляйте заплаток для будущих расширений. Вещей, которые вы можете захотеть сделать, бесконечное множество; это означает, что каждая из них имеет нулевую вероятности осуществления. Если вам что-то понадобится позже, вы это и запрограммируете позже - и, вероятно, лучше, чем сделали бы это теперь. И если кто-нибудь будет расширять вашу программу, он заметит оставленные вами для этого заплатки? Все ли из них вы аккуратно задокументируете?
P.S. [quote="Kopa"]Не найдя подходящего топика создал новый для обсуждения.[/quote]Вообще, раздел вредный. В FORTH нет полезных слов (и, тем более, полезных идей "уровня слов").
Ибо сказано: [quote="Мур"]Основной Принцип имеет следствие: НЕ ПРЕДПОЛАГАЙТЕ! Не пишите код, который может пригодиться когда-то в будущем. Не оставляйте заплаток для будущих расширений. Вещей, которые вы можете захотеть сделать, бесконечное множество; это означает, что каждая из них имеет нулевую вероятности осуществления. Если вам что-то понадобится позже, вы это и запрограммируете позже - и, вероятно, лучше, чем сделали бы это теперь. И если кто-нибудь будет расширять вашу программу, он заметит оставленные вами для этого заплатки? Все ли из них вы аккуратно задокументируете?[/quote]
|
|
|
|
Добавлено: Сб апр 01, 2017 10:02 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
vpn289 писал(а): Будет ли более приятной такая запись? 1. Число почти одинаковых строк большее числа различий между ними - очевиднейший порок программирования. Резко возрастает число ошибок. Ухудшается читаемость/запоминаемость. 2. Константа - это крайний случай: мол, я ввел сущность, но что она делает, не знаю. В FORTH, где "все что-то делает", константы по большей части избыточны. 3. Подобные блоки лучше разбивать на части комментариями: "а теперь - те", "затем - эти", "чуть не забыли об остатке"... Если эти комментарии будут, заодно что-то делать (группировать, размещать, изменять семантику) - идеально.
[quote="vpn289"]Будет ли более приятной такая запись?[/quote] 1. Число почти одинаковых строк большее числа различий между ними - очевиднейший порок программирования. Резко возрастает число ошибок. Ухудшается читаемость/запоминаемость. 2. Константа - это крайний случай: мол, я ввел сущность, но что она делает, не знаю. В FORTH, где "все что-то делает", константы по большей части избыточны. 3. Подобные блоки лучше разбивать на части комментариями: "а теперь - те", "затем - эти", "чуть не забыли об остатке"... Если эти комментарии будут, заодно что-то делать (группировать, размещать, изменять семантику) - идеально.
|
|
|
|
Добавлено: Пт мар 31, 2017 23:45 |
|
|
|
|
|
Заголовок сообщения: |
Re: Полезные слова и идеи для Форта. |
|
|
Предположим, необходимо определить группу констант Код: 1 CONSTANT one 2 CONSTANT two 3 CONSTANT three .... 100 CONSTANT hundred Будет ли более приятной такая запись? Код: Constants{ 1 one 2 two 3 three .... 100 hundred }Constants Этот подход, безусловно, распространяется на блоки любых однотипных определений: Код: 1-reg-instructions{ 0x04 abs 0x00 acr 0x09 brev ..... 0x0B swap.b 0x0C swap.bh 0x0A swap.h 0x0E tnbz }1-reg-instructions
Предположим, необходимо определить группу констант [code]1 CONSTANT one 2 CONSTANT two 3 CONSTANT three .... 100 CONSTANT hundred[/code]
Будет ли более приятной такая запись? [code]Constants{ 1 one 2 two 3 three .... 100 hundred }Constants[/code]
Этот подход, безусловно, распространяется на блоки любых однотипных определений: [code]1-reg-instructions{ 0x04 abs 0x00 acr 0x09 brev ..... 0x0B swap.b 0x0C swap.bh 0x0A swap.h 0x0E tnbz }1-reg-instructions[/code]
|
|
|
|
Добавлено: Пт мар 31, 2017 23:29 |
|
|
|
|