Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Selena |
|
|
Форт на Си у меня дорастал до 8000 строк кода, но это с учетом специфичных для проекта слов, которые были описаны на Си. Я тоже склоняюсь к мысли, что промежуточный инструмент не всегда дает ощутимый выигрыш по сравнению с простым маршрутом сборки.
Форт на Си у меня дорастал до 8000 строк кода, но это с учетом специфичных для проекта слов, которые были описаны на Си. Я тоже склоняюсь к мысли, что промежуточный инструмент не всегда дает ощутимый выигрыш по сравнению с простым маршрутом сборки.
|
|
|
|
Добавлено: Пн авг 09, 2021 01:43 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
true-grue писал(а): Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах. Идею понял, но сомневаюсь, что на такой системе это даст значительный выигрыш. Исчезнет однообразный код на Си, но появится промежуточный вспомогательный транслятор. Мне субъективно проще поддерживать несколько функций на Си в составе основной программы, чем многоступенчатый процесс сборки. Против Вашего варианта ещё говорит тот факт, что в данном случае набор слов ядра изменяться, скорее всего, не будет. Новые слова добавляются либо программой на Си, в которую встраивается интерпретатор, либо загружаемыми модулями. Но, думаю, что для больших систем и для self-hosted трансляторов Ваш вариант более подходящий
[quote="true-grue"]Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.[/quote] Идею понял, но сомневаюсь, что на такой системе это даст значительный выигрыш. Исчезнет однообразный код на Си, но появится промежуточный вспомогательный транслятор. Мне субъективно проще поддерживать несколько функций на Си в составе основной программы, чем многоступенчатый процесс сборки. Против Вашего варианта ещё говорит тот факт, что в данном случае набор слов ядра изменяться, скорее всего, не будет. Новые слова добавляются либо программой на Си, в которую встраивается интерпретатор, либо загружаемыми модулями. Но, думаю, что для больших систем и для self-hosted трансляторов Ваш вариант более подходящий
|
|
|
|
Добавлено: Сб авг 07, 2021 20:45 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
true-grue писал(а): Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах. А, разве таких решений мало в представленных решений Форт в связке с Си? (у меня на памяти как минимум несколько разных таких решений)
[quote="true-grue"] Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.[/quote] А, разве таких решений мало в представленных решений Форт в связке с Си? (у меня на памяти как минимум несколько разных таких решений)
|
|
|
|
Добавлено: Сб авг 07, 2021 19:45 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
zma писал(а): Цитата: Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе? Можете пояснить? У меня нет трансляции Форта в Си ни в каком виде. Внутри определений через двоеточие немного изменённый шитый код Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.
[quote="zma"] [quote]Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе?[/quote] Можете пояснить? У меня нет трансляции Форта в Си ни в каком виде. Внутри определений через двоеточие немного изменённый шитый код[/quote]
Я предлагаю избавиться от ручного кода на Си в тех функциях, где речь идет о "немного измененном шитом коде". Почему бы не попробовать описать эти самые функции на подмножестве Форта, чтобы затем, с помощью примитивного транслятора, автоматически получить результат в виде кода на Си? Пусть компилятор Си сам оптимизирует этот результат. Примерно таким образом осуществляется раскрутка в компиляторах.
|
|
|
|
Добавлено: Сб авг 07, 2021 17:18 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
true-grue писал(а): Думаю, полезно было бы выделить более компактное ядро на Си с добавлением расширений на Вашем Форте или том же Си. В другом, основном рабочем Форте так и сделал Цитата: Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе? Можете пояснить? У меня нет трансляции Форта в Си ни в каком виде. Внутри определений через двоеточие немного изменённый шитый код
[quote="true-grue"]Думаю, полезно было бы выделить более компактное ядро на Си с добавлением расширений на Вашем Форте или том же Си.[/quote] В другом, основном рабочем Форте так и сделал [quote]Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе?[/quote] Можете пояснить? У меня нет трансляции Форта в Си ни в каком виде. Внутри определений через двоеточие немного изменённый шитый код
|
|
|
|
Добавлено: Чт авг 05, 2021 04:32 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
zma писал(а): true-grue писал(а): Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт. Согласен, примеры не самые иллюстративные и основные слова - фортовские. Основные отличия - в хранении данных и типизации. Подчеркну, что система ни на что не претендует и выкладывалась, как иллюстрация "Форта со сборкой мусора" в ответ на сообщение в соседней теме. true-grue писал(а): Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью". 4500 строк (из них 3700 непустых) - это много? Может быть, дело в большом количестве проверок на возможные ошибки выполнения - постарался свести количество возможных Access Violation к минимуму. Да и код не самый лаконичный. А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше Сохранять компактность реализации нужно не из спортивного интереса, а ради поддерживаемости системы. Это особенно важно в случае Форта. Думаю, полезно было бы выделить более компактное ядро на Си с добавлением расширений на Вашем Форте или том же Си. Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе? Тогда бы у Вас был бы, преимущественно, автоматически сгенерированный код на Си. "Настолько маленький компилятор Си" это, к примеру, Chibicc (см. более ранние версии в истории репозитория) по ссылке выше. На мой взгляд, если сравнение компактности ряда реализаций более строгих (с точки зрения теории языков), гибких ЯП оказывается не в пользу Вашего Форта, то это говорит о том, что не удалось хорошо выделить немногие общие механизмы функционирования или же Вы разрабатываете настолько нетрадиционный форт-подобный язык, что он по своей гибкости/строгости оказался, по крайней мере, на уровне других популярных скриптовых языков. В целом, я не собирался критиковать именно Вашу работу, просто хотел обратить внимание на давно обнаруженный факт: некоторые Форт-системы настолько тяжеловесны, что способны сравниться по сложности с теми же Lua, Tcl, Scheme, Oberon и проч. И, что самое забавное, при сохранении постфиксной записи, разнообразных анахронизмов в духе PAD и <# # #> и других классических "штучек" Форта, использование которых можно, пожалуй, оправдать тем только, что реализация была написана в сжатые сроки под конкретные задачи и оказалась весьма небольшой по объему кода.
[quote="zma"][quote="true-grue"]Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт.[/quote] Согласен, примеры не самые иллюстративные и основные слова - фортовские. Основные отличия - в хранении данных и типизации. Подчеркну, что система ни на что не претендует и выкладывалась, как иллюстрация "Форта со сборкой мусора" в ответ на сообщение в соседней теме. [quote="true-grue"]Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью".[/quote] 4500 строк (из них 3700 непустых) - это много? Может быть, дело в большом количестве проверок на возможные ошибки выполнения - постарался свести количество возможных Access Violation к минимуму. Да и код не самый лаконичный. А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше[/quote]
Сохранять компактность реализации нужно не из спортивного интереса, а ради поддерживаемости системы. Это особенно важно в случае Форта. Думаю, полезно было бы выделить более компактное ядро на Си с добавлением расширений на Вашем Форте или том же Си. Опять же, зачем брать на себя роль компилятора Форта в Си? Почему бы не поручить эту задачу программе? Тогда бы у Вас был бы, преимущественно, автоматически сгенерированный код на Си.
"Настолько маленький компилятор Си" это, к примеру, Chibicc (см. более ранние версии в истории репозитория) по ссылке выше. На мой взгляд, если сравнение компактности ряда реализаций более строгих (с точки зрения теории языков), гибких ЯП оказывается не в пользу Вашего Форта, то это говорит о том, что не удалось хорошо выделить немногие общие механизмы функционирования или же Вы разрабатываете настолько нетрадиционный форт-подобный язык, что он по своей гибкости/строгости оказался, по крайней мере, на уровне других популярных скриптовых языков.
В целом, я не собирался критиковать именно Вашу работу, просто хотел обратить внимание на давно обнаруженный факт: некоторые Форт-системы настолько тяжеловесны, что способны сравниться по сложности с теми же Lua, Tcl, Scheme, Oberon и проч. И, что самое забавное, при сохранении постфиксной записи, разнообразных анахронизмов в духе PAD и <# # #> и других классических "штучек" Форта, использование которых можно, пожалуй, оправдать тем только, что реализация была написана в сжатые сроки под конкретные задачи и оказалась весьма небольшой по объему кода.
|
|
|
|
Добавлено: Ср авг 04, 2021 23:35 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
Нет, речь шла об учебном проекте с обстоятельным и читаемым кодом, компилятор стандарта C11: https://github.com/rui314/chibicc
Нет, речь шла об учебном проекте с обстоятельным и читаемым кодом, компилятор стандарта C11: https://github.com/rui314/chibicc
|
|
|
|
Добавлено: Ср авг 04, 2021 23:10 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
zma писал(а): А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше Предполагаю, что имелось ввиду это: https://bellard.org/tcc/Но товарищ помешан (в хорошем смысле этого слова) на оптимизации и минимизации, так что ничего удивительного. Взять хотя бы это: https://bellard.org/otcc/
[quote="zma"]А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше[/quote] Предполагаю, что имелось ввиду это: [url]https://bellard.org/tcc/[/url] Но товарищ помешан (в хорошем смысле этого слова) на оптимизации и минимизации, так что ничего удивительного. Взять хотя бы это: [url]https://bellard.org/otcc/[/url]
|
|
|
|
Добавлено: Ср авг 04, 2021 20:04 |
|
|
|
|
|
Заголовок сообщения: |
Re: Selena |
|
|
true-grue писал(а): Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт. Согласен, примеры не самые иллюстративные и основные слова - фортовские. Основные отличия - в хранении данных и типизации. Подчеркну, что система ни на что не претендует и выкладывалась, как иллюстрация "Форта со сборкой мусора" в ответ на сообщение в соседней теме. true-grue писал(а): Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью". 4500 строк (из них 3700 непустых) - это много? Может быть, дело в большом количестве проверок на возможные ошибки выполнения - постарался свести количество возможных Access Violation к минимуму. Да и код не самый лаконичный. А где-нибудь можно посмотреть на настолько маленький компилятор Си? Всё, что я до этого встречал, было значительно больше
[quote="true-grue"]Судя по приложенным примерам, под "конкатенативным языком" скрывается достаточно традиционный Форт.[/quote] Согласен, примеры не самые иллюстративные и основные слова - фортовские. Основные отличия - в хранении данных и типизации. Подчеркну, что система ни на что не претендует и выкладывалась, как иллюстрация "Форта со сборкой мусора" в ответ на сообщение в соседней теме. [quote="true-grue"]Хотелось бы понять, почему реализация получилась столь объемной. Проект современного компилятора стандартного Си использует меньше кода, чем "язык сценариев с обратной польской записью".[/quote] 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
[b]Selena[/b] - конкатенативный язык сценариев с обратной польской записью, динамической типизацией и автоматическим управлением памятью. Имеются встроенные средства для работы с файлами, каталогами, создания сетевых подключений по TCP и UDP, реализованы операции со строками, в том числе сопоставление по шаблону. Интерпретатор может использоваться как отдельная программа или встраиваться в виде DSL в программу на Си. Самостоятельный интерпретатор поддерживает динамическую загрузку модулей в виде библиотек DLL специального вида.
Selena - экспериментальная система, предназначенная для проверки применимости различных программных средств для решения моих текущих рабочих задач.
Система типов заимствована у языка Lua. Имеются следующие типы: - null - обозначает отсутствие значения - number - число с плавающей точкой (представлено типом double в Си) - boolean - логическое значение true или false - string - строка байтов произвольной длины - function - функция языка Си - colon - определение через двоеточие - table - таблица - ассоциативный массив, единственный составной тип данных языка - userdata - данные хост-программы, в рамках Selena могут храниться в переменных или таблицах и передаваться словам в качестве параметров (в частности, в виде userdata представлены файлы и сокеты)
Основные отличия от Форта: - значения всех типов хранятся на одном стеке данных, слова работы с ними контролируют совместимость типов - строковые литералы распознаются без пробела после открывающей кавычки ([b]""[/b] - пустая строка, [b]"abc"[/b] - строка из 3 символов), поддерживаются escape-последовательности языка Си - в качестве словаря может выступать любая таблица, таблица устанавливается в качестве словаря для поиска слов словом [b]CONTEXT[/b], слово [b]DEFINITIONS[/b] работает как обычно - явного выделения ячеек в словаре нет, слова [b]@[/b] и [b]![/b] работают с таблицами: [b]@ ( key table -- value ), ! ( value key table )[/b] - [b]CREATE[/b] создаёт таблицу с указанным именем в текущем словаре. При вызове таблицы она помещается на стек. Это поведение можно изменить словом [b]DOES>[/b] - [b]DO, ?DO, LOOP, +LOOP[/b] отсутствуют, их заменяют [b]FOR[/b] - цикл со счётчиком с шагом 1, [b]+FOR[/b] - цикл со счётчиком с указанным шагом, [b]FOR[][/b] - цикл по элементам массива (таблицы с ключами - натуральными числами), [b]FOR{}[/b] - цикл по всем парам "ключ-значение" в таблице, [b]NEXT[/b] - окончание всех этих циклов. Для слов [b]FOR[][/b] и [b]FOR{}[/b] доступны слова [b]I@[/b] и [b]J@[/b] для доступа к текущему элементу массива или таблицы - при вызове [b]EXIT[/b] внутри циклов, они завершаются автоматически, [b]UNLOOP[/b] не нужен - поиск слов в словаре производится без учёта регистра, но получение значения из таблицы по ключу-строке - с учётом
Для получения справки по имеющимся словам необходимо подключить модуль справки: REQUIRE HELP и вызвать слово [b]HELP[/b]
Система довольно сырая, так как экспериментальная. Конструктивная критика приветствуется.
[url]https://disk.yandex.ru/d/muX2IVt2VJ9yQw[/url]
|
|
|
|
Добавлено: Чт июл 29, 2021 10:25 |
|
|
|
|