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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пт июн 05, 2020 11:01 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
mOleg писал(а):
оно достаточно полезное,

В каком месте?
Ну вот можно сделать так:
: test [ 10 20 + ] LITERAL ;
Или вот так.
NONAME: 10 . : test LITERAL ;
А ещё?
Это, блин, компилирующее слово, но его хрен используешь для компилирующих связок!
Что-то вроде : -1call STATE @ -1 STATE ! -1 [COMPILE] LITERAL ' COMPILE, STATE ! ; IMMEDIATE
И вот такую херню надо делать, чтобы использовать LITERAL
Напоминаю, что других слов для компиляции чисел в ansi94 нет.
Ввели бы слово LIT, по аналогии с COMPILE, и проблемы бы не было.

Ну и смысл в слове, которое годится лишь на заплатку?

mOleg писал(а):
более того, я ввел в дополнение к LITERAL еще и

Насколько целесообразны дополнения надо смотреть как сделано ядро.

Например, REGULAR , как понимаю, используется часто.
У меня в Нове всего один раз в интерпретаторе, так что потребности в слове нет.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 05:18 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Victor__v писал(а):
Это слово черезчур умное.
Из-за чего оно работает в очень редких случаях.
Смысл?
Так это для тебя смысл или для Мура смысл ?
Для Мура большой смысл имело слово
: RECOVER -1 ALLOT ;
Оно на тот случай если EXIT генерируемое ; исполняться не будет.
Значит эту бесполезно занятую ячейку памяти с EXIT надо обратно пустить в дело.
Применение (FIG-Forth, ' дает адрес поля параметров) :
: MAIN
0 [ ' DlgProc CFA ] LITERAL 0 ID_Dialog 0 DialogBoxParamA \ DROP
BYE
; RECOVER
Кстати, заодно и LITERAL в примере


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 06:04 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Victor__v писал(а):
Это, блин, компилирующее слово, но его хрен используешь для компилирующих связок!
Что-то вроде : -1call STATE @ -1 STATE ! -1 [COMPILE] LITERAL ' COMPILE, STATE ! ; IMMEDIATE
И вот такую херню надо делать, чтобы использовать LITERAL
Не понятно что ты тут вытворяешь. Если у тебя слово IMMEDIATE значит оно для режима компиляции. Зачем ты в нем еще раз включаешь режим компиляции, когда он итак наготово ? Чтобы работало в обоих режимах, тогда зачем режим компиляции вне зависимости от того, что был ?
Если шитый код прямой или косвенный само просится
: -1 -1 STATE @ IF COMPILE LIT , THEN ; IMMEDIATE
А LITERAL он совершенно не про это.
Victor__v писал(а):
Напоминаю, что других слов для компиляции чисел в ansi94 нет.
Ввели бы слово LIT, по аналогии с COMPILE, и проблемы бы не было.
Как-то ты неправильно воспринимаешь стандарт.
Если в стандарте нет, то и не должно быть - совершенно неправильное понимание.
В стандарте все, что относится к внутренней кухне Форта отдано на откуп разработчику.
В стандарт вынесено только то, что делает ANS-совместимые прикладные программы переносимыми. LIT и LIT, не указаны потому, что это внутренняя кухня. Разработчик может их делать, может не делать, в прикладной программе их ведь все равно не будет.
Но практическая реализация ans94 да как-же без них ?
LIT само просится для прямого и косвенного шитого кода, а LIT, для подпрограммного и нативного.
: -1 -1 STATE @ IF LIT, THEN ; IMMEDIATE

А вообще-то почему LITERAL не про это ? Если вдуматься, то про это !
: LITERAL STATE @ IF LIT, THEN ; IMMEDIATE
: -1 -1 [COMPILE] LITERAL ; IMMEDIATE
Ведь также будет верно работать и в режиме компиляции и в режиме интерпретации !
А вот так вот вообще без LIT, (32-разрядный 80x86)
: LITERAL STATE @ IF 68 C, , THEN ; IMMEDIATE
: -1 -1 [COMPILE] LITERAL ; IMMEDIATE
где 68h - опкод команды push imm32


Гы-гы (оптимизация заменой push imm32 на push imm8 при возможности) :
: LITERAL STATE @ IF DUP 80 + 100 U< IF 6A C, C, ELSE 68 C, , THEN THEN ; IMMEDIATE


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 12:01 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
Не понятно что ты тут вытворяешь

Я вообще в качестве примера сделал слово для компиляции вызова слова с 1 аргументом по умолчанию, -1 то есть.
Вся эквелибристика с режимом компиляции, чтоб LITERAL работал как надо.

Цитата:
Как-то ты неправильно воспринимаешь стандарт.
Если в стандарте нет, то и не должно быть - совершенно неправильное понимание.

Да ну?

Вы же сами пример реализации приводите
: LITERAL STATE @ IF LIT, THEN ; IMMEDIATE

Вот и вопрос ко стандарту. Почему там нет слова, которое нужно для реализации LITERAL?
Какая-то узконаправленная хренотень есть, а так и напрашивающегося компилирующего примитива нет?

Цитата:
Так это для тебя смысл или для Мура смысл ?

А Мур-то тут причем?

Код:
0 [ ' DlgProc CFA ] LITERAL

И чем это выгодно отличается от
Код:
0 [ ' DlgProc CFA LIT, ]

???

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 12:38 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Victor__v писал(а):
Вы же сами пример реализации приводите
: LITERAL STATE @ IF LIT, THEN ; IMMEDIATE

Вот и вопрос ко стандарту. Почему там нет слова, которое нужно для реализации LITERAL?
Так это ОДИН ИЗ вариантов и он появится скорей всего при подпрограммном ШК.
А в случае прямого или косвенного ШК скорее будет так
: LITERAL STATE @ IF COMPILE LIT , THEN ; IMMEDIATE
В случае нативного например так
: LITERAL STATE @ IF 68 C, , THEN ; IMMEDIATE

Что тут стандартизовывать, коли в этом месте развилка на варианты, причем для разных ШК естественными будут разные ? Этот момент как раз и оставляется на усмотрение реализации. Все логично.
Victor__v писал(а):
Код:
0 [ ' DlgProc CFA ] LITERAL

И чем это выгодно отличается от
Код:
0 [ ' DlgProc CFA LIT, ]

[ считаем_выражение ] LITERAL
Если кросс-компиляция, то считаем_выражение должно выполняться в контексте словаря host-машины, а компиляция результата этого выражения в контексте словаря COMPILER в код target-машины. ] переключит словари. Т.е. компиляция изнутри [ ] не есть гуд в свете того, что Форт до кучи кросс-компилятор самого себя. Думаю так.


Последний раз редактировалось Ethereal Пн июн 08, 2020 13:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 13:04 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ethereal писал(а):

Вот и вопрос ко стандарту. Почему там нет слова, которое нужно для реализации LITERAL?
Так это ОДИН ИЗ вариантов и он появится скорей всего при подпрограммном ШК.
А в случае прямого или косвенного ШК скорее будет так
: LITERAL STATE @ IF COMPILE LIT , THEN ; IMMEDIATE
В случае нативного например так
: LITERAL STATE @ IF 68 C, , THEN ; IMMEDIATE

Что тут стандартизовывать, коли в этом месте развилка на варианты, причем для разных ШК естественными будут разные ? Этот момент как раз и оставляется на усмотрение реализации. Все логично.[/quote]
Ну пусть будет
: LIT, COMPILE LIT , ;
: LIT, 0x68 C, , ;
И?
Тоже логично между прочим)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 13:23 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Victor__v писал(а):
Ну пусть будет
: LIT, COMPILE LIT , ;
: LIT, 0x68 C, , ;
Так тут ты выкрасил и выбросил. Определил LIT, а потом перекрыл.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 18:33 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 19:24 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ethereal писал(а):
Victor__v писал(а):
Ну пусть будет
: LIT, COMPILE LIT , ;
: LIT, 0x68 C, , ;
Так тут ты выкрасил и выбросил. Определил LIT, а потом перекрыл.


:dmad; :dmad; :dmad;
Вариант 1
: LIT, COMPILE LIT , ;
Вариант 2
: LIT, 0x68 C, , ;

Так понятней?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Пн июн 08, 2020 21:31 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
mOleg писал(а):
Стандарт явно ориентировался на систему с косвенным ШК, причем только (без учета других вариантов) имхо
Так с прямым шитым кодом будет то-же что с косвенным.
Вот так у меня в Форте с прямым шитым кодом :
Код:
         $COLON   $IMMED+7, 'LITERAL', LITERAL
         DW   STATE, FETCH, QUERY_BRANCH, @@1
         DW   COMPILE, LIT, COMMA
@@1      DW   EXIT

Вот так в Форте с косвенным шитым кодом :
Код:
            ENTRY   7+40h, 'LITERAL', LITERAL
            DD   DoCOLON
            DD   STATE, FETCH
            DD   ZERO_BRANCH, LITERAL_-$
            DD   COMPILE, LIT, COMMA
LITERAL_    DD   EXIT

Т.е. для этих ШК абсолютно одно и то-же
: LITERAL STATE @ IF COMPILE LIT , THEN ; IMMEDIATE

А в Форте с подпрограммным шитым кодом для Atmel AVR:
Код:
LITERAL:   rcall   STATE         ;; LITERAL
         rcall   FETCH
         rcall   QUERY_BRANCH
         ret
         rcall   LIT
         .DW   2 * LIT
         rcall   COMPILE_COMMA
         rjmp   COMMA

(тут QUERY_BRANCH (по фортовски ?BRANCH) или перепрыгивает через следующую команду (которая обычно rjmp, но вот тут красиво всандалилось ret) или не перепрыгивает. Используется то, что в AVR все команды одинаковы в длину).
Что по Фортовски означает
: LITERAL STATE @ IF ['] LIT COMPILE, , THEN ; IMMEDIATE

т.е. для любых ШК этот LITERAL определяется близкими вариациями на одну и ту-же тему.

Victor__v писал(а):
:dmad; :dmad; :dmad;
Вариант 1
: LIT, COMPILE LIT , ;
Ну так тогда если идти через определение LIT,
: -1 -1 STATE @ IF LIT, THEN ; IMMEDIATE
а если идти через определение LITERAL
: -1 -1 [COMPILE] LITERAL ; IMMEDIATE
Второе-же позволяет иметь единственное ветвление по STATE внутри LITERAL


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: История LITARAL
СообщениеДобавлено: Вт июн 09, 2020 02:57 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Все равно немного не понимаю, почему бы код, пишущийся при разработке один раз, не создавать так, как это удобно. Смотреть, есть ли соответствующие слова, чтобы выразить на Форте все, что можно... была такая волна, но смысл от меня ускользает.


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

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


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

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


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

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