Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

Почему обречён язык Форт

Изучая язык Форт, поражаешься его простоте на грани примитивности и скорости, с которой растёт «мощь» программ. Его простота — в его концепциях, в его «внутренностях», в «дешевизне» средств, которыми можно решать сложнейшие задачи.
Почему обречён язык Форт


         Что отталкивает в языке? Обратная польская запись, текст без бросающихся в глаза ориентиров… Говорят, что компилятором Форт-программы является Форт-программист. Но это — дело привычки, достаточно сделать усилие над собой, «вывернуть мозги наизнанку» — и становится легче.

         Потенциально Форт — отличный кандидат для создания мультиплатформенных систем: систем операционных и систем программирования. Его ядро состоит из 200-400 слов (от 2 до 16 Кб). Написав такой маленькое ядро на ассемблере, мы получаем Форт-систему целиком плюс множество программ на Форте, которое имеем в своём распоряжении. Но имеем, к сожалению, не много…

         Форт — «вещь в себе», он и не слишком нуждается в операционной системе и даже может её заменить.

         Форт прямо-таки напрашивается на то, чтобы быть реализованным в «железе»! Сделать процессор, командами которого были бы команды ядра Форта, не сложнее обычного регистрового процессора с обычными командами. Но в случае Форт-процессора сразу же имеем процессор, исполняющего программу на языке высокого уровня!

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

         И что же? Этот шанс был так же упущен так же, как и предыдущие. Вряд ли в будущем Форт займёт более-менее значимую нишу. Ведь он так и не смог найти её за эти полсотни лет.

         Форте крайне привлекателен своим внутренним устройством — «шитым кодом». Есть несколько разновидностей этого кода, каждый имеет свои плюсы и минусы. Но в целом потенциал этой технологии таков, что просто удивительно, почему оказались востребованы виртуальные машины с их байт кодами. «Шитый код» проще, «дешевле» и эффективнее байт-кодов. К теме «шитого кода» мы ещё вернёмся.

         P.S. Относительно недавно Форт появился в новой инкарнации. Слава Пестов, наш бывший соотечественник (надеемся, что он уехал не навсегда, а лишь отъехал на безопасное расстояние), создал и развивает язык Factor. Это современная типобезопасная версия Форта. Есть у него будущее? Посмотрим, время покажет. Тем более, что у Славы ещё много времени впереди: он только в 2014 году отметил 30-летие.

Опубликовано: 2012.09.25, последняя правка: 2019.01.26    09:03

ОценитеОценки посетителей
   █████████████████████████████ 59 (67.8%)
   █████ 9 (10.3%)
   ██ 4 (4.59%)
   ████████ 15 (17.2%)

Отзывы

     2013/10/12 12:06, Noname          # 

На SP-Forth созданы программы nncron и eserv

     2013/10/14 15:45, Автор сайта          # 

Но это не отменяет того факта, что Форт не популярен. Написаны ли на нём ОС, браузеры? Из массы ПО, которым пользуюсь я, нет ничего, что было бы написано на Форте. Не очень его жалуют разработчики. Непривычная обратная польская запись, да много чего непривычно. Меня всегда удивляло — почему в учебниках по Форту пишут, что это третий по популярности язык? Такого не было ни в 70-х, ни в 80-х годах, ни тем более сейчас. Есть масса языков с привычной формой записи, никому не охота возиться с обратной польской записью: «Вам что, трудно было сделать нормальные операторы?». Форт потенциально кроссплатформен, а есть ли на нём кросплатформенный GUI типа Qt?

А вот внутреннее устройство Форта мне симпатично. Мне кажется, технологию шитого кода недооценили. Ведь она тоже потенциально кроссплатформена!

     2013/11/16 10:51, Noname          # 

Обратная польская запись — это некоторый условный "мифический тренд" приписываемый Форт языку. В последовательности использования цепочки слов нет ничего польского, как и в арабском языке при его восприятии. Третий не третий, но Форт направление довольно представительно в разных "ипостасях".
Синтаксис и семантика Форт языка позволяет задействовать в максимальной степени комбинаторную составляющую мышления разработчика при единообразной унифицированной форме построения программы c задействованием мощного механизма частичной параметризации кода (см. Баранов, Ноздрунов). Что действительно "отпугивает" от языка, то это использование стека, на механизмах которого построены многие цепочечные языки. Технология шитого кода это механизм компактного выполнения кода, а кросс платформенность имеется в Java байт коде.
Русскоязычный форум по Форт языку: http://fforum.winglion.ru, активен с 2006г. Много "копий" сломали в дискуссиях на этом форуме.
Проще, лаконичнее и достаточности ядра базиса "саморасширяющегося" языка трудно что-то придумать!
Некоторые варианты ОС на нём имеются, даже если не учитывать, что изначально язык сам был некоторой операционной средой, не привязанной к существующим ОС.
Форт никогда не будут популизировать — это многим не выгодно. Хотя в игре МineCraft в компьютере аддона RedPower форто-ориентированный язык встроили. Некоторые разработчики после длительного периода возвращаются к Форт с попыткой переосмысления давнего опыта его использования с привнесением синтаксического сахара, мало меняющего суть понимания языка.

     2013/11/16 11:29, Noname          # 

GUI Qt подсоединяется к Форт mgw.narod.ru также как и GTK и tcl/tk и другие варианты в разных Форт-системах.

     2013/11/16 13:28, Noname          # 

История появления языка Форт в СССР и России

     2013/11/16 18:41, Автор сайта          # 

Я тут вёл речь не о Форте, как таковом, а о том, что он не популярен и вряд ли станет таковым. У Форта было много шансов, но всё — мимо. Форту пошёл пятый десяток, сколько лет ему ещё надо, чтобы он вошёл в ряд общеупотребительных? Чтобы, например, фирме JetBrains захотелось сделать IDE для него?

Что действительно "отпугивает" от языка, то это использование стека

Так в том же Си стек тоже используется, но там эти механизмы спрятаны, а тут «все кишки наружу». Если напишем
a(b, c(d,e(f), g(h))
то всё прозрачно. Мы видим, что является аргументом, что функцией, что помещалось в стек перед вызовом и что будет в стеке после вызова. Если будет записано
h g d f e c b a
то тут без стакана не разберёшься, что тут функция, что аргумент; что в стеке перед вызовами и что после. Надо заглядывать в определение функций. Текст программы в Форте лаконичнее. Но краткость достигается в ущерб ясности. Да, я знаю, что в таких случаях советуют писать хорошие комментарии. На это 2 возражения:
1) хорошая программа ясна без комментариев, комментарии лишают программу краткости, т.е. того, что по идее является преимуществом Форта.
2) комментарии — вещь необязательная, они не могут быть проверены компилятором на правильность. В выражении «a(b, c(d,e(f), g(h))» скобки и запятые могут рассматриваться как замена комментариям в Форте. Но, в отличие от них, они проверяются компилятором и если что-то не так, то мы об этом знаем.

Синтаксис и семантика Форт языка позволяет задействовать в максимальной степени комбинаторную составляющую мышления разработчика

Ой, знаете — очень много таких фраз можно найти на просторах Рунета. Хотите, я Вам дам ссылку на автора, который любит употреблять такие слова и фразы: «когнитивность», «интенсификация интеллекта», «математический терроризм»? А по факту, Форт задействован минимально. Он редко нравится разработчикам.

А как технология Форт хорош и, я так считаю, недооценён нашими современниками. И мне бы хотелось из него кое-что использовать. Но, правда, в другой телесной оболочке, с другой формой записи.

     2014/01/16 15:24, Pensulo          # 

Думаю, что форто-подобным (примитивным и быстрым) ответом на вопрос обозначенный в заголовке данной статьи может послужить заголовок другой вашей же статьи:
Бесплатный софт в мышеловке.

     2014/01/16 15:48, Pensulo          # 

Возможно вы уже читали следующую статью посвящённую вариантам реализации Форт-системы с применением различных видов ШИТОГО КОДА.
А может быть вы и сам-с-усам и вам не требуются дополнительные сторонние источники информации, тогда прошу прощения за назойливость.
Иначе — эта статья может чем-нибудь да помочь вам в вашей задаче реализации собственного компилятора программ с применением принципа шитого кода.

     2014/01/23 04:03, др.Ноубади          # 

Форт очень популярен и во многих областях почти незаменим. Популярен в загрузчиках линукс (да-да, погуглите!). Незаменим в т.н. встроенных системах: не всё программирование ограничено настольно-игровыми компьютерами, стиральные машины тоже надо на чем-то программировать. И их очень много.

Ширее надо смотреть на вещи, господа "программисты у мамы". Промышленных роботов и конвейерные линии вон вообще программируют чаще всего на Tcl — и что, скажете тикль непопулярный (или, не дай бог, "эзотерический") язык?

     2014/01/23 13:30, Автор сайта          # 

Вы знаете, язык ассемблера тоже незаменим (посмотрите в Яндексе). Но это строго нишевый язык. Физическая смерть ему не грозит. Но он обречён быть непопулярным: чем дальше движется шкала времени, тем меньшая доля программ пишется на нём. Всё то же можно сказать и о Форте.

Покажите мне список вакансий вашего города, где бы требовались знания ассемблера, Форта или Tcl (для начала окинем проблему узким взглядом). И я готов взять свои слова назад, если есть хоть какой-то выбор. Можно посмотреть шире: если в ваш город привезли айфоны, то это не значит, что в нём стал популярен Objective-C.

P.S. Я программировал и на ассемблере, и на Форте, так что неплохо представляю, что это такое.

     2014/01/31 16:40, Виктор          # 

Знаете, я в середине девяностых много на ассемблере x86 под ДОС писал, а Фортом болел на всю голову. Естественно, написал свой компилятор, с плюшками типа рекурсивное копирование слова в новый словарь, запись бинарников на диск, jit с оптимизацией машинного кода и т.д. Поработал с ним с месяц. И что? В конце концов понял что ничего принципиально нового я не сделал. Всё, что он умеет у меня, уже от кого-нибудь было и до этого. Единственный полезный опыт — стал на ассемблере шитым кодом писать, благо на x86 это достаточно удобно делать. Вот так :)

     2014/02/01 14:40, Автор сайта          # 

Я тоже Фортом увлекался :) Помню, как вышла статья «Форт - язык для суперпрофессионалов» журнале «Монитор», даже нашёл эту статью. «Поигрался» с ним, но чтобы он где-то потом потребовался для работы — такого не было.

В конце концов понял что ничего принципиально нового я не сделал, всё что он умеет у меня уже от кого-нибудь было и до этого.

Знаете, может и напрасно Вы опустили крылья. Ведь Borland тоже не изобретала Паскаль, но тем не менее достигла некоторых успехов.

А вот если бы Вы придали шитому коду некое алголоподобное обличие, да сделали бы это кроссплатформенным, то это, возможно, понадобилось кому-то ещё, кроме Вас.

     2014/02/03 12:22, Pensulo          # 

Эх, напрасно Вы Borland привели в пример. Теперь он скорее памятник нежеланию двигаться в потоке мэйнстрима, посмертный увы.

     2014/02/03 16:57, Автор сайта          # 

От чего же напрасно? Были очень популярные инструменты. Сейчас иначе. Но в нашей стране таких успехов пока никто не добивался. А жаль.

     2014/03/09 09:47, Gudleifr          # 

С форума

Сколько раз программисты радостно открывали Forth... и с омерзением закрывали...

Давно назрела необходимость ответить на вопрос, почему это происходит.
Без всяких модных манифестов, соплей и слюней...
Чисто по понятиям.

1. Для чего Forth предназначен?
Изначально (автором) — для написания проблемно-ориентированных языков, на которых можно будет легко описать решение задачи (желательно, самим юзером).
Все эти обратные польские записи, стеки, словари и шитые коды — следствие простоты языка и его ориентированности не на вычисления, а на "языкотворчество".
Т.е. имеем A (язык машины), пишем на коленке за неделю F (Forth), затем на нем — P (проблемно-ориентированный язык), отдаем юзеру и тот решает на P свои задачи.
Очевидно: F должен быть максимально прост (если он сравним по сложности с P, то проще сразу P реализовать) и настолько универсален, что его можно создать для любого A. Что и имеем.
Итак — Forth предназначен для сложных задач.

2. Почему его не любят программисты?
А программисты вообще не любят сложных задач.
Они любят простые задачи, которые выглядят сложными для пользователя.
Сложные — тот же геморрой — ни самому посмотреть (взглядом не окинешь), ни другим показать (не поймут).

3. Куда нужно засунуть Forth-процессоры?
Что мы выиграем от того, что A=F? Практически ничего. Вот от A, ориентированного на конкретный P, мы выиграем много.
Часто, наоборот, подходящий F (для конкретного P) проще написать на обычном, а не на Forth-процессоре.
Почему же делают Forth-процессоры? Потому, что это легко. F прост, почему же не сделать-то?
Основная хитрость — Forth не существует в окончательной форме. Это не язык, а средство написания языков. И увековечивать его в железе — глупость.

Не верите? Посмотрите статьи Дейкстры (оказывается, идею Forth предложил он), Мура (автора Forth) и книги Броуди.

     2014/03/09 19:10, Автор сайта          # 

У меня есть ещё несколько версий, почему его не любят программисты.
1) Он — вне «магистрали», где там, сбоку. Поэтому мало книг, материалов в Инете, мало такого ПО к нему, чтобы «Оп! Заработало!».
2) Нет спроса как со стороны программистов, так и предложения со стороны работодателей. Вы часто видели вакансии, где бы требовался Форт?
3) Нет какого-то стандарта де-факто от какого-то производителя ПО или сообщества программистов. Нет такого, что если мне не понравился один компилятор, то я без проблем перенесу свои разработки на другой.
4) Что нового может предложить Форт? Его идеи остановились на тех же 70-х годах. Или новое — это хорошо забытое старое? А как вы думаете, есть ли полезные идеи в функциональном или контрактном программировании? И что в этом плане может предложить Форт? Многие хотят попробовать что-то новенькое, но Форт как-то не выглядит таким новеньким.
5) Отсутствие совместимости с чем-либо. Вы, к примеру, можете писать программу на Си и Паскале, объединяя объектные модули линковщиком. Очень многие языки имеют совместимость с Си и это повышает их привлекательностью. Форт совместим только сам с собой, а если взять разные версии Форт-систем, то есть проблемы даже в совместимости с самим собой.
6) Если Форт — это не язык, а средство описания языков, то его лучше сравнивать с YACC?

     2014/03/11 09:38, Gudleifr          # 

Как бы большинство претензий взаимоисключающие. Даже большинство бывалых фортеров то требует от FORTH каких-то невозможных для языков программирования вещей, то возмущаются, что он не похож на обычный язык программирования.
Допустим, фортер радуется, что умудрился засунуть FORTH в какую-то совершенно не предназначенную для программирования штуку, вроде микроволновки... И рядом другой фортер возмущается отсутствием стандартов... Если даже шнуры электропитания у разных "микроволновок" разные...
Или фортер-филосов начинает измышлять метаязыковые FORTH-аксиомы, а другой, тут же по соседству, требует введения в него инфиксной записи и параметров функций...
...
А устаревшие идеи? Да, как бы, конец 70-х — это смерть кибернетики вообще (японцы, правда, ещё поимитировали бурную деятельность до 92-го). С тех пор ничего и не было... Новые названия для старых идей, да попытки выбросить математику из старых методов...
...
Да, чисто технически, FORTH имеет общие места с YACC: поток лексем, средства для создания грамматических конструкций... Но сама идея обратная: не изготовление машины по готовому языку, но создание языка путем постепенного улучшения машины.

     2014/03/11 22:25, Автор сайта          # 

Да это не претензии, а пожелания. Пожелания обычных для других языков вещей. Другие языки и стандартов придерживаются, и имеют возможность из программ на одном языке вызывать модули на другом. Не требуется ничего волшебного — дайте ту возможность, которая имеется уже 40 — 50 лет в других языках. Похоже, надо писать по кругу то же, что уже написано. А вообще-то тема статьи была такая: «Форт обречён». Годы идут, а о Форте вспоминают всё реже. Чтобы переломить тенденцию, надо разобраться, почему это происходит. Не имея критического взгляда, трудно разобраться в причинах. Вы мне пишите о достоинствах, но о них и так все знают. Надо выявить недостатки — только так можно что-то поправить.

     2014/03/18 15:52, Noname          # 

Восприятие синтаксиса Форт языка для текущих массовых программистов — ниже плинтуса. Отсутствие значимого пласта ПО демонстрирующего и закрываюего какие то задачи не способствует изучению Форт. Но и это не всё, а если рассматривать "обречённость" Форта с точки зрения обречённости Лисп, Пролог языков не особо обсуждаемых массовым программистом? Почему например есть ремесленики, а есть творцы? И.т.д. и.т.п... аналогие выведите сами.

     2014/03/18 16:01, Noname          # 

Языки которые мы потеряли

     2014/07/27 07:19, Gudleifr          # 

К сожалению, общение с "современными фортерами" подтвердило первоначальный вывод. Те, кто предпочитает FORTH-метод FORTH-языку, пишут не на FORTH! А тупо воспринимать FORTH как язык, на котором можно писать, это как программировать на Брайнфаке.

Броуди:

На самом деле вам не стоит писать каких-либо серьезных задач на Форте; как язык, он просто недостаточно мощен. Вам "следует" писать на Форте свои собственные языки (лексиконы) для моделирования вашего понимания проблемы, на которых вы можете элегантно описать её решение.

Но, если задача "серьезная", то написание "собственного языка" становится слишком важным, чтобы его можно было доверить FORTH.

P.S. "возможность из программ на одном языке вызывать модули на другом" — это возможность не языка, а OC.

     2014/07/27 12:35, Автор сайта          # 

"возможность из программ на одном языке вызывать модули на другом" — это возможность не языка, а OC.

Можно написать одни модули программы на Си, а другие — на Паскале, а затем объединить в исполняемый модуль линковщиком (редактором связей). При этом из подпрограмм на одном языке можно вызывать подпрограммы на другом, передавая параметры и получая результат. Это обеспечивается линковщиком, а не ОС. Для этого нужно лишь поддерживать единые стандарты при передаче параметров, которые одинаковы и в DOS, и в Windows, и в Linux. Форт этих стандартов не придерживается.

Если Вы ведёте речь о вызове исполняемых модулей, то в Си это делается функцией spawnl, например. Вызываемому модулю можно передать параметры через аргументы командной строки. В Форте есть слово RUN (если не ошибаюсь). В той версии Форта, которой я когда-то пользовался, не было возможности чтения аргументов командной строки. С передачей параметров приходилось выкручиваться. Была мысль записывать параметры в файл, чтобы вызванная программа их могла прочитать. Но сделал по-другому: перед вызовом в зависимости от параметров устанавливал курсор экрана DOS в определённую позицию, а вызванная программа эту позицию читала и интерпретировала как значение параметра. Благо, что значения параметров варьировались не сильно.

     2014/07/27 09:16, Gudleifr          # 

Это обеспечивается линковщиком, а не ОC.

Линковщик — часть ОС. Cлинковать что-то в одной системе и запустить в другой — нельзя.

Форт этих стандартов не придерживается.

FORTH, вообще стандартов не придерживается. Поэтому любые интерфейсы с любыми линковщиками (и/или API) на нем пишутся легко. Или новый FORTH вокруг любого API (и/или линковщика) — тоже легко.

     2014/07/30 18:32, Автор сайта          # 

Линковщик — часть ОС.

Вот это новость. Не подскажите имя файла линковщика, а так же в какой папке он лежит? Как для Windows, так и для DOS. А то я зачем-то пользуюсь линковщиками из комплекта компилятора.

Установка ОС FreeBSD заключается в компиляции её исходников (личный опыт). Установка Windows (или DOS) делается по-другому, компиляции из исходников нет. Соответственно Windows не нуждается в компиляторах и линковщиках.

Cлинковать что-то в одной системе и запустить в другой — нельзя.

Вы недостаточно осведомлены. Почитайте, например, «Проектирование и конструирование компиляторов», автор — Р. Хантер. Да практически в любой книге по компиляторам пишут о генерации одним компилятором кода для разных целевых машин (процессор + ОС).

FORTH, вообще стандартов не придерживается.

Тем хуже для Форта. Почитайте: Почему никто не использует функциональные языки. Если эту статью озаглавить «почему никто не использует Форт», то она останется верна в значительной части своих аргументов. Главная причина — отсутствие совместимости. Возьмём, к примеру, язык D. Он хорош сам по себе, однако он сделан совместимым с C и C++. И это добавляет ему популярности.

     2014/07/30 16:04, Gudleifr          # 

Не подскажите имя файла линковщика, а так же в какой папке он лежит? Как для Windows, так и для DOS.

link.exe — во всех бывших у меня версиях дистрибутивах DOS он лежал там же, где и все остальные исполняемые файлы. Причем, никаких компиляторов в состав DOS отродясь не входило. Как и документации на форматы .OBJ и .EXE...

Странно было бы, если бы линковщик не был частью ОС — ведь формат исполняемых файлов — это личное дело ОС.

Другое дело, что разработчики предлагают "свои варианты", часто более удобные (причем, в DOS-времена, помню, линковщики производились и не производителями компиляторов). Несколько раз даже изобретались новые .OBJ-форматы, не поддерживаемые другими (помните геморрой с перекодировкой MS-библиотек в Borland-формат?)

Вы недостаточно осведомлены.

Ага... Пару месяцев назад был, например, приятно обрадован тем, что из библиотеки хост-машины исчезла библиотека glob. Почти час искал, чем мой Perl-скрипт провинился...
Кстати, история имела продолжение. Исправив скрипт, скопировал склад скриптов на другую машину. Пару дней назад увидел, что там не работает C-скрипт. Ок, очевидно — машина другая, перекомпилирую. Компиляция валится. Опять сижу и тупо соображаю, пока не доходит, что вместе со скриптами перетащил и cygwin1.dll...

Конечно, многие компиляторы являются кросс-... Но значит только то, что они в курсе наличия разных ОС и их форматах, а не то, что есть "единый формат".

Тем хуже для Форта.

FORTH — лишь самый простой способ воспользоваться очень хитрым способом программирования. Жаловаться на то, что в чистом виде редко встречается, это все равно, что сетовать на непопулярность Машины Тьюринга.

     2014/08/01 15:46, Автор сайта          # 

Ваши утверждения усиливает мою догадку, что Вы не понимаете, чем отличаются загрузчик и линковщик (он же компоновщик, он же редактор связей, он же линкер). Не поленитесь, посмотрите ссылки. Загрузчик запускает уже готовые файлы «*.exe». У линковщика совсем другая задача: он берёт файлы «*.obj» «*.lib» и изготавливает из них «*.exe». В программе на Си можно вызвать функцию, написанную на Паскале, сопроводив имя этой функции ключевым словом «extern». Программа на Си компилируется в «*.obj» и функция на Паскале компилируется в «*.obj». Компоновщик из полученных «*.obj» делает «*.exe» и на этом его миссия заканчивается. Запуск получившегося «*.exe» обеспечивает загрузчик. Вот он — действительно неотъемлемая часть ОС.

Джоэл Спольски в статье «Пожалуйста, сэр, могу ли я получить компоновщик?», рассуждая о C#, сожалеет, что среда .NET не имеет компоновщика. Поэтому нет возможности получить «*.exe». Но, согласно Вашей логике, компоновщик (он же линковщик, он же редактор связей) — неотъемлемая часть ОС и Джоэл Спольски не ведает, о чём пишет.

Никто не жалуется на непопулярность Форта, кроме самих фортеров. Его место (так уж получается) — такое же, как и у машины Тьюринга — в учебниках. Но не среди инструментов программиста.

     2014/08/01 12:24, Gudleifr          # 

Вы не понимаете

Я очень сильно извиняюсь, но о "загрузчиках" здесь говорили только Вы. Я везде говорил о "линковщиках" (тот же link), т.е. о связывании объектных кодов (правда, местами сбивался на динамическое связывание, чтобы ярче показать зависимость языка от ОС). Ваша ошибка, видимо, в том, что Вы пропустили тот момент, когда ОС перешли от связывания при загрузке, к хранению исполняемых (т.е. уже связанных файлов — т.е. .exe).

В программе на Си можно вызвать функцию, написанную на Паскале, сопроводив имя этой функции ключевым словом «extern».

Чтобы закрыть тему: вызов функций в C и Pascal различается кардинально — порядком параметров,и тем, кто чистит стек. Поэтому приходится использовать не только эту прагму. (Если интересно, посмотрите, как использовали pascal-вызовы при написании Windows). Более того, наиболее удачная реализация Pascal "не делала исполняемых файлов", а переводил программу в p-код виртуальной машины.

Джоэл Спольски не ведает, о чём пишет.

Вопрос терминологии. .EXE в данном случае есть — виртуальная машина, исполняющая написанный на псевдо-ассемблерном языке код. Например, в DOS, как я говорил, входил линковщик link.exe, но BASIC им не пользовался (т.к. сам был .com, позже .exe). Не надо путать интерпретаторы с компиляторами.

Его место — не среди инструментов программиста.

Глубочайшее заблуждение. Как, впрочем, и касательно Машины Тьюринга.

     2014/08/03 12:54, Автор сайта          # 

Вы пропустили тот момент

Я застал тот момент, когда компоновщики уже вовсю использовались для формирования исполняемых файлов. Как и Спольски, который пишет:

Эй, Microsoft, проснись, дай нам замечательный кусочек технологий 1950-х годов, и позволь мне сделать один EXE файл, который запускается на любом компьютере с ОС Win 98 или более поздней без всяких дополнительных требований.

Там же он пишет, что представляет из себя компоновщик:

О каком инструменте идет речь? О компоновщике (linker). Вот что он делает: собирает откомпилированную версию вашей программы с откомпилированными версиями библиотечных функций, которые ваша программа использует. Затем, он удаляет те библиотечные функции, которые ваша программа не использует. И, в конце концов, компоновщик создает один бинарный выполняемый файл, который люди могут запустить на своих компьютерах.

Речь идёт о технологии, которая так стара, как весь компьютерный мир. Лично я собирал исполняемые файлы из объектных ещё на ЕС ЭВМ в ОС MFT и MVT: одни куски были написаны на PL/1, а другие — на ассемблере. Исполняемые файлы переносились на другие машины, как под ОС MFT, так и MVT. И запускались загрузчиком под названием «master scheduler».

Кстати, Вы мне так и не ответили, где в Windows находится тот самый линковщик, о котором Вы говорите. Посмотрел DR DOS: файлы, содержащие в имени «link», есть только в папке c драйверами ЛВС.

Вопрос терминологии

Если для Вас Спольски — не авторитет в терминологии, то посмотрите Википедию, ссылки я давал.

.EXE в данном случае есть — виртуальная машина

Что?! Самая что ни на есть реальная! В файле «*.exe» — самые что ни на есть реальные коды процессора x86! Никаких p-кодов, байт-кодов, только команды процессора! Которые исполняются, а не интерпретируются. Загрузчик (но не линковщик!) лишь корректирует адреса перед запуском «*.exe».

о "загрузчиках" здесь говорили только Вы

Так Вы приписывали функции загрузчика компоновщику, потому я об этом и написал.

вызов функций в C и Pascal различается кардинально

Проблема смехотворна: в Си она решается ключевым словом «pascal». А вот с Фортом она вообще никак не лечится. О том я и веду речь. Вместо того, чтобы научить Форт стыковаться с другими языками, фортеры вместо дела предпочитают слова о незаслуженном игнорировании этой замечательной технологии.

наиболее удачная реализация Pascal "не делала исполняемых файлов", а переводил программу в p-код виртуальной машины.

Взрыв популярности Паскаля был связан с Турбо Паскалем, который таки делал «*.exe» и работал на дешёвых персоналках. До этого уделом Паскаля была академическая среда.

чистит стек

Не чистит, а увеличивает значение указателя вершины стека (регистры SP, ESP, RSP). Содержимое памяти, которое раньше адресовал указатель вершины стека, остаётся неизменным, оно не «чистится».

Его место — не среди инструментов программиста.

Глубочайшее заблуждение.

Заходу на сайт hh.ru, задаю для поиска ключевое слово «Forth», а на выходе — ноль. Ни одного работодателя этот инструмент не интересует! Надо приспосабливать Форт к существующей действительности, помня древнеримскую пословицу «Homo Sapiens non urinat in ventum», а не жаловаться на этот самый «ventum».
Homo Sapiens non urinat in ventum
Амстердам, шахматный центр Макса Эйве: «Разумный человек не мочится против ветра»

     2014/08/03 09:39, Gudleifr          # 

Ладно, раз Вы упорно делаете вид, что не понимаете, о чем идет речь, давайте по порядку:
рассмотрим этапы, на которых мы можем "объединять языки":
0. На уровне текста
1. На уровне промежуточного кода
2. На уровне объектных файлов
3. При загрузке исполняемых файлов
4. Путем динамического связывания
5. Путем межпроцессорного обмена
Вы, почему-то пытаетесь признать основным (2). И считаете, что до этого места включительно "работает язык", и только где-то выше — ОС. Но это, в конце концов, Ваши проблемы, считайте, как Вам удобнее.

Имеет ли FORTH проблемы на уровне (2)? Если учесть, что в FORTH нет объектных файлов, то, понятно, речь идет о выделении какого-то места в памяти для загрузки туда объектного файла и привязывания его. Возможно это? Почему нет? Если .obj файл имеет описанный формат и не имеет каких-то языковых особенностей (ведь Вы постулировали единый .obj на все языки), то это практически то, чем FORTH и так занимается большую часть времени. Было бы желание.

Так что, боюсь, Вам придется придумать новую причину непопулярности. Например, ту, что "Журден не знал, что говорит прозой".

     2014/08/17 23:44, Автор сайта          # 

Вы, почему-то пытаетесь признать основным (2).

Самым простым, самым очевидным, самым распространённым. Сулящим наибольшие выгоды. Это не я пытаюсь, просто Журден сталкивается с такой прозой жизни. Просто компилируйте в файлы «*.obj», а потом собирайте линковщиком. Тогда становится неважным, из языка X вызываются подпрограммы на языке Y или наоборот. Выбираем самый популярный язык (например C и C++), выбираем самый популярный компилятор (Visual C++ или GCC), и придерживаемся их формата «obj». Вот и всё. Линковщик у этих компиляторов есть. Надо лишь научить Forth изготавливать объектные файлы, чтобы подсовывать их линковщикам. Т.е. сделать то, что люди умеют с 1950-х годов.

речь идет о выделении какого-то места в памяти для загрузки туда объектного файла и привязывания его

Да не в память. На диск, в файл. Похоже, Вы так и не поняли, что такое объектный файл. Объясню вкратце. Этот файл выдаётся компилятором. Это полуфабрикат: код на языке высокого уровня преобразован в машинный код, связь с исходником уже утеряна. Но есть важнейший нюанс: в этом файле нет адресов, но есть символические ссылки. Подпрограммы вызываются по имени (по символической ссылке), а не по адресу. Если Вы в свой программе вызывали функцию sin, то в объектном файле Вы увидите «sin» ли «_sin». Линковщик же собирает из таких полуфабрикатов исполняемый файл («*.exe»), заменяя символические ссылки на относительные адреса. Вот поэтому линковщик и называется редактором связей, что он устанавливает связи (проставляет адреса) между фрагментами кода. Цель линковщика — не загрузка в память (и исполнение) кода, а создание исполняемого файла (запись на диск «*.exe»).

Рассуждая о линковщике, конечно же имею в виду статичную компиляцию, когда исходный код компилируется до выполнения программы. Есть целый класс языков, где компиляция делается во время выполнения. В языке LISP есть функция eval, которая компилирует и выполняет код «на ходу». Потом эта функция появилась в Clipper, PHP и других динамических языках. Соответственно, статичная компиляция там либо невозможна, либо в объектный файл включается код компилятора (так сделано в Clipper).

рассмотрим этапы, на которых мы можем "объединять языки".

Да, варианты есть. Читал о компиляторе, который позволяет использовать вперемешку код на Ada и C++, но это экзотика. Есть ли ней смысл? И вообще, никто не принуждает фортеров к «объединению» языков: это дело добровольное, я лишь высказал своё видение.

Вы постулировали единый .obj на все языки

Я этого не провозглашал. Нет стандатов де юре, но есть то, что считают стандартами де факто. Или Вы имеете в виду вот это:

Для этого нужно лишь поддерживать единые стандарты при передаче параметров

Стыкуя свои программы с С++, надо смотреть следующие вещи: 1) как пишутся в стек параметры (и в стек ли вообще, может, используются регистры), 2) как возвращается результат 3) как используются регистры. Это можно считать стандартами де факто.

Вам придется придумать новую причину непопулярности

Всё давно придумано Чарльзом Муром. Нам остаётся лишь рассматривать его творение. Или отвернуться и рассматривать в другом месте другое творение.

     2014/08/18 10:02, 212.129.108.146          # 

Почему я рассмотрел случай чтения объектного файла, а не записи в него? Потому, что использовать FORTH в качестве промежуточного решения бесполезно. Он предназначен для решений окончательных. Его нельзя рассматривать как язык. Это метод!
P.S. научить FORTH создавать .obj файлы совсем не трудно.

     2014/08/21 11:29, Автор сайта          # 

Мне кажется, что чем более «обычным» станет Форт, тем больше от него будет пользы — всё-таки надо учитывать инертность человеческого мышления, привычки программистов. Я как-то пользовался версией Форта, у которой был встроенный текстовый редактор с экраном 16х64 знакоместа. Потому что так было в «канонической» версии Форта. Но оказалось, что из этого можно не делать религии, фортовский текст вполне можно брать из файла, который правится сторонними редакторами. Многими непринципиальными вещами можно поступиться.

     2014/08/26 13:27, Gudleifr          # 

Вам надо все-таки немного разобраться, что есть FORTH-метод, а что есть FORTH-язык. Второе — лишь простейший вариант реализации первого. Почитайте, например, что действительно придумал Чарльз Мур... Язык-то (стековую машину с шитым кодом) он попер готовую...

     2014/08/28 15:53, Автор сайта          # 

Вам надо все-таки немного разобраться, что есть

А зачем? Достоинства — шитый код и стек — известны. Остаётся намотать их на ус. Но при пристальном рассмотрении оказывается, что они тоже не идеальны. Шитый код медленнее родного. Стек проигрывает в скорости регистрам, локальные переменные лучше (при возможности) хранить в регистрах. И в остальном — ничего выдающегося. Я бы Вам посоветовал познакомиться с новыми парадигмами программирования, новыми языками. Там фонтан идей! Расширить круг познания, увидеть новые горизонты полезно. В Форте, языке 40-летней свежести, Вы не найдёте ни контрактного программирования, ни строгой типизации, ни чистых функций, ни ленивых вычислений. Хотя бы почитайте, не обязательно программировать. Попробуйте понять сильные и слабые стороны других языков. Вот Вы можете назвать, чем хороши чистые функции?

     2014/08/29 15:49, Gudleifr          # 

Достоинства — шитый код и стек — известны.

Считать достоинствами FORTH эти штуки, по крайней мере, странно. Конечно они имеют к нему отношение, но гораздо меньшее, чем, например, к калькулятору Б3-34. Я повторю: прежде чем ругать FORTH, постарайтесь его понять.

И с чего Вы взяли, что «контрактному программированию, строгой типизации, чистым функциям, ленивым вычислениям» меньше 40 лет? Разве что в смысле, что современное понимание этих штук — достаточно убого, по сравнению с их древним изложением. Например, то же «контрактное программирование» — лишь плохо понятая «Дисциплина программирования» Дейкстры 1976-го.

     2014/09/01 15:53, Автор сайта          # 

прежде чем ругать FORTH, постарайтесь его понять.

Я его не ругал, а отмечал недостатки. Предварительно (заметьте!) отметив понравившиеся достоинства.

постарайтесь его понять

В своё время я его изучил (не утверждаю, что досконально), применил в некоторых проектах и выиграл конкурс среди Форт-программистов, который проводила компания, разработавшая один вариантов Форта. А потом положил на полку.

Коли Вы ссылаетесь на Дейкстру, то объясните, пожалуйста, почему этот очень известный учёный и программист не пользовался Фортом? Почему все известные учёные сопровождали свои теоретические изыскания и книги кодом на алголо-подобных языках (за исключением Д.Кнута, который использовал псевдо-ассемблер)?

Постарайтесь понять, что такое контрактное программирование, прежде чем говорить, что это плохо понятый Дейкстра. Про функциональное программирование Вы скажите то же самое?

     2014/09/01 16:53, Gudleifr          # 

Я его не ругал, а отмечал недостатки. Предварительно (заметьте!) отметив понравившиеся достоинства.

постарайтесь его понять
Т.к. Ваши "достоинства" и "недостатки" — суть его непонимания. Дело не в Вашем виртуозном владении "стековой арифметикой".

Коли Вы ссылаетесь на Дейкстру, то объясните, пожалуйста, почему этот очень известный учёный и программист не пользовался Фортом?

А я разве не писал, что язык FORTH-машины придуман Дейкстрой? Кстати, в это же работе (1962г.) Дейкстра и объяснил "почему он им не пользовался".

Постарайтесь понять, что такое контрактное программирование, прежде чем говорить, что это плохо понятый Дейкстра.

Там нечего понимать, это просто плохо понятый Дейкстра (1976г.).

Про функциональное программирование Вы скажите то же самое?

Нет, не скажу. Оно ещё старше...

     2014/09/02 14:41, Автор сайта          # 

Ваши "достоинства" и "недостатки" — суть его непонимания.

У Сергея Михалкова в спектакле «Пена» одна девушка говорила: «Есть женщины, которые нравятся всем. А есть такие, которые нравятся только избранным». Фортеры могут себя утешать тем, что они «избранные», «особо просветлённые», познавшие тайную суть программирования. А остальное человечество уже 40 лет демонстрирует непонимание Форта. Не понимает, но пишет операционные системы для машин от мала до велика, графические библиотеки, поисковые машины и … Всего не перечислишь. Наработали софта на триллионы долларов. Но всё это — мирская суета. Фортеров, как тибетских монахов, не должна отвлекать бренность бытия — зачем писать софт для этих недалёких людишек? Зачем отвлекаться от постижения мудрости и созерцания красоты Форта?

язык FORTH-машины придуман Дейкстрой? Кстати, в это же работе (1962г.) Дейкстра и объяснил "почему он им не пользовался".

Ссылки в студию! Очень хочется посмотреть, как Дейкстра оправдывался в 1962 году о причинах неиспользования языка, который возник в конце 1960-х — начале 1970-х. Ну и заодно ссылку на слова Ч.Мура о том, что «это не я придумал, это Дейкстра».

Давайте я Вам вкратце расскажу о «плохо понятом Дейкстре». Не только в функциональных языках, но и в гибридных типа D, Rust, Nemerle появилась такая сущность, как чистые функции. Чистые функции — это усеченный вариант обычных функций в программировании, в них запрещено воздействовать на контекст, т.е. менять внешнее состояние вычислительной машины иначе, как через возвращаемый результат. За счёт отказа от взаимодействия с контекстом чистые функции легки в отладке, хорошо распараллеливаются, их можно использовать без опаски в «ленивых» вычислениях и т.д. Этих преимуществ достаточно, чтобы выделить их в отдельную сущность. Большинство языков позволяют писать функции, которые чисты. Но недавно появившиеся языки за счёт синтаксического выделения таких функций позволяют следить за чистотой функций уже на этапе компиляции: если внутри чистой функции употребить нечистую, то компилятор выдаст ошибку. В Форте чистые функции не выделяются в отдельную сущность, Форту не нужна лёгкость отладки таких функций в виду отсутствия контекста, Форту не требуется наилегчайший способ распараллеливания вычислений.

Возьмём контрактное программирование. Контракты — это условия, которые проверяют значения параметров функций на входе и значение результата на выходе. Это дополнительная проверка, повышающая надёжность ПО. В принципе, проверки на входе и на выходе можно делать обычными «if», не изобретая для них отдельного синтаксиса. Но если для них есть свой синтаксис и в проверках задействованы только чистые функции (т.е. на меняющие состояние вычислительной машины), то проверки можно отключить, применив специальную опцию компилятора. Для того, чтобы увеличить скорость работы программы, когда есть убеждённость в корректности её работы.

Есть такие вещи в Форте? Конечно же нет. Форт хранит свою «святую простоту».

     2014/09/02 13:32, Gudleifr          # 

Фортеры могут себя утешать тем, что они «избранные», «особо просветлённые», познавшие тайную суть программирования.

Да Мур сейчас так подчас себя и ведет... Мол, у Вас — мегабайты, а у меня — кило... При равной функциональности...
Но, не суть...
Дело даже не в патологическом ухудшении качества ПО, которое на "затраченные триллионы" дает копеечный выход. И, соответственно, практически поголовном переходе программистов на быдлокодерство.
Дело в (повторяю в третий раз!) в непонимании того, что есть FORTH-метод! Это не стек, не шитый код... не отсутствие чистых функций (и чего Вы к ним привязались?). Это — ориентация на написание проблемно-ориентированного языка простейшим способом, и предоставление пользователю возможности на нем писать самому. Все! То, что Мур взял для этого [FORTH-]машину Дейкстры, только следствие простоты мат.модели последней (статью Дейкстры 1962 года можете посмотреть у меня на страничке). Вам никто не запретит вставить FORTH-машину в программу на C++ (так делают очень многие, удивляясь задним числом: "Глядите, опять FORTH-получился").
Тоже в принципе и с контрактным программированием (опять повторилась история структурного и объектного). Есть основополагающая идея. Математически выверенная и обоснованная. С оценками применимости. И её находят быдлокодеры — "Ур-я-а! Серябряная пуля! Надо только писать не в столбик, а в строчку, или вместо круглых скобок применять квадратные, или начинать имена с префикса, или вставлять предикаты/инварианты..."
Напоследок скажу совсем дикое: на очень плохом FORTH пишут все "визуальные программисты". Отдельные окошки — суть FORTH-слова. Они так же атомарны и пытаются сладить с потоком событий. И пользователь вынужден сам "программировать" и "обрабатывать ошибки". Другое дело, эти Журдены ещё не доросли до понимания концепции проблемно-ориентированного языка.

P.S. Т.к. разговор идет кругами, давайте заканчивать. Лучше пишите на эл.почту.

     2014/09/05 19:12, Автор сайта          # 

Да Мур сейчас так подчас себя и ведет

Пусть Мур напишет кросс-платформенный GUI, который проще, надёжнее, не требует «допиливания» под каждую платформу и естественно «легче» существующих. Вот тогда ему спасибо скажут, и я — тоже. Дела важнее, всё остальное — понты.

Дело в непонимании того, что есть FORTH-метод… Это — ориентация на написание проблемно-ориентированного языка

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

Зачем плодить для языков разные синтаксисы? Или банковской сфере лучше подходит инфиксная нотация, а всемирной паутине — постфиксная? А чем должна отличаться семантика «if» и «for» языка биологов и языка астрологов? Универсальные языки дают возможность пользоваться одним и тем же синтаксисом и семантикой, лишь меняя «словарный запас». Да и словарный запас стремится к компактности: делая глагол «рисовать» полиморфным, его можно применять к разным объектам. Это один из основоположников ООП Алан Кей ввел моду на это: Кнопка.Рисовать() и Окно.Рисовать() выполняют разные действия, но их объединяет одна суть: они рисуют. Алана Кея можно называть «быдлокодером» и Журденом, не доросшим до понимания проблемно-ориентированных языков. Ещё бы, он изобрёл объектно-ориентированный SmallTalk. А ещё «пилит» систему из 20 тысяч строк кода, которая должна собой заменить собою всё или почти всё.

Проблем, для которых стоит создавать специальный язык, на самом деле очень мало. Например, языки разметки и алгоритмические языки имеют разную природу. И то в html делают вставки на javascript.

разговор идет кругами, давайте заканчивать.

Да, пора. Диалога не получается.
  • Вы путали загрузчик и линковщик, но всех программистов учат этому в институте. Вы же упорно не понимали сути линковки, пока я не объяснил Вам на двух пальцах.
  • Вы утверждали, что линковщик — это часть ОС. Я просил Вас рассказать, где лежит линковщик Windows — Вы до сих пор его ищете.
  • Стек у вас «чистится», на самом деле изменяется значение указателя вершины стека. Содержимое памяти, которое раньше адресовал указатель вершины стека, остаётся неизменным, оно не «чистится».
  • .EXE для Вас — виртуальная машина. На самом деле она реальная.
  • У Вас наиболее удачная реализация Pascal "не делала исполняемых файлов", а переводила программу в p-код виртуальной машины. На самом деле — всё наоборот.
  • Контрактному программированию, по Вашему, больше 40 лет. Нет, читайте Википедию, там всё написано.
  • Я просил Вас дать ссылку на то, как Дейкстра оправдывался в 1962 году о причинах неиспользования языка, который возник в конце 1960-х — начале 1970-х. Ссылку Вы мне не дали.
Увы.

     2014/11/15 17:56, Noname          # 

Может здесь найдётся в статьях Дейкстры.

     2014/11/16 11:50, Автор сайта          # 

Вы уверены, что в статье Дейкстры 1962 года можно найти причины, почему он не использовал Форт, созданный лет на 6-10 позже? Если Вам удастся её найти, дайте ссылку и цитату, пожалуйста.

     2014/11/19 15:42, 212.129.107.207          # 

Если Вам удастся её найти

Настоящая история Форт

     2014/11/16 11:50, Автор сайта          # 

В первоисточнике An attempt to unify the constituent concepts of serial program execution Дейкстра пишет об обратной польской записи, стеке. Ну так в то время прорабатывалась теория компиляции, и многие авторы писали на эту тему. Стек и обратная польская запись активно использовались при промежуточном представлении программы при компиляции с языков высокого уровня (Дейсктра пишет об Алголе) в машинный код. И никто (в том числе и Дейкстра) не предлагал сделать эту промежуточное представление (постфиксную нотацию) языком высокого уровня. Читайте внимательно статью. Дейкстра писал компиляторы с Алгола, но не создавал языков программирования с описанной в его статье нотацией. И, конечно же, Дейкстра ничего не пишет в 1962 году о Форте и Муре.

     2014/11/20 12:39, 212.129.107.72          # 

В первоисточнике...

Зачем гадать о содержании статьи, если её можно прочитать? Глупее только искать в ней ссылку на Мура.

     2015/10/12 23:56, Данис          # 

Случайно набрел на эту страницу и столько всего вспомнилось..... Когда-то, наш преподаватель электроники — в СССР такие кружки открывались при институтах, домах молодежи и были БЕСПЛАТНЫЕ... золотые времена, ой, о чем это я? — Так вот, познакомил он нас с языком ФОРТ (где-то достал книжку на аглицком, переводили мы её всем кружком сначала, потом я попросил учительницу по английскому и вопрос был решен). Какое мы получили вдохновение, я помню азарт, или даже кураж от тех идей, которые рождались в наших горячих головах. После этого, армия, институт, практика в НИИ химии металлов прогером на Си, потом (стыдно признаться) 1с. Но что мне дал Форт — так это возможность НОРМАЛЬНО проектировать приложения и смотреть на проект под разными углами, а иногда и заставлять пользователей четко формулировать задачи (а это поверьте — адское занятие) и я очень благодарен ФОРТу за то, что при всей его простоте (кроме шитого кода :)), он дает такие возможности. Если честно, то я думал, что язык этот давно мертв, потому как ничего за последние десять лет о нем не слышал. Сейчас, зайдя на этот сайт, обрадовался как ребенок, получивший долгожданную игрушку: ФОРТ жив и его обсуждают. О нем можно сказать, что в чем-то плох, можно найти кучу положительных сторон, но друзья, честно скажу, что знания ФОРТа НИ ОДНОМУ программисту не помешают. Сейчас много всяких стандартов, систем программирования и прочего. Иногда возникает ощущение, что все делается под копирку, я имею ввиду, что выучив один язык высокого уровня, можно смело переходить к другому, потому что там — те же конструкции, различия в подключаемых библиотеках и используемых технологиях. На работе требуют больше знаний технологий и стандартов, чем умение мыслить. Да ещё часто слышу споры, какой язык круче. Мы становимся рабами стандартов (может я перегнул, не спорю) и многих из нас раздувает от гордости и знания тех рамок, которыми мы себя ограничиваем, я имею ввиду общепринятые нормы и правила прогинга. ФОРТ — это путь свободы.

     2015/10/18 15:39, Автор сайта          # 

Да, ностальгия тоже иногда посещает. Форт — достаточно занятная штуковина, сам когда-то на неё западал.

     2015/11/17 18:34, Диди          # 

В Форте можно переключаться с режима компиляции на интерпретацию и наоборот. Во время исполнения программы переключаться на интерпретацию. Человек мыслит примерно так. Во время чтения (компиляции) останавливается и начинает думать ( интерпретировать или исполнять прочитанное) и т.д. Хотелось бы примеров на Форте на эти темы ...

     2015/11/17 18:44, Автор сайта          # 

Насчёт примеров я вам не помощник: Forth давненько за пределами моих интересов.

     2015/11/25 18:47, Юрий Андреевич          # 

Главная беда не в ФОРТЕ, а в нас. Мы — русские, т.е. говорим и пишем по-русски, забыв суть и сущность русского языка. А если вспомнить хотя бы древнерусский родовой букварь, то многое стало бы на место.

Все западно-европейские языки — искуственные образования, поэтому они, не русские, легко выдумываются и плодятся, как грибы в лесу. По-русски же понимать — интерпретировать, осмысливать и действовать совершенно различные понятия. Мы прежде всего должны осмыслить понятие, понять его, и уж только потом применять, использовать, реализовывать (материализовывать), создавать то, что осмыслили («Что делать» — вечный русский вопрос), поняли — как делать, и только после этого начали делать. Потому мы долго запрягаем, да быстро ездим. В нашу молодость отводилось на изучение любого языка; АЛГОЛ, КОБОЛ (был русский и нерусский), фортран, PL, Си, ФОКС и т.д.две недели, и мы на них уже выдавали продукцию — готовые программы.

Формализовать русский язык — задача трудней не придумаешь, однако ещё тридцать лет назад я предложил УНИЮ — Универсальный Интерпретирующий язык, высоко оцененный Зубовым Владимиром Ивановичем (ныне покойном), на который в Питере вообще смотрели как в афишу коза, а в Москве и слушать не захотели. Форт предполагался как промежуточный язык между УНИЯ и железом. Но... как всегда даже обрусить Форт оказалось делом весьма сложным (я не видел ни одной русской версии). Пример, переменные форта, как их назвать? BASE, STATE и т.д. Напишем БАЗЕ по-русски, много ли смысла добавится? Нисколько! Потому что BASE означает переменную, содержащую основание системы счисления.

STATE:0 означает, что интерпретатор находится в состоянии исполнения, STATE:1 означает, что в состоянии компиляции. Слово ! явно передёрнуло знак присваивания :=, который в УНИЯ вписался бы как уже привычный метасимвол связи имени и значения, а прилагательное переменная нам бы вообще не понадобилось нигде и никогда. Напротив, слово @ — разыменовать очень хорошо использовать как значения у имени (простого, составного, прямого или косвенного).

Японца спросили, какой язык программирования вы предпочитаете, онответил: «Японский».

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

     2016/01/06 13:01, Noname          # 

Автор, почему заменил прямые ссылки в обсуждении неизвестно чем?
У меня их FireFox блокирует и не открывает!!!!

     2016/01/06 15:50, Noname          # 

А как насчёт отдельной статьи "Почему ещё жив язык Форт и его идеи"?

     2016/01/08 18:19, Автор сайта          # 

Проверил все ссылки до единой, ФФ их нормально открывает. Из слов «Форт обречён» не следует, что он уже мёртв. Да нет, жив ещё. Но когда-то, говорят, он был третьим по популярности. А сейчас? Сейчас он уже во второй полусотне языков рейтинга tiobe. Ещё лет пять назад он был в первой. Время идёт, о нём забывают. Для своего времени это была хорошая технология, но сейчас…Если преимущества Форт так колоссальны, то почему фортеры не завалят нас своим софтом?

Вы попробуйте сами написать такую статью. И посмотрите, как много читателей у неё наберётся.

     2016/01/09 18:35, Noname          # 

Интересные в своей нелогичности у Вас суждения.
Какой процент Форт программистов к общему программирующему сообществу и кода сделанного и открытого в рамках Форт? Почему лисперы не завалили нас програми или Пролог программисты?
Мысль улавливаете? Может он (Форт) и был популярен в 80-х годах где то на Западе, но мне об этом ничего не было известно т.к. родился и живу в России и познакомился с изданными Форт книжками в не самое удачное время начало 90х годов,
а сейчас кого не спросишь, то в лучшем случае спросят Фортран? :)
И если нет рядом Фортёра, то и вероятность про него узнать почти 0-вая в век всеобщего i-neta. И что может сделать Фортёр, если его применение дано ему как хобби?

То что он ещё жив — это возможно самое лучшее что может быть в реалиях современной IT индустрии и какие то компании его применяют в своих продуктах.

     2016/01/11 00:23, Автор сайта          # 

Какой процент программистов...

В чём сила, брат? Не в количестве программистов, а в мощи Форта. Не числом, а умением. Там, где лисперы и прологеры (не говоря уже о сишниках) будут годами потеть, там же фортер лёгким колебанием клавиатуры будет ваять шедевры за вечер. Форт вроде куда круче Лиспа и Пролога — или я что-то не догоняю?

Если нет рядом фортера...

Ну так сеть любого располагает рядом, найти соратников в наш век теперь легко. А хобби — это такая штука, которой занимаешься вопреки, можно сказать, здравому смыслу. От него — никакого проку: ни на хлеб ни намажешь, ни в стакан не нальёшь. Оно пожирает время — самый драгоценный ресурс, который дан человеку единожды. Вот и у меня, если Вы поняли, есть своё хобби.

Форт жив, его никто не пристрелил. Некоторые его идеи можно встретить в других языках, например в PostScript. Но если умрёт, то надо относится к этому философски. Значит, на его почве произрастут другие, более достойные. Се ля ви.

     2016/01/11 03:42, Noname          # 

Да на Форте достаточно производительно можно делать софт, но он же не работает сам по себе, а в составе ОС, и с готовыми фреймворками ему ещё необходимо посоревноваться. А это уже немного другой фактор разработки.

На Форте тоже нужно «попотеть», т.к. аспект программирования при создании разнообразного софта ещё никто не смог отменить!

С соратниками тоже не всё просто, т.к. ввиду малочисленности фортеров и их индивидуальности интересов и предпочтений (и не объединенных, например, финансово) сотрудничество тоже представляется плохо формализуемым фактором.

См. примеры на Форт форуме (в лучшем случае будут обсуждения).

     2016/10/17 18:08, Александр Николаевич          # 

Не знаю, насколько актуальны мои замечания сегодня, спустя много лет после начала ветки. Но хотелось бы добавить свои 5 копеек по теме.
Когда я параллельно с работой на ЕС ЭВМ начинал изучать Форт (в середине 80-х), то после первых 4 часов плевался, после 8-ми — "ого, тут что-то есть", после 12-ти — стал его ярым приверженцем, разработчиком ПО, а позже вошел в советскую SIG Forth (группу ACM). Напомню, что в то время только-только появилась IBM PC, мы в Питере работали на машине-стенде на основе процессора 8080, на гибких 8" дисках на 256 Кб под ОС CP/M (не всегда!), и для работы на практически "голом" железе с успехом использовался Форт. Файлов как таковых не было, текст программы записывался на диск блоками-экранами по 1024 байта. И основным назначением систем были научно-технические разработки, микропрограммирование, кросс-системы. И даже несложную экспертную систему с русскоязычным интерфейсом пользователя смогли написать на таком Форте. Причем уже тогда был разработан стандарт(!) языка — Форт-83, который в дальнейшем расширялся.
Хороший вопрос "Почему Форт остается "нишевым"? С одной стороны, как рассказали коллеги, при компиляции Линукса подгружается ряд библиотек Форта, т.е. некоторые модули ядра написаны на Форте, т.е. "пациент скорее жив, чем мертв". С другой — популярности Си, Паскаля, Java он не достиг. Тут уместно процитировать выражение, относящееся к технологии, предложенной учениками Вирта: "Juice превосходит Java-технологию во всем кроме величины затрат на рекламу" (http://www.uni-vologda.ac.ru/oberon/). Если вспомнить, что предложенный Виртом Оберон был тщательно проанализирован на предмет (частичного) заимствования разработчиками Java, то нетрудно догадаться, что часто именно финансирование предопределяет популярность некоего продукта. Примером тому может служить отечественный визуальный язык автоматического программирования Дракон, разработанный в качестве своеобразного "эсперанто" для инженеров-непрограммистов в области космической техники, созданный в рамках проекта "Буран" (см. Википедию).
Ну и последний штрих, отмеченный выше: леность мышления, инертность ума и зачастую нежелание изучать новое. В качестве примера: спросите себя и коллег, кто при работе в word-е использует стили, хотя бы даже автоматические, не говоря о собственных? А ведь это проще, чем программирование! Посчитайте процент и думаю, не ошибусь, если окажется, что он значительно меньше 10! А если вы зададите "вопрос на засыпку" — сколько в word-е (напр. в популярной версии 2010) инструментов для работы с этими самыми стилями (панелей, диалоговых окон и т.п.) — уверен, что правильное количество (7) не назовет никто :)
Вот и ответ: если нет (финансового) двигателя плюс собственной мотивации, то продвижение под вопросом.

     2016/10/17 18:23, Александр Николаевич          # 

Кстати, вдогонку: "Разработка → Forth и шейдеры": https://habrahabr.ru/post/209730/

     2016/10/24 20:49, Автор сайта          # 

Только ли отсутствие рекламы виновато в непопулярности Форта? Тогда надо ответить на вопрос, почему PHP ли Ruby впереди Форта — так же при отсутствии рекламы?

Есть ещё один интересный вопрос: почему ИТ-гиганты игнорируют Форт? Это заговор или недальновидность? Было бы интересно услышать из недр, допустим, Гугла мнение о причинах их недоверия к Форту. Наверное, они есть?

     2016/12/18 21:40, _KROL          # 

Я тоже не считаю, что Форт полностью обречён. Однако, пытаясь реализовать ядро, я каждый раз "натыкаюсь" на странности и на нехватку современной(и понятной) литературы. Также, я думаю, что в будующем нас ждёт новая операционная система, ядро которой будет именно Форт.
Вот моя идея(новой ОС). ОС будет в 2-х вариантах: с собственным функционалом (самостоятельная, как Колибри) [низкоуровневое ядро+ядро Форт], или с использованием функционала другой ОС (Win/Linux/...) [промеж. слова+ядро Форт]. Но это касается только лишь основных слов (т.е. слов ядра Форта). Всё остальное — кроссистемное+кроссплатформенное!

Простите, я может не совсем ясно выразился, но надейсь, что если не я её сделаю, то кто нибудь ещё... Форт жив!:)

     2017/01/04 11:23, Автор сайта          # 

Прежде чем писать на нём ОС, погоняйте тесты на производительность. У Форта с этим не всё хорошо. И пожелаю Вам успехов!

     2017/01/30 23:42, Noname          # 

Один из старых замеров производительности:
SPF4 http://wayback.archive.org/web/20070111200500/http://www.forth.org.ru/~af/shootout.htm
А здесь тест и результаты разных Форт систем: http://www.mpeforth.com/arena/benchmrk.fth

P.S. Java байт код же научились ускорять, а это чем-то близко Форту.

     2017/01/30 23:45, Noname          # 

Пишется вариант Форт-оси: https://sites.google.com/site/forthoperatingsystem/

     2017/01/31 01:14, Noname          # 

Свеженькое: http://hackaday.com/2017/01/27/forth-the-hackers-language/

     2017/03/03 20:47, Чесслав          # 

Основная причина непопулярности Форта — это абсолютное игнорирование психологических особенностей человека, или, другими словами, ориентация Форта на все что угодно, кроме устройства самого программиста. Тут выше прозвучало что-то насчет того, что при использовании Форта программист и является транслятором. Это недалеко от истины. Программист прежде всего должен держать в уме решаемую задачу, а не состояние транслятора. Вместе с задачей ещё надо держать в уме и состояние транслятора, а также этим транслятором ещё и управлять (а управлять там есть чем — положением параметров на стеке, состоянием компиляции-исполнения, порядком поиска в контекстных словарях и т.п.), то креативные возможности программиста в части решения собственно задачи снижаются прилично. Форт в текущем виде можно рекомендовать использовать только роботам, которые не имеют ограничений в объеме оперативной памяти.

Если подвергнуть Форт изменениям, направленным на устранение описанного основного его недостатка, при этом оставив его мета-возможости, то возможно, что Форт будет использоваться чаще и более массово. Чарльз Мур сделал попытку улучшить Форт — Color Forth, но она оказалась недостаточной для языка массового использования.

     2017/06/02 16:40, Noname          # 

На реплику выше.
Любое программирование это управление кучей абстракций и состояний. Хоть тот же ООП или что то ещё. У Форта своя система определённого уровня абстракций, которая может быть полезна или нет для конкретного программирования или круга решаемых задач.

     2017/06/07 09:59, Чесслав          # 

Еще раз — я говорил об игнорировании устройства человека. Конкретно, в данном случае, стоит лишь остановиться на организации памяти человека. Она представляет собой связанные подсистемы долговременной памяти и кратковременной памяти. Каждая подсистема имеет свои характеристики. Долговременная имеет практически неограниченный объем, кратковременная очень ограниченный объем (см. число Миллера). Зато время записи в кратковременную память очень малое, а в долговременную очень большое. Поэтому оперировать новой информацией приходится в оперативной памяти, которая имеет очень малый объем. Вот на это обстоятельство нужно обратить внимание при создании любого языка программирования, на что при создании Форта внимания не обратили.
Как следствие — засилье в Форте именно оперативного инструментального контекста, то есть использование языковых конструкций Форта, которые загружают оперативную память человека (параметры на стеке, местоположением которых надо оперировать, одинаковые имена в разных словарях — нужно держать в оперативной памяти состояние стека контекста поиска, там же держать состояние переменной исполнение-компиляции). Все это приводит к тому что собственно на саму решаемую задачу оперативной памяти остается немного, что резко замедляет процесс её решения.

     2017/06/27 19:24, VikTor          # 

В ответ ЧесславуЕще сильно зависит от того, на какой машине работаете. Например
1+  ===>   inc   (R5)
всего одна машинная команда. На 486 серии загрузка входного файла в 300 — 400 кбайт в пределах одной секунды. Все вмещается. На Форте можно все, даже то, что непозволительно по правилам программирования. Привожу небольшой фрагмент работающей программы на языке ФОРТ:
 0100h VARIABLE накопитель
dumphc( 02 03 04 05 )
dumphc( 06 07 08 09 0A )
dumphc( 0B 0C 0D 0E 0F )
dumphc( 10 11 12 13 14 )
dumphc( 15 16 17 18 19 )
dumphc( 1A 1B 1C 1D 1E )
dumphc( 1F 20 21 22 23 )
( ПОЛУЧИЛИ НАЧАЛЬНЫЕ ЭТАЛОННЫЕ ДАННЫЕ)
( 68F0 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F )
( 6900 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F )
( 6910 20 21 22 23 )

0 CONSTANT байт_для_накопителя
0 CONSTANT 0_неНачато,1_принятАдрес,2_принятыДанные
0 CONSTANT адрес_для_накопителя
0 CONSTANT данные_для_накопителя

: байт_в_накопитель ( 00 ... FF, A0... C2-адрес, 00...7F-данные)
DUP !CONSTANT байт_для_накопителя
[and] 80 ( анализ: адрес или данные )
IF ( наверное, адрес ==> 80...FF)
9Fh C3h байт_для_накопителя U<< ( сравнение в диапазоне )
IF байт_для_накопителя ( A0 ... C2 )
!CONSTANT адрес_для_накопителя
1 !CONSTANT 0_неНачато,1_принятАдрес,2_принятыДанные
ELSE ( 80...9F C3...FF )
0 !CONSTANT 0_неНачато,1_принятАдрес,2_принятыДанные
ENDIF
ELSE ( данные )
0_неНачато,1_принятАдрес,2_принятыДанные [-] 1
IF_ELSE байт_для_накопителя
адрес_для_накопителя [-] 9F ( адр в накопит 1...23 )
накопитель VARC! ( данные в накопитель )
2 !CONSTANT 0_неНачато,1_принятАдрес,2_принятыДанные
ENDIF
ENDIF ;

( В накопителе данные из входного потока На экране)
( 1F/00 1A/00 15/05 10/00 0B/00 06/00 01/00 00 00 05 00 00 00 00 )
( 20/00 1B/00 16/01 11/02 0C/03 07/04 02/05 00 00 01 02 03 04 05 )
( 21/00 1C/00 17/00 12/00 0D/00 08/00 03/04 00 00 00 00 00 00 04 )
( 22/09 1D/00 18/02 13/06 0E/07 09/08 04/09 09 00 02 06 07 08 09 )
( 23/09 1E/00 19/00 14/00 0F/00 0A/00 05/06 09 00 00 00 00 00 06 )

: на_экран_накопитель
1Fh ( начальный номер в накопителе )
5 0DO ( на экране пять строк )
DUP ( номер 1F сохранить )
Начать_формирование_строки
7 0DO ( в строке семь мест )
DUP ( копию 1F для VARC@ )
накопитель VARC@ ( взять данные из 1F )
~BYTEH ~SPACE ( в вых строку байт и пробел )
[-] 5 ( следующий адрес данных: 1F - 05 = 1A )
0LOOP ( все 7 байт в вых строку )
DROP ( убрать отработанный адрес )
Закончить_формирование_строки
24 19 I - 0202h ( 24-номер в стр, 19-номер стр, 0202h-цвет )
Строку_на_экран
1+ ( 1F==>20 20==>21 ....)
0LOOP ( все пять строк на экран )
DROP ; ( конечный номер в накопителе убрать )
Думаю, что даже комментарии дополнительные не нужны. И все на родном языке, никаких заморочек. И никаких заморочек со стеком и обратной польской системы записи. Все прозрачно. Зачем организовывать стеки, если можно обойтись массивами, переменными и константами? Скорость написания программы равна скорости написания этого текста. За сколько можно написать страницу текста? И это плохо?

О скорости работы...
7 VARIABLE test
: k_test_plius_odin
test @ 1 + test ! ;

test @ 1 + test !
На моем форте всего три машинных команды! На PDP11 — всего две машинные команды:
    mov   (r5)+,r0
inc (r0)
7 5 +
Группа 5 + на моем форте всего две машинных команды.

Сегмент программ — 64к. Сегмент имен статей, таблиц HELPов — 64к. Сегмент входных данных для обработки — 64к<. Сегмент выходных данных — 64к. И мало памяти?

Начал заниматься ФОРТом примерно с 1995 года. Для создания стендового оборудования по ремонту плат станков. Работаю на ФОРТе до сих пор, и буду на нем работать. Начал недавно писать статью, в чем же недостатки ФОРТа. И как их обойти... Затем забросил... Прошлый век. Нет смысла.

На днях прочитал притчу:

Будда с учениками сидел у реки и ждал лодочника. Появился Йог,который перешел несколько раз по воде, и с пафосом обратился к Будде с вопросом:
— Ну, а ты, Просветленый, так можешь?
На что Будда спросил:
— Сколько времени ты затратил на то, чтобы достигнуть этого?
— Почти всю жизнь я затратил на то, чтобы научиться, провел много времени в суровых аскезах.
Пришел лодочник и Будда спросил его:
— Сколько стоит переправа?
— Три гроша, — ответил лодочник.
Будда, повернувшись к Йогу, сказал:
— Слышал? Вот столько стоит вся твоя жизнь....

Вопрос: а нужно ли тратить жизнь, если есть масса популярных доступных языков? Форт идеально подходит для организации стендов и программ для ремонта оборудования. То есть инструментарий. И работая на Форте, очень желательно владеть ассемблером. Эта стезя уже ушла в прошлое.

На место DOS пришел WINDOWS. На место Форта пришла Ява. ФОРТ — это досовская программа. И именно в ДОСе Форт король.

С уважением, Виктор.

     2017/07/16 21:19, Чесслав          # 

Да нет правил программирования. Есть ограничения человека в отображении (сложности) окружающего мира, в различных его предметных областях, которые и должны учитываться при построении "правильных" языков программирования.

Отдельно о том, что касается написания программ на языке, близком к естественному. Это плохо. Естественный язык развивался для целей коммуникации между людьми, а не для программирования машин. Математики, например, разработали свой язык (языки) для различных разделов математики. Естественный язык им практически стал не нужен, более того, он в большинстве случаев им только мешает. Для программирования, которое практически является разделом все той же математики, возникшем позже других разделов, нужен свой специализированный язык (языки).

Форт хорош, прежде всего, как средство для разработки специализированных языков для программирования в определенных предметных областях.

     2017/07/29 20:10, VikTor          # 

Благодарю, Чесслав, за последнее Ваше мнение. Особенно за последнюю фразу. Ценю в квадрате. Великолепнейшая!!! Но, по-моему, Вы противоречите сами себе.

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

Вся программа ЯВА также написана человеческим языком, только по-английски. И развивается всем миром весьма успешно. Особенно благодарю Вас за сообщение о цветном форте. О этом и не слышал. Внимательно изучил.

Но все — таки форум о том, обречен ли Forth на смерть, или нет. Об этом и вся полемика.

Так что дальнейшее — это только мое мнение, и оно может не совпадать с всеобщим, что, думаю, является нормальным.

Forth был написан в 60 — 70 годах прошлого века на PDP-11 (Электроника-60) в эпоху перфолент и максимум с подкачкой блоков с внешних магнитных лент, с мощнейшей системой машинных команд. И появление Форта было величайшим прорывом вперед. И это было началом отчуждения от всего мат. обеспечения компьютеров. Форт замкнулся сам на себя, то есть он с самого начала был обречен на максимум уровня микроконтроллеров по современным понятиям. Так оно и произошло. Пара этапов: NC4016 RTX2010 Дофин-1620 GA144. Так как Форт платформенно независимый, был написан FIG-Forth (и вероятно, другие) и поставлен практически на все системы. Планировалось, что это будет средством общения на всех компьютерах. И эта есть дата начала увядания Форта. Мир ознакомился с творчеством, потрепыхался, и при появлении Явы Форт был отторгнут окончательно. И остался Форт чисто академическим языком для любителей, технарей, специалистов, академиков и профессоров. Хотя лично для меня принципы форта очень хороши.

http://www.informaxinc.ru/dao_it/ — очень много о процессорах и стеках. Сам Forth как программа языка программирования чрезвычайно слабенькая. И для массового применения как языка программирования абсолютно не пригодна. Что и проявилось при поставке на любительские компьютеры типа Радио-86РК. Никаких средств отладки, нет возможности подкачки блоков. Уж встроить внутренний отладчик, как уважающие свой продукт, могли бы. Так как во всех книгах и журналах был расписан весь Форт со всеми примитивами, то есть реклама Форта была произведена мощнейшая. Разве только ленивый не взялся бы за изучение и написание Форта. Чтобы на нем можно было бы нормально работать. И писали, и пробовали что-то сделать. Но фиаско.

При изучениии материалов о цветном Форте выяснилось, что ему уже более 20 лет (https://ru.wikipedia.org/wiki/ColorForth). Где же его спрос массовым потребителем?! Если уж он так хорош. Где реклама?

На одном из сайтов прочел, что процессор GA144 был создан, как пример применения цветного форта. Наверное, это и есть реклама. Ознакомился. Выяснилось, что целиком технология 70-х годов перенесена в этот язык. Подкачка экранов, стартовые экраны, загрузка программы командным текстовым редактором — просмотрел, ужаснулся, но красиво... Весьма пригоден для фантастических фильмов о космосе. Не очень-то удивлюсь, если выяснится, что для отладки есть только распечатка стеков. Но испытывать, хотя и free, уж извольте — жаль времени.

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

Язык программирования — как любимая женщина. Либо её любишь со всеми её недостатками, либо ненавидишь всеми фибрами своей души.

Если же форсисты хотят создать приемлемый для себя Форт, а не ждать, когда он самовосстановится, то пусть объединяются в команду, ставят задачу и задают вопросы, что же они хотят от Форта, выбирают самую массовую платформу, например Windows 10, и пишут общими усилиями так, как они видят для себя весьма приемлемым и понятным для всех. Не стонать, а действовать!

С уважением, Виктор.

     2017/07/31 17:39, VikTor          # 

P.S. FORTH скорее жив, чем мертв.

http://fforum.winglion.ru/index.php — все о Форте
http://fforum.winglion.ru/viewtopic.php?f=33&t=2983 — тетрис
http://www.enet.ru/win/cherezov/sp-forth.html — Forth для windows

И нормальный текстовый редактор без всяких окон.

С уважением, Виктор.

     2017/08/12 19:41, VikTor          # 

P.P.S. Большое спасибо автору данного форума за весьма интересную тему. Откровенно говоря, я думал, что FORTH уже давным давно умер. И я, как старый динозавр, по старинке работаю на своем языке, созданному по мотивам языка FORTH. Весьма уважаемый фортерист gudleifr ( fforum.wiglion.ru — Чт дек 31,2009 18:36 ) писал:

Приходилось писать FORTH-системы, чтобы они что-то делали, а не просто, чтобы нас похвалили и ошибки поискали.

Да, так оно и было. Поработав на FORTH на процессоре 12 Мгц, вкусил все «прелести» FORTH, и также, как автор сайта, поставил это на полку.

Но я ремонтник и мнеработать надо было. Пришлось создавать свою версию с древовидным словарем, с косвенной адресацией имен статей, с помещением имен статей в отдельный сегмент, с возможностью оптимизации кода, с встроенным отладчиком. Так высвободился весь базовый сегмент для реальных программ и применения длинных имен для ясности написанного. И стало возможно нормально работать. И работаю более 20 лет без проблем.

В этом смысле уважаемый Чесслав абсолютно прав! Пример из книги по FORTH:
500 ' SALARY !
Тут даже и не могу предположить, что же сделает эта фраза. Надо шерстить весь текст, чтобы найти объявление слова SALARY. Написав
500 !CONSTANT SALARY
500 !VARIABLE SALARY
500 !VAR SALARY
все становится ясным, и легко читаемым: взять число 500, поместить его в постоянную (переменную) с именем SALARY, то есть исчезает обратная польская запись, и даже код работает быстрее. Почему так не пишут? Не понимаю. Сколько же написано Форт-систем — все ориентированны на что—то: ANS FORTH94; ANS FORTH 94 for WEB; Forth-LISP; MinForth for DOS,Windows and Linux; ForthEC — тут создаются EXE/DLL и временные .asm файлы!

Преподаётся и теперь, и выпускаются специалисты:M3P — кроссплатформенная инструментальная система со встроенным интерпретатором языка FORTH, предназначена для решения следующего ряда задач:
— отладки, тестирования, и внутрисистемного программирования встроенных систем;
— интеграции инструментальных средств в единую систему;
— связывание разнородных инструментальных средств посредством языка сценариев.

Как же на многих сайтах форсят, что «ПостСкрипт» и «PDF» написаны на FORTH. Из «Слово о Форте» Многоуважаемого Фортериста Андрея Черезова 29.07.1999:

Язык ПостСкрипт — это практически Форт, но с другим набором слов, намного более логично спроектированный....
...Похоже, разработчики PDF о Форте не слыхали... язык получился довольно сложным...

Как видно, все эти языки взаимно не совместимы, и говорить, что это все FORTH, думаю весьма не логично. СТЕКООРИЕНТИРОВАННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ, созданные по мотивам языка "FORTH", — это гораздо более логично. Применение всего этого — предложение, спрос, сбыт, работа, прибыль — происходит ли это? Понятия не имею. Нет — язык экзотика, интересный автору. И это надо, учиться тоже надо.

СТЕКООРИЕНТИРОВАННАЯ обработка применяется много где — например:
— Видеокарта Radeon R9 390X — применена стековая память High Bandwidth Memory;
— Toshiba представила 16-кристальную стековую память с использованием TSVs;
Наверняка естественно предположить, что использованы и спец. процессоры, и программное обеспечение. Какое именно — фирмы не рекламируют. При этом сильно уменьшилось энергопотребление. Так что ничего не умерло. Специалисты высшего уровня нужны и с работой по принципам FOTRH.

По неведению я наверняка Вас, фортеристы, во многих местах обидел, унизил... Вы уж простите меня. С уважением ко всем, Виктор. Успехов Вам во всем!!!

     2017/10/25 20:27, no.one          # 

Но это не отменяет того факта, что Форт не популярен. Написаны ли на нём ОС, браузеры?

Вы будете смеяться, но браузер — имеется.

http://www.forth.org.ru/news/54839bb116fdaeacaea2074e061b96f4

Азамат Смагулов в качестве дипломной работы написал HTML браузер на форте

К сожалению, www.forth.org.ru грохнулся, но может можно списаться с его автором, вот подробности:
http://web.archive.org/web/20090509162815/http://my.opera.com:80/forth/blog/fsm

Азамат в блоге (на my.opera.com, который тоже грохнулся) описывает парсер HTML на конечных автоматах, точнее — реализацию парсера. В пояснительной записке были подробности + про реализацию слайсов массивов для хранения строк. Ещё, он же про реализацию Лиспа на Форте:
https://groups.google.com/forum/#!topic/fido7.su.forth/N2hjZqfzl6s

К.Таyнсенд, Д.Фохт. Проектирование и программная реализация экспертных систем на персональных ЭВМ. Москва, "Финансы и статистика" 1990. В этой книге, кроме прочего, описаны Форт, Пролог, Лисп. После их описания идут программы интерпретации Лиспа на Форте, и Пролога на Форте.

Про ОС на Форте: нужно погуглить. Но из истории древнего мира, CHRP boot (аналог BIOS) в Sun workstation, как бы не ранний его аналог для MacOSX, и загрузчик FreeBSD были написаны на Форте. Настройки хранились в переменных NVRAM, но в остальном — начиная с BIOS и до загрузки ОС на этом вполне можно было программировать что-то полезное. Ещё на гитхабе можно погуглить про ОС на Форте. На ColorForth его автор написал свой САПР.

Ещё на форте была написана оконная система NeWS. Она была объектно-ориентированной, была расширением DisplayPostScript. Отработка событий виджетов выполнялась на сервере, события компилировались в объектно-ориентированное расширение Display PostScript (который расширение PostScript, который по сути — Форт).

     2017/10/25 20:54, no.one          # 

Не очень его жалуют разработчики. Непривычная обратная польская запись, да много чего непривычно. Меня всегда удивляло — почему в учебниках по Форту пишут, что это третий по популярности язык? Такого не было ни в 70-х, ни в 80-х годах, ни тем более сейчас. Есть масса языков с привычной формой записи, никому не охота возиться с обратной польской записью: «Вам что, трудно было сделать нормальные операторы?».

Это не проблема — можно описать свой DSL, который будет формульные выражения в привычном виде транслировать в постфиксную нотацию для форта (ну или префиксную для лиспа, так что необычный синтаксис — не проблема: язык позволяет конструировать любые свои синтаксисы из базовых выражений, которые составимы (composable macros, macros-writing macros, fexprs в Лиспе, слова в Форте). Как пример, в Factor: есть PEG-парсер, например, реализован Смоллток. Есть парсер-комбинаторы. То есть свой синтаксис прикрутить — не проблема, и далее раскрутить в полноценный язык, например тот же Cмоллток в Factor.

На Factor из-за его "функциональности", например возможности квазицитирования и готовых комбинаторов проще программировать, чем на Форте — не нужно в голове держать стек, можно работать с цитируемыми и квазицитируемыми выражениями целиком. Всё ещё нужно держать в голове нужный допустимый комбинатор, но тут можно написать DSL.

потенциально кроссплатформен... а есть ли на нём кросплатформенный GUI типа Qt?

Есть: Qt-Forth http://mgw.narod.ru/begin.htm У него же рядом пример вызова Qt из SPF-Forth или из D: http://mgw.narod.ru/doc.htm Что нетривиально, т.к. нужно понимать C++ ABI

А вот внутреннее устройство Форта мне симпатично. Мне кажется, технологию шитого кода недооценили. Ведь она тоже потенциально кроссплатформена!

Да, кстати, вот ещё реализация: ДССП, "Диалоговая система структурного программирования" Н. Брусенцова, автора троичной "Сетунь". Машина Сетунь-70, кстати, по сути — Форт-процессор. См. статью Брусенцова про эффективную трансляцию постфиксных выражений, что-то вроде минимальной каноничной формы. Про Сетунь-70 и ДССП: http://forth-j.narod.ru/dssp.htm Многие ява-процессоры, тот же picojava, на самом деле — Форт-процессоры.

     2017/10/25 21:00, no.one          # 

Форт встроен в браузер Firefox, виртуальная машина Tamarin:
http://web.archive.org/liveweb/http://markmail.org/message/47ulfs3qo54evd3u

также, ЕМНИП, в ABC-байт-код виртуальной машины Flash. Zed Shaw предложил Stackish, аналог XML и S-выражений в постфиксной нотации:
http://zedshaw.com/essays/stackish_xml_alternative.html
Реально используется в некоторых его продуктах

     2017/10/27 23:55, Автор сайта          # 

И на ассемблере пишутся браузеры. Но готов поспорить, что Вы об этом не слышали. Вот и о браузере на Форте никто не слышал. Конечно, можно взять телескоп, который называется Гугл, и поискать этот браузер в чёрной бездне. У Форта есть потомки, он передал кому-то свои гены: PostScript, Factor... Но сам жив ли он сам? Попробуйте утроиться на работу Форт-программистом.

     2017/11/10 22:28, Чесслав          # 

Про формулы. Представьте себе формулу, которая размещается на нескольких экранах дисплея. Кстати, такие формулы как раз на практике и полезны. Например, это может быть формула качества какой-нибудь системы. В этом случае форма, в которой представлена формула, имеет даже не третьестепенное значение.

Про ассемблер. Ассемблер имеет смысл встраивать в язык программирования как средство расшивки узких мест в части производительности. 80% производительности как раз обеспечат 20% объема кода, написанного на ассемблере(принцип Парето).

Ну и главное. Претензии к Форту как к языку программирования здесь неуместны, так как Форт в этом качестве давно не используется. Как правило Форт-системы используют специалисты, каждый из которых для создания и развития своего языка в своей предметной области. С освоением и изучением своей области специалист постепенно развивает и расширяет свой язык. Форт максимально приспособлен именно к такому расширению, так как в исходном наборе слов Форт-системы есть слова доступа ко всем структурам данных и свойствам процедур движка самой Форт-системы. К примеру, в рантайме можно заменить даже сам движок, а потом вернуть прежний. При длительном использовании своего языка специалисту будет трудно перейти к стандартному языку программирования. Программисту Форт не нужен, потому, что исходно это пустышка. По сути это только движок и средства доступа к нему. Нужно большое время для старта. Проще взять С++ или Java, с библиотеками "на все случаи жизни".

Про Фактор. Попытка создать ещё один "универсальный" язык программирования. Тупиковый путь, по-моему. К примеру на "Mоем Языке" создадим комбинатор map Factor'a:
: map /`3[12GI@3XI!gN] ;
Все — прошло 5 секунд. Остальное в том же ключе.

Форт по факту — это система метапрограммирования, а не язык программирования, поэтому эта тема, поднятая автором, некорректна по существу.

     2017/11/13 11:10, Автор сайта          # 

Претензии к Форту как к языку программирования здесь неуместны, так как Форт в этом качестве давно не используется... Форт по факту — это система метапрограммирования, а не язык программирования.

С Вами не согласятся вот эти многоуважаемые авторы:
  • Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализации.
  • Броуди Л. Начальный курс программирования на языке Форт.
  • Ю.А. Семенов. Программирование на языке Форт.
Они так были уверены, что Форт — это язык, что вынесли своё мнение в название книг.

Программисту Форт не нужен, потому, что исходно это пустышка.

Вот и я о том же.

Как правило Форт-системы используют специалисты, каждый из которых для создания и развития своего языка в своей предметной области.

Когда в языке появляются новые слова, то это не означает появление нового языка. Это лишь расширение старого. Новый язык появляется, когда меняется синтаксис и семантика, когда меняется взаимные связи его составных частей. В русском языке, к примеру, нет звательного падежа или двойственного числа — в отличие от древнеславянского. Подобная разница и позволяет говорить о русском и древнеславянском как о разных языках.

     2017/11/25 22:50, Чесслав          # 

Для авторов (а все они фортеры, т.е. люди, которые знают как устроены Форт-системы) программирование — это создание языка программирования для предметной области и собственно программирование на нем. Для программистов программирование — это только программирование.

Если надо создавать приложения под ОС, то нужно написать порт под ОС (ООП, подгрузка DLL, окна, PE-формат и т.д.). Если надо оптимизировать транспортные потоки в городе (графы, матрицы смежности, основные алгоритмы на графах и т.д.). Нейросети для игр, для перевода, поиск экстремумов для функций качества сложных систем (кстати, язык программирования — это тоже сложная система). Новые микро-ЭВМ, вычислительные структуры на ПЛИС, создание компиляторов, робототехника от фиксированных манипуляторов до систем с ИИ. Биосистемы, генетика, криптотехника, измерительные системы и ещё огромное количество предметных областей.

Форт-подход — это создание языка как минимальной системы связанных понятий (начиная с самых элементарных), достаточной для описания алгоритмики и решений в заданной предметной области. Устройство языка таким образом — это функция от устройства предметной области. Почему только в одной области? Потому, что реальная сложность системы понятий и для одной области может стать запредельной.

Про новый язык. Язык создан лишь тогда, когда уже не нужно вводить новых слов. Все связи в иерархии понятий уже есть. Такой момент легко отследить, когда язык делается для искусственой системы (придуманной человеком), и трудно когда область, естественная (нет полной информации).

О синтаксисе. Вопрос второстепенный. Форт позволяет реализовать любой синтаксис. Например, тот же map в разном синтаксисе (но и на уровне кода реализация разная):
: map1 -ROT OVER + SWAP DO I @ OVER EXECUTE I ! CELL +LOOP DROP ;
: map2 3 bst 1> 2> aDO I @ 3> EXECUTE I ! CELL +LOOP est ;
: map3 X! u! a! a u aDO I @ X EXECUTE I ! CELL +LOOP ;
: map4 { a u X } a u aDO I @ X EXECUTE I ! CELL +LOOP ;
: map5 /`3[12GI@3XI!gN] ;
Пример одновременного использования встроенного ассемблера в виде регулярных выражений, локально-именованых глобальных процедур, обобщенных модификаторов стека с встроенными операторами и локальными переменными и слов Форт-системы
: example
str+( 4 /[24+h:5152V352+4V524+] )
*A *B *C *D *S *T
+ - * /
A=L\S bA+bX
/[12* str+ /];
Программирование — это раздел математики, математика основана на концепции числа и только на нем. Язык общения появился задолго до концепции числа. Поэтому не надо проводить параллели между языками и языками программирования. Единственно, что можно сказать о естественном языке в части программирования, что он может и выполняет роль метаязыка. У фортеров после освоения Форта в этой роли выступает Форт, что, на мой взгляд, более однозначно и продуктивно в применении.

     2017/11/16 23:10, Автор сайта          # 

программирование — это создание языка программирования для предметной области и собственно программирование на нем...

Язык создан лишь тогда, когда уже не нужно вводить новых слов.

То, что в обычных языках программирования называют функциями и процедурами, в Форте называют словами. То есть сказанное Вами (в применении к обычным языкам программирования) можно истолковать так: Язык создан лишь тогда, когда в него не надо вводить новые процедуры и функции. Это бред! Если Вы в уже созданном языке Си описали свою собственную функцию, то Вы (с Ваших слов!) расширили язык, то есть стали создавать новый!

Может, для решения задач какой-то предметной области нужны не новые языки, а лишь библиотеки для старых языков? Например, графические библиотеки. Или библиотеки для работы с сетью, или БД. Вы уверены, что для этих целей обязательно изобретать новые языки? Может, если это действительно оправдано, то эти языки надо стандартизовать по ISO в международных комитетах?

Форт позволяет реализовать любой синтаксис.

Сколько раз слышал такое опрометчивое заявление. Тогда объясните, пожалуйста, как из Форта убрать пробелы в качестве разделителей, чтобы можно было написать примерно так:
а=2+2*2//без единого пробела в инфиксной нотации
Примеры в студию.

не надо проводить параллели между языками и языками программирования.

Нет, надо. Есть целый раздел в математике, который занимается такими параллелями. Это теория формальных языков.

     2017/11/27 13:59, no.one          # 

Несколько ссылок, материалы к тезисам следующего поста:

https://bluishcoder.co.nz//2008/05/21/extending-tamarin-tracing-with-forth.html
— про форт в браузере Firefox (Tamarin Tracing JIT).

http://tunes.org/wiki/forth_20oses.html — список ОС на Форте.

https://github.com/ingeniarius/DSSP-32 — исходники ДССП.

http://housea.ru/index.php/history/51265 — про ДССП.

http://trinary.ru/kb/d62d8074-50eb-422e-b571-fe2a9ab80584/Razvivaemyy-adaptivnyy-yazyk-dialogovoy-sistemy-programmirovaniya-DSSP — язык РАЯ для ДССП (в пику языку Ада).

http://ko.com.ua/odnoj_komandoj_i_voobshhe_bez_komand_40756 — 0isc (Risc-процессор с одной системой комманд).

http://angg.twu.net/miniforth/TECHREP.html — MiniFORTH на Lua, 50 строк (у него же eev-mode и escripts, http://angg.twu.net/eev-article.html#e-scripts — для тотальной автоматизации и скриптования чего угодно через Emacs).

http://leonardoce.interfree.it/leoforth/index.html — LeoForth под Java, и под Android.

http://www.art.net/studios/Hackers/Hopkins/Don/lang/forth.html — записки Don Hopkins, автора SimCity под NeWS про программирование на Forth, и ряд интересных других проектов : Forthmacs, Open Boot Prom, HyperTIES, HyperLook, NeWS.

http://www.art.net/studios/Hackers/Hopkins/Don/lang/NeWS.html — он же про NeWS.

https://github.com/MitchBradley/openfirmware — исходники OpenFirmware, дальнейшее развитие Open Boot PROM.

https://github.com/larsbrinkhoff/fmacs — Fmacs (по мотивам Forthmacs): клон Emacs на Форте. Используется реализация lbForth.

https://github.com/larsbrinkhoff/lbForth — реализация Forth, раскрученная как метакомпилятор (наподобие TREE META, OMETA, META II) из нескольких строк на самом себе. довольно перспективная реализация: Linux/Windows, asm.js, десяток процессоров и микроконтроллеров, встроенный ассемблер, и т.п.

PostScript, Display PostScript, Display PDF — 2D.

https://en.wikipedia.org/wiki/Generative_Modelling_Language#GML_Example — GML (3D) — язык описания 3D-моделей, для порождающего проектирования (процедурной генерации).

     2017/11/27 14:47, no.one          # 

Тезис: Форт — минималистичный расширяемый язык и среда для метапрограммирования

И форт, и лисп кажутся как не естественные легко читаемые языки программирования (по аналогии с естественными человеческими языками, в которых есть падежи, склонения, спряжения, роды — то есть, изменяемые словоформы, морфемы; и эта изменяемость облегчает понимание), а искусственные машиночитаемые. Приходится поначалу делать некоторое мозговое усилие ("компилировать в голове"(с)), чтобы переводить из 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 в браузере (из Форта). Реализуя такую расширяемую Форт-МЕТАсистему на себе самой.

     2017/11/27 15:05, no.one          # 

С Вами не согласятся вот эти многоуважаемые авторы:
— Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализации.
— Ю.А. Семенов. Программирование на языке Форт.
— Броуди Л. Начальный курс программирования на языке Форт.

Почему именно эта книжка? А, например, не Л.Броуди: "Способ мышления — ФОРТ. Язык и философия для решения задач "

Leo Brodie. Thinking FORTH. A Language and Philosophy for Solving Problems. Englewood Cliffs, N.J., Prentice-Hall, Inc., 1984. http://www.enet.ru/win/cherezov/brodie1.html


Видите, философическое? Про бытиё и онтологии в STEP EXPRESS? :-) Когда Аристотель написал книжку про физику, он ещё и написал книжку про МЕТАфизику, в которой описывал расширенный жизненный цикл, метасистему, контекст существования своей физики.

Почему-то противопоставляют Аристотеля Платону, материализм идеализму. хотя на мой взгляд, основной вопрос философии (что первично?) вообще не имеет смысла — первична не материя сама по себе, и не идея сама по себе, сферическая и в вакууме :-) — а та система, системная связь, это вот системноинженерное "система на объекте относительно интегрального качества и порождающее качество процесса" — эта вот связь между материей и сознанием, которая и делает их самореализующимися, как метациклический интерпретатор в SICP :-) (или метациклический интерпретатор PostScript-а http://www.art.net/studios/Hackers/Hopkins/Don/psiber/metacircular.html ).

http://www.art.net/studios/Hackers/Hopkins/Don/psiber/introduction.html : "Cyberspace. A consensual hallucination experienced daily by billions of legitimate operators, in every nation, by children being taught mathematical concepts ... A graphic representation of data abstracted from the banks of every computer in the human system. Unthinkable complexity. Lines of light ranged in the nonspace of the mind, clusters and constellations of data. Like city lights, receding ...."

[Gibson, Neuromancer]

Вот это киберпространство Матрицы — первично. Материальное и идейное — из него следует, метациклически вычисляется (Гёдель Эшер Бах, Эта бесконечная гирлянда).

На самом деле, Платон говорил о GML, таком 3D-PostScript, порождающем проектировании. и этой абстрактной идеи реальной вещи (то есть, "тени идей"), и её концептуальной метамодели ("идеи, бросающей тень"). Когда Аристотель попытался описать это в терминах "реальных объектов", то что не влезло в первичные 10 категорий, Аристотеля обозвали "метафизикой". Не влезли объекты, классы, интерфейсы, мультиметоды. То, что не входит в простую онтологию Фомы Аквинского, 10500 ангелов на острие булавки :-) Общие роды номинализма, всякие сложносоставные qualia. Исчисление типов высшего порядка и тайпклассы в Хаскель. Или прочие расширяемые метамодели. Расширяйте сознанье, Спинозы! :-)

     2017/11/27 15:42, no.one          # 

Автор сайта Когда в языке появляются новые слова, то это не означает появление нового языка. Это лишь расширение старого. Новый язык появляется, когда меняется синтаксис и семантика, когда меняется взаимные связи его составных частей. В русском языке, к примеру, нет звательного падежа или двойственного числа — в отличие от древнеславянского. Подобная разница и позволяет говорить о русском и древнеславянском как о разных языках.

Бессмысленные слова — не составляют языка (с) И. Ильин

Какое же «писанiе» есть вѣрное или правое?

Отвѣчаемъ: то, которое точно передаетъ не только фонему, насыщенную смысломъ, и не только морѳему, насыщенную смысломъ, но прежде всего и больше всего самую семему. И скверное, или кривое «писанiе» будетъ то, которое не соблюдаетъ ни фонему, ни морѳему, ни семему. А вотъ именно въ этомъ и повинно революцiонное кривописанiе: оно устраняетъ цѣлыя буквы, искажаетъ этимъ смыслъ и запутывает читателя; оно устраняетъ въ мѣстоименiяхъ и прилагательныхъ (множественнаго числа) различiя между мужскимъ и женскимъ родомъ и затрудняетъ этимъ вѣрное пониманiе текста; оно обезсмысливаетъ сравнительную степень у прилагательныхъ и тѣмъ вызываетъ сущiя недоумѣнiя при чтенiи и т. д., и т. д.

Статья в защиту дореволюционной орфографии:

http://nngan.livejournal.com/846846.html часть 1
http://nngan.livejournal.com/846940.html часть 2

Процирую суть статьи:

Само собой разумѣется, что и фонема и морѳема служатъ смыслу, который онѣ стараются вѣрно и точно выразить и которымъ онѣ внутренно насыщены. Безсмысленные звуки — не образуютъ языка. Безсмысленные суффиксы, падежи, спряженiя, мѣстоименiя, глаголы и предлоги, дополненiя — не слагаютъ ни рѣчи, ни литературы. Здѣсь все живетъ для смысла, т. е. ради того, чтобы вѣрно обозначить разумѣемое, точно его выразить и вѣрно понять. Человѣкъ даже стонетъ и вздыхаетъ не зря и не безсмысленно. Но если и стонъ его, и вздохъ его полны выраженiя, если они суть знаки его внутренней жизни, то тѣмъ болѣе его членораздѣльная речь, — именующая, разумѣющая, указующая, мыслящая, обобщающая, доказывающая, разсказывающая, восклицающая, чувствующая и воображающая, — полна живого смысла жизненно драгоцѣннаго и отвѣтственнаго. Весь языкъ служитъ этому смыслу, т. е. тому, что онъ хочетъ сказать и сообщить, и что мы назовемъ «семемою». Она есть самое важное въ языкѣ. Ею все опредѣляется. Возьмемъ хотя бы падежи: каждый изъ нихъ имѣетъ иной смыслъ и передаетъ о предметѣ что-то свое особое. Именительный: — предметъ берется самъ по себѣ, внѣ отношенiй къ другимъ предметамъ; родительный: — выражаетъ принадлежность одного предмета — другому; дательный: — указываетъ на приближающее дѣйствiе; въ винительномъ падежѣ ставится имя того объекта, на который направлено дѣйствiе; въ творительномъ падежѣ ставится имя орудiя; мѣстный или предложный падежъ указываетъ на обстоятельства и на направленiе дѣйствiй. И такъ, дѣло идетъ черезъ всю грамматику...

Къ фонемѣ, морѳемѣ и семемѣ присоединяется, наконецъ, запись: слова могутъ быть не только фонетически произнесены, но ещё и начертаны буквами; тогда произносящiй человѣкъ можетъ отсутствовать, а рѣчь его, если только она вѣрно записана, можетъ быть прочтена, фонетически воспроизведена и вѣрно понята цѣлымъ множествомъ людей, владѣющихъ этимъ языкомъ. Именно такъ возникаетъ вопросъ правописанiя. Какое же «писанiе» есть вѣрное или правое?

Отвѣчаемъ: то, которое точно передаетъ не только фонему, насыщенную смысломъ, и не только морѳему, насыщенную смысломъ, но прежде всего и больше всего самую семему. И скверное, или кривое «писанiе» будетъ то, которое не соблюдаетъ ни фонему, ни морѳему, ни семему. А вотъ именно въ этомъ и повинно революцiонное кривописанiе: оно устраняетъ цѣлыя буквы, искажаетъ этимъ смыслъ и запутывает читателя; оно устраняетъ въ мѣстоименiяхъ и прилагательныхъ (множественнаго числа) различiя между мужскимъ и женскимъ родомъ и затрудняетъ этимъ вѣрное пониманiе текста; оно обезсмысливаетъ сравнительную степень у прилагательныхъ и тѣмъ вызываетъ сущiя недоумѣнiя при чтенiи и т. д., и т. д.

Удостовѣримся во всемъ этомъ на живыхъ примѣрахъ.

Вообще говоря, одна единственная буква можетъ совсѣмъ измѣнить смыслъ слова.

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

Можно только гадать, не зная правил — два это отдельных языка или один, с диалектами. Русский язык изменялся неоднократно, и при каждой реформе выкидывали "лишние" буквы — а по сути, выкидывали заодно и "лишние" смыслы. К примеру, словоупотребление дореформенного правописания и "революционного кривопiсания" отличается. отличаются смыслы, семемы. Язык был построен так, чтобы облегчать понимание. чтобы писать на нём было сложно — нужно понимать суть корней, происхождение слов, знать правила и исключения.

Но чтобы читать и понимать написанное было просто. "революционное кривопiсание" этим свойством не обладаетъ! Из древнеславянского пропали ариост, плюсквамперфект, время условное, четвертое "как бы" и сила выражения языка, определённых смысловых конструкций, семем понизилась. Поэтому это похоже, действительно уже другой язык — ранее выразительная сила была больше.

     2017/11/27 16:02, no.one          # 

Автор сайта Может, для решения задач какой-то предметной области нужны не новые языки, а лишь библиотеки для старых языков? Например, графические библиотеки. Или библиотеки для работы с сетью, или БД. Вы уверены, что для этих целей обязательно изобретать новые языки? Может, если это действительно оправдано, то эти языки надо стандартизовать по ISO в международных комитетах?

Именно так оно и происходит: PostScript, Display PostScript, Display PDF. Используют одну и ту же display model — подмножество display model PostScript изначального.

ISO STEP 10303 — метастандарт состоит из нескольких под стандартов: язык EXPRESS = ER + ООП + rules, ассоциативное черчение, параметрическое моделирование; part 21 — текстовый файл обмена, универсальный, с проверкой версий; EXPRESS-M, EXPRESS-X — для конвертации; EXPRESS-G — графический; EXPRESS-XML — понятно что. Далее 2-3 стандарта про верификацию и валидацию. Далее 200+ стандартов различных Application Protocols — форматов "де юре" на ОНТОЛОГИИ STEP EXPRESS, которые фактически суть интерфейсы. Один из интерфейсов SDAI — ООСУБД ORM. Далее несколько 50..100+ форматов "де факто".

Далее методология IDEF5 и соответствующий ISO для "концептуального метамоделирования", где прописаны стандартные классификаторы и онтологии, в соответствующей предметной области —- а не ad hoc велосипед, изобретаемый по случаю.

Треугольник Фреге "знак-концепт-денотат" для метамоделирования и composability таких вот моделей, метамоделей, метаметамоделей и т.п.

     2017/11/27 21:12, no.one          # 

Чесслав Программирование — это раздел математики, математика основана на концепции числа и только на нем. Язык общения появился задолго до концепции числа. Поэтому не надо проводить параллели между языками и языками программирования. Единственно, что можно сказать о естественном языке в части программирования, что он может и выполняет роль метаязыка. У фортеров после освоения Форта в этой роли выступает Форт, что, на мой взгляд, более однозначно и продуктивно в применении.

Автор сайта Нет, надо. Есть целый раздел в математике, который занимается такими параллелями. Это теория формальных языков.

Ну так формальные языки — это не естественные.

Аналогии есть, но они не совсем уж прямые и очевидные. Потом, аналогия — это слабая гипотеза индукции. Например, есть такая работа: John C. Baez, Mike Stay. Physics, Topology, Logic and Computation: A Rosetta Stone.

Abstract

In physics, Feynman diagrams are used to reason about quantum processes. In the 1980s, it became clear that underlying these diagrams is a powerful analogy between quantum physics and topology. Namely, a linear operator behaves very much like a ‘cobordism’: a manifold representing spacetime, going between two manifolds representing space. This led to a burst of work on topological quantum field theory and ‘quantum topology’. But this was just the beginning: similar diagrams can be used to reason about logic, where they represent proofs, and computation, where they represent programs. With the rise of interest in quantum cryptography and quantum computation, it became clear that there is extensive network of analogies between physics, topology, logic and computation. In this expository paper, we make some of these analogies precise using the concept of ‘closed symmetric monoidal category’. We assume no prior knowledge of category theory, proof theory or computer science

Table 1. The Rosetta Stone (pocket version)
+-----------------+---------+-----------+------------+-------------+
! Category Theory ! Physics ! Topology ! Logic ! Computation !
+-----------------+---------+-----------+------------+-------------+
! object ! system ! manifold ! proposition! data type !
+-----------------+---------+-----------+------------+-------------+
! morphism ! process ! cobordism ! proof ! program !
+-----------------+---------+-----------+------------+-------------+
Table 4: The Rosetta Stone (larger version): то же, подробнее.

Ещё есть любопытные работы:
David E. Kephart. Topology morphisms and randomness in the space of formal languages.
John M. Lipski. Towards a topology of natural languages.

Так что, с точки зрения теории категорий и каких-то обобщённых логических пространств, многообразий, — вы оба правы:

* язык программирования, формальный описывается объектами (типами данных) и морфизмами (программами),

* язык метапрограммирования, неформальный естественный — тоже образует какие-то морфизмы в топологических пространствах, других (топосах Гротендика, например; glutoses; топосах (topoi) как пространствах с изменяемой топологией; пучках (sheaves)).

Но естественный язык более многозначен, полисемичен — и эту семему построить сложнее. Поэтому нужен какой-то язык ограничений на всё это многообразие естественных. Например, rule engine, правила грамматики, морфологии, формальной семантики естественного языка.

В случае если формальный язык прост и нагляден (Форт или Лисп) — он сам является собственным метаязыком. То есть далее можно бесконечно расширять метациклически, L_(n+1) = L_n — это всё один и тот же базовый расширяемый язык, но с разными DSL, с разными словарями/макросами/macro writing macros, reader macros в Common Lisp. Ну или в Форте через CREATE ... SCAN — тот же аналог reader macros, compiler macros, macros writing macros — реализованые как слова времени компиляции.

Язык становится своим собственным метаязыком, бесконечно расширяемым.

     2017/11/27 22:54, no.one          # 

Автор сайта То, что в обычных языках программирования называют функциями и процедурами, в Форте называют словами. То есть сказанное Вами (в применении к обычным языкам программирования) можно истолковать так: Язык создан лишь тогда, когда в него не надо вводить новые процедуры и функции. Это бред! Если Вы в уже созданном языке Си описали свою собственную функцию, то Вы (с Ваших слов!) расширили язык, то есть стали создавать новый!

Нет, не расширили. Язык остался тот же самый, концептуально. Потому что first class object исходного языка и "расширенного" тот же самый.

Может, для решения задач какой-то предметной области нужны не новые языки, а лишь библиотеки для старых языков? Например, графические библиотеки. Или библиотеки для работы с сетью, или БД. Вы уверены, что для этих целей обязательно изобретать новые языки?

Не всегда, но иногда нужно. Иногда, изобретая библиотеку, фреймфорку требуется на самом деле новый метаязык, расширенный. Например, возьмём C++ и Qt framework. Это именно программный каркас, а не просто библиотека. Потому что использутся "метакомпилятор" moc, который переводит исходники на метаязыке C++/Qt, в котором есть сигналы и слоты, сообщения и рефлексия на сигналах и слотах в "базовый" C++. Причём "базовый" С++ тоже развивается: Qt переходит на C++11, C++14, C++17. Нужно ли для этого переписывать сам базовый фреймворк, базовый язык? Зависит от гибкости базового языка.

Язык С++ — негибкий и низкоуровневый. в формулировке от Alan Perlis: "язык низкоуровневый, когда требует упоминания ненужных подробностей". Поэтому moc не может быть реализован на самом С++ — требуется отдельный препроцессор времени компиляции. В каком-нибудь уже D — на CTFE функциях (макросах времени компиляции) moc может быть реализован на себе самом. Не говоря уже о лиспах и фортах.

     2017/12/16 08:46, Noname          # 

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

     2017/12/16 17:20, Автор сайта          # 

Исторически первыми были подпрограммы в ассемблере, потом процедуры в Фортране и функции в Алголе. В Форте концепции "подпрограмма" лучше всего подходит "слово". Это не одно и тоже, но наиболее похоже. Что же касается "гораздо более мощного понятия", не буду растекаться мыслью по древу в поисках научного доказательства обратного. "Слова", в отличие от "функций", не так востребованы, для этого достаточно сравнить количество проектов на Гитхабе на Форте и на языках, в которых нет "слов". Раз избегают Форта, значит есть причины.

     2017/12/18 12:10, Noname          # 

"Избегание" Форт языка, в основном, связано с тем что он, остаётся, "пустым звуком" в череде рассуждений о одинаковости всех языков и их равномощности при решении разных задач без практической попытки его использования, не в упрёк рассуждающего шаблонами непопулярности для уникальных языков.

P.S. Например есть такой радиолюбительский проект практического содержания: "Лазерная установка для засветки фоторезиста от AlphaCrow" (http://radiokot.ru/forum/viewtopic.php?f=8&t=119089), где в части для ПК используется Форт язык, а в части для STM32 Cи. Абсурд, с вашей точки зрения?

     2017/12/18 16:11, NoName          # 

Беглый поиск проектов по слову Forth на Github: https://github.com/search?utf8=%E2%9C%93&q=forth&type=
Есть и другие площадки (sourceforge ...) и частные Интернет-ресурсы, показывающие наличие интереса к данному языковому направлению.

     2017/12/19 13:20, Автор сайта          # 

Интересны не абсолютные цифры интереса к Форту, а относительные. Проценты лучше описывают картину. Посмотрите: 15 самых популярных языков программирования по версии GitHub, https://habrahabr.ru/post/310262/
А Вы сами-то работаете Форт-программистом, Вам компания платит за разработанное Вами ПО на Форте? Или Вы руководите такой компанией?

     2017/12/19 18:09, NoName          # 

Вопросом на вопрос? Хорошо. Скажите, сколько из этих пятнадцати популярных языков взаимоперекрывают решемые ими задачи и цели их и кем, при этом, поставленные при выводе их на рынок?

     2017/12/22 10:20, Автор сайта          # 

Многие перекрывают друг друга. Ну перекрывают взаимно друг друга C++ и Go, но что это меняет для Форта? А вопросы, в т.ч. встречные, закономерны. Просто интересен портрет человека, самоотверженно защищающего Форт. Насколько он успешен в программировании, какие успешные проекты на Форте у него за плечами, какие перспективы для себя он видит в использовании Форта? Может, такие люди заведут на Хабре раздел для Форта. А пока что с Фортом Вы сами знаете как.

     2017/12/24 18:42, Noname          # 

Для Форта это мало что меняет. Он находит своих сторонников на протяжении более 40 лет вопреки всем "новым" и "прогрессивным" технологиям, преподносимыми нам разными корпоративными интересами. Успешность определяется каждым субъектом чисто в индивидуальной системе ценностей и вряд ли имеет смысл в таком публичном обсуждении.

     2017/12/24 21:45, Автор сайта          # 

Прогрессивные технологии рождаются и вне корпораций, примерами тут могут быть PHP и Python. За этими языками не было крупных бюджетов. Ещё можно вспомнить недавно рождённый в Петербурге неподалёку от острова Котлин язык Kotlin, который теперь взяла на вооружение в качестве корпоративного стандарта Google. А Форт... Он застыл, как пирамида Хеопса.

     2018/01/12 09:49, chunk          # 

Аналогичная дискуссия у "старперов": http://www.eevblog.com/forum/vintage-computing/real-'oldies'-might-remember-'forth'-!!/

The demise of forth is greatly exaggerated — Кончина Форта сильно преувеличена

     2018/01/14 16:41, Автор сайта          # 

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

     2018/01/14 21:42, chunk          # 

По поводу "дела давно минувших дней" — Вы погорячились. А "ностальгируют" — кто на что, а Вы, видимо, — на кончину Forth'a...

     2018/01/14 22:16, Автор сайта          # 

Погорячился?! Да Вы почитайте, что они там пишут. Один пишет, что программировал на ассемблере восьмиразрядного микропроцессора 6502, который разработан 1975 (!) году. В 1975 году, Карл! Другой пишет:

В середине восьмидесятых я разработал и продал компилятор Forth cross для использования с процессорами Z80. Он мог интерпретировать и компилировать код как для хост-системы, так и для целевой системы, то есть такие слова, как ARRAY, могли иметь другое поведение в системе хоста и целевой системе (добавьте информацию в таблицу символов в хост-системе, резервное пространство на целевой системе). Весёлые деньки.

Восьмидесятые годы — это разве не «дела давно минувших дней»?

А "ностальгируют" — кто на что, а Вы, видимо, — на кончину Forth'a

У каждого свой предмет ностальгии. Поверьте, это были достойные (для своего времени!) предметы.

     2018/01/14 22:51, chunk          # 

Вы однозначно определили свою точку зрения — "Почему обречён язык Форт".
Я с Вами спорить не собираюсь. https://www.ferra.ru/ru/techlife/review/philae-computer/

     2018/01/14 23:53, NoName          # 

Согласен с предыдущим мнением, что даже спора как такового нет. Некоторая история Форт ориентированного железа:
Каршенбойм Иосиф "Стековые микропроцессоры, или новое — это хорошо забытое новое"
http://www.kit-e.ru/articles/cpu/2003_09_98.php Часть1
http://www.kit-e.ru/articles/elcomp/2004_1_102.php Часть2
http://www.kit-e.ru/articles/elcomp/2004_2_130.php Часть3

     2018/01/15 00:14, Noname          # 

На этом западном форуме больше информации к размышлению: http://forum.6502.org/viewforum.php?f=9

     2018/01/15 04:11, NoName          # 

Сейчас прощё встретить использвание спроектированных ядер Форт-CPU в проектах на FPGA. Один из примеров — проект GameDuino: http://excamera.com/sphinx/gameduino/
ядро процессора J1

     2018/01/15 04:44, NoName          # 

Forth в качестве Биоса в компьютере OLPC: http://wiki.laptop.org/go/Forth
на базисе проекта OpenBios: https://www.coreboot.org/OpenBIOS
ПЛК контроллеры с Форт на борту: http://www.es.ua/ru/kataloh/prohramne-zabezpechennia-dlia-kontroleriv-es-forthlogic/forthlogic
Здесь логи IRC-Forth англоязычного канала: http://forthworks.com/forth/irc-logs/

P.S. Рано похоронили Форт, мы ещё не знаем всей его истории, особенно, в настоящем времени. А то что его почти нет в учебных программах, то это отдельный вопрос для рассмотрения. Промышленность про него ни сном ни духом не ведает.

     2018/01/15 06:04, NoName          # 

В рамках использования блокчейна для "стимулирования" активности обмена программным Форт-кодом было предложено такое решение:
https://github.com/mak4444/LTCFileShopPlugin (Плагины к https://electrum-ltc.org/ Этот плагины предназначены для удобной купли/продажи дешевых файлов). И продемонстрирована его работоспособность на примере каталога магазина. В частности, в каталоге есть проект авторской сборки кода из проекта OpenBios (OpenFirmware) в рамках российской Форт-системы SPF4. Проверил работоспособность этого проекта на нетбуке (получил терминал системы).

P.S. Предыстория появления этого решения описана здесь http://www.balancer.ru/g/p5509089

     2018/01/15 10:23, Автор сайта          # 

Рано похоронили Форт

Ещё не похоронили. Ещё есть люди, которым нравится рассматривать его в мавзолее.

Промышленность про него ни сном ни духом не ведает.

Я Вас умоляю! Не держите эту промышленность за дураков. Вполне образованные люди. Некоторые из них с Фортом вполне знакомы.

Вы однозначно определили свою точку зрения — "Почему обречён язык Форт".

Вы дали ссылку на статью, где говорится о важности надежности программного обеспечения. Так вот сейчас один из путей совершенствования языков программирования — это повышение их надёжности. К примеру, в языке Rust прорабатывается концепция владения объектами. Компилятор Rust не позволит, чтобы одним объектом одновременно владели несколько процессов. Ещё есть языки, в которых нет неинициализированных переменных — это гарантируется компилятором. В функциональном программировании можно увидеть целый букет идей по повышению надёжности программ.

А что Форт? Он развивается? У него появился контроль доступа за границы массива? Он запрещает неинициализированные переменные? Он делает обязательным контроль результатов ненадёжных функций типа fopen? Нет, нет и ещё раз нет. Кто ж его будет развивать? Он же памятник!

     2018/01/15 11:29, NoName          # 

Не льстите себе своей эрудированностью. Любые песочные замки смывает дождём или они рассыпаются под действием ветра. Вы правда думаете что люди использующие Форт направление ограничены в своих умениях?

     2018/01/15 14:37, chunk          # 

У него появился контроль доступа за границы массива? Он запрещает неинициализированные переменные? Он делает обязательным контроль результатов ненадёжных функций типа fopen? Нет, нет и ещё раз нет.

Не аргументы.

     2018/01/16 13:30, Автор сайта          # 

Не льстите себе своей эрудированностью.

Если б была попытка поразить своей эрудированностью, то Вы бы тут видели росыпь наукообразных изречений вроде «экзистенциальная квантификация», «стохастический резонанс». Но Вы здесь видите написанное так, чтоб быть поближе к народу. «Того, кто вышел из народа, в народ обратно не загнать». А я не выходил.

Вы правда думаете что люди использующие Форт направление ограничены в своих умениях?

Людям, которые не сделали мне ничего плохого, я всегда желаю хорошего. Вот и фортерам желаю, чтобы они были успешны. Но… Не вижу успешных фортеров! Ну хоть кто-нибудь написал бы о себе, любимом и успешном! Не о Пете, не о Васе и не о Джоне, а о себе. Что он не просто где-то работает и хорошо зарабатывает, но и работа связана с любимым Фортом! Хочу, чтобы меня ткнули: вот смотри, видишь кучу вакансий по Форту, видишь, какая у фортеров зарплата?

Не аргументы

Вы даёте ссылку на то, что запущенными десятилетиями назад космическими аппаратами управляют программы на Форте (наверно, Вы увидели в этом аргумент в пользу Форта?). Но там ещё пишут про надёжность. А Форт в плане надёжности написанных на нём программ остался на отметке «1971 год». А вот новые языки программирования заставляют программистов писать более надёжный код. Я не знаю, что тогда для Вас аргумент.

     2018/01/26 20:47, NoName          # 

Что он не просто где-то работает и хорошо зарабатывает, но и работа связана с любимым Фортом!
Хочу, чтобы меня ткнули: вот смотри, видишь кучу вакансий по Форту, видишь, какая у фортеров зарплата?

Т.е. характеристики языка побоку? Главное — шкурный текущий интерес?

1000 Forth repositores по мёртвому языку на GitHub https://github.com/ForthStar?tab=stars

Почему бы Вам в сообществе Forth Hub не прояснить и выше озвученные вопросы?

P.S. Форт — это язык программирования и философия. Он предоставляет программисту контроль над аппаратным обеспечением, а также способность абстрагироваться вверх, ограничиваясь только навыками и воображением программиста. Таким образом, это идеальный способ программирования компьютера на любом уровне с самых низких уровней ядра ядра и драйвера устройства до самых высоких уровней пакетов прикладных программ.

Другие языки программирования также носят универсальный характер, но Forth сильно отличается от них тем, что это язык без синтаксиса! (Уникальная концепция, к которой привыкают, но как только программист привык к ней, сила работы без синтаксиса становится очевидной.)"

Ещё ссылка на интересные суждения о Форт языке и его месте в программном обеспечении:
http://www.exemark.com/FORTH/Ting_Laws_of_Computing_v4.pdf

Есть и такая ожившая с 2011 SVFIG: https://www.meetup.com/SV-FIG/
Сейчас насчитывает порядка 222 участников.

Снимают периодически митапы: https://www.youtube.com/channel/UC2v6b9814uIA5egk5-yHAVw/videos

     2018/01/27 15:07, Автор сайта          # 

Т.е. характеристики языка побоку? Главное шкурный текущий интерес?

Отсутствие востребованности фортеров на рынке труда — это следствие характеристик языка. Зависимость не линейная, но явная. «Программист на Форте» — это не профессия, а хобби. Это как шахматы: любители этой древней игры в массе своей лишь теряют деньги на своём хобби, зарабатывают же на шахматах один из многих тысяч. То же и с любителями древнего языка программирования.

1000 Forth repositores по мёртвому языку на GitHub

Ой, я вас умоляю… А на клингонском языке даже журнал выходит!

Почему бы Вам в сообществе Forth Hub не прояснить и выше озвученные вопросы?

Дело в том, что у меня нет вопросов. А вот почему бы Вам не выставить своё резюме на hh.ru (к примеру) и не огласить поступившие предложения?

Он предоставляет программисту контроль над аппаратным обеспечением

А Вы можете объяснить, почему в правильно написанной программе
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 * * * * * .
(тут всё, как в учебнике, не правда ли?) выдаётся неправильный результат? А ведь программа, написанная на хорошем языке программирования, выдаст вместо неправильного результата сообщение об ошибке. А если используем отличный язык программирования, то это сообщение увидим вообще при компиляции!

язык без синтаксиса

Вот поэтому, когда мы пишем add(a, b), то знаем, что является функцией а что аргументом. А в Форте — сплошное месиво: a b add. Где тут что? Никакие анализаторы кода не помогут. Только в рантайме ошибки отлавливать.

Главное — шкурный текущий интерес?
Снимают периодически митапы...

Надо бы поискать видео, как в каком-нибудь ДК совершенно безвозмездно играют разрядники и КМС-ы по шахматам...

     2018/01/27 19:41, NoName          # 

Bitcoin uses a scripting system for transactions. Forth-like, Script is simple, stack-based, and processed from left to right:
https://en.bitcoin.it/wiki/Script
Advanced Bitcoin Scripting, Part 1. Transactions & Multisig
https://www.youtube.com/watch?v=8FeAXjkmDcQ

Вот поэтому, когда мы пишем add(a, b), то знаем, что является функцией а что аргументом. А в Форте — сплошное месиво: a b add. Где тут что? Никакие анализаторы кода не помогут. Только в рантайме ошибки отлавливать.

Помогут, если задаться необходимостью его написания и использования.

     2018/01/28 14:18, Автор сайта          # 

Но опять это где-то в параллельной вселенной, только не у нас. Однако же, Forth-like ≠ Forth. Язык Factor — тоже Forth-like, но вы не за Factor переживаете, а за его архаичного предка. Почитайте: История разработки одного компилятора. Это success story про то, что как разработчики решили использовать Forth в качестве скриптового языка (как и в приведённом Вами примере). Но потом жизнь подвела к более мудрому решению использовать скриптовый язык со статической типизацией:

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

     2018/01/29 09:40, NoName          # 

Но опять это где-то в параллельной вселенной, только не у нас.

В России Форт никогда не был широко известен и понят среди специалистов

Однако же, Forth-like ≠ Forth. Язык Factor — тоже Forth-like, но вы не за Factor переживаете, а за его архаичного предка.

Под Forth-like можно трактовать множество языков и дискутировать вокруг этого,например как здесь:
https://www.reddit.com/r/Forth/comments/7t9tqs/a_word_histogram_script/

По поводу авторского языка Cixl. Пока не будет около этих инструментариев достаточного кличества единомышлеников и учебной литературы, то обсуждения их применимости будут заходить в "тупик".

По Форту, "худо-бедно", но есть эти составляющие для его развития.
Даже в новых издаваемых русскоязычных книгах можно встретить его упоминание

Вторников А.А. "Стек, или Путешествие туда и обратно" (февраль 2017г):
https://dmkpress.com/catalog/computer/programming/978-5-97060-517-2/

P.S. Изначально достаточно его включения в том или ином виде в учебные программы. Этот язык близок к тематики в применении и развития AI.
Пример: Forth for Artificial Intelligence in Robots:
http://mind.sourceforge.net/forth.html
Еще он использовался и в Экспертных системах (книга Таунсенда) и моделировании клеточных автоматов (книга Тоффоли).

Форт, даже без задействования расширений для формульной записи математических вычислений применим для этого использования. Блог Forth & Math:
http://forthmath.blogspot.ru/2017/
Methods of Computational Physics:
http://galileo.phys.virginia.edu/classes/551.jvn.fall01/

Хотя с использованием Factor языка есть какие то проекты на github:
https://github.com/topics/factor

Это Ваш кошмар? :) 7 Programming Languages That Give Me Nightmares:
https://www.pcmag.com/feature/350479/7-programming-languages-that-give-me-nightmares

P.S. Сколько спроектированных языков выкинули на свалку истории, и сколько ещё придуманных и не придуманных ожидает такая участь.

Аксиома — повышаем градус!
https://habrahabr.ru/post/226235/

     2018/01/29 11:41, Автор сайта          # 

Сколько спроектированных языков выкинули на свалку истории, и сколько ещё придуманных и не придуманных ожидает такая участь.

Это точно.

     2018/02/21 18:19, Андрей          # 

Мне нравится Форт, вот мой пример иммитационного моделирования на Форте:
http://technic.itizdat.ru/docs/shabronov/FIL14859441100N531932001/1
А так же напоминаю, что латинский язык до сих пор почему то используется медиками. Возможно, с Фортом такая же аналогия.

     2018/03/21 23:37, Marat          # 

Удачно Вас прочитал и все мнения. Работал на микрокодах 0 и 1 («Здравствуй, мир» или «Хитрая рыжая лиса перепрыгнула ленивого пса» — знаете о чем говорю). Для I8048, I8051 создали внутрисхемный эмулятор (академик Ершов, журнал «Микропроцессорные средства и системы», год 1987-1989). Не забудем, что есть Assember, Forth, наш Basic тот же наш Fortran. И Си, и Паскаль. Но есть программисты в микрокодах и программисты в ОС РВ.

     2018/08/31 14:49, Нароиман          # 

2013-2018. 5 лет обсуждается статья. Есть комментарии за, есть против. Но если язык обсуждается столько времени, то значит о нём знают и он существует. Я начал изучать этот ЯП из-за того, что в нём отсутствует типизация. Для меня типизация — это лишь ограничение, которое мешает. В криптографии, например, необходимо проводить операции по типу "А / 7 * 6" и т.д. Статичная и динамичная типизация сразу скажут про ошибку, что, по-моему, абсурдно. Вот кто запрещает напихать стакан бумагой? От этого вся вселенная должна перестать работать что-ли? Вот по этой причине я не в ладах с Си и всеми остальными ЯП. А ещё на Форте не нужно писать все слова на английском, можно и на родном. Просто никто не старается взять и сделать что-то глобальное на Форте, вот и знают о нём малый круг людей.

     2018/08/31 18:02, Автор сайта          # 

Различные участки памяти имею различный тип, в одних местах хранятся 8-битные целые значения, в других — 64-битные плавающие. И к ним должны применяться разные операции. Вот для этого и нужна типизация. Она позволяет некоторые типы ошибок выявить уже на этапе компиляции. Да, типизация в каком-то смысле неудобна. Она делает программы многословнее (хотя типизация Хиндли — Милнера отчасти снимает эту проблему), надевает своего рода вериги на программиста. Да и сообщения об ошибках зачастую невнятны, а ещё и на неродном языке. Но что поделаешь? Держаться в общей струе — выгодная по жизни стратегия. Поэтому интересоваться Фортом можно, а работать придётся на других языках.

     2018/12/05 16:14, Нариман          # 

С каких пор память распределена по типам? Когда я использовал язык ассемблере, никакой ереси такого рода не было.

     2018/12/05 16:37, Автор сайта          # 

Когда Вы программировали на ассемблере, то тип памяти Вы держали в голове. В зависимости от того, что было в Вашей голове, Вы применяли к ячейкам памяти, то одну операцию, то другую. 8-битной ячейке — одни операции, 32-битной — другие. В языках со статической типизацией эту «ересь» помнит компилятор. В языках с динамической типизацией «ересь» хранится в самой программе.

     2018/12/06 18:45, Noname          # 

Форт в тренде языков программирования 2018 на 48-м месте! По методике ieee.org — Институтa инженеров электротехники и электроники:
https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2018

     2018/12/06 19:21, Comdiv          # 

Хорошо пошутили. 48-е место является последним с величиной ранга 0.

     2018/12/06 20:57, Noname          # 

Там есть вкладкa Trending и Custom фильтра-результата и за счёт 6.8 + 1.8 он на 47-м месте (при этом у него признак только embedded — 15-е место).

P.S. По другим признакам данных по Форту нет, т.к. Форт-слой во многих случаях в проекте реализуется на выбранном языке (убедиться легко — поиск по по слову Forth на Github и какой язык реализации Forth выбран при этом). В каком то виде Форт можно найти и в коммерческих проектах. В платe Pololu Maestro Servo (PIC18F4550) в качестве скриптового языка применён Forth:
https://www.pololu.com/docs/pdf/0J40/maestro.pdf

По 0.0 там только отсекается срез языков, попавших в данный рейтинг. Во вкладках Job, Open у него тоже 0.0 индекс,но это только значит, что в методике анализа нет таких данных или они эпизодичны. Open, во всяком случае, должен был иметь данные по Форту (Forth).

Свежая статья с Хабра, Байт-машина для Форта (и не только) по-индейски:
https://habr.com/post/431932/

     2018/12/07 08:57, Автор сайта          # 

Недавно нашёл Константина Шереметьева на сайте имени себя. Когда-то он сделал ПараФорт — 32-рязрядную версию Форта для 16-разрядных PC. И я купил эту систему, не имея вообще никакого опята программирования на Форте. Просто купился на то, что можно программировать на кириллице. Серьёзных проектов на нём не было. Зато расширил кругозор и увеличил опыт. Ну вот, смахнул ностальгическую слезу.

Форт в тренде языков программирования 2018 на 48-м месте!

За 48 лет существования — на 48-м месте. Нет, не взлетит...

     2018/12/07 18:58, Noname          # 

На 47 или 48 месте, если быть немного точнее из 300 языков для анализа.

P.S. И да, на безмоторных самолётах - дельтапланах тоже не всем дано летать. :)

     2019/01/11 15:23, Noname          # 

Некоторые статьи с "троллингом" Форта :)
https://trollheaven.wordpress.com/tag/forth/

P.S. Там же обсуждается метаФортность:
https://trollheaven.wordpress.com/2017/09/09/der-forth-metacompiler/

     2019/01/12 07:28, utkin          # 

За 48 лет существования — на 48-м месте. Нет, не взлетит...

А мне непонятно сравнение языков программирования по рейтингу популярности. Что-то я не помню, чтобы плотник выбирал между пилой и рубанком, ориентируясь на статистику их покупки в магазинах. Не кажется ли Вам, что рейтинг, в котором свалены все языки без учета их специфики, не адекватен в данном случае? Его используют, например, для выбора специализации студентами. То есть человек учит тот язык, который наиболее востребован и тем самым имеет больше шансов устроиться на оплачиваемую работу. Это объяснимо. Но сравнивать языки МЕЖДУ СОБОЙ таким образом.... Немного странная логика.

     2019/01/18 10:02, noname          # 

Discussion: Forth is the programming language of the future
https://comp.lang.forth.narkive.com/Dil22mC1/forth-is-the-programming-language-of-the-future

     2019/01/18 13:04, Автор сайта          # 

У этого сайта кривая вёрстка. Проверил в 4 браузерах.

     2019/01/19 07:39, noname          # 

Проверил в 3 браузерах, кривости не заметил.

     2019/01/20 13:19, utkin          # 

Дело не в верстке сайта. Я проверил в опере под VPN — тогда открывается правильно. Значит косяк где-то в DNS- и IP-фильтрах провайдеров.

     2019/01/20 16:42, Сорок Сороков          # 

Чую, что Роскомнадзор приравнял Форт к саентологам. И те, и другие — деструктивные культы. Вот и заблокировал.

     2019/01/20 17:44, utkin          # 

Вероятно, это того, что сам narkive.com заблокирован Роскомпозором (интересно за что?).

     2019/01/25 14:26, noname          # 

Судьба Forth: https://felixit.blog/2018/05/11/sudba-forth/

     2019/01/25 23:55, Автор сайта          # 

По этой ссылке — странная статья некого «Феликса».

Чтобы язык стал массовым, он должен быть понятен массам (целевой аудитории).

Спорный тезис. Фортран, Кобол и Алгол были когда-то и понятны, и массовы. Понятность со временем не исчезла, но куда делась массовость? Тот, кто найдёт правильный ответ, заодно узнает, почему упала популярность Форта.

На вершине этой метрики оказываются языки, в текущий момент наиболее близкие бытовому представлению о программировании.

Да нет же, на вершине — языки, применение которых быстро и надёжно даёт результат. Просто умеют считать деньги — ничего личного.

BASIC, Pascal, Python, JavaScript. Это четыре сверхпопулярных массовых языка.

Куда-то дели Java, C, C++.

Все действительно массовые языки исключают понимание работы памяти, стеков, регистров

Форт тоже исключил из своего понятийного аппарата слово «регистр».

Потому языки развиваются в сторону «наиболее раннее обнаружение ошибки на стадии разработки»

И это есть хорошо. Лучше обнаружить косяк при сборке автомобиля, чем при езде на нём.

пока на всю планету было 17 программистов с тремя физмат высшими образованиями на каждого, Форт чувствовал себя прекрасно. Когда за клавиатуру сели Глаши, мир начал меняться.

Команда программистов и вычислителей (1956 г.)
Команда программистов и вычислителей (1956 г.), третья слева — Екатерина Ющенко.
Здесь представлена большая часть программистов планеты — 12 из 17.
До этой «Глаши» (Екатерина Ющенко — первый в СССР доктор физико-математических наук за работы по программированию, член-корреспондент Академии Наук) блогеру «Феликсу» — как до Луны. И до остальных «Глаш» с фотографии — тоже далековато.

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

Forth. Язык, в котором вас никто не защищает ни от чего. Что написал, то в лоб и прилетит.

Что заслужил, то и получил.

Что хотели сказать этой статьёй — непонятно.

     2019/01/28 16:02, Феликс          # 

До этой «Глаши» (Екатерина Ющенко — первый в СССР доктор физико-математических наук за работы по программированию, член-корреспондент Академии Наук) блогеру «Феликсу» — как до Луны. И до остальных «Глаш» с фотографии — тоже далековато.

Оставлю за кадром все остальные утверждения, которые вы просто не поняли (но мнение имеете), но этот момент оставить не могу: приписывать мне замену плейсхолдера "Глаша" Екатериной Ющенко — нелепо. Это ваших рук и головы дело, вы за эту нелепость и несёте ответ.

     2019/08/30 07:57, Noname          # 

Fift — язык программирования для крипто-денег Telegram (последние правки документации и проекта июль — 2019г). Синтаксис, конечно, не Форт (ближе к языку Factror), но его идеи и базис просматриваются при близком взгляде знакомого с Форт языком.

https://test.ton.org/download.html

     2019/12/05 21:01, Noname          # 

Статья: "Универсальный DSL. Возможно ли это?"
https://habr.com/ru/company/tinkoff/blog/477902/

     2019/12/05 23:27, Автор сайта          # 

Да, поклонники Форта всё ещё не перевелись. И каждый жалуются, что таких поклонников немного.

     2019/12/08 16:49, Noname          # 

Мне кажется или нет, что страница сообщений пользователей существенно подверглась Вашей правке?
Честно ли это подняв данный вопрос и корректировки (убирания) отзывов в дискуссии?

     2019/12/08 17:17, Автор сайта          # 

Основные причины правки сообщений:
  • неграмотность,
  • фактические ошибки.
Причины удаления:
  • вопиющая безграмотность,
  • слишком не по теме страницы или сайта.
Но за всё время работы сайта удалил сообщений с десяток, наверное. Если в чём-то сомневаетесь, можете проверить в вэб-архивах, например: web-arhive.ru. А на оценки я вообще никак не влияю, мне их интересно получить такими, какие они есть.

     2019/12/08 17:48, Noname          # 

Спасибо за объяснение. Мне данный момент показался при переходе к данной странице через ссылку в поисковике от google, т.е., как будто в этой ситуации есть гипотетическая возможность показать пользователю скорректированную страницу с удалением части информации. Не знаю, в принципе, возможно ли такое управление кем то контентом отображаемой информации в браузере пользователя. :)

     2019/12/12 14:11, Геннадий Тышов          # 

FORTH вовсе не обречен!

Смотрите китайскую (вероятно) разработку FORTH в стиле Scratch.

Ссылки:
http://jforthblocks.appspot.com/static/code/index.html

http://jimmyscratchlab.blogspot.com/p/jforthblocks.html

https://translate.google.ru/translate?hl=ru&tab=wT&sl=auto&tl=ru&u=http%3A%2F%2Fjimmyscratchlab.blogspot.com%2Fp%2Fjforthblocks.html

     2019/12/17 23:56, Неслучайный читатель          # 

Недавно прошло в новостях: «75-летний программист основал компанию по обслуживанию систем на COBOL». Так что Форт умрёт не раньше, чем Кобол.

Однако перспективы у Форта безрадостны. Это бестиповой язык со всеми присущими таким языкам недостатками. Строгая типизация обнаруживает целый класс ошибок во время компиляции, не доводя дело до рантайма. Увы, такого у Форта нет и не предвидится. А ведь так логично сопоставить участки памяти с каким-то типом. К одному типу ячеек применяется один набор функций, к другому типу — и набор другой. Это как в жизни важно отличать мужчин и женщин. К мужчинам — одни методы, к женщинам — другие :) И не дай бог перепутать! А в бестиповых языках с этим запросто.

     2019/12/18 08:55, kt          # 

А ведь так логично сопоставить участки памяти с каким-то типом. К одному типу ячеек применяется один набор функций, к другому типу — и набор другой.

Почти 50 лет назад была придумана и реализована архитектура «Эльбрус», где на аппаратном уровне различались целое и плавающее число, вызов процедуры, строка и т.п. На мой взгляд, это была продуктивная идея, очень хорошо объясненная в книге Пентковского «Язык программирования Эль-76». Вот в такой архитектуре многие трудности фортообразных языков могли бы быть сглажены.

Интересно, что зачатки аппаратных тегов «команды/данные» были уже в архитектуре БЭСМ-6 и там были бы невозможны вирусы класса «переполнения стека», т.е. просто так выполнить данные как команды было нельзя, а в Intel это появилось лишь 40 лет спустя как новейшее достижение.

     2019/12/18 08:56, Noname          # 

Oшибки преобразования типов — отдельный тип ошибок в типовых языках. :) Форт не совсем безтиповый — для нужного типа применяется операция в названии которой уже есть отсылка на тип обрабатываемых данных F+ D+ C! C@ @ ! ... и если ячейку памяти/стека использовать в соответствии с размером/типом записываемы/считываемых/хранимых данных то ошибок и не будет, а предупреждения по неоднозначному использованию данных ячейки памяти можно выводить в варнингах IDE, а если есть желание расширить использование байта до 2-ного размер и.др., то кто это может запретить это программисту в любом языке (даже с использованием преобразования типов)?

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

Форт, при этом, при неправомерном использовании данных/кода достаточно быстро обрушивает Форт-систему (результирующий прогон программы) при попытке запустить такой код. Кроме того можно локально протестировать созданное СЛОВО Форт программы.
 : Hi cr s" Hello " type bl word count type  ;  immediate
Hi John
: Greeting Postpone Hi ;
Greeting Marry
 Hello John
Hello Marry
:)

JeForth.3we https://github.com/hcchengithub/jeforth.3we тоже вроде Китай-страна. :)

Форта много для разных контроллеров, что и наблюдается в проектах на Github. Пример:

https://github.com/TG9541/stm8ef

На Rust Forth тоже делают. Беглый поиск по словосочетанию Forth Rust на

https://github.com/chengchangwu/rtforth (похоже тоже Китай, как ни странно это может быть)

Когда то встречал информацию, что на базе Форт (Win32Forth) был проект всекитайского языка программирования. Может в этом есть какая то доля правды (ХЗ).

На местную статью Гугл второй ссылкой даёт в поиске: Стековое программирование с человеческим лицом (часть вторая)

https://habr.com/ru/post/243051/

Комментарии к статье достаточно интересны.

     2019/12/19 00:15, Неслучайный читатель          # 

Почти 50 лет назад была придумана и реализована архитектура «Эльбрус», где на аппаратном уровне различались целое и плавающее число, вызов процедуры, строка и т.п.

Насколько я в курсе, там есть всего один бит, который отличает данные от кода. А вот отличить беззнаковое целое от знакового, двухмерные координаты мыши на экране от трёхмерных координат спутника на орбите — это, как мне представляется, процессоры ещё не умеют. Даже если умеют, то польза от этого есть, конечно. Но если типизация есть во время компиляции — это ещё лучше. Представьте, что летит самолёт с пассажирами, а бортинженер докладывает командиру воздушного судна: «Наш замечательный процессор обнаружил в рантайме несовпадение типов». Нет уж, пусть лучше ошибка будет найдена во время компиляции.

Форт не совсем безтиповый — для нужного типа применяется операция в названии которой уже есть отсылка на тип обрабатываемых данных

Я в курсе, что операции в Форте типизированы. Я же говорю о том, что не типизированы данные! Одно дело, когда в потёмках Петька целует Анку, а другое дело — Василь Ваныча. Типизированную поцелуй/операцию надо применять к типизированным людям/данным. Знание типа данных первично.

Форт, при этом, при неправомерном использовании данных/кода достаточно быстро обрушивает Форт-систему (результирующий прогон программы)

Я о том и говорю, что не надо обрушивать программу в рантайме (во время полёта самолёта, к примеру), лучше обрушить во время компиляции — пассажиры будут целее.

     2019/12/19 09:03, kt          # 

Насколько я в курсе, там есть всего один бит, который отличает данные от кода. А вот отличить беззнаковое целое от знакового, двухмерные координаты мыши на экране от трёхмерных координат спутника на орбите — это, как мне представляется, процессоры ещё не умеют.

Вы ошиблись. Одним битом четности-нечетности — это в БЭСМ-6 аппаратно различались команды и данные. Поэтому ОС при запуске программы расписывала память формально командами и, таким образом, чтение неинициализированной переменной вызывало аппаратное исключение. Просто и гениально, особенно учитывая технические возможности того времени.

В архитектуре же Эльбруса аппаратно различалось семь простых объектов: целое, вещественное, набор, метка процедуры, метка перехода, указатель (со своими подтипами), семафор и пустой объект. Поэтому защита при выполнении здесь необычайно развита.

Что же касается компиляции, то, во-первых, это ветка о Форте. А компилируемый Форт — это вообще не Форт :)) А во-вторых, множество случаев принципиально невозможно обнаружить при компиляции. Простейший пример — индекс массива сам читается из файла. Как при компиляции обнаружить возможный выход за границы массива?

     2019/12/20 09:52, Неслучайный читатель          # 

множество случаев принципиально невозможно обнаружить при компиляции.

Конечно, согласен с Вами. И развитость средств нахождения ошибок в рантайме можно только приветствовать. Но находить ошибки во время компиляции всё-таки выгоднее, чем в рантайме.

     2021/04/07 17:35, :NONAME          # 

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

     2021/07/25 13:12, Клавиатур          # 

Прикольное чтиво. Всем участникам дискуссии — добра.

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

Некоторые участники приняли на свой счет все что относится к «критике» Форта. Это уже психологический момент — включилась психологическая защита ввиду того, что для них Форт на подсознательном уровне уже отождествляется с самим собой (глубокие личностные убеждения и ценности) и «обесценивающая» статья начинала «шатать» эго. Классический перенос с предмета обсуждания на себя со всеми вытекающими — демонстрация ссылок в ответ в попытках убедить в обратном. Эти же люди выдают Форт в свете некого тайного знания, как будто стекоориентированный подход могут до конца понять только избранные. Забавно.

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

     2021/07/26 22:46, Автор сайта          # 

Ваше наблюдение касательно психологического портрета «защитников» Форта любопытно. Ладно, если бы это было их детище. Но они не имеют никакого отношения к рождению этого языка.

Есть куча причин считать язык устаревшим. Новые языки лучше помогают разработчику бороться с ошибками и преодолеть сложность программирования. В Форте нет той же типизации. Наверное, это можно считать отсутствием «структурности»?

     2021/07/27 15:44, Неслучайный читатель          # 

Каменный век закончился не потому, что закончились камни. Вот и у Форта закончились его деньки.

     2021/07/29 17:38, Noname:          # 

Предлагаю автору сайта написать ещё и например статью "Почему обречён/необречён Factor язык программирования"
Умиляет мнение людей прочитавших вводную про Форт, но считающие своё мнение мега конструктивным в рассуждениях какие языки позволяют управлять "мегасложностью"

     2021/07/29 23:24, Автор сайта          # 

Заглянул в свежий индекс Tiobe, ни Форта, ни Фактора в нём нет. Впрочем, думаю, что у Фактора есть свои поклонники. И их число, возможно, не меньше, чем Форт-программистов. Просто сейчас другие времена: если в 1970 году, условно говоря, было 10 тысяч профессиональных программистов и каждый десятый работал на Форте, то сейчас программистов 10 миллионов, а программирует на Факторе один из десяти тысяч.

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

     2021/07/31 21:14, Клихальт          # 

Но если языку более 10 лет и он ещё не взлетел, то что Вам подскажет внутренний Нострадамус?

Внутренний Нострадамус обычно подсказывает: "Если выбранный инструмент полностью удовлетворяет требованиям мастера и кругу решаемых им задач, то инструмент выбран верно и совершенно не важно, что миллиарды мух с ним не согласны". ;)

Не думаете ж Вы, что учёные, использующие для своих исследований радиотелескоп сильно переживают, что их инструмент распространен куда меньше, чем детские китайские телескопы да их самих куда меньше, чем тех, кто глазеет на небо в эти китайские трубы?

     2021/08/01 20:52, Автор сайта          # 

Про 10 лет относилось к Фактору. Но я ошибся, ему 18 лет. А вот Котлину как раз 10 лет. Он более популярен, более известен, более развит, хотя и моложе.

     2021/08/07 10:17, Gudleifr          # 

Перенос из темы про FORTH. (Там место закончилось?)

Во-первых, новые "просто языки" не нужны ровно настолько, насколько не нужны "просто программисты". В обоих случаях речь в реальности идет о какой-то сугубо практической задаче, решение которой обсчитывается слишком трудозатратно или нудно и поэтому его хочется поручить машине, для чего обычный реальный инженер (или, даже, просто работяга) учится программировать и пытается изобрести способ (возможно, язык) для того, чтобы объяснить решение машине:
- так появились машинные языки для переноса алгоритмов на железо;
- так появился C для затыкания дыр в UNIX;
- так появился FORTH для ускорения цикла исправления программ;
- так появился BASIC для превращение универсальной ЭВМ в продвинутый калькулятор пользователя;
- так, когда нам дают машину что-то посчитать, то мы берем её BASIC и поверх него пишем C или FORTH, чтобы на них написать BASIC++, на котором считать будет удобно;
- или, когда нам хочется обосновать какую-то чисто умозрительную фигню, изобретаем общую теорию фигни, для разговора о которой придумываем ALGOL или LISP;
- или, когда очень хочется кушать, мы изобретаем ALGOL++, C++, FORTH++ или LISP++, и иногда выигрываем в лохотроне ненужно-популярных монстров.

     2021/08/07 16:20, Автор сайта          # 

Там место закончилось?

Нет, обсуждение. Этой теме уже много лет, новых аргументов ни «за», ни «против» давно не появляется. А просто что-то писать, потому что «В Интернете кто-то не прав» — это потеря времени и тем, кто пишет, и тем, кто читает.

так появился C для затыкания дыр в UNIX

Не передёргивайте факты. Если Вам не нравятся ни C, ни UNIX, то это не повод писать о них в уничижительном тоне.

в лохотроне

На этом сайте приветствуется научная и техническая лексика.

Почитайте, пишут о том, что ядро Linux дырявое, что надо переписать его на Rust. А сейчас оно написано на Си, а потому дырявое. В Си очень легко нарушаются правила. Если бы язык имел строгую типизацию, имел бы встроенные средства борьбы с ошибками, то он был бы хорош. А чем Форт в плане безопасности лучше Си? Да ничем. За 50 лет миллионы программистов (или миллиарды мух? В комментарии выше…) накопили опыт борьбы с ошибками. Этот опыт учитывается при внесении доработок в старые языки. Или же языки переписывают с чистого листа, чтобы не тянуть хвост из ненадёжных языковых конструкций.

Ну а Форт… Пусть он остаётся Фортом.

     2021/08/07 18:38, Gudleifr          # 

Безопасность C — идеальна. Это системный язык, позволяющий (на той машине, для которой писался) честную адресную арифметику. В FORTH она тоже идеальна, но по другой причине — она не нужна и её нет.

     2021/08/08 18:44, Автор сайта          # 

Безопасность C — идеальна.

Если Вы более компетентны, чем разработчики ядра Linux, то вступать с Вами в спор просто глупо.

     2021/08/08 19:09, Gudleifr          # 

Если Вы более компетентны, чем разработчики ядра Linux

Давайте в теме FORTH будем про FORTH.

Все ядро FORTH — это что-то вроде двух строчек, которые повторяются в конце каждого шитого слова:

lodsd
jmp eax
Небезопасно? Конечно, небезопасно. Вдруг следующий код будет не адресом слова? Вдруг шитый код уже кончился? Вдруг в esi мусор?

Хорошо. Переписываем ядро на каком-нибудь BASIC, где этот кусок будет выбирает значения из массива значений типа "ссылка на код"... Безопасно? Да. А внутри у BASIC — в том месте где исполняется процедура вызова следующего байт-кода? Там кто будет проверять? Напишем BASIC на супер-безопасном компиляторе управляемого кода? А кто будет безопасно управлять управляемым кодом?.. Где-то, все-равно должна быть опасная процедура проверки безопасности... И если ядро безопасно — оно не ядро.

А чем плоха безопасность Linux, спросите разработчиков МСВС, которые спокойно реализовали на нем мандатную и дискреционную политики и вполне себе довольны.

     2021/08/08 23:54, Автор сайта          # 

То есть разработчик ядра Linux заявляет о его дырявости, а в МСВС взяли ядро от Linux и говорят: «Ничего подобного! Ядро безошибочно». И какой смысл что-то говорить после этого?

Где-то всё равно должна быть опасная процедура проверки безопасности

Немалую часть такой работы может взять на себя компилятор (обработка ошибок). Если в Форте можно положить на стек два плавающих числа и попытаться выполнить целочисленное сложение, то что при этом будет? А в языках, где уделяют внимание безопасности, ошибка выявляется при компиляции. Только зачем я это говорю? Давайте Вы в других местах почитаете об этом? Из первых рук, минуя меня как посредника.

     2021/08/09 00:09, Gudleifr          # 

Только зачем я это говорю?

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

А в языках, где уделяют внимание безопасности, ошибка выявляется при компиляции.

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

     2021/08/09 12:49, Автор сайта          # 

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

Поверьте, мне есть где и как удовлетворять свой интерес. Или Вы готовы, допустим, пролить свет, каким образом в Haskell сохраняется чистота в чистых функциях при выполнении нечистых действий?

Дебил целочисленно складывает два вещественных и получает ошибку?

Почитываю статьи компании Viva64 на Хабре. И Вам рекомендую. Иногда волосы дыбом встают, когда такие серьёзные люди в таких серьёзных проектах допускают такие детские ляпсусы. Но я сам годами бы искал ошибки в этих текстах. Там миллионы строк, они становятся бесконечным забором до горизонта с одинаковым штакетником. Что-то найти глазами там просто нереально. У человека ограниченные возможности. Надежда только на средства автоматизации.

Можно попытаться в новых языках ввести правила, уменьшающие вероятность ошибок. Возьмём Rust. Ввели обязательность фигурных скобок — число ошибок уменьшилось. Ввели концепцию владения — ошибки работы с памятью перестали надоедать. В Cyclone ввели проверку границ индекса массивов — тоже стало меньше ошибок. Можно, к примеру, ввести запрет на одинаковые аргументы операций «и», «или», «исключающее или»:
if (a && b)	// законно
if (a && a) // запрещено
В анализаторе кода компании Viva64 — сотни или тысячи типов выявленных ошибок. Многие типы ошибок существуют благодаря ошибкам дизайна языков. А Viva64 делает на этом деньги. У них даже Microsoft покупает их продукт.

Лучшее время выявления ошибок — это во время компиляции. Откладывать нахождение ошибок на рантайм — плохая стратегия. Полна отладка марсохода возможна только на Марсе.

     2021/08/09 13:07, Gudleifr          # 

Это тема про FORTH. Концепция FORTH — тупой программист и умный пользователь. Программист лишь обеспечивает удобную среду для самовыражения пользователя. Т.е. программист контролирует только те ошибки, которые считает критическими. А пользователь должен сам отвечать за свои действия, и волен контролировать ровно то, что ему удобно и полезно. Всё.

У Броуди даже картинка "про безопасность есть": мол, что лучше прятаться от игра в своей клетке, или построить клетку для тигра?

С точки зрения банальной эрудиции: программирование есть создание кибернетических машин, максимум энтропии которых соответствует останову при получении правильного результата. И метод FORTH позволяет обеспечить "правильный останов" и совершенно наплевать на сопутствующую "энтропию".

     2021/08/11 10:59, Клихальт          # 

Можно попытаться в новых языках ввести правила, уменьшающие вероятность ошибок.

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

Куда проще и надёжнее заниматься не построением клетки вокруг программиста и прикручиванием к его конечностям всё более и более модных костылей, а развитием самого программиста.

     2021/08/11 11:24, Gudleifr          # 

Ввести то можно

По мне, так вопрос, что можно, а что нужно, зависит от принятого нами метода программирования. Уже под метод мы подгоняем требования к языку.

...
К сожалению, описанное выше "кубиковое" деление задач на части работает только для простых задач. Когда с "высоты задачи" можно видеть "фундамент".
А как быть со сложными?
Для сложных работает метод FORTH: Имеем A (язык машины), пишем на нем на коленке за неделю язык F (Forth), затем на нем — P (проблемно-ориентированный язык), отдаем последний пользователю для решения своих задач. Пусть, это будет метод #4. Пока, здесь, рассмотрим более простые.

Возможно, настоящие писатели могут писать свои романы в свободной форме — все более углубляя и расширяя произведение — и не имеют проблем с добавлением новых поворотов сюжета или свежих идей туда, куда надо. Возможно, даже, есть программисты, способные так же писать программы — постепенно добавляя все новые и новые возможности, и без труда преодолевая тот рубеж, на котором мои программы если и не перестают работать, то начинают терять в функциональности после каждого исправления ошибок, вызванных очередным "улучшением". Однако, я не видел ни таких программистов, ни таких программ. Если угодно, эту проблему описал Дейкстра ещё в 70-е годы XX века. А Брукс сделал популярной её формулировку: "Серебряной пули не существует".
Какие же способы, кроме очевидного "взять и написать то, что надо", существуют?
Видимо, есть два "философских" способа. Первый — рассматривать большую программу как машину, собранную из других машин, связанных простыми интерфейсами (см. "Заметки о структурном программировании" Дейкстры). Вопрос модификации программы т.о. решается как замена одной из машин на другую с тем же интерфейсом. Второй — изобретение языка, на котором решение задачи можно описать достаточно просто. Программа в этом случае представляется как набор переводчиков с языка на язык.
Т.к. между понятиями "машина" и "язык" в программировании существует взаимнооднозначное соответствие, то выбор "философии" определяется, скорее тем, с чем мы имеем дело — с компилятором или с интерпретатором.

Каковы практические решения, порожденные нашей философией? И, самое главное, какие подводные камни нас ожидают?

1. "Плюем и копипастим". Очевидно, что чем "последовательнее" куски кода, тем длиннее они могут быть. Но где найти столь выразительный язык, чтобы на нем можно было бы писать без "петель"? На помощь приходят Операционные Системы. Они разрешают пользователю писать только отдельные главы "Что произойдет, когда пользователь нажмет на кнопку?", "Что надо не забыть при размещении окна на экране?",.. А связь между главами берут полностью на себя. В такой умной среде даже достаточно сложно привязанную к сюжету "главу" можно просто приписать в конец программы. Минус подхода, разумеется, в том, что здесь не писатель управляет сюжетом, а сюжет — писателем. Мы постоянно видим вокруг программы, напрягающими пользователя заполнением ненужных ему форм, требуя от него ненужных подтверждений очевидного, навязывая ненужные ритуалы.

2. "Структурное программирование". В своей книге "Дисциплина программирования" Дейкстра ввел аксиоматику соединения программных глав в единое произведение. Два важнейших способа — операторы выбора и цикла. Со временем аксиоматика забылась и программисты уверовали, что цикл может гарантировать им чуть ли не кибернетическую ультраустойчивость, а выбор обеспечит возможность учесть "все". Эти два оператора ответственны за увеличение мусора в программах на один, а то и два, порядка. Чтобы это оценить нужно вспомнить аксиоматику. Она проста (если не вникать в математику): основное качество цикла не способность вовремя остановиться, а способность сохранять т.н. "инвариант цикла", что позволяет ему не пойти вразнос; с выбором все очевиднее — этот оператор должен учитывать все варианты не в смысле "все что придет в голову", а в смысле "честной мат.логики" — всех возможных наборов значений переменных, входящих в условие выбора. Как это работает?
Обычная ошибка применения циклов, как мы видели ранее — "матрешка". Циклы вкладываются один в другой не "по логике", а "по сюжету". Кроме потерь на лишние переборы, порожденные изменением одной-двух переменных состояния, приходится слишком долго проверять, не был ли поврежден "инвариант". А, если программист сам плохо понимает, какой инвариант к какому циклу относится, число проверок/восстановлений растет в геометрической прогрессии.
Аналогичной ошибкой при использовании оператора выбора является упомянутая выше "елочка". Вместо последовательной обработки отдельных переменных состояния, при неудачном распределении последних, получается громоздкое дерево. Для всех вариантов значения первой переменной, проверяются все значения второй, для каждого значения второй — все значения третьей... В сложных елочках часто происходит более одной проверки одного условия, т.к. понять была ли ранее сделана та или другая проверка достаточно сложно, особенно после внесения пары-другой исправлений.
Как избежать матрешки и елочки? Нужно стараться отделить логику управления от других вычислений программы. А затем — попытаться её упростить по правилам обычной математики.
Несмотря на трудность правильного применения структурного программирования, оно позволяет писать очень красивые (и доказуемо правильные) программы.

3. "Масштабирование". С ростом популярности языка C термин "структурное программирование" стал использоваться в другом значении — как программирование путем бесконечной группировки структур (кода и данных) в более крупные структуры. Появилось (такое же дурное) понимание понятия "объектно-ориентированного программирования" — как создания неких универсальных структур (объединяющих — "инкапсулирующих" — в себе и код, и данные вместе).
Для увеличения сложности таким путем, очевидно, характерен "синдром чайника" — когда "вылить уже налитую воду" проще, чем переписать процедуру "кипячения".
Другой источник мусора при таком подходе — избыточность предохранительных процедур, которые "для универсальности и безопасности" вставляют во все процедуры, где неправильные данные могут вызвать ошибки. Такой подход не только приводит к жуткой избыточности ненужных проверок, но и служит источником ошибок — необнаружению критических сбоев.

И претензии к FORTH — по поводу необработки ошибок, отсутствии типизации или структурности — только попытка притянуть его к решению методом #3. Но FORTH — средство для метода #4. Причем, самое простое из возможных. А раз оно самое простое, то искать в нем деталей, которые сработают по другим методам — бесполезно.

     2023/01/20 23:27, kt          # 

Отсюда: https://udamonic.com/what-is-a-scamp.html

Scamp — это автономный Forth-компьютер, который вы можете использовать в качестве вычислительного движка для своих проектов. Он прост в интерфейсе и легко и быстро программируется на Forth, лучшем в мире встроенном языке программирования.

Чтобы использовать Scamp, вам не нужно устанавливать какие-либо IDE, компиляторы или инструменты разработки. FlashForth предустановлен. Все работает непосредственно на Scamp, и все, что вам нужно, это хост-компьютер с интерфейсом USB и некоторое терминальное программное обеспечение.

Он используется в школах и университетах для исследований или обучения. Он используется в домашних проектах любителями. Компании используют Scamp при разработке продуктов для быстрого прототипирования и отладки собственного оборудования или в качестве ядра контроллера для своего следующего продукта.

Написать автору можно на электронную почту
mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Содержание

Каким должен быть язык программирования?

Анализ и критика

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

●  О превращении кибернетики в шаманство

●  Про лебедей, раков и щук

●  О русском ассемблере

●  Арифметика синтаксиса-3

●  Концепция владения в Rust на примерах

●●  Концепция владения в Rust на примерах, часть 2

●●  Концепция владения в Rust на примерах, часть 3

●  Суть побочных эффектов в чисто функциональных языках

●  О неулучшаемой архитектуре процессоров

●  Двадцать тысяч строк кода, которые потрясут мир?

●  Почему владение/заимствование в Rust такое сложное?

●  Масштабируемые архитектуры программ

●  О создании языков

●●  Джоэл Спольски о функциональном программировании

●  Почему Хаскелл так мало используется в отрасли?

●  Программирование исчезнет. Будет дрессировка нейронных сетей

●  О глупости «программирования на естественном языке»

●  Десятка худших фич C#

●  Бесплатный софт в мышеловке

●  Исповедь правового нигилиста

●  ЕС ЭВМ — это измена, трусость и обман?

●  Русской операционной системой должна стать ReactOS

●  Почему обречён язык Форт

●  Программирование без программистов — это медицина без врачей

●  Электроника без электронщиков

●  Программисты-профессионалы и программирующие инженеры

●  Статьи Дмитрия Караваева

●●  Идеальный транслятор

●●  В защиту PL/1

●●  К вопросу о совершенствовании языка программирования

●●  Опыт самостоятельного развития средства программирования в РКК «Энергия»

●●  О реализации метода оптимизации при компиляции

●●  О реализации метода распределения регистров при компиляции

●●  О распределении памяти при выполнении теста Кнута

●●  Опыты со стеком или «чемпионат по выполнению теста Кнута»

●●  О размещении переменных в стеке

●●  Сколько проходов должно быть у транслятора?

●●  Чтение лексем

●●  Экстракоды при синтезе программ

●●  Об исключенных командах или за что «списали» инструкцию INTO?

●●  Типы в инженерных задачах

●●  Непрерывное компилирование

●●  Об одной реализации специализированных операторов ввода-вывода

●●  Особенности реализации структурной обработки исключений в Win64

●●  О русском языке в программировании

●●  Формула расчета точности для умножения

●●  Права доступа к переменным

●●  Заметки о выходе из функции без значения и зеркальности get и put

●●  Модификация исполняемого кода как способ реализации массивов с изменяемыми границами

●●  Ошибка при отсутствии выполняемых действий

●●  О PL/1 и почему в нём не зарезервированы ключевые слова

●●  Не поминайте всуе PL/1

●●  Скорость в попугаях

●●  Крах операции «Инкогнито»

●●  Предопределённый результат

●●  Поддержка профилирования кода программы на низком уровне

●●  К вопросу о парадигмах

●  Следующие 7000 языков программирования

●●  Что нового с 1966 года?

●●  Наблюдаемая эволюция языка программирования

●●  Ряд важных языков в 2017 году

●●  Слоны в комнате

●●  Следующие 7000 языков программирования: заключение

Компьютерный юмор

Новости и прочее




Последние отзывы

2024/03/19 02:19 ••• Ivan
Энтузиасты-разработчики компиляторов и их проекты

2024/03/18 23:25 ••• Автор сайта
Надёжные программы из ненадёжных компонентов

2024/03/18 22:44 ••• Автор сайта
О многократном резервировании функций

2024/03/17 17:18 ••• Городняя Лидия Васильевна
Раскрутка компилятора

2024/03/10 18:33 ••• Бурановский дедушка
Русской операционной системой должна стать ReactOS

2024/03/07 14:16 ••• Неслучайный читатель
«Двухмерный» синтаксис Python

2024/03/03 16:49 ••• Автор сайта
О неправомерном доступе к памяти через указатели

2024/02/28 18:59 ••• Вежливый Лис
Про лебедей, раков и щук

2024/02/24 18:10 ••• Бурановский дедушка
ЕС ЭВМ — это измена, трусость и обман?

2024/02/22 15:57 ••• Автор сайта
Русский язык и программирование

2024/02/19 17:58 ••• Сорок Сороков
О русском языке в программировании

2024/02/16 16:33 ••• Клихальт
Избранные компьютерные анекдоты

2024/02/10 22:40 ••• Автор сайта
Все языки эквивалентны. Но некоторые из них эквивалентнее других