Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 22:04

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 536 ]  На страницу Пред.  1 ... 13, 14, 15, 16, 17, 18, 19 ... 36  След.
Автор Сообщение
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 04, 2017 18:15 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:40, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 04, 2017 18:17 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Впрочем, ты прав. Одно дело выделаваться или писать специальные программы(вирусы, к примеру), другое - учится.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 04, 2017 19:07 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
А зачем?
Да, вопрос был конечно, зачем это делать на практике. А я в своем Форте в области HERE при исполнении программы держу свободным мегабайт памяти и динамический структуры там размещаю и высвобождаю. Нашел, что это удобно. Получается своего рода готовая куча. И при таком размещении и высвобождении данных в HERE по ALLOT они не инкапсулируются с действиями. А вот у SPF 4.20 в области HERE при исполнении (не при компиляции) места почти нет. Там такой прием не пройдет.
gudleifr писал(а):
Формально, не катит, т.к. все происходит в сегменте кода. Т.е. этакий вырожденный способ компиляции.
Не возражение. В общем сегменте кода и данных. Кодофайл, он такой. В нем данные перемешиваются с кодом. HERE для кода и данных общее.
А если бы код и данные были разнесены по разным сегментам, то были бы два разных HERE, но поскольку C, кидало бы в сегмент данных, то и в моем примере использовалось бы бы именно HERE данных, а не кода.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 04, 2017 19:29 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:40, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт сен 05, 2017 22:54 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
_KROL писал(а):
Кхм.
Etherel писал(а):
<# #> принимает одно слово, а возвращает три
Я же написал, что исправил!
А что должна делать тильда? Не "BL WORD"?
За UNTIL спасаибо) А то я когда-то вообще запутался во всех этих циклах(даже думал совсем свои слова писать, близкие к синтаксису паскаля)...

Простите, опять лохонулся: выложил не совсем обновлённое :(
...Хотел TICK изменить, да придётся наверное в сл. версии опять все исходники "перетеребить".
А пока буду стараться написать змейку...(тогда и выложу обновление)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт сен 05, 2017 23:12 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Ethereal прав. Где-то что-то. У меня трассинг в pre-версиях(на сл. _NOP) почему-то криво работает :shock:

Посмотрел ранние версия. В v.0.023 работает, а дальше :cry:
Ну ничего, надо просто всё опять переделать...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пт сен 08, 2017 15:42 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:40, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс сен 10, 2017 21:49 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
По чуть-чуть наачал делать новенькое, со всеми комментариями)
Я вот тут подумал вообще TIB убрать, тогда тек. переменные ввода будут выглядеть примерно так:
Цитата:
HND - хэндл входного устройства/файла
BUF - адрес начала входного буфера
$BUF - размер входного буфера
#BUF - текущее кол-во символов, находящихся в нём
$CHARS - кол-во симолов, обрезанных до следующего чтения (только для файлов)
>IN - Текущее смещение от начала входного буфера

---
Хоть это и не в тему, но, вы не знаете, как там mOleg поживает?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс сен 10, 2017 23:34 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:41, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 11, 2017 04:10 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
>Я вот тут подумал вообще TIB убрать, тогда тек. переменные ввода будут выглядеть примерно так:
>BUF - адрес начала входного буфера
Ты решил переобозвать TIB в BUF. Ибо TIB и было адресом входного буфера.
А #TIB решил переобозвать в #BUF.
Только как-то двусмысленно пишешь.
>#BUF - текущее кол-во символов, находящихся в нём
Текущее количество или адрес ячейки, хранящей текущее количество ?
Ибо по смыслу TIB было константой, а #TIB переменной.

Вообще говоря, TIB = Terminal Input Buffer , так-что что TIB, что BUF. Просто когда TIB тебя поймут без объяснений, а когда BUF - а что за BUF ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 11, 2017 06:34 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
@Gudleifr

Почитал тут твое "О чем умолчал Мур".

Часть идей Форта я увидел АВТОМАТИЧЕСКИ возникающими при трансляции
алголоподобного языка, пока драл у Вирта компилятор Оберон.
Распишу промежуточные мысли
1.) Этот компилятор неизбежно транслирует в код какой-то виртуальной
машины. Кодогенерацию я не драл у Вирта, он написал транслятор в код
несуществующей RISC-машины, а мне это не надо. Кодогенерацию в код 8086
я писал сам, но при этом все равно кодогенерация свелась к узкому
набору неких псевдоопкодов и я даже дал им мнемоники, вот такие
LDA STA LEA LDI MOV BEQ BNE BLT BLE BGT BGE JMP JSR RET PSH POP NEG
TST ADD SUB CMP MUL DIV REM ADI SBI CPI MLI DVI RMI
Т.е. по факту компилятор алголоподобного языка генерирует псевдокод
для какой-то виртуальной машины, даже если тебе это и не нужно.
Отсюда идея Вирта с P-кодом для компилятора Паскаля.
2.) Компилятор естественным образом транслирует в псевдокод для
виртуальной СТЕКОВОЙ машины. В код для регистровой машины его приходится
превращать искусственно с помощью дополнительного алгоритма.
3.) Если действительно сдалать компиляцию для виртуальной стековой
машины, но не сразу в код, а сначала в ассемблерный текст для нее,
то возможна однопроходная трансляция преобразованием потоков, я
писал об этом в этом топике раньше. Если ассемблер при этом сделать
псевдоассемблером для интерпретации виртуальной машиной, заменив
мнемоники LDA на @ , ADD на + , MUL на * и STA на ! , то выражение
x := a * (b + c) ;
при применении определенных алгоритмов трансляции раскроется так :
a @ b @ c @ + * x !
А именно
- из-за метода рекурсивного спуска инфиксное выражение автоматом
вывернется естественным для стек-машины постфиксным
- от использования отсроченной генерации кода, когда код генерируется
не сразу, а только тогда когда без этого уже невозможно обойтись,
переменная x , фигурирующая в исходном определении первой,
в псевдоассемблерном результате трансляции появится последней.
А у Вирта компилятор Оберон так и сделан.
4.) Вот если создавать компилятор для виртуальной стековой машины,
выдающий результат трансляции в виде псевдоассемблерного текста для
интерпретации этой машиной, то этот псевдоассемблерный текст будет выглядеть
вполне по фортовски. После чего может естественным образом появится мысль
- а зачем тогда вообще компилятор ? И без него писать для виртуальной
машины напрямую в ее псевдоассемблере неплохо получается.

Т.е. может Мур не рассказывает полной истории создания Форта потому, что
начал писать компилятор чего-то алголоподобного, но так и не дописал,
а вместо этого начал играться с созданной для этого компилятора
виртуальной машиной и эта история ему не кажется предметом гордости ?
Мне такая мысль приходит потому, что если в моем (или виртовском) оберончике
заменить пару определений в секции кодогенерации, не трогая ничего
в секциях лексического и синтаксического анализа
, то без каких-либо
дополнительных усилий получится транслятор Оберон->протоФорт.
Собственно даже не только в части вычисления выражений, а и в части
вызова подпрограмм, если вместо кода входа в процедуру выдавать
": имя процедуры", а вместо кода выхода "NIP ... NIP ;" , где столько
NIP сколько у нее параметров. А сами параметры в процедуре извлекать
из глубины стека через соответствующий PICK. Да и с условными операторами
все именно так будет - они должны будут на лету разрешать ссылки вперед
и конструкции Паскаля (не знаю Алгола) IF UNTIL WHILE что-то аналогичное
фортовское и дадут. Т.е. Форт похож на виртуальную интерпретирующую
стек-машину для псевдоассемблерного выхода алголоподобной трансляции
.
Единственное, что не вписывается в подобную картинку, так это ДВА стека.
Но с одним стеком такая схема получается не очень удобной - параметры
процедуры лежат на стеке ПОД адресом возврата. А если сделать два
стека, то они окажутся как на блюдечке, NIP .. NIP на выходе процедуры
станет DROP .. DROP, да и вообще параметры процедуры можно будет
"расходовать" и терять их на стеке сразу как в них минет надобность.
Т.е. два стека тут как-бы уже напрашиваются.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 11, 2017 08:03 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
З.Ы. Проверяя не написал-ли глупостей нашел историю Форт, как-то невнятно описанную Rather.
https://www.forth.com/resources/forth-p ... -language/
Оказалось я где-то мимо, а где-то в точку.
Сначала там описывается какая-то огромная программа
His source code filled two card trays.
, вроде бы на Фортране. К ней Мур прилепил интерпретатор и в нем уже была идея последовательности слов, разделенных пробелами :
This interpreter featured several commands and concepts that survived into modern Forth, principally a command to read “words” separated by spaces and one to convert numbers from external to internal form, plus an IF … ELSE construct.
А потом действительно вылезает программа на Алголе и Форт рождается как интерпретатор к Алголу и вся работа со стеком родом именно отсюда :
A key outgrowth of this work was a program called CURVE, coded in Algol (1964), a general-purpose non-linear differential-corrections data fitting program. To control this program, he used an enhanced version of his interpreter, extended to manage a push-down stack for parameter passing, variables (with the ability to explicitly fetch and store values), arithmetic and comparison operators, and the ability to define and interpret procedures.
Не понятно только из этой сентенции как конкретно интерпретатор прикручивался к Алголу, как-то совсем тут невнятно. Он интерпретировал исходники Алгола по ходу их трансляции или управлял исполнением машинного кода, уже накомпилированного Алголом ? Если первое, то я угадал. Только Мур тогда таки написал транслятор.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 11, 2017 10:57 
Ethereal писал(а):
...
Вы опять оффтопите.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 11, 2017 17:44 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
gudleifr писал(а):
_KROL писал(а):
переменные ввода будут выглядеть примерно так:..

Начал отвечать у себя.
Где? Ты имеешь ввиду свои мемуары, или комментарий, который я сейчас пока не вижу?
Ethereal писал(а):
...
Зачем мне TIB, чьё название понимается только как ТЕРМИНАЛЬНЫЙ буфр ввода? В DOSе же есть хэндлы и на это ;)
И вообще так удобнее, возможно даже меньше лишних слов получается...
---
gudleifr писал(а):
Ethereal писал(а):
@Gudleifr

Почитал тут твое "О чем умолчал Мур".
...

Вы опять оффтопите.
Так почему нельзя обсудить эти вопросы у него... хотя нет, это будут бесконечные расприи))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн сен 11, 2017 18:07 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:41, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 536 ]  На страницу Пред.  1 ... 13, 14, 15, 16, 17, 18, 19 ... 36  След.

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


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

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


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

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