Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
simne писал(а): В принципе ничего особенного я со своего первого взгляда не нашел (я слабый фортер), кроме уже упомянутого - что он принципиально был сделан легкопереносимым (всего 29 слов, включая 3 слова ввода/вывода для ДОС, реализованы на асме, остальные слова высокоуровневые).
а это и есть его главное достоинство. eForth портирован за счет этой своей простоты на кучу платформ.
Но, сам по себе он тормозной, то есть чего-то выдающегося от него ожидать не стоит.
[quote="simne"]В принципе ничего особенного я со своего первого взгляда не нашел (я слабый фортер), кроме уже упомянутого - что он принципиально был сделан легкопереносимым (всего 29 слов, включая 3 слова ввода/вывода для ДОС, реализованы на асме, остальные слова высокоуровневые).[/quote]
а это и есть его главное достоинство. eForth портирован за счет этой своей простоты на кучу платформ.
Но, сам по себе он тормозной, то есть чего-то выдающегося от него ожидать не стоит.
|
|
|
|
Добавлено: Вс июн 21, 2009 21:22 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Тут кто-то спрашивал про e, так вот он eForth:
http://www.baymoon.com/~bimu/forth/
В принципе ничего особенного я со своего первого взгляда не нашел (я слабый фортер), кроме уже упомянутого - что он принципиально был сделан легкопереносимым (всего 29 слов, включая 3 слова ввода/вывода для ДОС, реализованы на асме, остальные слова высокоуровневые).
Переносимость сделана по принципу целевой компиляции - есть некий компилятор (с закрытым кодом и без документации), которому на вход подается описание системы (явно некоторое подмножество форта) и словарь (словарь частично на форт-ассемблере, и я так понял, может быть полностью форт-ассемблерный), и из них генерируется целевая система. Честно, еще не пробовал использовать (лень заводить эмулятор), но вроде все выглядит серьезно.
Очень порадовало что размер кода для компиляции системы под ДОС всего 46к, но это не совсем честный размер - судя по всему в целевом компиляторе интегрирован форт-ассемблер или оно вызывает masm (или что-то другое).
Однозначно минус что самая интересная часть с закрытым кодом, второй минус что общедоступно только ДОС-версия (и понятно что без того самого компилятора маловероятно сделать версии для других архитектур), и давно никаких новостей.
Менеджеров памяти (чтобы работать за пределами 64к) не обнаружил.
Когда-то давно пробовал pygmy (пытался делать игрушку на pygmy 1.4, которую вобщем забросил, но саму систему попробовал), и что порадовало, там вся система с исходниками на форте-же (частично форт-ассемблер), и можно без проблем было сделать двоичный вариант своей программы (буквально на уровне добавления к коду пары строк).
Сам форт простой форт для ДОС, без каких-либо изощрений (смотрел глазами несколько реализаций фортов на x86), версия 1.5 уже была с встроенной многопотоковостью.
Недостатки: проект только под ДОС и давно новостей нет.
Менеджера памяти в pygmy точно не было, но через форт-ассемблер можно было вылезать куда угодно (я сделал графические примитивы под режим 320х200x8бит и загрузку палитры в VGA).
Тут кто-то спрашивал про e, так вот он eForth:
http://www.baymoon.com/~bimu/forth/
В принципе ничего особенного я со своего первого взгляда не нашел (я слабый фортер), кроме уже упомянутого - что он принципиально был сделан легкопереносимым (всего 29 слов, включая 3 слова ввода/вывода для ДОС, реализованы на асме, остальные слова высокоуровневые).
Переносимость сделана по принципу целевой компиляции - есть некий компилятор (с закрытым кодом и без документации), которому на вход подается описание системы (явно некоторое подмножество форта) и словарь (словарь частично на форт-ассемблере, и я так понял, может быть полностью форт-ассемблерный), и из них генерируется целевая система. Честно, еще не пробовал использовать (лень заводить эмулятор), но вроде все выглядит серьезно.
Очень порадовало что размер кода для компиляции системы под ДОС всего 46к, но это не совсем честный размер - судя по всему в целевом компиляторе интегрирован форт-ассемблер или оно вызывает masm (или что-то другое).
Однозначно минус что самая интересная часть с закрытым кодом, второй минус что общедоступно только ДОС-версия (и понятно что без того самого компилятора маловероятно сделать версии для других архитектур), и давно никаких новостей.
Менеджеров памяти (чтобы работать за пределами 64к) не обнаружил.
Когда-то давно пробовал pygmy (пытался делать игрушку на pygmy 1.4, которую вобщем забросил, но саму систему попробовал), и что порадовало, там вся система с исходниками на форте-же (частично форт-ассемблер), и можно без проблем было сделать двоичный вариант своей программы (буквально на уровне добавления к коду пары строк).
Сам форт простой форт для ДОС, без каких-либо изощрений (смотрел глазами несколько реализаций фортов на x86), версия 1.5 уже была с встроенной многопотоковостью.
Недостатки: проект только под ДОС и давно новостей нет.
Менеджера памяти в pygmy точно не было, но через форт-ассемблер можно было вылезать куда угодно (я сделал графические примитивы под режим 320х200x8бит и загрузку палитры в VGA).
|
|
|
|
Добавлено: Вс июн 21, 2009 21:16 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
А кто может рассказать о DSFORTH и чем он отличается от СПФ?
А кто может рассказать о DSFORTH и чем он отличается от СПФ?
|
|
|
|
Добавлено: Сб авг 05, 2006 06:18 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Chrono Syndrome писал(а): бесплатную, имую, Форт-систему под Windows, прародителем которой был небезызвестный PC-FORTH.
Замечу, что это был один из лучших фортов, которые мне встречались с очень оригинальным методом next (хоть и медленным - зато позволявшим адресовать в досе всю память в пределах первого мегабайта не задумываясь о том, как это делать Только вот он был слишком большим, как для форта просто необьятным - по крайней мере мне так казалось, а я сравнивал с info4th. И еще он был одноязычным. Писать по-русски в нем было нельзя. Потом я встречал решения этой проблемы, но он для меня уже был неактуален.
Его потомок, на сколько я понимаю - это самый популярный форт-проект за рубежом. К тому же это открытый и бесплатный проект. Не нравится он мне своей монстрячностью. Уж больно большой. По-моему он проигрывает СПФ-у по продуманности и простоте, а смалу по удобству.
Вокруг него вроде бы обсуждался видеопроигрыватель и какой-то просмотрщик ( я не разбирался - только читал посты в группу) А сейчас во всю обсуждается IDE и проек искусственного интелекта - вроде уже работающего. Может кто расскажет лучше???
[quote="Chrono Syndrome"]бесплатную, имую, Форт-систему под Windows, прародителем которой был небезызвестный PC-FORTH. [/quote]
Замечу, что это был один из лучших фортов, которые мне встречались с очень оригинальным методом next (хоть и медленным - зато позволявшим адресовать в досе всю память в пределах первого мегабайта не задумываясь о том, как это делать 8) Только вот он был слишком большим, как для форта просто необьятным - по крайней мере мне так казалось, а я сравнивал с info4th. И еще он был одноязычным. Писать по-русски в нем было нельзя. Потом я встречал решения этой проблемы, но он для меня уже был неактуален.
Его потомок, на сколько я понимаю - это самый популярный форт-проект за рубежом. К тому же это открытый и бесплатный проект. Не нравится он мне своей монстрячностью. Уж больно большой. По-моему он проигрывает СПФ-у по продуманности и простоте, а смалу по удобству.
Вокруг него вроде бы обсуждался видеопроигрыватель и какой-то просмотрщик ( я не разбирался - только читал посты в группу) А сейчас во всю обсуждается IDE и проек искусственного интелекта - вроде уже работающего. Может кто расскажет лучше???
|
|
|
|
Добавлено: Вт авг 01, 2006 04:26 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Так, ладно, значит теперь моя очередь...
Итак, Win32FORTH (обитает по адресу Http://Win32FORTH.ORG), представляет собой современную, бесплатную, имую, Форт-систему под Windows, прародителем которой был небезызвестный PC-FORTH. Проект активно развивается. Имеется встроенный многооконый текстовый редактор с подсветкой синтаксиса, а также менеджер проектов и конструтор форм (В скором времени обещают обьеденить все это хозяйство в одну IDE). Поддерживается ООП, причем все GUI, а также большинство библиотек держаться именно на нем. Тип кода: ITC, но планируется переход на STC. Имеются хорошие возможности для DEBUG'а, а также другие полезные инструменты, в т.ч. для новичков. Синтаксис не чувствителен к регистру. Ассемблер префиксный, как и положенно у нормальных людей . Фух, вроде ничего не забыла . Однако есть и недостатки, а именно:
*Англоязычность.
*Невозможность создавать .DLL (раньше была...Потом сплыла, когда ведущий программист покинул проект ... Теперь обещают вернуть)
*Некоторая тормознутость (Обещаю поправить переходом нат STC)
Но на мой взгляд они не являются существенными
Ведикт: собственно говоря, лично я использую именно эту реализацию, чего и вам рекомендую .
Так, ладно, значит теперь моя очередь...
Итак, Win32FORTH (обитает по адресу [url]Http://Win32FORTH.ORG[/url]), представляет собой современную, [b]бесплатную[/b], имую, Форт-систему под Windows, прародителем которой был небезызвестный PC-FORTH. Проект активно развивается. Имеется встроенный многооконый текстовый редактор с подсветкой синтаксиса, а также менеджер проектов и конструтор форм (В скором времени обещают обьеденить все это хозяйство в одну IDE). Поддерживается ООП, причем все GUI, а также большинство библиотек держаться именно на нем. Тип кода: ITC, но планируется переход на STC. Имеются хорошие возможности для DEBUG'а, а также другие полезные инструменты, в т.ч. для новичков. Синтаксис не чувствителен к регистру. Ассемблер префиксный, как и положенно у нормальных людей :twisted: . Фух, вроде ничего не забыла :) . Однако есть и недостатки, а именно:
*Англоязычность.
*Невозможность создавать .DLL (раньше была...Потом сплыла, когда ведущий программист покинул проект :( ... Теперь обещают вернуть)
*Некоторая тормознутость (Обещаю поправить переходом нат STC)
Но на мой взгляд они не являются существенными ;)
Ведикт: собственно говоря, лично я использую именно эту реализацию, чего и вам рекомендую ;) .
|
|
|
|
Добавлено: Вс июл 30, 2006 17:44 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Михаил, при всем уважении к выполненной работе, оптимизатор в спф - слишком сложный и громоздкий. Просто я не могу быть уверен в нем так же, как в остальной части форт-системы. Как я понимаю, в нем до сих пор изредка обнаруживаются ошибки. Наконец, я не использую больше spf .
А в retroforth'e inline-определения тоже ничем не отличаются от обычных forth-слов. Единственное ограничение - такие определения в своем теле не должны содержать $c3 (ret).
В retro AFAIK словарь один.
Михаил, при всем уважении к выполненной работе, оптимизатор в спф - слишком сложный и громоздкий. Просто я не могу быть уверен в нем так же, как в остальной части форт-системы. Как я понимаю, в нем до сих пор изредка обнаруживаются ошибки. Наконец, я не использую больше spf :).
А в retroforth'e inline-определения тоже ничем не отличаются от обычных forth-слов. Единственное ограничение - такие определения в своем теле не должны содержать $c3 (ret).
В retro AFAIK словарь один.
|
|
|
|
Добавлено: Вт июл 25, 2006 15:39 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Icefall писал(а): Избыток может быть оправдан Например, inline-определения оптимизируют код макроподстановкой без всяких дополнительных оптимизаторов.
Чем плох дополнительный оптимизатор? В СПФ он позволяет
пользователю не знать о своем существовании, просто программа
работает быстрее.
[quote="Icefall"] Избыток может быть оправдан 8) Например, inline-определения оптимизируют код макроподстановкой без всяких дополнительных оптимизаторов. [/quote]
Чем плох дополнительный оптимизатор? В СПФ он позволяет
пользователю не знать о своем существовании, просто программа
работает быстрее.
|
|
|
|
Добавлено: Вт июл 25, 2006 15:08 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
oleg писал(а): Или дополнительное поле(вектор) в самом слове? Именно так oleg писал(а): я понимаю что можно сделать так: .. find if DUP >TypeField @ EXECUTE THEN ..
Угу, типа того. Только на асме Хищник писал(а): Зато в интерпретаторе if-ы написаны один раз. А классы требуют сопровождения во всех проектах.
Что значит требуют сопровождения? Выше описанные - они уже есть в ядре. А создавать свои классы обычно требуется там, где используется does>. Впрочем, я использую последнее.
[quote="oleg"]Или дополнительное поле(вектор) в самом слове?[/quote] Именно так [quote="oleg"] я понимаю что можно сделать так: .. find if DUP >TypeField @ EXECUTE THEN .. [/quote] Угу, типа того. Только на асме :)
[quote="Хищник"]Зато в интерпретаторе if-ы написаны один раз. А классы требуют сопровождения во всех проектах.[/quote]
Что значит требуют сопровождения? Выше описанные - они уже есть в ядре. А создавать свои классы обычно требуется там, где используется does>. Впрочем, я использую последнее.
|
|
|
|
Добавлено: Вт июл 25, 2006 09:29 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
WingLion писал(а): oleg писал(а): single 0343 double 34.05 ну или что-то вроде Cool .
Кто-то раньше предлагал более другой вариант с :
что-то типа:
noname: ttttt ; " name" named
а в постскрипте делается так: /name def { something } связать ( не помню как это слово называется в постскрипте).
То есть полный постфикс!
[quote="WingLion"]oleg писал(а): single 0343 double 34.05 ну или что-то вроде Cool .[/quote]
Кто-то раньше предлагал более другой ;) вариант с :
что-то типа:
noname: ttttt ; " name" named
а в постскрипте делается так: /name def { something } связать ( не помню как это слово называется в постскрипте).
То есть полный постфикс!
|
|
|
|
Добавлено: Вт июл 25, 2006 00:57 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Icefall писал(а): мне как раз кажется, что классы вместо флагов - проще. Флаги можно комбинировать, а может слово относиться сразу к нескольким классам? Icefall писал(а): флаги надо устанавливать, читать и в зависимости от состояния (установлен/не установлен) выполнять или нет соотв. код. т.е. куча if'ов в интерпретаторе. обычно проверяется всего один флаг immediate. это одно ветвление .. ?immediate If compile Else excute Then .. C классами будет чуточку посложнее - уже не ветвление а цикл? Или дополнительное поле(вектор) в самом слове? я понимаю что можно сделать так: .. find if DUP >TypeField @ EXECUTE THEN .. Icefall писал(а): а тут все линейно: всегда вызывается обработчик класса. как раз само слово и определяет, что интерпретатору с ним делать.
Я тут, как Василий Иванович "нутром чую, что 0,5 + 0,5 будет литра, только вот как доказать?" перевариваю.
[quote="Icefall"]мне как раз кажется, что классы вместо флагов - проще.[/quote] Флаги можно комбинировать, а может слово относиться сразу к нескольким классам?
[quote="Icefall"]флаги надо устанавливать, читать и в зависимости от состояния (установлен/не установлен) выполнять или нет соотв. код. т.е. куча if'ов в интерпретаторе.[/quote] обычно проверяется всего один флаг immediate. это одно ветвление 8)
.. ?immediate If compile Else excute Then ..
C классами будет чуточку посложнее - уже не ветвление а цикл? Или дополнительное поле(вектор) в самом слове?
я понимаю что можно сделать так: .. find if DUP >TypeField @ EXECUTE THEN ..
[quote="Icefall"]а тут все линейно: всегда вызывается обработчик класса. как раз само слово и определяет, что интерпретатору с ним делать.[/quote]
Я тут, как Василий Иванович "нутром чую, что 0,5 + 0,5 будет литра, только вот как доказать?" перевариваю.
|
|
|
|
Добавлено: Вт июл 25, 2006 00:14 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Зато в интерпретаторе if-ы написаны один раз. А классы требуют сопровождения во всех проектах.
Зато в интерпретаторе if-ы написаны один раз. А классы требуют сопровождения во всех проектах.
|
|
|
|
Добавлено: Вт июл 25, 2006 00:11 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
мне как раз кажется, что классы вместо флагов - проще. флаги надо устанавливать, читать и в зависимости от состояния (установлен/не установлен) выполнять или нет соотв. код. т.е. куча if'ов в интерпретаторе. а тут все линейно: всегда вызывается обработчик класса. как раз само слово и определяет, что интерпретатору с ним делать.
мне как раз кажется, что классы вместо флагов - проще. флаги надо устанавливать, читать и в зависимости от состояния (установлен/не установлен) выполнять или нет соотв. код. т.е. куча if'ов в интерпретаторе. а тут все линейно: всегда вызывается обработчик класса. как раз [i]само слово[/i] и определяет, что интерпретатору с ним делать.
|
|
|
|
Добавлено: Пн июл 24, 2006 23:40 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
.class ( xt -- )
The class handler for the provided classes.
During compilation, a call to the xt is compiled.
During interpretation, the xt is executed.
.data ( xt -- )
.data is used for data structures and numbers. It
will leave the xt on the stack during interpretation
and compile the xt as a literal during compilation.
.forth ( xt -- )
The class handler for forth words.
Semantics are the same as with .class
.self ( xt -- )
Words using this class are always called, unless used
in a definition with a prefixing word immediately
before them. Generally words using this class will
need to be state-smart.
.macro ( xt -- )
Used for compiler macros, words with a class of .macro
are always called during compilation (unless preceded
by a prefixing word). They are ignored during
interpretation.
.inline ( xt -- )
This is a special class used for certain primitives.
It will copy the machine code (up to a hex value of
$C3, the ret instruction) into the current definition
during compilation. During interpretation the word
is called normally. Only words that do not use $c3
and have no calls to other words can use the .inline
class.
Опять усложнение форта. Мне нравилось всегда что форт понимает всего один тип понятий - слово. А само слово уже знает, что будет делать. Из этого немного выпадают слова c immediate признаком, точнее как раз слова не имеющие такого признака.
( кстати идея сделать в форте все слова immediate - упростим interpret за счет усложнения поведения каждого из слов а литералы сделаем таким образом:
single 0343
double 34.05
ну или что-то вроде
.class ( xt -- )
The class handler for the provided classes.
During compilation, a call to the xt is compiled.
During interpretation, the xt is executed.
.data ( xt -- )
.data is used for data structures and numbers. It
will leave the xt on the stack during interpretation
and compile the xt as a literal during compilation.
.forth ( xt -- )
The class handler for forth words.
Semantics are the same as with .class
.self ( xt -- )
Words using this class are always called, unless used
in a definition with a prefixing word immediately
before them. Generally words using this class will
need to be state-smart.
.macro ( xt -- )
Used for compiler macros, words with a class of .macro
are always called during compilation (unless preceded
by a prefixing word). They are ignored during
interpretation.
.inline ( xt -- )
This is a special class used for certain primitives.
It will copy the machine code (up to a hex value of
$C3, the ret instruction) into the current definition
during compilation. During interpretation the word
is called normally. Only words that do not use $c3
and have no calls to other words can use the .inline
class.
Опять усложнение форта. Мне нравилось всегда что форт понимает всего один тип понятий - слово. А само слово уже знает, что будет делать. Из этого немного выпадают слова c immediate признаком, точнее как раз слова не имеющие такого признака.
( кстати идея 8) сделать в форте все слова immediate - упростим interpret за счет усложнения поведения каждого из слов ;) а литералы сделаем таким образом:
single 0343
double 34.05
ну или что-то вроде 8)
|
|
|
|
Добавлено: Пн июл 24, 2006 23:29 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Icefall писал(а): Избыток может быть оправдан Cool Например, inline-определения оптимизируют код макроподстановкой без всяких дополнительных оптимизаторов.
Я делал флаг INLINE с последующим "разворотом" этого слова при компиляции. И никаких классов.
[quote="Icefall"]Избыток может быть оправдан Cool Например, inline-определения оптимизируют код макроподстановкой без всяких дополнительных оптимизаторов. [/quote]
Я делал флаг INLINE с последующим "разворотом" этого слова при компиляции. И никаких классов.
|
|
|
|
Добавлено: Пн июл 24, 2006 23:14 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
oleg писал(а): и получаем избыток информации + частично префиксную нотацию 8( Я бы по крайней мере предпочел что-то такое:
f: name .. ; imm: name .. ;
Избыток может быть оправдан Например, inline-определения оптимизируют код макроподстановкой без всяких дополнительных оптимизаторов. oleg писал(а): Вобщем на первый взгляд не нравится
Естественно, надо пробовать.
Рекомендую почитать доку по Rx, она начинается как раз объяснением классов слов.
[quote="oleg"] и получаем избыток информации + частично префиксную нотацию 8( Я бы по крайней мере предпочел что-то такое:
f: name .. ; imm: name .. ; [/quote] Избыток может быть оправдан 8) Например, inline-определения оптимизируют код макроподстановкой без всяких дополнительных оптимизаторов.
[quote="oleg"]Вобщем на первый взгляд не нравится :)[/quote]
Естественно, надо пробовать.
Рекомендую почитать [url=http://retroforth.org/doc/handbook/rx]доку по Rx[/url], она начинается как раз объяснением классов слов.
|
|
|
|
Добавлено: Пн июл 24, 2006 23:11 |
|
|
|
|