Forth
http://fforum.winglion.ru/

Наработки от victor__v для СПФ
http://fforum.winglion.ru/viewtopic.php?f=23&t=3105
Страница 4 из 6

Автор:  Hishnik [ Вт апр 04, 2017 17:50 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Victor__v писал(а):
Интересно узнать мнение форумчан по поводу реализации стека исключений?
Нужно ли оно вообще?
Если да, то какие предложения будут по дизайну данного механизма?
Catch Throw может быть недостаточно

Вообще - не нужно. Исключения в текущем виде были реализованы в основном по принципу "чтобы как у других языков". Ошибка в Форте возвращает управление в консоль. Ошибка в скомпилированной программе вызывает ее аварийный останов. Надо чтобы и в Форте был аварийный останов? Механизм TRY (CATCH .. THROW) нужен, чтобы устанавливать особые, определенные программистом, точки обработки исключений в определенных ситуациях. А вот в таких языках как Tcl, да или просто консольная оболочка, разве используют исключения? Нет, не используют - за пренебрежительной малостью неприятностей от неправильно набранной команды. Если набрали имя файла с ошибкой, можно просто перенабрать. Поэтому если Форт впихивать в рамки чуждого ему подхода, то придется писать тот же Си, только с постфиксом. Тут и исключения пригодятся, просто для комплекта. Если же программу изначально основывать на интерактивности, то исключения будут лишними.

Автор:  mOleg [ Вт апр 04, 2017 18:04 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Victor__v писал(а):
Список скорее или цепочка.

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

Автор:  kzagradskiy [ Пт апр 07, 2017 17:12 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Victor__v, почему тема "Наработки от victor__v для СПФ" находится в разделе "Форт Системы/Quark", когда есть раздел " Форт Системы/SP-Forth"?

Автор:  Victor__v [ Пт апр 07, 2017 21:09 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Потому что я ошибся.

Автор:  Victor__v [ Пн апр 10, 2017 22:41 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

https://cloud.mail.ru/public/6YKW/vSo4f3zYL
Что нового?
Подправлена вторая версия строковой библиотеки.
Данная либа портирована в препроцессор, совместима с лок.переменными.
Добавлен стек с плавающей точкой в роли стека потока-управления.

Написал несколько файлов-скриптов для облегчения скрытия деталей.
Что-то вроде мысли зачем каждый раз писать ALSO CONTEXT ! если можно создать файл с этим действием.

Свой аналог СПФ-ским N>R NR>

также в архиве есть мои записки по написанию форт-системы.
Там пока мало чего,
структура слов.статей, несколько примитивов с ещё не написанными флагами и пр.
Моя версия CREATE-CODE
.

Автор:  Victor__v [ Чт апр 27, 2017 20:18 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

https://cloud.mail.ru/public/9BYq/Wt35zCJkZ

Добавлена хеш-фунуция LY написана на ассемблере.
Давно не смотрел исходники ( где-то на хабре видел ) не помню там знаковое или беззнаковое умножение.

Улучшен мини-ассемблер. Переходы, в основном.
Сейчас пишется дизассемблер.

Также формирую свою форт систему. Все текущие исходники оной в папке src2

Написано слово для экранирования пробелов в строке, нужно ежели HTTP-запрос делать

Автор:  Victor__v [ Вс май 14, 2017 13:50 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

https://cloud.mail.ru/public/3GPg/McfL7HJnd
Слегка улучшен ассемблер. Пара кодов всего
Стековый комбинатор ~er\stacker\stacks3.f
Позволяет манипулировать стеком произвольным образом, а также минимизировать его участие в процессе.
Есть 5 переменных ( их роль выполняют регистры ) 0 это eax.

Автор:  Ethereal [ Чт июн 08, 2017 16:32 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Hishnik писал(а):
Ошибка в Форте возвращает управление в консоль. Ошибка в скомпилированной программе вызывает ее аварийный останов. Надо чтобы и в Форте был аварийный останов?
Аварийный останов в задницу не нужен. Но CATCH THROW чрезвычайно удобны и сильно упрощают программу, когда нужно проделать сложную и сильно вложенную последовательность действий, которая может быть успешна или нет. И в случае неуспеха на любом этапе и на любом уровне вложенности, эту последовательность нужно прервать, сняв сразу все ставшие ненужными параметры со стека данных, но завершать программу не нужно. Потому-что это не ошибка была, а факт не успеха.
А без CATCH THROW нужно будет из каждого вложенного этапа последовательности возвращать код завершения, потом проверять его и выбираться из глубоких уровней через кучу таких проверок. А эти проверки просто захламляют исходный текст.

Автор:  Victor__v [ Чт июн 08, 2017 22:50 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Цитата:
А без CATCH THROW нужно будет из каждого вложенного этапа последовательности возвращать код завершения, потом проверять его и выбираться из глубоких уровней через кучу таких проверок. А эти проверки просто захламляют исходный текст.


Тут ещё возможен бектрекинг как вариант.
Простые откатные действия выполняли многие, наверно

Автор:  Victor__v [ Сб июн 24, 2017 18:32 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

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

Как сделать?
Делается всё элементарно ( в моём случае )
у меня как-раз библиотека для работы со строками имеется. Надо её только дополнить парой слов и всё.

Автор:  Victor__v [ Сб июл 15, 2017 16:45 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

https://vk.com/doc189457568_449351224

Небольшой рабочий вариант ассемблера, сгенерированного автоматически.
Там несколько инструкций
ADD
AND
SUB
CMP
и пр.
Особенно стоит обратить внимание на функцию LEA
Т.к. это слово лишь частично подпадает под шаблон задействованных опкодов
К примеру,
CELL [EAX] EBX LEAsm-r-r
сгенерирует
MOV EBX, CELL [EAX]

Ибо LEA для другого предназначена.

Сделал поддержку и для работы с 8- и 16-битными регистрами.

Что дальше?
Переименовать часть слов.
Сделать шаблоны под другие случаи. т.е. команды с 1-м регистром или 3-мя.
И под более массивные опкоды ( умножение, к примеру )

В архиве код для получения ассемблера-библиотеки, а также сама библиотека.
Библиотека: ~ER\ASM\ASMr-r.F
Строитель: ~ER\ASM\NEW-ASM-LIBRARY.F
Все остальные папки с исходниками как раз для Строителя.

Автор:  Victor__v [ Сб авг 19, 2017 18:19 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

https://cloud.mail.ru/public/JxP8/yPUezZT7c
Стековый манипулятор.
Слегка изменена логика.
Благодаря чему код стал чуточку понятней ( весьма вероятно )
отличия stacks4
    убрано махание словарями
    добавлено 2 стека потока-управления ( 2 чтоб из циклов можно было вырываться )
    возможность выделять и транслировать выражения по EVALUATE ( $'DUP' к примеру)
    поиск расширен - если нет слова в 1 символ, то ищется шириною в 2 ( мелочь, а полезно )
    добавлены циклы и условия.

Код на затравку:
Цитата:
: PARSE
TIB #TIB @ >IN
[ S" 3/10&-20&+2^44x14?'zJsB2&3..?'=Js2i4i0&i1dUJr0&iJr2#24" ST->COMB ]
;



1 - счётчик
2 - тек.позиция
3 - символ
4 - длина результирующей строки

по командам
& - операция будет производиться с памятью
^ - сохранить переменную на стеке возвратов
# - скинуть значение со стека возвратов в переменную
? - сравнить два операнда
'z если результат сравнения операндов равен 0
Js - дать ссылку, которую надо будет разрешить
Jr - разрешить ссылку
B - BEGIN
U - UNTIL
. - уменьшить размер переменной ( использовать её меньшую часть )

Автор:  Victor__v [ Пт ноя 17, 2017 12:56 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Сегодня писал на форте практическую мелюзгу.
Суть в том, чтобы взять из экселя данные и вставить их в html-код.
Т.к. с экселем не дружу и с COMом к нему тоже. Я пошёл по пути наибольшего сопротивления.
Что у меня есть: СПФ, Vim.
Итак, я скопировал строки из экселя в Вим. В виме я заэкранировал строки, чтобы СПФ-ом читались и добавил операции переноса в хип. Короче превратил данные в форт-исходник.
С Вимом всё.
По форту:
Загрузил библиотеку ~er\str\str-r2.f
Создал подстановку в строку и её посл. запись в файл.
И слово для прогона данных.
Всё это делалось за 1 час. С учётом работы с Vim'ом.

Итог, надо было раньше озаботиться разбором CSV-файлов :)
Сделал бы за 10-20 минут.

Почему форт и вим?
Вим уже был установлен и это мощный текстовый редактор.
СПФ на флешке и не требует установки, как к примеру Питон, а на нём было б проще написать в т.ч. и разбор CSV.

Автор:  gudleifr [ Пт ноя 17, 2017 13:24 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

Victor__v писал(а):
Насчёт применимости [FORTH в Linux] вопрос, как всегда, спорный.

Вот, Вы и ответили: sed, awk & Co справились бы быстрее и лучше. Так, например, аналогичный простой скрипт для формирования моих интернет-страничек проработал у меня лет 20 практически без изменений. А, вот, сейчас, когда меня отрезали от CGI и ssh, под Мастдаем, тут еще не только новый FORTH придумаешь, совмещая в одном флаконе кривые сами по себе HTTP и WHS...

Автор:  Victor__v [ Пт ноя 17, 2017 15:18 ]
Заголовок сообщения:  Re: Наработки от victor__v для СПФ

gudleifr писал(а):
Victor__v писал(а):
Насчёт применимости [FORTH в Linux] вопрос, как всегда, спорный.

Вот, Вы и ответили: sed, awk & Co справились бы быстрее и лучше. Так, например, аналогичный простой скрипт для формирования моих интернет-страничек проработал у меня лет 20 практически без изменений. А, вот, сейчас, когда меня отрезали от CGI и ssh, под Мастдаем, тут еще не только новый FORTH придумаешь, совмещая в одном флаконе кривые сами по себе HTTP и WHS...


Для такой задачи подойдёт любой скриптовый язык. Только их ещё установить надо. А с форт-системами таких проблем нет практически.
Питон для задачи такой, я б использовал. Пусть на тысяче полей он справился бы нормально. А потом начался бы жуткий тормоз.
Только, что на форте, что на питоне надо было б писать разбор CSV.
А в СПФ нема слова SPLIT, а мне писать его было жутко лень. В моём форте это слово есть, но оно написано с использованием стековых манипуляторов т.е перенести проблематично.
А мораль сообщения проста:
надо писать библиотеки на возможные ситуации.

Ну вставала у меня похожая задача, только тогда я использовал Питон т.к. на МСВС СПФ не собирался :dmad;
А вот там уж скорость была важна. Плохо только что я тогда соотв.библиотеку не сделал.

И ещё момент. У же всегда с собою библиотека для работы со строками. Во не было бы её у меня, было тяжелей.

Страница 4 из 6 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/