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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 175 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12
Автор Сообщение
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 18:13 
Не в сети
Аватара пользователя

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

P.S. Во встроенной системе ОС нет.


Последний раз редактировалось Ethereal Пт дек 19, 2014 18:56, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 18:17 
Ethereal писал(а):
При этом в файлах встречаются многострочные комментарии и система их игнорирует.
Для этого не нужно никаких исключений.

Мы с Вам опять вернулись к началу: от "никакой операционной системы" - к обработке исключений, буферизации и прочим полезным мелочам, которые ее и составляют.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 18:34 
Не в сети
Аватара пользователя

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

Так это тупая цитата из стандарта ANSI-Forth. Тут имеется ввиду не столько исключительная ситуация, сколько неверный результат. В моей реализации длина строки, извлекаемой по WORD, всегда усекается до максимум 31-го символа. Никакого исключения при этом не происходит.
gudleifr писал(а):
Мы с Вам опять вернулись к началу: от "никакой операционной системы" - к обработке исключений, буферизации и прочим полезным мелочам, которые ее и составляют.
Форт сам обрабатывает свои исключения, выкидываемые словом THROW, и сам входную строку буферизирует. ОС тут даже и работы не найдется.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 19, 2014 19:20 
Ethereal писал(а):
Вам бы еще талант изъясняться понятно.

Что есть...

Попробую по-порядку: в DOS-версиях FOBOS я тупо вводил с консоли по INT 21(0A), понятно, если комментарий не успевал закончиться до конца строки, это было его проблемой (но кто будет вводить с консоли комментарии?). В качестве "дисковой памяти" использовал блоки, очевидно, т.к. блок читался в память целиком, проблемы "конца строки" у него не было.

В Win-версии я считываю в память весь файл целиком - т.к. он играет роль исключительно загрузочную. А в Win-приложениях ввод идет через органы управления - там свои прибабахи. Т.е. опять, концы строк - это обычные пробелы.

Теперь посмотрим общий случай: EXPECT читает порциями.

Баранов и Ноздрунов:
Код:
  : INTERPRET ( ->) BEGIN ... WORD ... FIND ... EXECUTE ... AGAIN ;
  : ФОРТ-СИСТЕМА ( ->) BEGIN QUERY INTERPRET AGAIN ;

Т.е. упершись в конец TIB, WORD честно возвращает слово "имя нулевой длины" (которое представляет собой тот же EXIT) и его честно EXECUTE, т.е. работа бесконечного цикла INTERPET прекращается и запускается следующая итерация ФОРТ-СИСТЕМА.
Понятно, такое сожрет комментарий только если он влезает целиком.

У Вас имеем:
Код:
: ( [CHAR] ) PARSE + TIB >IN @ + =
    WHILE REFILL 0= UNTIL THEN ; IMMEDIATE

Т.е. какая-то хрень: сначала мы запускает WORD, которому пофигу наши "заполнители TIB", а затем сами его заполняем (REFILL). Если мы так делаем при каждом использовании WORD, то этот REFILL проще туда (в WORD) и засунуть, ведь проверка конца TIB там уже есть. (Т.о. WORD будет выдавать "нулевое слово" только после полного конца ввода). Не будет очевидной реакции на Enter? Это вопрос драйвера клавиатуры. При чтении из файла - пофиг.
Ethereal писал(а):
Так это тупая цитата из стандарта ANSI-Forth.
Выкинуть! Само понятие "структурной обработки исключительных ситуаций" - бяка.
Ethereal писал(а):
ОС тут даже и работы не найдется.
То, что ее делает FORTH, не значит, что ее нет. Он она в большой степени и есть.

P.S. Кстати, то, что Вы употребляете слово "файл" свидетельствует о том, что ОС присутствует и не только в виде FORTH-огрызка. Просто она стоит на другом конце Вашей двухмашинной связки, в которй "младший брат" не является вполне самостоятельным.


Последний раз редактировалось gudleifr Пт дек 19, 2014 19:27, всего редактировалось 2 раз(а).

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 20, 2014 11:14 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
Попробую по-порядку: в DOS-версиях FOBOS я тупо вводил с консоли по INT 21(0A), понятно, если комментарий не успевал закончиться до конца строки, это было его проблемой (но кто будет вводить с консоли комментарии?). В качестве "дисковой памяти" использовал блоки, очевидно, т.к. блок читался в память целиком, проблемы "конца строки" у него не было.

В Win-версии я считываю в память весь файл целиком - т.к. он играет роль исключительно загрузочную. А в Win-приложениях ввод идет через органы управления - там свои прибабахи. Т.е. опять, концы строк - это обычные пробелы.

Это вопрос исповедуемой идеологии. У вас клавиатура - это одно, а файл это другое.
Я же исповедую идеологию, взятую от RT-11 и от Unix, кстати и под MS-DOS она
есть, только несколько в убогом виде. Есть понятие поток - stream.
Форт принимает поток, который называется "стандартный ввод".
А откуда я этот поток физически запущу - с клавиатуры или
из файла - это мое дело. Форт одно от другого не различит.
Грубо говоря, если я под MS-DOS запушу Форт так
forth.exe
то он будет принимать с клавиатуры.
Если так
forth.exe < source.txt
то из файла, поскольку я переназначит стандартный ввод на файл.

Если Вы пользовались INT 21(0A) , то с чего вы решили, что это был
обязательно ввод с консоли ? Это поток "стандартного ввода" и этот
стандартный ввод может идти не только с клавиатуры, но и из файла и
из другого устройства. Если Вашу систему запустить с переназначением
ввода
forth.exe < source.txt
, то ввод пойдет из файла source.txt , а в нем вполне естественны комментарии.
gudleifr писал(а):
P.S. Кстати, то, что Вы употребляете слово "файл" свидетельствует о том, что ОС присутствует и не только в виде FORTH-огрызка. Просто она стоит на другом конце Вашей двухмашинной связки, в которй "младший брат" не является вполне самостоятельным.

Младший брат не вполне самостоятелен только в процессе сборки
приложения и его отладки. После того как приложение собрано старший брат
в виде ПК от младшего брата отключается и младший брат работает совершенно
самостоятельно.
При таком подходе достигаются следующие преимущества.
1.) Мне не надо реализовывать никаких блоков или файловой системы на
младшем брате. Только посимвольный ввод и вывод через UART
2.) Я при сборке приложения пользуюсь всеми благами ОС и редактирую исходники
в виде файлов на ПК. Подключившись терминальной программой к младшему брату
или с клаваитуры им управляю, или скармливаю ему текстовые файлы с ПК, просто
переназначая входной поток на файл.
3.) Все, что на младшем брате не нужно после сборки приложения (ОС, шмос), так его там и нет. Все (почти) лишнее после сборки приложения отключается/отсекается. ОС, использовавшаяся до этого, отключается простым отключением кабеля от ПК. Словарь тоже отсекается. Он или в отдельной микросхемке ведется 24c256, тогда когда приложение собрано, микросхемка вынимается из колодки и все, словаря нет, или в хвосте EEPROM и тогда после сборки напоследок этот кусок памяти затирается.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 20, 2014 11:41 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
>Выкинуть! Само понятие "структурной обработки исключительных ситуаций" - бяка.
Выкинуто. Точнее данное положение стандарта переистолковано по другому.

gudleifr писал(а):
У Вас имеем:
Код:
: ( [CHAR] ) PARSE + TIB >IN @ + =
    WHILE REFILL 0= UNTIL THEN ; IMMEDIATE

Т.е. какая-то хрень: сначала мы запускает WORD, которому пофигу наши "заполнители TIB", а затем сами его заполняем (REFILL).

Нет тут никакой хрени. Если [CHAR] ) PARSE вернула строку, которая
распространяется до конца входного буфера, то она вообще символа )
не нашла (в противном случае строка хотя бы на сам символ ) до конца
буфера не дотягивалась бы). Не нашла. А раз не нашла, то принимаем
еще строку по REFILL и продолжаем искать (ить от многострочных комментариев
отказываться то не хотим, а значит если начался комментарий по (
, то нужно жевать строки пока не встретим ")" ).

А REFILL - это то-же самое, что QUERY TRUE
Код:
: REFILL                                                \ CORE EXT
  SOURCE-ID IF FALSE EXIT THEN QUERY TRUE
;

Введено только для реализации стандарта ANSI-Forth во всей полноте.
Точнее, чтобы Форт-система забыла про многострочные комментарии при EVALUATE ибо
: EVALUATE TRUE TO SOURCE-ID ... FALSE TO SOURCE-ID ;

А QUERY - это прием новой строки во входной буфер вплоть до появления CR/LF.
: QUERY TIB C/L ACCEPT #TIB ! >IN 0! ;
Ну и до кучи :
Код:
// : ACCEPT ( c-addr +n1 -- +n2 )
//   OVER + OVER
//   BEGIN
//      KEY DUP >R
//      CASE
//        8 OF
//            2 PICK OVER <> IF R@ EMIT SPACE R@ EMIT 1- THEN
//          ENDOF
//        13 OF
//             RDROP CR NIP SWAP - EXIT
//           ENDOF
//        DUP BL U< INVERT
//        IF
//          2DUP <> IF R@ EMIT R@ OVER C! CHAR+ THEN
//        THEN
//      ENDCASE
//      RDROP
//   AGAIN
// ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 20, 2014 13:35 
Ethereal писал(а):
forth.exe < source.txt
Это обеспечивает ОС. Можно сколько угодно говорить о ее отсутствии, это только вопрос терминологии.

Ethereal писал(а):
Если [CHAR] ) PARSE вернула строку, которая
распространяется до конца входного буфера, то она вообще символа )
не нашла (в противном случае строка хотя бы на сам символ ) до конца
буфера не дотягивалась бы). Не нашла. А раз не нашла, то принимаем
еще строку по REFILL и продолжаем искать (ить от многострочных комментариев
отказываться то не хотим, а значит если начался комментарий по (
, то нужно жевать строки пока не встретим ")" ).
Об этом я и говорил.
Но,
1) Факт "не нашла" становится известен уже в WORD.
2) Подобный REFILL, очевидно, понадобится во всех подобных (использующих WORD) словах.
Поэтому я и предложил засунуть вызов REFILL в WORD.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 27, 2014 14:39 
Не в сети
Moderator
Moderator
Аватара пользователя

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

ну, как, дело-то продвинулось?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Вт окт 04, 2022 14:25 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
ArtemKAD писал(а):
Сколько лет ждать Smalltalk для AVR?
А он почти такой же тупой внутри, как FORTH. И, опять, нас никто не заставляет реализовать его в полном объеме.

А, кстати да, посмотрел и позапускал примеры из его продолжателей Squeak и Pharo языков (в рамках Linux Puppy) с запуска и каких то проектов с площадки Github в рамках их IDE сред, (что интересно синтаксис близок Smalltalk)
несмотря, что синтаксис Smalltalk близок в чём то Forth, но использовать эти языки и среды в сравнении с возможностями Форт ещё надо посмотреть как лучше. Всё же объектность их немного ортогональна Форт идеям и отодвигается возможность работы с непосредственными байтами памяти Форт. :),
но, думаю, какие то идеи в понимании Smalltalk полезны в расширении кругозора и вероятно полезны для использования в каком то осмыслении, если нет особого желания в самостоятельном использовании этих языков с их инфраструктурой.
На Pharo на Github есть и некоторые проекты и Форт языка.

P.S. По Pharo в 2020г. вышли пара электронных книг (одна по визуализации данных, а вторая по использованию AI) - прогнал их через авто-транслятор от google на русский язык для начального ознакомления.

По Smalltalk неплохое начальное описание представлено в Карпов В.Э. Объектно-ориентированное программирование. Часть 1. Язык Смолток (на 40 страниц)

Здесь какое то описание использование Pharo для IOT на Raspbery
pharo-iot-and-raspberry

Есть и такой Бенчмарк Pharo: benchmarksgame pharo

Это сообщение, можно оформить и в отдельный топик, если будет у кого то интерес к осмыслению Smalltalk в рамках использования с Форт.

Мой опыт "Smalltalk" закончился на программировании своей реализации редактора FEDN из SPF 2.5 лет 20-ть назад в силу непоборотых аспектов использования "ООП" (утечек памяти и не знания "лучших" практик ООП), но опыт такого программирования даже без глубокого понимания ООП в рамках псевдо Smalltak (на Форт) был интересен и познавателен.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пн окт 10, 2022 11:16 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 460
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
KPG писал(а):
...
Интересно, а ассемблер тут каким боком? :D


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

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


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

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


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

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