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 ] |
Заголовок сообщения: | |
Всем привет! Надеюсь, не помешаю... По теме - тут имхо все зависит от цели. Кому-то скорость исполнения важнее, кому-то скорость отладки. Лично я например форт использую (собственную досовскую еще альфа-версию) только для того чтобы быстро программки для нестандартной обработки бинарных файлов клепать, при этом ваще головой не думая. Такое "программирование" на 50% состоит обычно из copy/paste. И главное тут - удобство. "Вылизывать" эти "случаи" вообще не предполагается. То есть для меня сейчас forth - подручный инструмент вроде молотка, времени на большее (увы) не хватает... Таким образом лично для меня выкидывание 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 ] |
Заголовок сообщения: | |
А чем плоха такая запись? Код: : икс 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[{ |
Страница 10 из 11 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |