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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 15:20 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
В сообщении
gudleifr писал(а):
LISP. Язык является саморасширяющимся в гораздо большей степени, чем Forth.
и в сообщении
gudleifr писал(а):
Т.е. саморасширение [LISP] начинается глубже, чем у Forth.
затрунуты интересные мысли.
Можно подробнее? И желательно только по данной теме. ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 15:49 
П.Хендерсон, ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ, МОСКВА «МИР» 1983
Рассматривается некоторый ограниченный (инструментальный) LISP, зато подробно рассматривается, как вся эта фигня "самозамыкается".
Оттуда:
Компилятор
Изображение
Откомпилированный компилятор
Изображение
где числа - номера команд некой SECD-машины (расшифровывается Stack Environment Control list Dump).


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 16:21 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Уверен, Forth на Forth-е тоже можно написать. Я, правда, писАл на Perl и Asm . Результат меня не удовлетворил :( , но это не принципиально. ;)

Вот исходник компилятора ColorLessColorForth на ColorLessColorForth. Причем для x86, а не спецмашины! :)

А как оценивается "саморасширяемость"?

IMHO наличие саморасширяемости уже уравнивает системы. Хотя можно говорить об удобстве и мощности языка. И если по функциональности FORTH и LISP примерно одинаковы (ну или могут быть сравнимы, если что-то дописАть), то гибкий синтаксис Forth-а дает ему преимущество. И еще одно преимущество - доступ к оборудованию. Конечно, это только потенциальные возможности. :( Реально среда и окружение (напр. библиотеки) у LISP-ов более развито.

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 16:39 
in4 писал(а):
Уверен, Forth на Forth-е тоже можно написать.
Формально, задача вывода программой собственного исходного текста решается практически на всех языках программирования. Но имеем ли мы Forth, написанный на Forth, в случае целевой компиляции? Ведь, по сути это ассемблирование (копирование). Не будем же мы реализовывать DUP через что-то, кроме ассемблерных инструкций?

Здесь мы имеем порочный круг. При реализации Forth на чистом Forth нужна, действительно, какая-то виртуальная Forth-машина. Но ее не реализовать на чистом Forth. Собрать из готовых частей? Но и их не написать на чистом Forth. Чем раньше мы разорвем этот круг и перейдем на язык ассемблера (пусть и встроенного в Forth), тем раньше это заработает.

На Forth, как и на других языках можно написать интерпретатор, компилятор или эмулятор. Но не потому, что он такой суперский, а потому, что это можно сделать даже на BASIC - путем копирования в файл кусков кода.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 17:27 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
gudleifr писал(а):
Но имеем ли мы Forth, написанный на Forth, в случае целевой компиляции?
Да. А если нет, то что это тогда?
gudleifr писал(а):
При реализации Forth на чистом Forth нужна, действительно, какая-то виртуальная Forth-машина. Но ее не реализовать на чистом Forth. Собрать из готовых частей? Но и их не написать на чистом Forth.
Почему? Части есть, сбор из готовых частей вполне в духе Forth-а. Мур так компилятор colorForth-а раскручивал. Я тоже... ;) Части были в коде x86. Результат - вполне Forth.
gudleifr писал(а):
Чем раньше мы разорвем этот круг и перейдем на язык ассемблера (пусть и встроенного в Forth), тем раньше это заработает.
Что заработает? :shuffle;
Была цель - получить как можно более простую разворачивающуюся среду для текстового языка. И поучиться при этом. Выбрал реализацию диалекта Fortha на Perl-е и потом на нем сделал остальную часть системы. Использовал таблицы кодов процессора.

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 17:34 
in4 писал(а):
Части были в коде x86. Результат - вполне Forth... Использовал таблицы кодов процессора.
Но это не чистый Forth, Perl, BASIC или на чем Вы это будете собирать. Это голое ассемблирование. Fort, просто, естественно расширяется встраиванием ассемблера и не имеет сложных соглашений по организации исполняемого кода.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 17:56 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
gudleifr писал(а):
Но это не чистый Forth, Perl, BASIC или на чем Вы это будете собирать.
А LISP чистый? ;)
Не вижу принципиальной разницы... :(
Где у LISP-а саморасширение "в гораздо большей степени"?
И где оно глубже? Куда смотреть?

ВМ чистого Лиспа попроще, чем у Форта, это да. Примитивов меньше... ЭТО позволяет выдвигать процитированные выше утверждения?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 18:16 
in4 писал(а):
ВМ чистого Лиспа попроще, чем у Форта, это да.
Она не проще, она просто есть. Что позволяет определять LISP на чем угодно (в смысле, язык определения полностью определяется ВМ). В том числе, и на самом LISP.
А Forth в его изложении Муром, представляет из себя самый простой способ написания на реальном языке. Использование внутри Forth тех же слов, что используются во внешнем языке - следствие обратного процесса: необходимости создать словарные статьи для внутренних подпрограмм для облегчения связывания. Причем, как я показывал ранее, самые смысловые подпрограммы (ACCESS, WORD, NUMBER, FIND...) почти чисто ассемблерные, невзирая на свою сложность. Более того, они могут быть переписаны под другое железо, но переопределить их "в стиле Forth" - расширяя функционал очень проблематично.
P.S. Отвечая на вопрос "о доступе к телу" коллеги Mihal-а. Нужно отметить, что таковой доступ - не принадлежность одного Forth. Вспомним, например, точки входа BASIC-процедур Спектрумов или прерывания BIOS.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 18:29 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Т.е. жесткая привязка к ВМ увеличивает степень и глубину саморасширения?

gudleifr писал(а):
Причем, как я показывал ранее, самые смысловые подпрограммы (ACCESS, WORD, NUMBER, FIND...) почти чисто ассемблерные, невзирая на свою сложность. Более того, они могут быть переписаны под другое железо, но переопределить их "в стиле Forth" - расширяя функционал очень проблематично.
Мне так не кажется. Более того, видел примеры, того же profit-а, который сделал диалект colorForth-а поверх SPF.
И я реализовывал эти слова как раз на Forth-е... :shuffle;
Можно подробнее о возникающих трудностях?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 18:44 
in4 писал(а):
Можно подробнее о возникающих трудностях?
Они практически не делятся на удобные где-то еще кирпичики. Например, тот же WORD :
Код:
   Header 4, 'WORD', @WORD   ; c -- ca
   push esi
   push edi
   mov al, bl
   mov edi, hMem      ; позиционирование
   mov ecx, [edi - 4]
   add edi, @3EIN@
   sub ecx, @3EIN@      ; исчерпание?
   jg @F      
   sub ecx, ecx
   jmp lWORD9
@@:   cmp al, 20h      ; разделитель - пробел?
   jnz lWORD5
@@:   cmp [edi], al      ; начало слова?
   ja @F
   inc edi         ; спецсимволы перед словом
   dec ecx
   jnz @B
   mov esi, edi      ; слово так и не началось
   mov ecx, edi
   jmp lWORD8
@@:   mov esi, edi      ; начало слова
@@:   cmp [edi], al      ; конец слова?
   jbe @F
   inc edi
   dec ecx
   jnz @B
   mov ecx, edi      ; слово до исчерпания
   jmp lWORD8
@@:   mov ecx, edi      ; слово кончилось
   inc edi
   jmp lWORD8
lWORD5:   repz scasb      ; разделители перед словом
   jnz @F
   mov esi, edi      ; слово так и не началось
   mov ecx, edi
   jmp lWORD8
@@:   dec edi         ; начало слова
   inc ecx
   mov esi, edi
   repnz scasb
   mov ecx, edi
   jnz lWORD8
   dec ecx         ; длина остатка
lWORD8:   sub edi, hMem      ; новая позиция
   mov @3EIN@, edi
   sub ecx, esi
   cmp ecx, 255
   jbe lWORD9
   mov ecx, 255      ; обрезание длинного слова
lWORD9: pop edi         ; перенос слова
   mov [edi], cl
   push edi
   inc edi
   rep movsb
   sub al, al
   stosb
   pop edi
   pop esi
   mov ebx, edi
   Next
Конечно, можно записать, как (функциональность немного другая)
Код:
: WORD
BLK @ ?DUP IF BLOCK ELSE TIB THEN
>IN @ + SWAP ENCLOSE >IN +! HERE 1+ SWAP DUP >R CMOVE
R> 1- HERE C! HERE ;
Но суть останется прежней: ENCLOSE , обеспечивающее основную функциональность, опять ассемблерное. А, вот, наглядности не прибавилось!


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 18:57 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
gudleifr писал(а):
Причем, как я показывал ранее, самые смысловые подпрограммы (ACCESS, WORD, NUMBER, FIND...) почти чисто ассемблерные, невзирая на свою сложность. Более того, они могут быть переписаны под другое железо, но переопределить их "в стиле Forth" - расширяя функционал очень проблематично.

Тот-же WORD на форте есть в книге Броуди. NUMBER - между делом на "недо"-фортах писал несколько различный версий без каких-то проблем. А FIND - банальный просмотр списка. У меня оно вообще вот так пишется(в простейшем случае):
Код:
STRING-LIST: SomeWords
: FIND   \ ( a u -- node|0 )
  SomeWords? ;

И где тут проблемы и сложности?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 19:03 
VoidVolker писал(а):
...
Про WORD - см. выше, а FIND у Вас шедеврален! Уже не в первый раз Вы считаете оптимальной функциональностью отсутствие таковой. (Кстати, а куда делся флаг?)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 19:45 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Не стоит противопоставлять Форт и Лисп (а вспомнить о Постскрипте).
Ассемблер реализовывать на Форте совсем не обязательно, Форт прекрасно "раскручивается" и с помощью других штатных методов, причем для любой необходимой платформы (просто с ассемблером проще, но даже ассемблеры бывают разные, см. пример асма Хищника)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 20:06 
mOleg писал(а):
Форт прекрасно "раскручивается" и с помощью других штатных методов
Там неявно везде присутствует неявное ассеблирование (или явная компиляция).
mOleg писал(а):
см. пример асма Хищника
Кстати, а почему никто не заметил, что этот "асм" - просто шутка?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Сравнение возможностей саморасширения Forth-LISP
СообщениеДобавлено: Вт мар 20, 2012 20:14 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
gudleifr писал(а):
Там неявно везде присутствует неявное ассеблирование (или явная компиляция).

я не знаю, что такое "неявное ассемблирование", поясните, как автор термина, что же это за чудо?

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

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


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

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


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

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