Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср сен 22, 2021 03:51

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Selena
СообщениеДобавлено: Чт июл 29, 2021 10:25 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 140
Благодарил (а): 15 раз.
Поблагодарили: 9 раз.
Selena - конкатенативный язык сценариев с обратной польской записью, динамической типизацией и автоматическим управлением памятью. Имеются встроенные средства для работы с файлами, каталогами, создания сетевых подключений по TCP и UDP, реализованы операции со строками, в том числе сопоставление по шаблону. Интерпретатор может использоваться как отдельная программа или встраиваться в виде DSL в программу на Си. Самостоятельный интерпретатор поддерживает динамическую загрузку модулей в виде библиотек DLL специального вида.

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

Система типов заимствована у языка Lua. Имеются следующие типы:
- null - обозначает отсутствие значения
- number - число с плавающей точкой (представлено типом double в Си)
- boolean - логическое значение true или false
- string - строка байтов произвольной длины
- function - функция языка Си
- colon - определение через двоеточие
- table - таблица - ассоциативный массив, единственный составной тип данных языка
- userdata - данные хост-программы, в рамках Selena могут храниться в переменных или таблицах и передаваться словам в качестве параметров (в частности, в виде userdata представлены файлы и сокеты)

Основные отличия от Форта:
- значения всех типов хранятся на одном стеке данных, слова работы с ними контролируют совместимость типов
- строковые литералы распознаются без пробела после открывающей кавычки ("" - пустая строка, "abc" - строка из 3 символов), поддерживаются escape-последовательности языка Си
- в качестве словаря может выступать любая таблица, таблица устанавливается в качестве словаря для поиска слов словом CONTEXT, слово DEFINITIONS работает как обычно
- явного выделения ячеек в словаре нет, слова @ и ! работают с таблицами: @ ( key table -- value ), ! ( value key table )
- CREATE создаёт таблицу с указанным именем в текущем словаре. При вызове таблицы она помещается на стек. Это поведение можно изменить словом DOES>
- DO, ?DO, LOOP, +LOOP отсутствуют, их заменяют FOR - цикл со счётчиком с шагом 1, +FOR - цикл со счётчиком с указанным шагом, FOR[] - цикл по элементам массива (таблицы с ключами - натуральными числами), FOR{} - цикл по всем парам "ключ-значение" в таблице, NEXT - окончание всех этих циклов. Для слов FOR[] и FOR{} доступны слова I@ и J@ для доступа к текущему элементу массива или таблицы
- при вызове EXIT внутри циклов, они завершаются автоматически, UNLOOP не нужен
- поиск слов в словаре производится без учёта регистра, но получение значения из таблицы по ключу-строке - с учётом

Для получения справки по имеющимся словам необходимо подключить модуль справки:
REQUIRE HELP
и вызвать слово HELP

Система довольно сырая, так как экспериментальная. Конструктивная критика приветствуется.

https://disk.yandex.ru/d/muX2IVt2VJ9yQw



За это сообщение автора zma поблагодарил: Total Vacuum
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Ср авг 04, 2021 14:58 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт. Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью".


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

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 140
Благодарил (а): 15 раз.
Поблагодарили: 9 раз.
true-grue писал(а):
Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт.

Согласен, примеры не самые иллюстративные и основные слова - фортовские. Основные отличия - в хранении данных и типизации. Подчеркну, что система ни на что не претендует и выкладывалась, как иллюстрация "Форта со сборкой мусора" в ответ на сообщение в соседней теме.
true-grue писал(а):
Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью".

4500 строк (из них 3700 непустых) - это много? Может быть, дело в большом количестве проверок на возможные ошибки выполнения - постарался свести количество возможных Access Violation к минимуму. Да и код не самый лаконичный.
А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше


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

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 177
Откуда: Москва
Благодарил (а): 33 раз.
Поблагодарили: 6 раз.
zma писал(а):
А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше

Предполагаю, что имелось ввиду это:
https://bellard.org/tcc/
Но товарищ помешан (в хорошем смысле этого слова) на оптимизации и минимизации, так что ничего удивительного. Взять хотя бы это:
https://bellard.org/otcc/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Ср авг 04, 2021 23:10 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
Нет, речь шла об учебном проекте с обстоятельным и читаемым кодом, компилятор стандарта C11: https://github.com/rui314/chibicc



За это сообщение автора true-grue поблагодарил: zma
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Ср авг 04, 2021 23:35 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
zma писал(а):
true-grue писал(а):
Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт.

Согласен, примеры не самые иллюстративные и основные слова - фортовские. Основные отличия - в хранении данных и типизации. Подчеркну, что система ни на что не претендует и выкладывалась, как иллюстрация "Форта со сборкой мусора" в ответ на сообщение в соседней теме.
true-grue писал(а):
Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью".

4500 строк (из них 3700 непустых) - это много? Может быть, дело в большом количестве проверок на возможные ошибки выполнения - постарался свести количество возможных Access Violation к минимуму. Да и код не самый лаконичный.
А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше


Сохранять компактность реализации нужно не из спортивного интереса, а ради поддерживаемости системы. Это особенно важно в случае Форта. Думаю, полезно было бы выделить более компактное ядро на Си с добавлением расширений на Вашем Форте или том же Си. Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе? Тогда бы у Вас был бы, преимущественно, автоматически сгенерированный код на Си.

"Настолько маленький компилятор Си" это, к примеру, Chibicc (см. более ранние версии в истории репозитория) по ссылке выше. На мой взгляд, если сравнение компактности ряда реализаций более строгих (с точки зрения теории языков), гибких ЯП оказывается не в пользу Вашего Форта, то это говорит о том, что не удалось хорошо выделить немногие общие механизмы функционирования или же Вы разрабатываете настолько нетрадиционный форт-подобный язык, что он по своей гибкости/строгости оказался, по крайней мере, на уровне других популярных скриптовых языков.

В целом, я не собирался критиковать именно Вашу работу, просто хотел обратить внимание на давно обнаруженный факт: некоторые Форт-системы настолько тяжеловесны, что способны сравниться по сложности с теми же Lua, Tcl, Scheme, Oberon и проч. И, что самое забавное, при сохранении постфиксной записи, разнообразных анахронизмов в духе PAD и <# # #> и других классических "штучек" Форта, использование которых можно, пожалуй, оправдать тем только, что реализация была написана в сжатые сроки под конкретные задачи и оказалась весьма небольшой по объему кода.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Чт авг 05, 2021 04:32 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 140
Благодарил (а): 15 раз.
Поблагодарили: 9 раз.
true-grue писал(а):
Думаю, полезно было бы выделить более компактное ядро на Си с добавлением расширений на Вашем Форте или том же Си.

В другом, основном рабочем Форте так и сделал
Цитата:
Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе?

Можете пояснить? У меня нет трансляции Форта в Си ни в каком виде. Внутри определений через двоеточие немного изменённый шитый код


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Сб авг 07, 2021 17:18 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
zma писал(а):
Цитата:
Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе?

Можете пояснить? У меня нет трансляции Форта в Си ни в каком виде. Внутри определений через двоеточие немного изменённый шитый код


Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Сб авг 07, 2021 19:45 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 1489
Благодарил (а): 4 раз.
Поблагодарили: 55 раз.
true-grue писал(а):
Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.

А, разве таких решений мало в представленных решений Форт в связке с Си?
(у меня на памяти как минимум несколько разных таких решений)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Сб авг 07, 2021 20:45 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 140
Благодарил (а): 15 раз.
Поблагодарили: 9 раз.
true-grue писал(а):
Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.

Идею понял, но сомневаюсь, что на такой системе это даст значительный выигрыш. Исчезнет однообразный код на Си, но появится промежуточный вспомогательный транслятор. Мне субъективно проще поддерживать несколько функций на Си в составе основной программы, чем многоступенчатый процесс сборки. Против Вашего варианта ещё говорит тот факт, что в данном случае набор слов ядра изменяться, скорее всего, не будет. Новые слова добавляются либо программой на Си, в которую встраивается интерпретатор, либо загружаемыми модулями.
Но, думаю, что для больших систем и для self-hosted трансляторов Ваш вариант более подходящий


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Selena
СообщениеДобавлено: Пн авг 09, 2021 01:43 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7290
Благодарил (а): 21 раз.
Поблагодарили: 126 раз.
Форт на Си у меня дорастал до 8000 строк кода, но это с учетом специфичных для проекта слов, которые были описаны на Си. Я тоже склоняюсь к мысли, что промежуточный инструмент не всегда дает ощутимый выигрыш по сравнению с простым маршрутом сборки.


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

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


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

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


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

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