Pull to refresh

Comments 51

Скачал Factor — чудная Штука. Институт вспомнился, калькулятор Электроника Б3-34 — там со стеком то же. А Factor даже с GUI тулкитом. Молодцы ребята.
UFO just landed and posted this here
Язык Форт в СССР и России

P.S. Рускоязычный форум пользователей Форт языка
«Проблема» с Фoрт, отчасти, что кто то привыкнув к классическому стилю языка (Алгол oриентированному) к синтаксиса языка и к Форт восприятию уже подходят с наличием этого опыта с некоторыми проблемами перестройки программерского восприятия при исполльзовании Форт. :) (ну и пугаются некоторой «низкоуровневости» его при начальном знакомстве с ним)
Но, наличие в поисковой выдачи с Github проектов с упоминанием Forth в поисковом запросе свидетельствует о наличии интереса к Форт в разных применениях.
можно натянуто сказать, что это постфиксный аппаратно-ориентированный LISP без скобок
долгое время forth.org.ru был флагманом, forth.ru досих пор показывается, но по активности был наиболее активен форум winglion, а у Ivan Mak, пока был жив, все была идея сделать свой FORTH процессор
UFO just landed and posted this here
хороший язык, достаточно простой чтобы его интерпретатор на коленке написать за неделю в рамках любой платформы и достаточно мощный чтобы на нем решать задачи enterprise-уровня, думаю, что его можно в один ряд с автоматом Калашникова поставить по гениальность-простота

Кстати, недавно попался проект-заготовка Forth с компиляцией в LLVM. Сам давно об этом думал, да всё как-то недосуг.

Писал на нем в свое время…
Язык прикольный, но разработка на нем адски сложна.
Как минимум читабельность кода.
да вроде ничего сложного, не сложнее чем на других языках, может даже попроще из-за DSL ориентированности
Как Вам сказать… Есть у форта неприятная особенность. Язык безтиповой. Т.е. понятие типа там вообще отсутствует. Если Вы на питоне попробуете сложить число со строкой, он выругается. Если Вы это сделаете на джаваскрипте, он сообразит преобразовать число в строку и соединить полученные строки. Т.е. и питон и джаваскрипт предпримут какие-то разумные(с точки зрения их разработчиков) действия. Форт же в такой ситуации просто возьмёт со стека две ячейки, сложит их и положит результат на стек, ни в малейшей степени не заботясь о смысле того что делает. Это делает его страшно уязвимым для весьма неочевидных ошибок. Тем более что программа в результате такой ошибки скорее всего грохнется где-то очень далеко от места её возникновения. Вобщем в продакшен бы я форт не взял. Хотя язык безусловно великий. На меня пожалуй произвёл наибольшее впечатление, из всего что я знаю. Сейчас в качестве хобби-проекта пытаюсь прикрутить к форту нормальную статическую типизацию.
Круто! Я видел шейдеры на forth (https://forthsalon.appspot.com/haiku-list) но не знал, что на нём можно всякие штуки вытворять в стиле pixilang (https://www.warmplace.ru/soft/pixilang/index_ru.php)!
Да, классный проект! Тут на хабре кстати была про него статья. Сам с этим некоторое время игрался.
в этом плане ФОРТ не более «нетипизирован» чем Java, которая тоже «берет числа со стека, приводит, складывает и кладет на стек», в ФОРТ типизация просто сделана на уровне слов, если используешь UINT слова для работы с INT, здорово конечно, но тут уже ошибка программиста, а не языка, в продакшене ФОРТ вполне живуч и как и в других местах, зависит скорее не от языка, а от того криворукого кто проектировал и писал систему
Ну как бы джун, который пишет на яве вообще не знает что там есть какой-то стек. Для начала его нетленка скармливается компилятору, который проверяет соответствие типов. А со стеком работает уже проверенный байткод. На форте увы, «как слышится, так и пишется».
Насчёт живучести в продакшене, не могли бы Вы дать ссылку? Очень хотелось бы посмотреть на реальный современный проект, разрабатываемый на форте.
У меня в продакшене с фортом был единственный случай. Дело было в 96-м году. На рабочем месте РС-АТ 286 без жесткого диска. Разрабатывал я некую плату расширения для слота ISA (если кто-то ещё такое помнит :))). Рисовал от руки. Потом это переводили в пикад и отдавали на производство. За мной была схематика, софт для i8051 стоящего на этой плате и тестирование изделий. Вот тут форт и пригодился. Весь набор тестов был сделан именно на форте. Из-за его минимализма вся моя рабочая среда помещалась на одной дискете.
сейчас уже ссылки на такое сложно дать, так как лично я на ФОРТ писал в 1999-2001м, система уровня предприятия написанная на ФОРТ по учету контрактов вполне жила, функционировала в рамках интерпретатора ФОРТ на Java 1.1 и обслуживала сеть из 386х машин, если правильно помню то работала на Pentium II 200 Mhz, на ФОРТ была написана логика и формирование веб страниц, никакой компиляции и оптимизации особой не было, производительности хватало, HTTP сервер в рамках которого работало, был самописным, технологию даже тогда обозвали как Forth Server Pages
image
тестовое оборудование тоже вполне жило не требуя поддержки, работало на 486й машине под ДОС с 2 метрами памяти
image
Забавно… Спасибо. Значит Вы форт предпочли яве. Вобщем-то будь я чуть моложе, наверное бы тоже… Сейчас я просто привык к языкам со строгой статической типизацией. Они избавляют от огромной кучи ошибок. Но мне очень нравится форт. Вот и пытаюсь скрестить ежа с ужом, форт и строгую статическую типизацию. Сделав это максимально совместимым с spf-4.20. Результат конечно получится не столь свободный как настоящий форт. Увы, такие вещи имеют свою цену. За безопасность всегда платишь свободой. Но пытаюсь свести эту плату к минимуму. Как по-Вашему, этот проект был бы сейчас интересен кому-то кроме меня?
Если типы аргументов слова описывать в комментариях (круглоскобочных) и попробовать решить задачу автоматического вывода/контроля типов в теле слова, то возможно, это будет иметь некоторый смысл для выявления ошибок от невнимательности, но не более того. :)
Oбычно Форт-программист об таких проверках даже не думает т.к. обычно представляет, что и как функционирует в программном коде.

P.S. Даже применение ООП в Форт не так сильно прижилось.
lurkmore Forth

Типизированный Форт StrongForth
Да, я именно через это и пытаюсь. StrongForth разумеется смотрел. Увы он довольно сильно ограничен. С типами ещё одна фишка. Они полезны не только для обнаружения ошибок, но и для создания нормальной IDE. С IDE для форта правда есть ещё одна неприятность — бесскобочная постфиксная нотация. Тоже параллельно об этом думаю. Вобщем очень бы хотелось видеть форт в мейнстриме 21-го века. Язык действительно великий. Но для этого сам язык должен меняться. Вот как-то так…

А в чём проблема с бесскобочной постфиксной нотацией?

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

Меня интересует в чём сложность полноценной поддержки её в IDE.

ООП конечно не прижился, но таки например у ~nn (Николай Немцев), много полезных библиотек (особенно GUI-шка мне понравилась) базировались на class.f
я просто использовал ФОРТ по прямому назначению и вместо того что бы изголяться целиком на Java 1.1 (которая была хоть и шагом вперед тогда, в области многопоточности, но без современных вкусностей), сделал себе DSL на ФОРТ
статическая типизация как дополнительная фича, в любом языке всегда пригодится, тут вопрос в прозрачности и красивости реализации имхо
С красивостью у меня увы. Совершенно другая реализация словарной статьи и самого словаря. Как расширение это к сожалению не получится. Хотя и пытаюсь делать максимально совместимым.
У Форта есть назначение? Какое?
такое как в статье автором написано, создаешь на нем DSL и потом на DSL пишешь то что тебе надо
Мур создал Форт для управления телескопом. Т.ч. он спользуется не по назначению. Создавать DSL для собственных нужд, редко бывает целесообразно.
Самый простой способ введения типов это завести стек типов,
а действие процедур поставить в зависимость от содердимого этого стека
mak.chat.ru/f-pl1.rar
Ну это довольно очевидно, и наверно вообще единственное решение (ну либо хранить типы в том же стеке, как это сделано у меня). Но там ещё очень много чего. Например полиморфные слова. Самые интересные вещи там это построение самой системы типов и поддержка IDE. А вообще я там чётко разделяю инструментальную систему, которую пишу на С и в которой готов пойти на любую неэффективность, и целевую, которая строится уже целевым компилятором. Так что вырисовывается что-то по идеологии скорее более близкое к традиционным языкам высокого уровня.
По мне так, Форт остается Фортом пока остаются доступны все средства форт-системы.
При использовании стека типов, на последнем этапе можно не исполнять, а компилировать.
и смог стать полноценным языком программирования и операционной системой
операционной системой?
Как ни странно, да.
Загружается на голом железе? Да. Вводом/выводом управляет? Тоже да. Вот и получается, что с точки зрения 1970-80 годов — вполне себе ОС. Другой подобный пример — вшитый в спектрумы Бейсик.
И кстати, про аппаратные форт-машины слышали? Это те, у которых нативный набор команд — это сразу набор базовых слов форта.
И кстати, про аппаратные форт-машины слышали?

Кстати для FPGA это по-моему вообще оптимальный тип встроенного софт-процессора. Дикая плотность кода. В результате все нужные программы можно держать просто во встроенной памяти.
Форт — «вещь в себе», он и не слишком нуждается в операционной системе и даже может её заменить.
Форт прямо-таки напрашивается на то, чтобы быть реализованным в «железе»! Сделать процессор, командами которого были бы команды ядра Форта, не сложнее обычного регистрового процессора с обычными командами. Но в случае Форт-процессора сразу же имеем процессор, исполняющего программу на языке высокого уровня!
Заманчиво? Перспективно? Да. Но такой заманчивости уже полсотни лет… А сколько было у Форта шансов? Последний из них — это волна мобильных устройств, где были востребованы свойства именно Форта: компактность, «автономность» и «независимость» от ОС (и потенциальная способность заменить собою эту ОС).

Я тоже когда-то программировал на ФОРТ. А цитата взята из этой статьи "Почему обречён язык Форт".

SPARC (Sun) к примеру в своём загрузчике(то, что на них было вместо BIOS/UEFI) тащили интерпретатор FCode, который есть байткод из ФОРТ. Даже летала какое-то время байка про мега-админа, который прямо под интерфейсом загрузчика написал драйвер для какой-то железки, чтобы с неё загрузиться.

Эх, вспомнились мучительные муки выбора куда отдать аппаратный стэк в своём порте Форта на. КР580ВМ80А(i8080). Отдал на данные с мыслью, что потом сделаю второй вариант и сравню. Но не сделал, когда уже заработало.

Хочу выразить благодарность @berez за титаническую работу по вычитке статьи и документированию ошибок.

И еще хочу обратить внимание читателей на мой, в начальной версии неправильный перевод термина «threaded code» — на самом деле это переводится как «шитый код». Все необходимые исправления внесены в текст.

Думаю, все кто с Фортом работал, просто в уме перевели правильно :)

;) ну что у Форта теперь никогда не отнять, что его неофициальный маскот самый харизматичный «The mistery of Yoda’s speech uncovered is: Just an old Forth programmer Yoda was».
Так и КДПВ о том же

Что меня в какое-то время поразило в Форте — это осознание того, что ты не пишешь программу на Форте, как пишешь хоть на ассемблере каком-то, хоть на языках типа Java, по сути, расширяешь его интерпретатор, создаёшь новый язык. Емпнип, осознание этого пришло, когда решил познакомиться с Лиспом для расширения кругозора.

Ну, ты же можешь переопределять слова начальной системы причём не как декораторы, а полностью изменяя семантику.

Согласен. На пути постепенного перехода к новому языку, могут появится дополнительные возможности.
Несколько лет назад на Хабре был перевод статьи Дейкстры, опубликованной задолго до языка Forth и описывающей концепцию языка программирования, удивительно похожего на Forth. И, полагаю, это не единственный факт, опущенный автором Forth при изложении истории языка.

P.S. Не кинете ссылку на тот перевод? А то я её потерял и не смог найти хабропоиском.
Тоже не нашел перевод, но нашел саму работу (18 страниц всего)
«An attempt to unify the constituent concepts of serial program execution: Paper symposium symbolic language in data processing, rome 1962»
ir.cwi.nl/pub/9238
Sign up to leave a comment.

Articles