Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб апр 20, 2024 03:32

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 152 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.
Автор Сообщение
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Ср июл 06, 2016 21:19 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
Не принимайте на свой счет, просто я вспоминаю, сколько было на эту тему обсуждений, сколько различных проектов появлялось за последние десятилетия. Кажется, к настоящему моменту страсти уже давно улеглись.

Лично я начал интересоваться этой тематикой в конце 90-х. Еще до появления "новой волны" в виде Joy и неуклюжего термина "конкатенативный". В первую очередь, влияние оказала, конечно же, тьюринговская лекция Бэкуса, а также его языки FP/FL. Помимо прочего, автор показал, что функциональное программирование совершенно не обязательно должно основываться на лямбда-исчислении. Простая мысль, но сейчас, кажется, до не доходят все реже. Тем не менее, комбинаторный подход, как он есть, из учебников по мат. логике, к прагматичному Форту неприменим. Однако, тут важнее сама идея -- базис функционального языка может быть построен разными способами. И один из таких способов -- стековые комбинаторы, о которых я узнал из работ Генри Бэйкера. Есть определенная ирония в том, что "функциональную суть" Форта углядел один из самых талантливых лисп-хакеров, не правда ли?

В конце 90-х я попытался продвигать функциональный подход в нашем форт-сообществе. Реализацию "лямбда"-функции в две строчки фортеры восприняли благосклонно. Более масштабный подход из статьи "Функциональное программирование на языке Форт", увы, практиков не заинтересовал ( http://sovietov.com/txt/forthfp.html ). Далее, в скриптовом форт/лисп-подобном языке Forpost я попробовал оценить, насколько возможно практическое околофункциональное программирование еще в более минималистичной среде, чем классический Форт. Среди забавных моментов упомяну использование самомодификации кода для имитации лексических замыканий.

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

P.S. А примеры кода показывайте конечно! :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пт июл 08, 2016 02:17 
Не в сети

Зарегистрирован: Чт ноя 23, 2006 00:44
Сообщения: 494
Откуда: СПб
Благодарил (а): 19 раз.
Поблагодарили: 8 раз.
Victor__v писал(а):
Кстати, просто интересно
Допустим надо сравнить часть строки со строкой длинной 4 байта
Вместо того, чтобы писать 2dup s" xxxx" compare
Можно написать так over @ [ s" xxxx" drop @ lit, ] =
В каком языке ещё можно так "преобразовать" типы?
Ест-но ассемблер не считается

Вот просто тупо кусочек кода из "системы" уже 3-и года управляющей отоплением на моей даче:
Код:
2@ $3a54 $4d43 d=   \ Входящее сообщение
      if
:shuffle;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пт июл 08, 2016 12:56 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
что-то более самобытное. Может примеры кода?
Я бы хотел посмотреть. Вот честное пионерское. Нету ли где нибудь странички проекта? Какая область задач перед проектом ставилась?

Цитата:
ИМНИП, picolisp только в 90-е был "чистым" интерпретатором, сейчас же он содержит компилятор в машкод. Да, и тогда он имел компилятор, только в промежуточный код, который представлял собой список с командами виртуальной машины.
Нет, пиколисп по прежнему виртуален, как и в 90е. Его только переписали на си целиком.

"Компиляция в промежуточный код" в большенстве лисп-интерпретаторах весьма условная. Этот "промежуточный" код - символьные вырожения, s-expression, почти полностью ("почти" - в виду синтаксического сахара) соответствует древовидной структуре исходника.

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пт июл 08, 2016 20:05 
Не в сети

Зарегистрирован: Пн июл 04, 2016 13:28
Сообщения: 39
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Desutorakuta писал(а):
Нету ли где нибудь странички проекта? Какая область задач перед проектом ставилась?

Я думаю, до популяризации проекта еще пока рановато. Насчет "области задач" я даже не знаю, что ответить) В начале просто хотелось избавиться от привязки к интерпретатору схемы. А затем во время работы над проектом появились следующие задачи: реализовать максимально простой вычислитель (eval), создать переносимый и нетребовательный сборщик мусора.
Desutorakuta писал(а):
Нет, пиколисп по прежнему виртуален, как и в 90е. Его только переписали на си целиком.
Я где-то читал, что для него был разработан компилятор в нативный код. Возможно ошибаюсь, тем более что этих пико-, микро-, фемта- и т.п. лиспов существует целая куча)
Desutorakuta писал(а):
"Компиляция в промежуточный код" в большенстве лисп-интерпретаторах весьма условная. Этот "промежуточный" код - символьные вырожения, s-expression, почти полностью ("почти" - в виду синтаксического сахара) соответствует древовидной структуре исходника.
Замечу, что у любой сложной реализации лиспа может быть несколько типов промежуточного кода. Все зависит от сложности компилятора.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пт июл 08, 2016 20:20 
Не в сети

Зарегистрирован: Пн июл 04, 2016 13:28
Сообщения: 39
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
true-grue писал(а):
Есть определенная ирония в том, что "функциональную суть" Форта углядел один из самых талантливых лисп-хакеров, не правда ли?
В этом, собственно, нет ничего удивительного) Форт ведь является "игрушкой" для инженеров, а их менее всего интересуют проблемы ФП.
true-grue писал(а):
Далее, в скриптовом форт/лисп-подобном языке Forpost я попробовал оценить, насколько возможно практическое околофункциональное программирование еще в более минималистичной среде, чем классический Форт. Среди забавных моментов упомяну использование самомодификации кода для имитации лексических замыканий.
Использовать самомодификацию кода для реализации лексических замыканий - сильный ход)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пт июл 08, 2016 21:29 
Не в сети

Зарегистрирован: Пн июл 04, 2016 13:28
Сообщения: 39
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Попробую неформально описать язык и виртуальную машину.

Виртуальная машина имеет два стека: стек данных и стек возвратов. Пользователю предоставлен доступ к обеим стекам. Слова манипуляции элементами стеков взяты из форта.
Только три типа данных являются вычислимыми: встроенные подпрограммы, символы и списки, а остальные не вычисляются (копируются на стек данных).
Для описания списков используются видоизмененные s-выражения: (1 2 . 3) -> [1 2|3]. В отличие от классического лиспа, NIL является не константой, а встроенной подпрограммой, выполняющей роль NOP. Списки вычисляются немедленно (как в лиспе), например, [1 2 3], как и [1 2|3] при вычислении кладут на стек: 1 2 3. А список [1|[2[3|+]|-]] --> -4. Чтобы избежания вычисления, используют qoute и его сокращение ' (синтаксический сахар), например, [quote [1 2 3]] --> [1 2 3] или '[1 2 3] --> [1 2 3].
Т.к. вам доступен стек возвратов, то вы можете контролировать порядок вычислений как вам угодно. Например, QUOTE можно реализовать так: '[>r car] 'quote bind или [def quote r> car].
В качестве закуски дам код хвосторекурсивного вычислителя потока:
Код:
[def interp #S: ... ibstrm -- ... ?...
  dup read
  dup eof eq [and? [over beof]]
  if 2drop
     [swap >r [>r] r> |interp]]
Пример использования:
Код:
"1 2 + ." ibopen interp
3


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пт июл 08, 2016 22:47 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
В таких учебных проектах главную пользу получает сам автор -- набирается опыта, знаний. Практичный стековый язык сегодня имел бы массивы-последовательности вместо архаичных списков с их точечными парами и тяжеловесным mark&sweep gc. Там бы минимально использовались стековые комбинаторы и был бы механизм именования значений в режиме связывания (однократного присваивания), с автоматическим генерированием соотв. перестановок.

P.S. Для вдохновения предлагаю посмотреть на комбинаторный язык Faust: http://faust.grame.fr/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Сб июл 09, 2016 14:12 
Не в сети

Зарегистрирован: Пн июл 04, 2016 13:28
Сообщения: 39
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
true-grue писал(а):
Практичный стековый язык сегодня имел бы массивы-последовательности вместо архаичных списков с их точечными парами и тяжеловесным mark&sweep gc.
С ваших слов, у моей реализации есть все, чтобы называться "практичным" стековым языком?
true-grue писал(а):
Там бы минимально использовались стековые комбинаторы и был бы механизм именования значений в режиме связывания (однократного присваивания), с автоматическим генерированием соотв. перестановок.
Да и это легко реализуется базовыми средствами, было бы желание. Вот только я пока не вижу в этом особой необходимости.
true-grue писал(а):
Для вдохновения предлагаю посмотреть на комбинаторный язык Faust: http://faust.grame.fr/
Спасибо, попробую заглянуть в его исходники.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пн сен 05, 2016 16:04 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Hishnik писал(а):
Точно стоит убрать компромиссные решения, которые были введены из-за ограничений аппаратной платформы, но более не актуальны: блоки, числа двойной длины с записью через точку, 16-битные реализации

Опять замечаю подчеркнутое стремление сделать Форт не работающим нигде кроме того огорода на котором пасетесь вы. Как будь-то кроме ПК и планшетов ничего больше не существует. А ведь существует. Существует мир встроенных систем и микроконтроллеров и для этого мира Форт подходит великолепно. Вы хотите чтобы больше не подходил ?
И куда вы собрались убрать 16-битные реализации ? В этом мире в массовом ходу 8-разрядные процессоры.


Последний раз редактировалось Ethereal Пн сен 05, 2016 17:44, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пн сен 05, 2016 16:12 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
vikt писал(а):
А мощь аппаратуры выросла в 1000 раз
Не далее как сегодня припаивал к микроконтроллеру 4-х мегагерцовый кварц.
Где-то и выросла. Только там где это даром не нужно по прежнему миллион операций в секунду.

Мысль :
Совершенствуйте Форт сколько вашей душе угодно. Но только не так чтобы он перестал быть применим там где применяется на ура, причем так, как будь-то специально для того и создан.


Последний раз редактировалось Ethereal Пн сен 05, 2016 16:17, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пн сен 05, 2016 16:13 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Desutorakuta писал(а):
Словарные записи должны иметь произвольный доступ, а не стековый (forget не должен забывать одну запись а не всё, определенное после)

Все это уже есть. Словарные записи итак имеют произвольный доступ. Забыть одну запись - это выставить у нее SMUDGE-бит. Он есть во многих реализациях. Если его нет, то исключить слово из односвязного списка, коим является словарь, подкорректировав у следующего за ним слова поле LFA. В общем, Ваше предложение реализуется определением нового слова NEW-FORGET в пару строчек длиной.

А FORGET - это не просто "забыть слово". Это забыть слово и освободить занимаемое им место в кодофайле. А такое возможно только вместе с освобождением всего, что определено и накомпилировано после него. Такой FORGET следует по любому сохранить.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пн сен 05, 2016 17:16 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Victor__v писал(а):
Это вот в форте придумали исчо стек данных. По факту, массив, на последний эл-т которого указывает регистр.
EBP, EAX и т.д.
Без всяких специальных слов для стека ( pop push), короче какой-то неполноценный стек :(
Это архитектура 80x86 неполноценная.
У PDP-11 стек данных данных можно было построить используя в качестве указателя любой регистр общего назначения. Например используем указателем стека данных регистр R4 :
MOV R0, -(R4) <- покласть в стек косвенно по R4 с предекрементом содержимое R0
MOV (R4)+, R0 <- извлечь в регистр R0 из стека косвенно по R4 с постинкрементом
А вместо R4 можно использовать R0 R1 R2 R3 R5
Вот R6 = SP, т.е это аппаратный стек возвратов. А R7 = PC счетчик команд

З.Ы.
Для работы со стеком не нужны специальные слова типа push и pop. Введение таких слов - крайне тупая идея. Нужны кроме обычной косвенной адресации еще косвенная адресация с постинкрементом и косвенная с предекрементом. Эти адресации кроме работы со стеком позволяют еще и работать со строками как от начала к концу, так и от конца к началу. Одним махом семерых убивахом.
Создателям 80x86 один хрен ведь пришлось создавать LODS STOS SCAS CMPS MOVS с постинк- и декрементом и еще флажок направления к ним вводить. А можно было вместо всего этого дикого огорода с PUSH POP LODS STOS SCAS CMPS MOVS флаг D ввести 2 режима адресации и ничего больше не надо. Все что нужно сделают обычные команды MOV и CMP с этими режимами адресации у операндов. Да еще и стеков будет сколько хош.


Последний раз редактировалось Ethereal Пн сен 05, 2016 18:26, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пн сен 05, 2016 17:32 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Desutorakuta писал(а):
Вот в чем разница между "контекстным словарём", и "текущим словарем"? Как можно уловить эту разницу из смысла слов "контекстный" и "текущий"?
Предлагаете что-то изменить в Форте в этом отношении, а по сути у Вас претензии только к терминологии.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пн сен 05, 2016 17:56 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Desutorakuta писал(а):
6. Словарная система вообще должна быть заметно переработана. Механизм текущий словарь/контекстный словарь должен быть ликвидирован как неочевидный.
Ну я же говорю, что это не механизм неочевидный, а это терминология для кое-кого не очевидная.

На самом деле все очевидно.
Если словарь ОТКУДА. И есть словарь КУДА.
Первый обозвали контекстным, а второй текущим.
А если называть первый ОТКУДА, а второй КУДА, то куда уж очевиднее.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-2016 - какой он?
СообщениеДобавлено: Пн сен 05, 2016 19:52 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1293
Благодарил (а): 4 раз.
Поблагодарили: 18 раз.
Ethereal писал(а):
Victor__v писал(а):
Это вот в форте придумали исчо стек данных. По факту, массив, на последний эл-т которого указывает регистр.
EBP, EAX и т.д.
Без всяких специальных слов для стека ( pop push), короче какой-то неполноценный стек :(
Это архитектура 80x86 неполноценная.
У PDP-11 стек данных данных можно было построить используя в качестве указателя любой регистр общего назначения. Например используем указателем стека данных регистр R4 :
MOV R0, -(R4) <- покласть в стек косвенно по R4 с предекрементом содержимое R0
MOV (R4)+, R0 <- извлечь в регистр R0 из стека косвенно по R4 с постинкрементом
А вместо R4 можно использовать R0 R1 R2 R3 R5
Вот R6 = SP, т.е это аппаратный стек возвратов. А R7 = PC счетчик команд

З.Ы.
Для работы со стеком не нужны специальные слова типа push и pop. Введение таких слов - крайне тупая идея. Нужны кроме обычной косвенной адресации еще косвенная адресация с постинкрементом и косвенная с предекрементом. Эти адресации кроме работы со стеком позволяют еще и работать со строками как от начала к концу, так и от конца к началу. Одним махом семерых убивахом.
Создателям 80x86 один хрен ведь пришлось создавать LODS STOS SCAS CMPS MOVS с постинк- и декрементом и еще флажок направления к ним вводить. А можно было вместо всего этого дикого огорода с PUSH POP LODS STOS SCAS CMPS MOVS флаг D ввести 2 режима адресации и ничего больше не надо. Все что нужно сделают обычные команды MOV и CMP с этими режимами адресации у операндов. Да еще и стеков будет сколько хош.


Эм, относительно других архитектур не владею нужной инфой.
А push/pop? Вот это понять трудно.
Если в архитектуре два стека. Лучше всё же иметь для каждого из них свои push/pop. Ну dpop dpush rpush rpop и всё.
Больше двух стеков, думаю, мало где надо.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 152 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 11  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB