Forth
http://fforum.winglion.ru/

Преимущества Форта: Самодокументированность кода
http://fforum.winglion.ru/viewtopic.php?f=2&t=2976
Страница 1 из 2

Автор:  kzagradskiy [ Вс дек 29, 2013 09:43 ]
Заголовок сообщения:  Преимущества Форта: Самодокументированность кода

Предлагаю создать серию веток на форуме начинающихся на "Преимущества Форта:", каждая из которых будет посвящена определенным преимуществам. Например: самодокументированность, переносимость, возможность написания проблемно-ориентированного языка, мощность. Пишем пример кода который иллюстрирует один из аспектов, и небольшое пояснение. В результате, наберется множество наглядных примеров. В данной ветке предлагаю размещать самодокументированный код. Сам код должен быть максимально нагляден и понятен. Желательно совсем обходиться без комменариев. Интересные примеры могут пригодиться для более наглядного оформления кода посетителей форума. Все кто вспомнил свои находки в области именования форт-слов, напишите их пожалуйста сюда. Примеры задач, самые разные. Как вариант можно писать самодокументированные части кода из активных реализаций (SP-Forth, Quark, SP-Fork...), тем самым вы поможете разработчикам, у которых не всегда есть возможность улучшить читабельность. Вот примеры хорошо читаемого кода из книги "Способ мышления Форт" Глава 5 Разработка: Элементы Форт-Стиля (советую её перечитать):

Быстрая ( установка для лисы; быстро движется)
коричневая ( и имеет цвет шоколада)
лиса ( исполнить лисицу)
прыгает через ( дать действие лисицы)
ленивого ( установка для собаки)
пса ( то, через что лисица перепрыгнула)

: ТОЛКАТЬ ВЗЯТЬСЯ НАЛЕЧЬ ;
: ГЕТТИСБУРГ 4 СЧЕТ 7 ЛЕТ + НАЗАД ;
... ГОТОВО? IF ЗАКРЫТЬ THEN ...

ЛЕВЫЙ МОТОР ПУСК
ПРАВЫЙ МОТОР ПУСК
ЛЕВЫЙ МОТОР СТОП
ПРАВЫЙ МОТОР СТОП
ЛЕВЫЙ МАГНИТ ПУСК
ПРАВЫЙ МАГНИТ ПУСК
ЛЕВЫЙ МАГНИТ СТОП
ПРАВЫЙ МАГНИТ СТОП

Автор:  KPG [ Ср янв 01, 2014 00:50 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

Упс.
"Проблема" Непонимания от Gudleifr на форуме balancer.ru

P.S. Оказывается "много" полезного можно прочесть о "понимании/непонимании"...

Автор:  kzagradskiy [ Ср янв 01, 2014 09:37 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

KPG писал(а):
Упс.
"Проблема" Непонимания от Gudleifr на форуме balancer.ru

P.S. Оказывается "много" полезного можно прочесть о "понимании/непонимании"...


Довольно интересное обсуждение, но кажется, немного не по теме.

Вот ещё два чудесных примера из книги "Образ мышления Форт":
20 ПОВЕРНУТЬ ВЛЕВО БАШНЯ-ТАНКА
: ОБНОВИТЬ-ЗАПИСЬ
ЗАПИСЬ ЧИТАТЬ РЕДАКТИРОВАТЬ ЗАПИСЬ ПИСАТЬ ;

Автор:  Hishnik [ Ср янв 01, 2014 16:14 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

Интереснее примеры с CREATE DOES> Показательный синтаксис, имитирующий обычную речь, тоже интересен, но CREATE DOES> позволяют создать новый уровень выразительности, что существенно сложнее достигается на других языках.

Автор:  kzagradskiy [ Пт янв 03, 2014 08:11 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

Хищник писал(а):
Интереснее примеры с CREATE DOES> Показательный синтаксис, имитирующий обычную речь, тоже интересен, но CREATE DOES> позволяют создать новый уровень выразительности, что существенно сложнее достигается на других языках.

CREATE DOES> универсальная и очень интересная конструкция. Позволяет создать практически любой синтаксис. Хорошо о ней написано здесь: http://block32.site88.net/sf/sf/chapter11.htm

Автор:  Hishnik [ Сб янв 04, 2014 15:34 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

О ней уже давно написано. Я про современные примеры эффективного использования, вот их надо.

Автор:  KPG [ Сб янв 04, 2014 16:31 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

Небольшое обсуждение на habrahabr
Разомнём мозг при помощи Forth
опубликована: 19 ноября ? 2012г.

P.S. Например В стратегическом симуляторе битвы роботов Grobots используется Форт ориентированный язык задания поведения роботов в игровой среде. (проектировать AI мозгов дроидов) :D
Online интерпритатор gForth системы

Автор:  kzagradskiy [ Сб сен 19, 2015 16:03 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

Людям (особенно новичкам) сложно перестраивать восприятие арифметических операндов с обычного инфиксного употребления на постфиксную запись. Но если их переопределить как слова, описывающие их смысл, то все встанет на свои места, а программа станет нагляднее.
Вот пример:
Код:
\ Арифметика
: прибавь + ;
: отними - ;
: умнож * ;
: раздели / ;

\ Стек
: его-же DUP ;
: другой SWAP ;

\ Вывод
: покажи . ;

\ Переменные
: положи ! ;
: возьми @ ;

\ Синтаксический сахар
\ (хотя и без него читабельно)
: к ;
: на ;
: от ;
: в ;

\ Пример №1
к 10 2 прибавь на 6 умнож 3 отними на 4 раздели покажи
\ Здесь для человека, далекого от Форта всё понятно.
\ Слова естественно располагаются в постфиксном виде.

\ обычная запись
10 2 + 6 * 3 - 4 / .
\ Здесь цифры вперемешку с арифметическими операциями.
\ И зачем-то точка.

\ Пример №2
variable яблоки
29 в яблоки положи
яблоки возьми
2 прибавь 7 отними на 20 раздели
в яблоки положи
яблоки возьми покажи
\ Здесь все понятно что-куда

\ обычная запись
29 яблоки !
яблоки @
2 + 7 - 20 /
яблоки !
яблоки @ .
\ Здесь можно сказать что этот блок что-то делает с яблоками не больше.

\ Пример №3
: квадрат   его-же умнож ;
: сумма-квадратов   квадрат другой квадрат прибавь ;
3 4 сумма-квадратов покажи
\ Здесь тоже все понятно

\ обычная запись
: квадрат   DUP * ;
: сумма-квадратов   квадрат SWAP квадрат + ;
3 4 сумма-квадратов .
\ Слова работы со стеком часто ломают логику определения
\ и их нужно комментировать.
\ Если удачно подобрать слова к манипуляциям на стеке,
\ то они будут отражать и суть вопроса и манипуляции на стеке.


Автор:  gudleifr [ Сб сен 19, 2015 16:18 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

<Удалил, т.к. в теме появился mOleg>

Автор:  kzagradskiy [ Сб сен 19, 2015 17:00 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

gudleifr писал(а):
Далась Вам эта постфиксная запись. Она уже десятки лет используется в калькуляторах и никто не жалуется.

На калькуляторах весь алфавит на клавиатуру не вынесешь -- вот и используют то что есть "+ - / *". А если использовать в место них слова, которые в литературной речи, естественным образом, употребляются постфиксно, то программа на Форте станет проще и даже понятнее чем аналогичная на традиционном структурном/объектном языке.

Если с каждым этапом написания кода форт становится "более проблемно-ориентированным" и меньше похожим на исходный форт с его манипулированием со стеком, то почему бы на самом первом этапе не переопределить основные слова форта? Фортом он от этого быть не станет. А потребность в комментариях (которые и так ни кто не делает -- посмотрите исходники SP-Forth и его библиотек).

Хочу попробовать переопределить основные слова -- в основном состоящие из символов и знаков препинания, заменить эти слова во всех исходниках SP-Forth и посмотреть что получится. Может быть и без комментариев станет все понятно.

Автор:  gudleifr [ Сб сен 19, 2015 17:17 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

<Удалил, т.к. в теме появился mOleg>

Автор:  mOleg [ Сб сен 19, 2015 18:47 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

kzagradskiy писал(а):
Вот пример:Код:\ \ Стек: его-же DUP ;: другой SWAP

Интересно с точки зрения создания русского диалекта форта,
у меня было:

Код:
: Если  ( flag --> ) [COMPILE] IF ; IMMEDIATE
: Иначе ( --> ) [COMPILE] ELSE ; IMMEDIATE
: Затем ( --> ) [COMPILE] THEN ; IMMEDIATE

: Отсюда ( --> ) [COMPILE] BEGIN ; IMMEDIATE
: Пока ( flag --> ) [COMPILE] WHILE ; IMMEDIATE
: Повторяй ( --> ) [COMPILE] REPEAT ; IMMEDIATE
: Снова ( --> ) [COMPILE] UNTIL ; IMMEDIATE

: Цикл ( up low --> ) [COMPILE] DO ; IMMEDIATE
: Опять ( --> ) [COMPILE] LOOP ; IMMEDIATE
: Покинуть ( --> ) COMPILE LEAVE ; IMMEDIATE

ALIAS TO B
ALIAS FROM ИЗ

ALIAS IS ЭТО   \ ['] обработчик ЭТО Вектор


можно попробовать собрать воедино.
а вот со сложением и прочим, имхо, перебор
значки запоминаются таки на раз

Автор:  KPG [ Сб сен 19, 2015 18:55 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

Ещё "связок" типа И не хватает :)
Код:
10 и 2 сравни

После сравни ещё потребуется конкретизация условия сравнения.

P.S. Мне вместо IF больше нравится русское слово ТО, а IF тогда становится "пустым" словом-маркёром.
Но со всеми этими словными построениями Форт становится достаточно многословным, увы.
Но, может для объяснения "вычислительным роботам" вполне нормально.

Автор:  kzagradskiy [ Сб сен 19, 2015 19:19 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

KPG писал(а):
Ещё "связок" типа И не хватает :)
Код:
10 и 2 сравни

После сравни ещё потребуется конкретизация условия сравнения.

P.S. Мне вместо IF больше нравится русское слово ТО, а IF тогда становится "пустым" словом-маркёром.
Но со всеми этими словными построениями Форт становится достаточно многословным, увы.
Но, может для объяснения "вычислительным роботам" вполне нормально.

Интересно, но не до конца понятно, как будет употребляться. Можешь написать пример реального кода? Если IF --> ТО какое слово заменить на "СРАВНИ"?

Автор:  KPG [ Сб сен 19, 2015 19:25 ]
Заголовок сообщения:  Re: Преимущества Форта: Самодокументированность кода

kzagradskiy писал(а):
Интересно, но не до конца понятно, как будет употребляться. Можешь написать пример реального кода? Если IF --> ТО какое слово заменить на "СРАВНИ"?

Код:
Если 10 больше 2 ТО .... ИНАЧЕ ... ПРОДОЛЖАЕМ ...

Тогда приходим к усложнению семантической нагрузки, например, на слово больше т.к. оно становится "активным' :)
слово ТО завершает неопределённость(недозаконченность) слова больше в данном случае.

P.S. Или так
Код:
10 и 2 сравни больше? ТО ... ИНАЧЕ ... ПРОДОЛЖАЕМ ....

и здесь возникает неоднозначность ситуации что с чем сравниваем (предположение что 10 больше 2-ух)

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