OberonCore
https://forum.oberoncore.ru/

вопросы от лиспера
https://forum.oberoncore.ru/viewtopic.php?f=1&t=6103
Страница 3 из 3

Автор:  Rifat [ Четверг, 28 Сентябрь, 2017 15:47 ]
Заголовок сообщения:  Re: вопросы от лиспера

Может интерпретатор?

Автор:  Kemet [ Четверг, 28 Сентябрь, 2017 16:04 ]
Заголовок сообщения:  Re: вопросы от лиспера

budden писал(а):
1. Именованные параметры?

Нет, но принципиальных трудностей сделать это не существует.
budden писал(а):
2. Возможность переопределить отдельную функцию модуля во время выполнения, при этом не находясь в этом модуле (не знаю, как устроены права доступа в Обероне, в лиспе всё можно делать откуда угодно).

Нет, но процедурные переменные спасут мир.
budden писал(а):
3. Возможность переопределить модуль, сохранив данные. Например, я пишу бота, который общается с пользователем (сейчас модно). У меня есть база данных ответов пользователя. Она является переменной в моём модуле. Также в нём есть функция "ответить". Я хочу поменять функцию "ответить", но база ответов не должна разрушиться.

Процедурные переменные или делегаты в Активном Обероне, но вообще, нужно озаботиться архитектурой приложения, что бы отделить данные от алгоритмов.
budden писал(а):
4. Можно ли переопределить функцию модуля с изменением сигнатуры на несовместимую. При этом реальный вызов с некорректной сигнатурой должен приводить к ошибке времени выполнения. Общий сценарий использования этой возможности в лиспе выглядит так: сначала меняем функцию,потом делаем глубокий вдох и делаем пальцы крестиком. Потом меняем все точки вызова. Потом выдыхаем. Впрочем, если изменение состоит в добавлении именованного параметра, то делать вдох и держать пальцы крестиком не надо. Сигнатура получается другая, но совместимая со старой.

нет, ибо статическая типизация. ну или меняй и модуль перекомпилируй, а потом забудь перекомпилировать клиенты и будет то, что ты так хочешь.
budden писал(а):
5. То же касается объектов. Есть ли возможность расширять объекты (добавлять поля) без разрушения данных в них?

Канешна, если ты сделаешь модель и верти её как хочешь, а объекты на уровне языка в рантайме менять низя. Но. теоретически, используя рефлекшен можно извратиться. Но зачем?
budden писал(а):
6. Макросы в смысле Лиспа. В Лиспе макрос - это функция, которая выполняется во время компиляции. Она берёт на вход AST и некую информацию об окружении, в котором введено это AST. На выходе должно получиться новое AST. ПРи этом можно пользоваться всеми возможностями для преобразования AST (хоть из гугла скачивать новое AST).

не реализовано, но потенциально возможно.
budden писал(а):
7. Насколько развита сборка мусора? Сборка мусора в реальном времени - это круто, но есть другие направления развития. Например, в Эйфеле отдельны сборщик мусора на каждый тред. Во многих языках поколенческая сборка мусора. Есть ли такое?

В А2/Активном Обероне сейчас есть и сборка мусора с поколениями. в lock-free версии - неблокирующий сборщик.
budden писал(а):
8. Есть ли слабые ссылки (weak pointers)?

В Активном обероне есть небезопасные указатели (UNSAFE POINTERS) - это просто типизированный адрес. Ну и нужно чтобы переменная такого типа была UNTRACED. это и будет слабая ссылка var u{untraced}: pointer{unsafe} to T;
budden писал(а):
9. Есть ли настоящие треды?

Да, в Активном Обероне
budden писал(а):
10. Доступно ли всё перечисленное под пермиссивной лицензией (MIT,BSD и т.п., но не GPL и LGPL).
Да

Автор:  Kemet [ Четверг, 28 Сентябрь, 2017 16:05 ]
Заголовок сообщения:  Re: вопросы от лиспера

Rifat писал(а):
Может интерпретатор?
Я видел транслятор в Си, и компилятор для линукса i386

Автор:  Valery Solovey [ Четверг, 28 Сентябрь, 2017 19:37 ]
Заголовок сообщения:  Re: вопросы от лиспера

Да он уже ушёл. Писать бесполезно.

Автор:  prospero78 [ Среда, 04 Октябрь, 2017 14:32 ]
Заголовок сообщения:  Re: вопросы от лиспера

Илья Ермаков писал(а):
К этому (пониманию безальтернативности статической типизации) приходят все, наевшись кактусов и достигнув приличного объёма проекта.

Где подписаться?

ilovb писал(а):
Т.е. будущее за метаязыками, которые будут ограничивать сверху язык разработки. Причем
предметно и локально. Фиксированная семантика языка - это тупиковый путь.

Нет у них никакого будущего.
Язык должен быть с фиксированной семантикой. А вот словарь -- должен быть резиновым.
Язык должен расширяться производными частями, а не ядро коверкаться.

Автор:  Madzi [ Суббота, 07 Октябрь, 2017 00:10 ]
Заголовок сообщения:  Re: вопросы от лиспера

У фирмы JetBrains есть такой бесплатный продукт MPS - типа студия для DSL, где можно вставлять тексты и графики в код.
Советую посмотреть. Там как раз можно создавать разные предметно ориентированные языки, а потом из них замешивать приложение.

Автор:  ilovb [ Суббота, 07 Октябрь, 2017 00:55 ]
Заголовок сообщения:  Re: вопросы от лиспера

prospero78 писал(а):
Илья Ермаков писал(а):
К этому (пониманию безальтернативности статической типизации) приходят все, наевшись кактусов и достигнув приличного объёма проекта.

Где подписаться?

ilovb писал(а):
Т.е. будущее за метаязыками, которые будут ограничивать сверху язык разработки. Причем
предметно и локально. Фиксированная семантика языка - это тупиковый путь.

Нет у них никакого будущего.
Язык должен быть с фиксированной семантикой. А вот словарь -- должен быть резиновым.
Язык должен расширяться производными частями, а не ядро коверкаться.


Я говорил об ограничении наоборот. Понимаешь?
Метаязык должен ограничивать язык разработки, а не расширять.

Пример:
В языке разработки есть тип INT32
Идея в том, что ты можешь ограничить с помощью метаязыка его использование.
Ну, к примеру, что значение должно быть в некотором диапазоне.
В Ada это вкручено в язык. А я хочу чтобы такие возможности были сбоку и специфическими для конкретного проекта.
Т.е. нужен метаязык сбоку, который просто будет контролить компиляцию.
Пишешь ты как обычно, на Обероне. А рядом с компилятором лежит метапрограмма, которая не дает тебе нарушить инварианты проекта.

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

Автор:  Madzi [ Воскресенье, 08 Октябрь, 2017 00:44 ]
Заголовок сообщения:  Re: вопросы от лиспера

CheckStyle ?

Автор:  Valery Solovey [ Воскресенье, 08 Октябрь, 2017 22:15 ]
Заголовок сообщения:  Re: вопросы от лиспера

Я с инструментами, следящими за соответствием стилю кодирования не работал, но неужели они способны следить за тем, чтобы INT32 не превышал диапазона INT8?

Автор:  Madzi [ Понедельник, 09 Октябрь, 2017 23:14 ]
Заголовок сообщения:  Re: вопросы от лиспера

Valery Solovey писал(а):
Я с инструментами, следящими за соответствием стилю кодирования не работал, но неужели они способны следить за тем, чтобы INT32 не превышал диапазона INT8?

Да. Собственно, это инструмент статического анализа (ещё есть FindBug, PMD) программы. Он способен не только следить за правильностью расстновки скобочек и отступов, но и в принципе делать любые проверки по AST дереву. Поэтому часть правил смотрит на оформление, а часть - на код.

Автор:  prospero78 [ Вторник, 10 Октябрь, 2017 12:37 ]
Заголовок сообщения:  Re: вопросы от лиспера

Ограничение типа INTEGER?
Т.е. ты про создание пользовательского типа?))) Который мониторится компилятором?))
Или, даже ASSERT спасёт отца русской демократии?))

Автор:  Madzi [ Среда, 11 Октябрь, 2017 01:54 ]
Заголовок сообщения:  Re: вопросы от лиспера

prospero78 писал(а):
Ограничение типа INTEGER?
Т.е. ты про создание пользовательского типа?))) Который мониторится компилятором?))
Или, даже ASSERT спасёт отца русской демократии?))

ASSERT - это проверка в определённом месте, а статический анализатор кода будет следить сразу за всеми возможными изменениями.

Автор:  Иван Денисов [ Среда, 11 Октябрь, 2017 10:12 ]
Заголовок сообщения:  Re: вопросы от лиспера

Madzi писал(а):
prospero78 писал(а):
Ограничение типа INTEGER?
Т.е. ты про создание пользовательского типа?))) Который мониторится компилятором?))
Или, даже ASSERT спасёт отца русской демократии?))

ASSERT - это проверка в определённом месте, а статический анализатор кода будет следить сразу за всеми возможными изменениями.

Сейчас в компиляторе Блэкбокса за этим следит фронтенд часть. Если будете пытаться присвоить константу, выходящую за границы INTEGER, то он не разрешит на этапе до компиляции.
Вложение:
comp_parcer.png
comp_parcer.png [ 9.7 КБ | Просмотров: 9037 ]

Автор:  ilovb [ Среда, 11 Октябрь, 2017 10:25 ]
Заголовок сообщения:  Re: вопросы от лиспера

Madzi вроде о другом говорит. Статический анализатор как я понял может вывести, что в определенном месте потенциально может быть переполнение. Обычный компилятор такое в принципе сделать не может, т.к. это можно узнать только запустив программу.
Есть методы статического анализа, которые позволяют вычислять такие вещи без запуска программы. Сюда же относится автовывод типов.

Страница 3 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/