OberonCore
https://forum.oberoncore.ru/

День Оберона 2019
https://forum.oberoncore.ru/viewtopic.php?f=155&t=6421
Страница 9 из 13

Автор:  Валерий Лаптев [ Среда, 12 Февраль, 2020 03:36 ]
Заголовок сообщения:  Re: День Оберона 2019

Пётр Кушнир писал(а):
Много шума из ничего.

Не-не-не...
Уже только одно ЯВНОЕ представление архитектуры из компонентов - дорогого стОит.
Конструирование типа из частей - нечто похожее есть в Додиезе - там можно писать частичные классы.
Конечно, для сборки программы из компонентов потребуется метаинформация.
Но, на мой взгляд, к единообразию все равно прийти не удастся.
В отличие от материального мира, в программировании очень легко создаются новые сущности.
Поэтому каждый, кто хочет (и способен) просто делает свое "в меру своей испорченности".

Автор:  Пётр Кушнир [ Среда, 12 Февраль, 2020 09:44 ]
Заголовок сообщения:  Re: День Оберона 2019

Валерий Лаптев писал(а):
Не-не-не...

Очень убедительно. Мы-то лапотные, трейтов с миксинами не видели ни разу, а уж про тип как тег или интерфейс как сумму методов и мечтать не могли. В итоге вся суть новости в том, что кто-то что-то сделал. Ну ок.

Автор:  budden [ Среда, 12 Февраль, 2020 15:21 ]
Заголовок сообщения:  Re: День Оберона 2019

Вот мне опять же неясно. Несколько уровней компонент есть в яве и C# (функция - класс - пакет - приложение). Явного описания структуры в java, может быть, и не существует, но, если программа вся статическая и не грузит классы по имени, то эту структуру, видимо, легко получить (сам с явой практически недостаточно опыта имел, чтобы знать этот вопрос).

Кроме того, не всякая система может быть описана статически и грань довольно быстро переступается. Например, веб-страницу можно рассматривать как некую систему из компонент, но её структура определяется в момент выполнения и может меняться динамически. В т.ч. и в ББ с его коммандерами и динамической компиляцией модуля структура программы неизвестна до запуска ББ - она меняется по ходу дела.

В динамической среде не так-то легко определить структуру зависимостей (и даже само понятие о зависимости не вполне ясно), таковая структура может спокойно содержать циклы и проч.

Соответственно, возможность статического описания структуры проекта сама по себе не даёт ни достаточно гибкости для всех задач практики, ни ставит вопросов о полном наборе нужных инструментов.

Поэтому всё же осмелюсь снова спросить, в чём же инновация в ВИРе?

Автор:  adimetrius [ Среда, 12 Февраль, 2020 15:26 ]
Заголовок сообщения:  Re: День Оберона 2019

Валерий Лаптев писал(а):
Конструирование типа из частей - нечто похожее есть в Додиезе - там можно писать частичные классы.



А чем ABSTRACT RECORD не "частичное описание класса"? Views.View асбтрактный, оч много всего реализовывает, изящно, элегантно и незаметно, а программист потом дописывает Restore, макушку айсберга - и вот оно.

Автор:  Comdiv [ Среда, 12 Февраль, 2020 17:34 ]
Заголовок сообщения:  Re: День Оберона 2019

budden писал(а):
Явного описания структуры в java, может быть, и не существует, но, если программа вся статическая и не грузит классы по имени, то эту структуру, видимо, легко получить (сам с явой практически недостаточно опыта имел, чтобы знать этот вопрос).
Структура программы может быть и статической по замыслу и не грузить явно классы по именам из строк, но сама по себя Java в отношени компоновки классов существенно динамическая и всё равно неявно грузит классы по имени в тот момент, когда они понадобятся, и их отсутствие можно корректно обработать, если использующий код отлавливает ClassNotFoundException.

Цитата:
Поэтому всё же осмелюсь снова спросить, в чём же инновация в ВИРе?
Для ответа на этот вопрос, видимо, нужно чтобы кто-то, всё-таки, воспользовался предложением и после консультаций с автором описал бы систему со стороны. Не хотите взяться? Там есть горячая перезагрузка кода и русский язык, как Вы любите.

Автор:  Валерий Лаптев [ Четверг, 13 Февраль, 2020 08:56 ]
Заголовок сообщения:  Re: День Оберона 2019

adimetrius писал(а):
Валерий Лаптев писал(а):
Конструирование типа из частей - нечто похожее есть в Додиезе - там можно писать частичные классы.

А чем ABSTRACT RECORD не "частичное описание класса"?

Не. Абстрактные классы - это обычный ООП, который есть во всех языках.
Наследники реализуют и добавляют.
Частичный класс - это несколько другое.
Можно ДОБАВИТЬ в БАЗОВЫЙ класс чего не хватает. Совсем в другом месте программы.
При этом исходный базовый класс не требуется заново транслировать, а только добавления.

Автор:  Comdiv [ Четверг, 13 Февраль, 2020 11:15 ]
Заголовок сообщения:  Re: День Оберона 2019

Валерий Лаптев писал(а):
Можно ДОБАВИТЬ в БАЗОВЫЙ класс чего не хватает. Совсем в другом месте программы.
При этом исходный базовый класс не требуется заново транслировать, а только добавления.
Иными словами, это аналог добавления процедуры, которая работает с экземпляром класса, объявленного в другом модуле, где ради "красивого" вида вызова, вводятся побочные эффекты:
    1. Неочевидность места происхождения "метода" и возможность путаницы.
    2. Необходимость разрешать конфликты пересекающихся "расширений".
    3. Стимулирование отказа от полноценного сокрытия и внесенения зависимости от внутреннего содержимого, повышая хрупкость связей.
Чтобы понять полезность или бесполезность этого, "обязательно" нужно сделать концепт и провести годы экспериментов.

Автор:  Валерий Лаптев [ Четверг, 13 Февраль, 2020 14:32 ]
Заголовок сообщения:  Re: День Оберона 2019

Ну, "молча" предполагается, что эти "годы экспериментов" проделала Микрософт, и потом внесла эти фичи в язык.
Собственно, Недоря тоже проводит "годы экспериментов", разрабатывая ВИР.

Автор:  budden [ Четверг, 13 Февраль, 2020 14:45 ]
Заголовок сообщения:  Re: День Оберона 2019

Цитата:
Цитата:
Поэтому всё же осмелюсь снова спросить, в чём же инновация в ВИРе?
Для ответа на этот вопрос, видимо, нужно чтобы кто-то, всё-таки, воспользовался предложением и после консультаций с автором описал бы систему со стороны. Не хотите взяться?

Не, так не пойдёт. Я спрашиваю у тех, кто её там увидел и пришёл в восторг. Если никто ничего не увидел, то не о чем и говорить.

Автор:  adimetrius [ Четверг, 13 Февраль, 2020 16:57 ]
Заголовок сообщения:  Re: День Оберона 2019

Валерий Лаптев писал(а):
adimetrius писал(а):
Валерий Лаптев писал(а):
Конструирование типа из частей - нечто похожее есть в Додиезе - там можно писать частичные классы.

А чем ABSTRACT RECORD не "частичное описание класса"?

Не. Абстрактные классы - это обычный ООП, который есть во всех языках.
Наследники реализуют и добавляют.
Частичный класс - это несколько другое.
Можно ДОБАВИТЬ в БАЗОВЫЙ класс чего не хватает. Совсем в другом месте программы.
При этом исходный базовый класс не требуется заново транслировать, а только добавления.


Хм, вот интересно:
Пусть есть тип А, и для него автор гарантировал множество инвариантов ИА.
Клиент К использует А, полагаясь, ессно, на ИА.
Потом некто, годы спустя, подмешивает в А что-то. Получается А'. Но выглядит как А. Вопрос: что будет с клиентом К, которому под видом А подсунули А'? Кто гарантирует, что ИА соблюдается для А'?

Автор:  Comdiv [ Четверг, 13 Февраль, 2020 17:47 ]
Заголовок сообщения:  Re: День Оберона 2019

Валерий Лаптев писал(а):
Ну, "молча" предполагается, что эти "годы экспериментов" проделала Микрософт
Результаты исследований имеются в открытом доступе?

Автор:  Comdiv [ Четверг, 13 Февраль, 2020 17:54 ]
Заголовок сообщения:  Re: День Оберона 2019

budden писал(а):
Не, так не пойдёт. Я спрашиваю у тех, кто её там увидел и пришёл в восторг. Если никто ничего не увидел, то не о чем и говорить.
Восторг, или, точней, живой отклик вызывает ряд высказываемых мыслей. Качество воплощения глобальных идей и оценку оврагов в конкретной системе вряд ли кто делал из здесь обитающих.
Валерий, может, Вам или Вашим студентам будет интересно поработать с Вир-1?

Автор:  Sergej Durmanov [ Четверг, 13 Февраль, 2020 19:47 ]
Заголовок сообщения:  Re: День Оберона 2019

Comdiv писал(а):
Валерий Лаптев писал(а):
Ну, "молча" предполагается, что эти "годы экспериментов" проделала Микрософт
Результаты исследований имеются в открытом доступе?
А кто сказал, что они что-то исследовали? Partial types в C# - это заимствование из Модулы-3 ( естественно, со спецификой шарпа )

Автор:  PSV100 [ Четверг, 13 Февраль, 2020 19:54 ]
Заголовок сообщения:  Re: День Оберона 2019

budden писал(а):
В динамической среде не так-то легко определить структуру зависимостей (и даже само понятие о зависимости не вполне ясно), таковая структура может спокойно содержать циклы и проч.

Соответственно, возможность статического описания структуры проекта сама по себе не даёт ни достаточно гибкости для всех задач практики, ни ставит вопросов о полном наборе нужных инструментов.

Поэтому всё же осмелюсь снова спросить, в чём же инновация в ВИРе?

Ни общее описание системы, ни краткая инструкция не дают полного представления. В блоге автора также оказалось мало информации по самой сути.
В целом, природа "явной схемы программы" выглядит не статичной. Вот здесь шире представлен "дух" системы (существующего и планируемого концепта):
- Компонентный ассемблер для цифрового пространства. Часть 1
- Компонентный ассемблер. Часть 2. Дух языка
- Вир-2. Интерфейсы

Ранее автор делал акцент, прежде всего, на "программировании в большом" ("от распределенных приложений до распределенных много под-системных систем, работающих в неоднородной вычислительной среде"), или см. здесь. Сейчас, вроде бы, стоит задача охватить и "программирование в малом". Однако, публичные результаты пока наблюдаются лишь такие:
OOP or not OOP or better OOP
Цитата:
Цитата:
Множество интерфейсов для одной и той же структуры данных напоминают возможности языка модулей ML.
Рассматривали ли вы языки ML-семейства — SML, OCaml?

Мы рассматриваем широкий набор языков, в основном те, с которыми мы собираемся конкурировать: Java, Kotlin, C#, Go, Swift, Dart, Lua, JS. Смотрим и на ML’s, на Rust и на Jai. Но это не значит, что мы берем какой-то язык за основу.

Мы запускаем широкое исследование, в котором задействованы университетские кадры из нескольких университетов, чтобы построить набор бенчмарков для количественного и качественного сравнения языков. Это все будет открыто, когда появятся первые результаты.

И ещё до кучи насчёт языков: CLIP/CLOP vs pure OOP

Автор:  Comdiv [ Четверг, 13 Февраль, 2020 20:00 ]
Заголовок сообщения:  Re: День Оберона 2019

Sergej Durmanov писал(а):
Comdiv писал(а):
Валерий Лаптев писал(а):
Ну, "молча" предполагается, что эти "годы экспериментов" проделала Микрософт
Результаты исследований имеются в открытом доступе?
А кто сказал, что они что-то исследовали? Partial types в C# - это заимствование из Модулы-3 ( естественно, со спецификой шарпа )
Похоже, что Валерий Лаптев так считает, если я правильно его понял. Ну и заимствование откуда бы ни было не противоречит наличию своих исследований. Исследования из других источников тоже сгодятся.

Автор:  PSV100 [ Четверг, 13 Февраль, 2020 20:02 ]
Заголовок сообщения:  Re: День Оберона 2019

Во время доклада на Дне Оберона были ремарки по поводу "огромного" размера пустой программы на Go. Также автор упоминал негативные ("прожорливые", хотя на фоне тех же Java c Net-ом ...) результаты от "компонентных" экспериментов на Delphi в 2000-х гг., предшествующих проекту ВИР.
В самом деле, в те времена для Delphi возникла библиотека KOL (Key Objects Library), которая продемонстрировала "аппетиты" типового ООП-подхода, показав на порядок меньше (плюс эффективнее использование памяти, да и скорость...). Стандартная VCL в Delphi имеет традиционный раздутый абстрактный и виртуальный слой. Компилятор и линковщик из-за механизмов наследования и, прежде всего, таблиц виртуальных методов не могут "выкидывать" неиспользуемую "виртуальщину". В KOL использовали старый борландовский тип "object" вместо "class" и "interface", имеющий компактнее формат (в сравнении с "interface" -- и меньшую стоимость виртуального вызова), был задействован крайне минималистический набор виртуальных методов. Чтобы не разбухало RTTI вынуждены были не плодить типы для реализации визуальных "control"-ов, был общий TControl с огромным набором методов для всех случаев -- последствия обхода особенностей системы сборки (или всей системы). Также оказалось, что на размер конечного образа влияет большое количество исходных файлов-модулей, в результате применялись огромные модули (но в малом количестве) с массой содержимого. Предусматривалась замена стандартных системных модулей (которые могут через секции инициализации/финализации задействовать много чего нужного, однако не во всех программах) и др. Была возможность не использовать механизм исключений или задействовать в ограниченной форме на основе объекта исключения единственного класса. Архитектура объектов предусматривала адекватное внедрение зависимостей. Например, некая "техническая" процедура обработки событий от ОС определенных типов попадает в конечный образ только в случаях, если для объекта будет задан соответствующий "пользовательский" обработчик события (зависимость явного использования "технической" процедуры задаётся лишь в единственном месте -- в процедуре установки обработчика события). И пр.

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

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

Автор:  PSV100 [ Четверг, 13 Февраль, 2020 20:07 ]
Заголовок сообщения:  Re: День Оберона 2019

Sergej Durmanov писал(а):
Если я правильно понимаю, это что-то вроде partial types из Модулы-3 и C# ( тоже позаимстовано из Модулы-3 ).
Когда объект разбивается на самодостаточные части ( интерфейс + реализация ) и при компиляции собирается в единый тип ( возмодна вариативность )

Скорее, usebox больше напоминает более гибкие "встраиваемые" или "расширяемые" модули (Module Embedding), когда-то предложенные для Оберонов. Встраивание (отношение contains-a) и импортирование (разделение модуля -- shares-a) -- разные отношения и могут быть одновременно между модулями.
С учётом замечания от Недори: "так как в современной разработке всегда используются системы управления кодом и версиями, технически мы готовы к переходу к защите кода через авторизацию" в том числе, вроде бы, можно для "расширенных" модулей разрешить доступ и к приватной части базового модуля (например, используя паскалевское/борландовское ключ. слово "inherited"). В результате такой механизм будет включать и возможности "дочерних" модулей из Ada. И, вроде бы, нет преград в механизме и для "родовых" модулей (с generic-параметрами).

Автор:  Comdiv [ Четверг, 13 Февраль, 2020 20:16 ]
Заголовок сообщения:  Re: День Оберона 2019

PSV100 писал(а):
Имхо, "компонентный ассемблер" для программирования "в большом" ("сборочного") вряд ли будет приемлемым без адекватного "ассемблера" и для "синтезирующего" программирования.
Не стоит обесценивать это утверждение имхой. Без адекватного соответствия сборочного и синтерзирующего уровней невозможно эффективное создание эффективных же систем. Сгинете на согласовании и не сможете воспользоваться преимуществами друг друга.

Автор:  arlean1 [ Пятница, 14 Февраль, 2020 00:14 ]
Заголовок сообщения:  Re: День Оберона 2019

Comdiv писал(а):
PSV100 писал(а):
Имхо, "компонентный ассемблер" для программирования "в большом" ("сборочного") вряд ли будет приемлемым без адекватного "ассемблера" и для "синтезирующего" программирования.
Не стоит обесценивать это утверждение имхой. Без адекватного соответствия сборочного и синтерзирующего уровней невозможно эффективное создание эффективных же систем. Сгинете на согласовании и не сможете воспользоваться преимуществами друг друга.

не совсем понятны критерии эффективности?
Речь идет о больших или малых системах?
Например, сборочный уровень - язык метапрограммирования может быть "подобен" языку порождаемой программы, в т.ч. для более лёгкого вхождения - это тоже эффективно ...

типа https://compscicenter.ru/media/courses/2018-spring/spb-cpp-2/slides/cpp_2_lecture_240418.pdf

Как примеры метапрограммирования - https://habr.com/ru/post/137446/

- здесь каждая из техник по-своему эффективна.

Автор:  Валерий Лаптев [ Пятница, 14 Февраль, 2020 08:23 ]
Заголовок сообщения:  Re: День Оберона 2019

adimetrius писал(а):
Хм, вот интересно:
Пусть есть тип А, и для него автор гарантировал множество инвариантов ИА.
Клиент К использует А, полагаясь, ессно, на ИА.
Потом некто, годы спустя, подмешивает в А что-то. Получается А'. Но выглядит как А. Вопрос: что будет с клиентом К, которому под видом А подсунули А'? Кто гарантирует, что ИА соблюдается для А'?

В том-то и дело, что для клиента К все останется по-прежнему.
У Недори это как-то гораздо более прозрачно сделано. И лично мне почему-то гораздо понятнее.

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