среда, 10 апреля 2013 г.

FORTH vs LISP

Они конечно - "близнецы-братья". С точки зрения парадигмы.

Только в FORTH - обратная польская запись, а в LISP - прямая.

Ну по моему скромному мнению - FORTH проще и технологичнее. И более расширяем с плане "синтаксического сахара". Он на это - идеологически заточен.

ОЧЕНЬ хорошая идея - взять FORTH-машину и сделать над ней DSL. Который бы позволял сделать примерно следующее:


: K216794957

 ТБ24
 ППР
 "Перевести фокус в поле 'Орган/Источник' в ППР"
 "в поле 'Орган/Источник' ввести {('Правительство России и СССР')}"
 "Выделить текст в поле"
 "Начинаем набирать {('Органы')}"
 "Сравнить абзац текущего редактора с эталоном"
 "Нажать {('Enter')}"
 "Сравнить абзац текущего редактора с эталоном"
 "Нажать Искать"
 "Проверить информацию о списке"
;
--------------
K216794957


: K224135514

 "Копировать в буфер строку {('01.01.2010')}"
 ППР
 "Перевести фокус в поле 'Дата принятия' в ППР"
 "Вставить"
 "Выделить текст в поле"
 "Сравнить выделенный текст текущего редактора с эталоном"
;
--------------
K224135514


: K224790135
 "Открыть НК"
 "Список редакций"
 СР
 "Вызвать Список редакций из статусной строки"
;
--------------
K224790135


: K226006496

 : Действия1
  "Перевести фокус в текст"
  "В конец документа"
  "Перевести фокус в оглавление"
  "Получить заголовок текущего контрола"
 ;

   : Действия
     "Выставить форме размеры {(1400 800)} ширину навигатора в {(300)} и {(@ Действия1)}"
   ;

 "Открываем НК"
 "Сделать {(@ Действия)} с изменением состояния и размеров окна {("Найти главное окно")}"
;
--------------
K226006496


: K232098711
 "Открываем НК"
 "Список редакций"
 "Стрелка вниз"
 "Выделить текущий элемент"
 "Построить обзор изменений для выбранных редакций"
 "Сравнить текст с эталоном"
 "Открываем НК"
 "Список редакций"
 "Стрелка вниз"
 "Выделить текущий элемент"
 "Сравнить выбранные редакции"
;

K232098711
--------------

: K235865644
 "В БП ищем контекст {('Сдача результата работ заказчику оформляется актом приемки выполненных работ, составленным по форме N КС-2')}"
 "Нажать {('Enter')}"
 // - открываем первый документ списка - он д.б. флешом
 "Установить фокус во флеш"
 "Проверить что номер кадра флеша равен {(2)}"
;

K235865644

-- это - ТЕСТЫ, а не просто "кейсы". Они - КОМПИЛИРУЮТСЯ и ВЫПОЛНЯЮТСЯ. FORTH-машиной.


Простите уж мне моё занудство. Я писал и на FORTH и на AutoLISP.

Идея AutoLISP меня кстати давным давно - ОЧЕНЬ вдохновила. Что можно не только было рисовать чертежи мышью, но и "программировать" их.

Но FORTH - по-любому - круче. Для "синтаксического сахара".

И в конечном итоге для снижения порога вхождения.

Попробуйте подумать в эту сторону. Может быть вам понравится.

4 комментария:

  1. Common Lisp в тысячу раз мощнее и практичнее AutoLISP

    ОтветитьУдалить
    Ответы
    1. Меня вот всё время интересует МОТИВАЦИЯ людей, которые пишут (в ответ на чужие сообщения) про то, что "язык XXX мощнее YYY". И начинают пропагандировать Haskell, CommonLISP, Python, etc. Вы чего ждёте :-) Просто так сообщить? Или чтобы другие взялись "завтра же программировать" на языке XXX? Просто так если - СПАСИБО :-) Но "завтра же" - никто не обещает :-)

      Удалить
    2. А какая мотивация у людей, которые узнали что-то, но не собираются изучать вопрос ? Остаться безграмотными ?
      CLOS далеко не самое большое отличие от AutoLisp, вспомним, что в стандарте Common Lisp есть всё, что надо для языка общего назначения: структуры, хэш-таблицы, массивы, символы UNICODE, макросы, переопределяемый Reader и т.д., а в AutoLisp насколько я помню, были только списки и куцая библиотека. Не удивительно, что народ судил Лисп по нему отрицательно. Типичный стиль программирования на AutoLisp - стиль Лиспа 20 летней давности - глобальные переменные где попало (SEQT MyVar (LIST 2 3 4)), это все равно что древний Фортран рядом с современным диалектом или в сравнении с каким-нибудь Ruby.
      Лисп стоит чтобы его просто изучить для души, никто не заставляет на нём программировать. То же можно сказать насчет Пролога, Форта, Хаскел, Ocaml, Erlang - это основные парадигмы современного программирования.

      Удалить