deep-econom (deep_econom) wrote,
deep-econom
deep_econom

Category:

О форте

Тезис: Форт — минималистичный расширяемый язык и среда для метапрограммирования
http://www.compiler.su/pochemu-obrechyon-yazyk-fort.php#81

И форт, и лисп кажутся как не естественные легко читаемые языки программирования (по аналогии с естественными человеческими языками, в которых есть падежи, склонения, спряжения, роды — то есть, изменяемые словоформы, морфемы; и эта изменяемость облегчает понимание), а искусственные машиночитаемые. Приходится поначалу делать некоторое мозговое усилие ("компилировать в голове"(с)), чтобы переводить из S-выражений на Лиспе в префиксной нотации, или из Forth-выражений в постфиксной в нормальный язык формул и выражений. Потом "ты привыкаешь, Нео. Я не вижу код, я вижу Матрицу" (c) Сайфер.

В чём смысл, казалось бы? Don Hopkins про это пишет так: язык как "black box" vs. язык как "glass box", в котором можно что угодно подкрутить и подстроить для себя, но придётся попрограммировать.

В том числе, и программировать программирование — в виде макросов, функций времени компиляции, fexprs, CREATE DOES "слов, пишушие слова" и т.п.

В итоге: есть базовый язык L0 (Лисп или Форт), на котором есть L-выражения (S-выражения или Форт-выражения). Далее пишется компилятор своего языка L1: транспилятор, транслятор из L1 в L0.

Тут важно такое понятие как 'composability'. Например, слова собираются в морфемы, лексемы, семемы (смысловые) и составляют предложения. И одно и то же предложение мы можем описать несколькими языками, несколькими декомпозициями:

LЯ := "Мама мыла раму." => существительное с id=Мама,(кто? падёж именительный) глагол слово func=мыла существительное с id=рама (кого?что? падёж винительный).

Или Subject-Verb-Object. Или какой-то другой объект, класс и метод. Или какой-то другой метакласс (времени компиляции), его объект и метод метакласса (или мультиметод). Или .... (10 категорий Аристотеля из его "Метафизики", например).

В общем, понятно, что таких декомпозиций, метамоделей может быть дофига и больше. Нужны полезные, годные, качественные.

Дональд Эрвин Кнут изобрёл подход Literate Programming, "грамотное" (vs. illiterate) программирование. Про то, что программы пишутся для людей: как книжка, исполняемое эссе (active essays), а код пишется как наброски (эссе, этюды, пьески и т.п. "макеты и поделки") для иллюстрации места в эссе.

Валентин Фёдорович Турчин изобрёл подход "суперкомпиляция" и теорию метасистем. В книге "Феномен науки, или кибернетическая теория эволюции" пишет про то, что системы эволюционируют, развиваются в метасистемы: управляющие системы систем. и далее вводит понятие метасистемного перехода, когда bootstrap-ом система развивается в метасистему, происходит качественный скачок, сдвиг парадигм и т.п.

Ещё он изобрёл язык РЕФАЛ и "проекции Футамуры-Турчина": "суперкомпиляция интерпретатора есть компилятор" и "специализация компилятора есть интерпретатор". Про автоматизированное построение компилятора из интерпретатора (референсного, модельного отлаженного и корректного макета) методом суперкомпиляции, метавычислений (вычислений над вычислениями, предметной областью языка РЕФАЛ).

Метасистемой можно считать человеко-машинную систему из программиста и отладчика: программист вычисляет в уме проблемное место, отладчик вычисляет текущее состояние программы, две системы связаны (подобно метациклическому интерпретатору в духе книг SICP, Goedel Escher Bach и т.п.).

Есть три понятия — суперкомпиляция, специализация и прогонка. Прогонка — это выполнение программы при всех возможных исходных данных. Результат работы программы представляется таблично, входы-выходы. Наподобие Tracing JIT compiler (Tamarin в Firefox)

Суперкомпиляция — это не "частичные вычисления" и карринг из функционального программирования (эквивалентные преобразования оптимизированной программы). Это эквивалентные преобразования самой машины вычислений так, чтобы вычисления выполнялись оптимизированным способом. То есть, машина и программа другая — но результат тот же самый. Результат оптимизирован (по времени или по памяти), вычисляется быстрее потому что дерево, граф вычислений программы свёрнут (заменены переходы по графу выполнения входами-выходами, минуя промежуточные переходы).

Суперкомпиляция была реализована для РЕФАЛ в 70-х, затем ученики школы Турчина реализовали её для функциональных языков программирования, пытались применить к Java, реализовали для языка графов и потоков данных Dataflow.

В 1960-е года были похожие по сути и результатам, но отличные концептуально подходы. Это проекты META II, TREE META (и NLS:Augment Дуга Энгельбарта из 'mother of all demos', tree grammar), более современный OMETA и проект FONC/STEP.

Здесь идея в том, что пишется метаязык для описания грамматики (наподобие PEG- или BNF- грамматики). пишется для абстрактной машины, затем переводится на любую другую.

Курс по META II: http://www.bayfronttechnologies.com/mc_tutorial.html

Здесь эквивалентными преобразованиями программ пишется компилятор. Из исходного языка машины 1960-х переводится реализация под JavaScript. Но может быть любой другой язык. Получается метакомпилятор Например, lbForth из ссылки выше — реализован подобным образом. Вообще есть ряд подобных языков: META II, TREE META, OMETA (объектно-ориентированный).

Любопытны достижения проекта FONC/STEP, например "Parsers running backwards" для трансляции с любого языка на любой другой. Таким образом выясняется следующая перспектива.

Параллельно с Форт-системой и программой на языке Форт строится МЕТА-система. Это может быть отдельный язык программирования и разметки, как в WEB Дональда Кнута изначальном. Либо полноценный более расширяемый (например, WEB на Форте). Либо более абстрактный расширяемый (например, РЕФАЛ). Либо более расширяемый прикладной (например, Emacs Lisp или Forthmacs, емакс на Форте. См. примеры скриптов выше про eev, escripts, fmacs).

В Форте (как впрочем, и в Лиспе) он может строиться на себе самом, метаязык на языке. Потому что этот базовый язык L0 обладает свойствами composability, homoiconicity, а более сложный язык — не обладает.

В итоге получаем бесконечно расширяемую метасистему, строго по В. Ф. Турчину, и метасистемный переход. Сам базовый язык при этом тоже может изменяться.

Например, Лисп, какая-то Схема (Лисп) и её реализация, раскрутка из себя самой (есть текстовый редактор emact на ISO LISP, в котором базовые примитивы реализованы макросами самого Лиспа). Или какой-то другой Лисп, например Common Lisp поверх базового (например, Elisp). В случае Форта, эволюция выглядит примерно так:

Форт (память без GC) => PostScript (добавляется GC для Page Description Language, какая-то Display model, а в остальном — полноценный язык программирования).

=> Display PostScript для GUI (расширена display model).
=> NeWS implementation language (Display PostScript + GC + ООП + green threads (lwp) + события и асинхронность, исключения, FFI с Cи (pswrap) ).

=> ....

=> например, GML (3D-модели а не 2d, фактически это такой "3D-PostScript").
=> например, Фактор (или Joy, Cat, и т.п.).


Тезис в том, что такую расширяемую метасистему написать не так уж и сложно на Форте. Читай, например, записки Don Hopkins про реализацию NeWS, HyperTIES, HyperLook. Сейчас у нас уже есть TeX и LaTeX/ConTeX hi-level (и pdfTex/LuaTeX как движки). С одной стороны, и тот же lout, с другой — для Literate Programming и генерации PostScript, например.


В общем, нет ничего что препятствовало бы повторить годные, на мой взгляд, идеи, преждевременно почившей в бозе NeWS, зарезанной Sun-ом по маркетинговым соображениям на базе другой платформы: Ghostscript + GhostPDL (через FFI, dll/so) + современный Форт с FFI к Си-библиотекам dll/so для реализации DPS. Или тот же Фактор: вместо DPS/GhostPDL отдельно самостоятельно (например, посмотрите как строится "композабельный" GUI в Фактор)

Чтобы получить подобную расширяемую метасистему, написанную на себе самой, можно её расширять и далее, в сторону "САПР для всего". Реализуя STEP 10303 EXPRESS, на котором описать метамодели данных. Реализуя GML для 3D-VR 'Display PostScript'. Реализуя компиляцию в какой-то G-code из таких вот моделей — через asm.js в браузере (из Форта). Реализуя такую расширяемую Форт-МЕТАсистему на себе самой.
---
Subscribe

  • Трейдинг. Инвестирование, некоторые тезисы по Баффету.

    Конспекты собраний акционеров компании Баффета — Berkshire Hathaway с 1986 по 2015 год. Книга Университет Berkshire Hathaway: 30-летний опыт…

  • Что такое аксиоматика?

    Аксиоматика (набор аксиом). Аксиоматика = система синтаксических уравнений определяющих свойства имён, которые входят в эту систему. Пояснение.…

  • Часы = частотомер.

    Неожиданно мысль в голову пришла как назвать приборы разных конструкций, которые называют часами. Наиболее правильно называть их счетчики изменений.…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments