Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 14:57

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 158 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 04, 2006 14:47 
Не в сети
Moderator
Moderator
Аватара пользователя

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
oleg писал(а):
А в сторону strongforth смотрели?
Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 10, 2006 10:28 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Для повторного использования кода ввести понятие глобальных меток. К коду определенному между глобальной меткой-началом и глобальной меткой-концом обращаться как к неименованному коду или слову. Например:
Код:
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
     ......
;

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 09, 2006 08:28 
Не в сети

Зарегистрирован: Сб дек 09, 2006 07:31
Сообщения: 11
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Всем привет! Надеюсь, не помешаю... :shuffle;

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 09, 2006 14:35 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Lethargeek писал(а):
Такое "программирование" на 50% состоит обычно из copy/paste.


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

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


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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 10, 2006 01:02 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Lethargeek писал(а):
Всем привет! Надеюсь, не помешаю... shuffle

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 10, 2006 07:32 
Не в сети

Зарегистрирован: Сб дек 09, 2006 07:31
Сообщения: 11
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Эээ... тогда уж RPICK? А то "неоднородный" код получается в смысле ассемблера. Это надо проверить, какой знак у аргумента, и перейти к одной из двух векто кода.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 10, 2006 07:49 
Не в сети

Зарегистрирован: Сб дек 09, 2006 07:31
Сообщения: 11
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
(По поводу неэффективности ?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 - лишняя ячейка).
Конечно, чистый компилятор - другое дело... да и железо разным бывает...

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 11, 2006 08:16 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
mOleg писал(а):
А в сторону strongforth смотрели?
Там как раз есть реализация типов на форте и по-моему было что-то вроде перегрузки команд

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Стековая нотация в именах слов
СообщениеДобавлено: Пт июл 17, 2009 23:28 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А что если стековую нотацию использовать в самих именах слов?

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

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

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

_________________
Банзай!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 18, 2009 00:02 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
А что если стековую нотацию использовать в самих именах слов?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 18, 2009 00:05 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
можно даже чисто формулы
: (A,B,C)(A==C+B?)(FLAG)
+ = ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 18, 2009 00:28 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
:lol:
А чем плоха такая запись?
Код:
: икс   SWAP  ; 
: квадрат   DUP *  ;
: игрек    ;
: плюс   +  ;
: нулю   0  ;
: равно?   =  ;

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 18, 2009 00:31 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Да, но речь о том, чтобы вообще все слова писать со стековой нотацией в имени!
Какой из трех вариантов слова:
Код:
: 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 (# -- # )
;

_________________
Банзай!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 18, 2009 00:49 
Не в сети
Аватара пользователя

Зарегистрирован: Вс май 07, 2006 11:38
Сообщения: 279
Откуда: Slavyansk, Ukraine
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хм... эх, вот если бы скобки вместо символов использовать!
Типа (([{word]}
где:
"(" и ")" аналогичны "#" из предыдущего примера, т.е. число
"[" и "]" аналогичны "@", т.е. адрес
а "{" и "}" аналогичны "?", т.е. флаг
и т.п.

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

_________________
Банзай!


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

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


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

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


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

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