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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Selena
Автор Сообщение
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
Форт на Си у меня дорастал до 8000 строк кода, но это с учетом специфичных для проекта слов, которые были описаны на Си. Я тоже склоняюсь к мысли, что промежуточный инструмент не всегда дает ощутимый выигрыш по сравнению с простым маршрутом сборки.
Сообщение Добавлено: Пн авг 09, 2021 01:43
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
true-grue писал(а):
Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.

Идею понял, но сомневаюсь, что на такой системе это даст значительный выигрыш. Исчезнет однообразный код на Си, но появится промежуточный вспомогательный транслятор. Мне субъективно проще поддерживать несколько функций на Си в составе основной программы, чем многоступенчатый процесс сборки. Против Вашего варианта ещё говорит тот факт, что в данном случае набор слов ядра изменяться, скорее всего, не будет. Новые слова добавляются либо программой на Си, в которую встраивается интерпретатор, либо загружаемыми модулями.
Но, думаю, что для больших систем и для self-hosted трансляторов Ваш вариант более подходящий
Сообщение Добавлено: Сб авг 07, 2021 20:45
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
true-grue писал(а):
Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.

А, разве таких решений мало в представленных решений Форт в связке с Си?
(у меня на памяти как минимум несколько разных таких решений)
Сообщение Добавлено: Сб авг 07, 2021 19:45
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
zma писал(а):
Цитата:
Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе?

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


Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.
Сообщение Добавлено: Сб авг 07, 2021 17:18
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
true-grue писал(а):
Думаю, полезно было бы выделить более компактное ядро на Си с добавлением расширений на Вашем Форте или том же Си.

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

Можете пояснить? У меня нет трансляции Форта в Си ни в каком виде. Внутри определений через двоеточие немного изменённый шитый код
Сообщение Добавлено: Чт авг 05, 2021 04:32
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
zma писал(а):
true-grue писал(а):
Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт.

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

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


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

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

В целом, я не собирался критиковать именно Вашу работу, просто хотел обратить внимание на давно обнаруженный факт: некоторые Форт-системы настолько тяжеловесны, что способны сравниться по сложности с теми же Lua, Tcl, Scheme, Oberon и проч. И, что самое забавное, при сохранении постфиксной записи, разнообразных анахронизмов в духе PAD и <# # #> и других классических "штучек" Форта, использование которых можно, пожалуй, оправдать тем только, что реализация была написана в сжатые сроки под конкретные задачи и оказалась весьма небольшой по объему кода.
Сообщение Добавлено: Ср авг 04, 2021 23:35
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
Нет, речь шла об учебном проекте с обстоятельным и читаемым кодом, компилятор стандарта C11: https://github.com/rui314/chibicc
Сообщение Добавлено: Ср авг 04, 2021 23:10
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
zma писал(а):
А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше

Предполагаю, что имелось ввиду это:
https://bellard.org/tcc/
Но товарищ помешан (в хорошем смысле этого слова) на оптимизации и минимизации, так что ничего удивительного. Взять хотя бы это:
https://bellard.org/otcc/
Сообщение Добавлено: Ср авг 04, 2021 20:04
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
true-grue писал(а):
Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт.

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

4500 строк (из них 3700 непустых) - это много? Может быть, дело в большом количестве проверок на возможные ошибки выполнения - постарался свести количество возможных Access Violation к минимуму. Да и код не самый лаконичный.
А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше
Сообщение Добавлено: Ср авг 04, 2021 16:32
  Заголовок сообщения:  Re: Selena  Ответить с цитатой
Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт. Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью".
Сообщение Добавлено: Ср авг 04, 2021 14:58
  Заголовок сообщения:  Selena  Ответить с цитатой
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
Сообщение Добавлено: Чт июл 29, 2021 10:25

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


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