Это копия, сохраненная 18 декабря 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Какова его актуальность сейчас?
Актуальность, увы, невысока - за исключением, быть может, каких специфических внутренних вещей, когда у тебя есть какая-то охуевшая йоба, под которую нет никаких компиляторов, и тебе нужно БЫСТРО, РЕШИТЕЛЬНО запилить под нее что-то высокоуровневое.
Сам язык - мастхэв для ознакомления, вместе с Factor и Joy (и Cat).
Потому что dip dup r> roll3 rot swap -rot drop dup roll кровь кишки распидорасило.
На самом деле он взлетел, просто олдфаги не помнят, ньюфаги не знают.
Думаю, оно вполне может иметь смысл и применение в виде кастомного диалекта. Сама идея хорошая, но стандартный Forth какой-то местами недоделанный, как мне показалось.
Виртуальная машина не может быть диалектом языка, дурилка. Кроме того, дурилка, байткод жвм имеет к форту очень опосредованное отношение (т.е. по факту никакого).
>Потому что dip dup r> roll3 rot swap -rot drop dup roll кровь кишки распидорасило.
А зачем так делать?
Одна из фишек - простая кросс-компиляция.
Можно было с минимальными затратами разрабатывать на одном процессоре и деплоить на другом.
Вполне взлетел.
Были даже аппаратные реализации - форт-процессоры, и даже довольно много.
В первой половине нулевых - был ещё вполне активен.
Не подходит для гарвардской архитектуры (AVR).
С появлением мощных ПК (для разработки), распространением RISC-процессоров и нормальных компиляторов C для них - оказался не нужен.
Вот тут можешь заценить живьём (инфо и интерпретатор на JS):
http://skilldrick.github.io/easyforth/
В конце даже игрушка есть.
Спасибо, анон, джва года ждал. Я думал, что язык только про dup drop rot over swap
http://libgen.io/book/index.php?md5=12C816D1342AA062289439FAAD119ADF на русском в pdf
http://thinking-forth.sourceforge.net/ на английском
Да сырой он. Fuel так и не смог поставить. Если будешь пробовать, отпишись, пожалуйста, хотел бы тоже поиграться.
посоны не открывайте там вирус
Серьезно, при открытии страницы у меня ебаный шум из наушников (я чуть не оглох), причем mute на странице не работает.
Пиздец.
Да, есть такой баг, сайт ломает звук в прыщах и маке, на винде последний раз норм работало. У тебя линукс, да?
Джва года ждал.
>>168201
У меня Fuel не может запустить фактор (M-x run-factor). Приходится отдельно запускать listener, из него запускать факторный хост ("fuel" run), затем из емакса к нему подключаться (M-x connect-to-factor). Лисенер при этом приходится держать открытым всё время. Это у меня на винде. Хотя, по мне, listener как REPL намного лучше чем емаксовский Fuel. Поэтому словари с подсветкой пишу в емаксе, а запускаю и отлаживаю в лисенере.
другой анон
Я с Андроида захожу и какой-то треск идёт
>Сколько ему там лет?
Разработка началась в 2003. Первая версия ещё не вышла (последний стабильный релиз 0.97). Там просто Фуел кривой, автор его забросил давно. Последний коммит был в мае 2013.
На арче та же самая хрень была, поэтому дропнул, после гейзера и слайма просто не хотелось писать по-другому.
Ценность фактора же в расширении кругозора и постижении иных измерений. Для этого и блокнотика вполне хватит.
Ну форт хайку увлекательнее в таком случае. А мазохизм никакого отношения к расширению кругозора не имеет. Ну типизированный форт, окей, ознакомились и дропнули. А в блокноте можо на чем-нибудь более интересном писать, даже на том же хачкеле, где языковые расширения (гхц имею в виду) ну просто новый мир открывают и где действительно много интересных концепций постичь можно
Что? Ты хуйню какую-то сморозил, извини уж. Что увлекательнее чего? Фактор - это не типизированный форт, ты бы хоть вики его почитал. В блокноте на х-ле писать? Ты бы хоть гхц поставил да факториал написал для начала - как раз с х-лем нужно нормальное окружение, чтобы не было мазохизма. Фактор - единственный живой конкатенативный язык без (обязательной) байтоебли, с огромной библиотекой и кучей реального кода на нем. Х-ль - обычный аппликативный язык, ленивая типизированная лямбда, коих тысячи - от клина до идриса, от скалы до фшарпа. Никто не спорит, что много интересных концепций через него постичь можно, но это - мейнстрим, а не иные измерения.
Я трогал фактор. И не знаю, где ты кучу кода на нем нашел (кстати, ее наверное тоже в блокноте писали?), потому что экосистема так и осталась в плачевном состоянии, большинство либок не работают. На хацкеле нормально писалось в редакторе фарманагера, факториал был написан не один, и благодаря высокоуровневости окружение не особо нужно. Алсо во-первых все языки, что ты перечислил (про клин только не знаю), энергичны по умолчанию, во-вторых в скале также вызов по имени есть, в-третьих, такие вещи как ооп и гадт (не говоря уже о зависимых типах) как бы дают понять, что типизированной лямбдой не обойдешься. Ну и плюс кроме семантики вызова функций другие вещи существуют, семейства типов и те же гадт например. Да ты мне хотя бы внятную аналогию тайпклассов в других языках назови, а то сводишь все к лямбде своей. Я как бы и не говорил, что хаскель необычный язык какой-то, но на нем много интересных вещей поковырять можно. Просто не надо из меня какого-то дикаря делать, который услышал про ленивость или паттерн матчинг и с восторженным криком хвалит язык. Я о том, что для меня фан, а что нет.
Кучу кода на нем написал Славик, для языка такого жанра у него очень богатая стдлиба. В чем Славон писал код я не знаю, но это не имеет отношения к треду (перечитай >>168645).
>На хацкеле нормально писалось в редакторе фарманагера
Ну вот это и называется мазохизм. Отступы вручную пробелами отбивал, ага? Впрочем, для факториалов пойдет, да (о чем я изначально и говорил).
>энергичны по умолчанию
Ой блядь, ну идрис поддерживает ленивость, ленивые коллекции вообще везде есть, в той же кложе.
>Да ты мне хотя бы внятную аналогию тайпклассов в других языках назови
Ээ? Трейты\тайпклассы\протоколы вроде во всех современных языках есть, не? кроме goвна, конечно
>Я как бы и не говорил, что хаскель необычный язык какой-то, но на нем много интересных вещей поковырять можно
Ну ты ведь сказал, как бы контраргментируя мой пост, что коль уж в блокноте ради постижения тонких материй писать, то нахуй ваши фортофакторы, а вот {-#LANGUAGE GADTs - ого-го, всем пизды даст!
Мой поинт был в том, что выше обсуждалась настройка окружения для фактора, вот я и недоумевал - зачем? Вы ж не собираетесь реальный софт на нем писать (или собираетесь)? Основная его ценность - в том, что это неаппликативный язык, на котором достаточно много чего написано (по сравнению с joy или j/k, например), и можно реально посмотреть, как на какой-то марсианской (с точки зрения подавляющего большинства девелоперов) хуйне пишут реальный, рабочий код (а не просто факториалы). И тут ты такой со своим х-лем: чо, зачем, к чему, при чем тут вообще это - хуй пойми. Вот я и выразил свое недоумение по этому поводу.
>Просто не надо из меня какого-то дикаря делать, который услышал про ленивость или паттерн матчинг и с восторженным криком хвалит язык.
Ну ладно, окей. :3
>Я о том, что для меня фан, а что нет.
Ну ладно, но только ты бы как-то почетче это артикулировал, а то при переводе с русского на русский этот мессадж как-то немного потерялся, вот. х-ль крута, питонджонс бох
Про гадт я сказал в том контексте, что он к типизированной лямбде не сводится. А тайпклассы полноценные ни трейтами, ни модулями первого порядка не эмулировать. А насчет подавляющего большинства девелоперов - так для них метапрограммирование на шаблонах в крестах - какая-то марсианская хуйня (хотя она по сути таковой и является). Ну а в остальном мы вроде поняли друг друга. Кстати, золотце с его симтой знаешь?
>Ну а в остальном мы вроде поняли друг друга.
Угу. :3
>Кстати, золотце с его симтой знаешь?
Это же вроде порашный шизик, который какие-то хуетени на дслях пилил, не? Ну, то есть краем уха слышал, но стараюсь избегать погружения в подобные материи. А что с ним? Что за симта?
Да, именно он. Смесь лиспа и рефала, насколько я понял. Вспомнился что-то вот, когда обсуждали всякие языки.
Туда ли ты зашел, мань?
>теперь - Factor
Он изначально был экспериментальной площадкой, куча всего было сделано хуяк-хуяк. В результате Славик его не доделал, ушел делать свифт к яблочным гомосекам. Без него комьюнити сдохло. Ну а по сути фактор - динамическая дрисня. Уж лучше лисп какой-нибудь взять, чем со стеком колупаться.
>Он изначально был экспериментальной площадкой
Ну так в этом вся суть(с)(тм) же, и это замечательно.
>динамическая дрисня
Ну так в этом вся суть(с)(тм) же, и это замечательно.
>Уж лучше лисп какой-нибудь взять
Дайте две! В смысле обе.
>Попробуй написать факториал и вычисление дискриминанта на форте
И в чем сложность?
: fact 1 swap begin dup 0> while dup 1- >r r> repeat drop ;
: discr ( a b c -- d ) >r dup swap r> 4 - ;
Это дело опыта. Со временем такой код нормально будет восприниматься, как в любом языке. Обычно стараются стековую акробатику к нулю сводить, все разбивать на короткие однострочники. К тому же никто не запрещает использовать локальные переменные для пермутаций. С ними тот же дискриминант будет выглядеть гораздо понятнее:
: mul звездочка ;
: discr { a b c } b b mul 4 a c mul mul - ;
(с плавающей точкой, правда, будет уже не так красиво).
Ну тогда уж "похоже на код на Haskell, только точек немного меньше", лол.
>>170285
Анон, я-то это знаю. Я отвечал тому анону, который спрашивал, почему "не взлетело". Большинству программеров трудно воспринимать такие штуки, надо переучиваться.
Ну и все-таки проблему наличия тыщи хитровыебанных комбинаторов это не отменяет.
Postscript - стековый язык, да
>Последний из них — это волна мобильных устройств, где были востребованы свойства именно Форта: компактность, «автономность» и «независимость» от ОС (и потенциальная способность заменить собою эту ОС).
http://sergey-frt.narod.ru/frt_sci.html forth на j2me даже есть, с кучей возможностей
А хотя в клэйтронике он сможет полностью себя показать? Что по поводу реактивного программирования в форт вообще?
foo x y = if bar? x then qux y else if bar? y then qux x else frob
>>188339
Тогда прочитай why concatenative programming matters и http://www.kevinalbrecht.com/code/joy-mirror/forth-joy.html - для начала хватит, а там сам поймешь.
dup
В общем, я выбрал фактор. И теперь у меня вопрос. Я не понимаю систему стековых эффектов. Это такаой вид типизации? В частности мне не понятно, чем различаются dip и keep. Мне кажется, что стековый эффект dip какой-то глупый и должен быть как у keep. Да, вообще, стековые эффекты почти всех dataflow-комбинаторов какие-то некорректные. Помогите разобраться плз., спецы.
Как в стековом эффекте выразить факт нетривиальной зависимости количества выходов слова от количества входов? Какой должен быть стековый эффект в случае, когда количество выходов (и/или входов) слова существенно зависит от конкретных его аргументов?
>Я не понимаю систему стековых эффектов.
http://docs.factorcode.org/content/article-effects.html
>Это такаой вид типизации?
Не совсем, скорее это документация, которая частично чекается. Если со всякими тайпскриптами работал - нечто отдаленно похожее.
>чем различаются dip и keep
http://docs.factorcode.org/content/word-dip,kernel.html
http://docs.factorcode.org/content/word-keep,kernel.html
Перевести? dip удаляет верхний элемент х со стека, вызывает quot, а потом кладет элемент х обратно на вершину стека. keep копирует текущий верхний элемент х, потом вызывает quot с текущим стеком (включая верхний элемент), а потом добавляет х на вершину результирующего стека. Собственно, ( ..a x quot: ( ..a x -- ..b ) -- ..b x ).
>>199034
Никак. Какой угодно.
Собственно документацию и читаю.
Почему, тогда, стековый эффукт для dip не такой: ( ..a x quot: ( ..a -- ..b ) -- ..b x ) ? Разве соответствие количеств входов и выходов здесь не сщественно? Там, ведь, количество входов зависит от стекового эффекта quot. Для сравнения:
[ / ] dip
[ 2 / ] dip
>Никак
Как же быть, если требуется?
>Какой угодно.
Как так? Например, не понятен стековый эффект spread. Там количество входов зависит от длины seq, но из эффекта этого не видно. Как такое выразить в стековом эффекте?
>Почему, тогда, стековый эффукт для dip не такой: ( ..a x quot: ( ..a -- ..b ) -- ..b x ) ?
Потому что каждый тип неявно row-полиморфен, вестимо. (..a x quot -- ..b x) и (x quot -- x) эквивалентны.
>Разве соответствие количеств входов и выходов здесь не сщественно?
Row-переменные ничего не говорят о количестве входов и выходов.
>Как же быть, если требуется?
Factor - динамически типизированный язык, так что я не вижу, в чем проблема. Берешь и делаешь.
>Как такое выразить в стековом эффекте?
Как угодно, см. предыдущий пост. Можешь комментарий написать. Можешь не писать.
>>199105
https://www.typescriptlang.org/
(или любые аналогичные "пришей хуй собаке"-надстройки)
>Потому что каждый тип неявно row-полиморфен, вестимо. (..a x quot -- ..b x) и (x quot -- x) эквивалентны.
Вот это было мне неочевидно. Хотелось бы поподробней. Не понятны упоминаемые (в документации) особенности стековых эффектов комбинаторов. Как-то это связано с inline, вроде. Также непонятно как проходят стековые проверки. Кажется часть этих проверок динаическая. Насколько ни строгие? Постоянно ощущается некоторая граница между parse time и run time. Мне не показалось? Насколько это фундаментально для Фактора? Видимо, я недопонимаю из-за того, что раньше не имел дела с динамическими языками.
Механизм локальных переменных - это такой костыль?
А ты пейпер читал? http://factorcode.org/slava/dls.pdf - вот этот, там вроде про это есть. Если что, я не пишу на факторе, так что не ожидай от меня подробных и корректных объяснений.
>как проходят стековые проверки
Он считает количество входов и выходов и сравнивает их с задекларированным.
>Как-то это связано с inline, вроде
Вот как раз когда он не может посчитать входы и выходы (то есть когда у тебя row polymorphic функция), он пытается заинлайнить такой вызов, чтобы избавиться от роу-полиморфизма, ведь большинство rp-комбинаторов используются для control flow, а значит соответствующие quotation'ы будут compile-time константами (точнее даже литералами). Ну по крайней мере я это как-то так себе представляю.
>Кажется часть этих проверок динаическая.
...а когда у тебя row-polymorphic функция с нелитеральными аргументами, то приходится проверять стэк эффекты в рантайме.
>граница между parse time и run time
Тут я не совсем понял, что ты имеешь в виду. У него там весь синтаксис реализован в качестве библиотеки, через parsing words. Ну то есть они как раз выполняются в parse time. Плюс еще Ъ-макросы есть.
>>199945
Тебе нужно использовать форму call(--) с указанием стак эффекта, если я правильно понимаю.
>>200474
>Зачем нужен механизм 'обёрток' - <wrapper>
Даже не ебу, что это такое, лол. Придется пойти погуглить, йей. :3
>Механизм локальных переменных - это такой костыль?
Ну просто иногда использовать именованные переменные удобнее, чем пердолиться в комбинаторы. Я бы не назвал это "костылем" - просто еще одна возможность. Имхо, конкатенативщина без опциональных именованных аргументов ненужна.
>>200514
Насколько я понимаю - нет. Если проводить аналогию с лишпами, то parsing words - это как reader macros (за исключением того, что перед ними сперва текст прогоняется через лексер). То есть в parse-time отдельные токены парсятся в значения, потом в compile-time эти значения невычисленными берутся и крутятся-вертятся туда-сюда, а потом в рантайме это уже все наконец вычисляется.
А ты пейпер читал? http://factorcode.org/slava/dls.pdf - вот этот, там вроде про это есть. Если что, я не пишу на факторе, так что не ожидай от меня подробных и корректных объяснений.
>как проходят стековые проверки
Он считает количество входов и выходов и сравнивает их с задекларированным.
>Как-то это связано с inline, вроде
Вот как раз когда он не может посчитать входы и выходы (то есть когда у тебя row polymorphic функция), он пытается заинлайнить такой вызов, чтобы избавиться от роу-полиморфизма, ведь большинство rp-комбинаторов используются для control flow, а значит соответствующие quotation'ы будут compile-time константами (точнее даже литералами). Ну по крайней мере я это как-то так себе представляю.
>Кажется часть этих проверок динаическая.
...а когда у тебя row-polymorphic функция с нелитеральными аргументами, то приходится проверять стэк эффекты в рантайме.
>граница между parse time и run time
Тут я не совсем понял, что ты имеешь в виду. У него там весь синтаксис реализован в качестве библиотеки, через parsing words. Ну то есть они как раз выполняются в parse time. Плюс еще Ъ-макросы есть.
>>199945
Тебе нужно использовать форму call(--) с указанием стак эффекта, если я правильно понимаю.
>>200474
>Зачем нужен механизм 'обёрток' - <wrapper>
Даже не ебу, что это такое, лол. Придется пойти погуглить, йей. :3
>Механизм локальных переменных - это такой костыль?
Ну просто иногда использовать именованные переменные удобнее, чем пердолиться в комбинаторы. Я бы не назвал это "костылем" - просто еще одна возможность. Имхо, конкатенативщина без опциональных именованных аргументов ненужна.
>>200514
Насколько я понимаю - нет. Если проводить аналогию с лишпами, то parsing words - это как reader macros (за исключением того, что перед ними сперва текст прогоняется через лексер). То есть в parse-time отдельные токены парсятся в значения, потом в compile-time эти значения невычисленными берутся и крутятся-вертятся туда-сюда, а потом в рантайме это уже все наконец вычисляется.
А это кому-то надо? Если тебе интересно, можешь заняться.
Большинство фортов - минималистичная велосипедная ОС. Суть форта - работа на голом железе без лишних абстракций.
В чём главное отличие Фактора от Форта?
В Факторе есть мультиметоды?
>В чём главное отличие Фактора от Форта?
Проще сказать, в чем их сходство (конкатенативность, постфиксный синтаксис).
>В Факторе есть мультиметоды?
Да вроде есть: http://docs.factorcode.org/content/article-generic.html
>Да вроде есть
Как понимать тогда это? http://docs.factorcode.org/content/vocab-multi-methods.html
При Runtime code reloading останавливаются все потоки в образе (image) или нет? Какой там механизм, вообще?
Retain stack используется для временного храниния информации: dip ( x quot -- x ) переносит x из data stack в retain stack на время выполнения цитаты quot.
Насколько я понимаю, retain stack важен, потому что dip - примитив и играет фундаментальную роль в конкатенативной семантике.
Кстати, с 0.98 "Development release" FUEL хорошо работает.
>Не подходит для гарвардской архитектуры (AVR).
Подходит, есть имплементации
>>167532
> Почему он не взлетел?
Нишевый язык был популярен в своей нише. Лоследнее, где я его видел - это упоминания в https://en.wikipedia.org/wiki/Open_Firmware
>В Факторе есть мультиметоды?
Запланировано на 0.99. Неизвестно, когда будет - 0.98 просрочили на 3 года.
>а реализация хуйня полная
Ну автор фактора потом в эппл ушел компилятор свифта делать, бгг. А чо у тебя там за уберпрога-то, гитхублаб есть? Ты пацанам из фактора написал, чо они ответили?
>Ну автор фактора потом в эппл ушел компилятор свифта делать
Да я знаю стори,много че прочитал, терь фанат фортоподобной хуйни.
>А чо у тебя там за уберпрога-то
Ды не суть уже, у меня подгорело и я забил нахуй, а что писать пацанам хз, я свой
код раскрывать нехочу, да и просто не нравится код внутренний, хуевая архитектура.
Не думаю что помогло бы чем то лол, потом наткнулся бы опять, тем более сталкивался
с багами среды самой много раз, то задача не отвечает, то гуи поплывет, и прочее.
Ну его же поддерживают как я понимаю полтора инвалида уже давно, так что тащем-то неудивительно, что там много багов накопилось. пили свой конкатенативный язык
Нихуя не попутал, харкаю тебе в ебало чмоха, еще раз зайдешь сюда со своей ржавой парашей, отпизжу, а в архитектуре fail как минимум из за global state, да там достаточно блять посмотреть на доку про встраивание фактора в сишку. А про стори я проиграл, уже блять ослеп пидор.
А я от думаю, но надо еще много вопросов решить, хотя вот идей у меня уже много набралось, не только по фортоподобным языкам, а вообще. Мб через года 2 начну, не хочу просто так пилить хуйню.
Это не проблема форта, а проблема компиляторов. Например SP-Forth компилирует в "обычный код".
А я короче туплю, идей вообще никаких нет. Есть какая-нибудь задача, на которую этот ваш форт хорошо ляжет, да так чтоб студент на втором курсе запилить смог?
Что ты понимаешь под "реальностью"? Для идей по части компьютер сайенс посмотри на joy, можешь еще "комбинаторная логика в программировании" (Вольфенгаген, 2000) навернуть. Еще прикольная идея тут: "Push-forth: a Light-weight, Strongly-typed, Stack-based Genetic Programming Language", крошечный пейпер на 5 страниц. Ну и на фактор конечно посмотри, как пример чего-то более практичного. Я вообще не очень понимаю, что должно значить "какую-то реальную проблему решал" в применении к языкам программирования (ну, в биткоине контракты на фортоподобном языке емнип пишутся, например). И какой у вас уровень вузика тоже не знаю, так что хз, смотри сам.
Слышал в том-треде-от-ксеноцифала-на-sql.ru, что на нем легко его интерпретатор для нового железа. По мне неактуально совсем, архитектуры устоялись и подо все есть компилятор си, а подо что нету, легко запилить llvm-бэкенд.
Только вот Форт даёт хороший годный код, а Си - алголоподобная структурная лапша.
Так форт это подход всё таки или язык? Почему не сделали универсального форта для написания на нем последующих фортов под задачу?
Что-то не особо на это похоже. Или я что-то не понимаю в форте.
Я делал самодельный стековый процессор по образцу J1 и простейший форт для него. Так в результате код на половину состоял из чего-то вроде ROT SWAP OVER. Как от такого избавиться, сохранив ту же производительность? Сам я не программист, если что.
>чего-то вроде ROT SWAP OVER. Как от такого избавиться
Ты что? Это-ж самая годнота. Правда, чтобы это осознать, надо сначала неслабо так комбинаторную логику освоить.
Хорошо, приведу тогда пример. В АЛУ процессора нет XOR, поэтому приходится делать как-то так.
: XOR 2DUP NOT AND -ROT SWAP NOT AND OR ;
И так со всем остальным. Это что, понятный с первого взгляда код?
Во-первых, это - дело навыка.
Во-вторых, комбинировать комбинаторы можно сколь угодно понятно. Осваивай КЛ. Почитай рекомедации Чака Мура, там, о составлении словарей снизу-вверх.
>Во-первых, это - дело навыка.
>Во-вторых, комбинировать комбинаторы можно сколь угодно понятно.
Тогда приведи свой код того же XOR-а. А то что-то не верится.
Я не писал XOR на Форте. Но вот такое определение в аппликативной записи КЛ мне кажется довольно идиоматичным.
Можно его переписать в конкатенативной семантике. Но у меня нет сейчас на это времени. Можешь сам попробовать.
Сколько непонятных слов...
ANS Forth бестиповый изначально, но можно добавить, на то он и форт.
Это копия, сохраненная 18 декабря 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.