@forthuse

Какие бывают примеры метапрограммирования на Форт?

В характеристиках Форт (Forth) языка проговаривается, что он обладает свойством метапрограммирования, но в книгах по нему, по моему, этот вопрос не достаточно раскрывается как к примеру для разных классических языков.
  • Вопрос задан
  • 338 просмотров
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Не Фортист. Но я-бы обозвал себя Форт-любознательный. Что такое вообще мета-программирование.
Вики определяет так
Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы

Туда-же до кучи кидают и макросы и кодо-генерацию. Достаточно общо. Мне это и нравится
и не нравится. Нравится тем что в топике Форта безо всякой конкретики мы можем
крутить это определение как есть и натягивать его как сову на мячик.

Что вообще есть в языке Форт. Макросы? Вроде там весь синтаксис - это слова (words). И можно определять
новые слова и переопределять старые. Например вместо цифры 2 можно определить 3. Вот даже так.

Про кодо-генерацию говорить не интересно. Форт - язык для встраиваемой техники и микро-контроллеров
и таких вобщем-то задач как кодогенерация в ентерпрайзе и финтехе - вобщем -то нету. Тоесть типичная
задача генерации ORM-Entities где на вход приходит реляционная БД со схемой а на выходе например
C#/Java код с готовыми сущностями - неспецифичная для Форт. Ну нету такой потребности.

По поводу макросов. Тут мне приходит на ум такая аналогия что рыба, плавая в воде не замечает самой воды.
Вот. И мне кажется что Форту что макросы что функции - все едино. Если говорить о подстановках - то все
программирование на Форте - это сплошные подстановки. Есть даже такое утверждение что Форт - конкатенативный язык и в нем функционал достигается просто сцеплением кода. Макросы - налицо.

Вот эта конструкция берет с вершины стека число и считает целое число в кубе.

CUBE DUP DUP * * ;

Функция или макрос? Вот если макрос - то я уже мета-программирую. Тоесть
форт мета-программирует постоянно.

Возможно щас в топик зайдут настоящие форт-овые или фортеры и добавят свои 5 копеек.
Если есть какая-то семантическая или любая другая разница между вызовом функции и макро-подстановкой
- то прошу дать больше каментов.
Ответ написан
@forthuse Автор вопроса
Возможно такие примеры подходят на вариант метапрограммирования на Форт
из треда Язык Forth - зачем нужен, что можно делать на нём?
: [:  POSTPONE IF  create does> >body dup 1+ swap c@ evaluate ; IMMEDIATE 
: ;]  POSTPONE THEN  ; IMMEDIATE

: aaa 1 .  0 [: x c" 2 ."  ;] x 3 . ;
aaa
отобразит 1 2 3

Или такой вариант (с скомпилированным кодом)

: [: 0 POSTPONE LITERAL POSTPONE IF  POSTPONE [  :NONAME  ; IMMEDIATE
: ;]  POSTPONE ; >r ]  POSTPONE THEN r>  POSTPONE LITERAL POSTPONE EXECUTE ; IMMEDIATE
: aaa 1 . [: 2 . ;] 3 . ;
aaa


P.S. А, вообще возможно, почитав какие то топики например с форума fforum.winglion.ru
могут быть даны расширенные примеры именно тематики метапрограммирования в Форт. :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы