Forth
http://fforum.winglion.ru/

Новый стандарт или чего бы хотелось
http://fforum.winglion.ru/viewtopic.php?f=9&t=99
Страница 10 из 11

Автор:  mOleg [ Ср окт 04, 2006 14:47 ]
Заголовок сообщения: 

А в сторону strongforth смотрели?
Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд

Автор:  chess [ Ср окт 04, 2006 16:19 ]
Заголовок сообщения: 

oleg писал(а):
А в сторону strongforth смотрели?
Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд

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

Автор:  chess [ Вт окт 10, 2006 10:28 ]
Заголовок сообщения: 

Для повторного использования кода ввести понятие глобальных меток. К коду определенному между глобальной меткой-началом и глобальной меткой-концом обращаться как к неименованному коду или слову. Например:
Код:
code word100
        opcode1
        opcode2
         ......
g1:
        opcode20
        opcode21
        ......
g2:
        opcode30
        opcode32
        .....
end-code
code word200
        opcode50
         .....
g1 g2  code-noname
        opcode60
        .....
end-code       
или
: word100
    word1
    word2
    ......
g3:
    word20
    word21
     ......
g4:
    word30
    word32
     .....
;
: word200
    word12
    word22
    ......
g3 g4 word-noname
    word24
    word25
     ......
;

Автор:  Lethargeek [ Сб дек 09, 2006 08:28 ]
Заголовок сообщения: 

Всем привет! Надеюсь, не помешаю... :shuffle;

По теме - тут имхо все зависит от цели. Кому-то скорость исполнения важнее, кому-то скорость отладки. Лично я например форт использую (собственную досовскую еще альфа-версию) только для того чтобы быстро программки для нестандартной обработки бинарных файлов клепать, при этом ваще головой не думая. :) Такое "программирование" на 50% состоит обычно из copy/paste. :) И главное тут - удобство. "Вылизывать" эти "случаи" вообще не предполагается. То есть для меня сейчас forth - подручный инструмент вроде молотка, времени на большее (увы) не хватает...

Таким образом лично для меня выкидывание ROLL и проч. - зло, ибо думать же дольше придется. :roll: А "лишние сучности" :) я в своем варианте старался убрать, расширяя функции стандартных слов, например pick с отрицательным аргументом достает соотв-й код из стека возвратов (на авторство не претендую). Еще например командам типа F+ можно целые "трехбайтовые" числа скормить, сами с ними разберутся. Кстати не факт, что на современных процах с их кучей конвейеров и кэшированием это сильно замедлит работу интерпретатора, у меня вон F/ со всеми проверками... выполняется в цикле быстрее, чем просто / (на Athlon 1200)!! Не говоря уж про custom forth-processor.

Звиняюсь, если уже что было, а я просмотрел, весь форум перечитывать влом.

Автор:  Mihail [ Сб дек 09, 2006 14:35 ]
Заголовок сообщения: 

Lethargeek писал(а):
Такое "программирование" на 50% состоит обычно из copy/paste.


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

Цитата:
я в своем варианте старался убрать, расширяя функции стандартных слов, например pick с отрицательным аргументом достает соотв-й код из стека возвратов (на авторство не претендую).


Это глюкодром. Если нехватает >R R@ R> :
http://fforum.winglion.ru/viewtopic.php ... ight=#2148

Автор:  Hishnik [ Вс дек 10, 2006 01:02 ]
Заголовок сообщения: 

Lethargeek писал(а):
Всем привет! Надеюсь, не помешаю... shuffle

Аналогично, прррывет! Помешать - разве что сахар в чае, ложечкой. Это всегда пожалуйста, а больше тут мешать нечего :)

Lethargeek писал(а):
например pick с отрицательным аргументом достает соотв-й код из стека возвратов

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

Автор:  Lethargeek [ Вс дек 10, 2006 07:32 ]
Заголовок сообщения: 

Хищник писал(а):
Эээ... тогда уж RPICK? А то "неоднородный" код получается в смысле ассемблера. Это надо проверить, какой знак у аргумента, и перейти к одной из двух векто кода.

Не! Весь смысл, что слов меньше! А так и в R@, и в PICK по-честному надо еще на некорректный аргумент проверять... пусть уж лучше эта проверка что-то полезное делает, все равно переход...

Автор:  Lethargeek [ Вс дек 10, 2006 07:49 ]
Заголовок сообщения: 

(По поводу неэффективности ?DUP)

С "?DUP IF ... THEN" у меня реально выполняется что-то вроде:

...(?DUP)
or eax,eax
jnz DUPstart
NEXT
...(тут IF...THEN)

А с "DUP IF ... THEN DROP" будет:

...(DUP)
push eax
NEXT
...(тут IF...THEN)
...(DROP)
pop eax
NEXT

То есть лишний NEXT по-любому больше отожрет, чем проверка (не говоря уже о размере, DROP - лишняя ячейка).
Конечно, чистый компилятор - другое дело... да и железо разным бывает...

Это я все к тому, как опасно при обсуждении стандартов отталкиваться от "эффективности". Эффективность каждой версии Форта сильно зависит от формы (интерпретатор или компилятор) и среды реализации (причем неравномерно).

Автор:  Kopa [ Пн дек 11, 2006 08:16 ]
Заголовок сообщения: 

mOleg писал(а):
А в сторону strongforth смотрели?
Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд

Проверку типов в Форте можно ввести, как одну из возможностей, но не более:)

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

P.S. В strongforth не заглядывал, может там что-то подобное:)

Автор:  Kamikaze [ Пт июл 17, 2009 23:28 ]
Заголовок сообщения:  Стековая нотация в именах слов

А что если стековую нотацию использовать в самих именах слов?

"Префикс" - то, что лежит на стеке до,
"Суффикс" - то что после:
Код:
: ##_икс_квадрат_плюс_игрек_равно_нулю_? ( x y -- result )
      SWAP DUP * + 0=
;

Т.е. здесь двойная решетка "##" "префикса" означает, что перед выполнением слова на стек должно ложиться 2 числа.
Результат - знак вопроса "?" - флаг истина/ложь
Код:
: @#STR>NUM# ( a u -- n )
     0 0 2SWAP >NUMBER 2DROP D>S
;

А здесь на входе лежит строка типа au, обозначаемая "@#" ("@" - соответствует адресу, "#" - числу), а на выходе - число "#"

Автор:  вопрос [ Сб июл 18, 2009 00:02 ]
Заголовок сообщения: 

Цитата:
А что если стековую нотацию использовать в самих именах слов?

Я так и делал - если взглянуть моё решение преобразования инфиксно-префиксной строки в постфиксную

Автор:  вопрос [ Сб июл 18, 2009 00:05 ]
Заголовок сообщения: 

можно даже чисто формулы
: (A,B,C)(A==C+B?)(FLAG)
+ = ;

Автор:  VoidVolker [ Сб июл 18, 2009 00:28 ]
Заголовок сообщения: 

:lol:
А чем плоха такая запись?
Код:
: икс   SWAP  ; 
: квадрат   DUP *  ;
: игрек    ;
: плюс   +  ;
: нулю   0  ;
: равно?   =  ;

\ x y
икс квадрат игрек плюс нулю равно?

Автор:  Kamikaze [ Сб июл 18, 2009 00:31 ]
Заголовок сообщения: 

Да, но речь о том, чтобы вообще все слова писать со стековой нотацией в имени!
Какой из трех вариантов слова:
Код:
: XX
aa  bb  cc  dd  eee
;

Код:
: ##XX#
##aa#  #bb@#  @#cc@  @dd#  #eee###
;

Код:
: ##XX#
##aa#  #bb@#  @#cc@  @dd#  #eee###  ###fff#
;

первый, второй или третий - будет (теоретически) работать и при этом не оставит после себя на стеке лишний мусор?
Т.е., исполнит:
10 20 ##XX# .
Первый вариант у нас в обычной записи, и, не зная остальных слов, судить о нем - темный лес...
А вот во втором и третьем вариантах информация о состоянии стека уже указана в их именах - что и дает нам мгновенный вывод о работоспособности третьего слова (вернее, о его корректной работе со стеком, естественно).

UPD:
Код:
: XX ( ## -- # )
(## -- ##) aa (# -- #) bb (@# -- @#) cc (@ -- @) dd (# -- #) eee (### -- ###) fff (# -- # )
;

Автор:  Kamikaze [ Сб июл 18, 2009 00:49 ]
Заголовок сообщения: 

Хм... эх, вот если бы скобки вместо символов использовать!
Типа (([{word]}
где:
"(" и ")" аналогичны "#" из предыдущего примера, т.е. число
"[" и "]" аналогичны "@", т.е. адрес
а "{" и "}" аналогичны "?", т.е. флаг
и т.п.

Ой, наоборот:
))]}word[{
:D

Страница 10 из 11 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/