Почему модульные системы не получили распространения?
От: Разраб  
Дата: 06.04.24 02:37
Оценка:
Вот тут дается описание, что понимать под модульными системами.
https://oberoncore.ru/library/gubanov_sekrety_modulnyh_sistem
Получается, что ни один популярный/промышленный ЯП не является модульным.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Почему модульные системы не получили распространения?
От: vsb Казахстан  
Дата: 06.04.24 03:06
Оценка: +1
По моим наблюдениям модульность ушла на уровень микросервисов. Хорошо это или плохо — вопрос другой, но — пока вот так. А внутри типичного микросервиса модульность особо не нужна. Ну само приложение, конечно, собирается из библиотек, но никто их там динамически не загружает-выгружает. Контейнер с сервисом это сущность, можно сказать, неделимая.

Могу предположить, что будущее в микросервисах-функциях. Когда единицей деплоймента будет не контейнер со встроенной в него операционной системой, а wasm-бинарник с определённым интерфейсом, представляющий из себя функцию.
Отредактировано 06.04.2024 3:08 vsb . Предыдущая версия .
Re: Почему модульные системы не получили распространения?
От: kov_serg Россия  
Дата: 06.04.24 06:39
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Получается, что ни один популярный/промышленный ЯП не является модульным.


Ни один не является. Модульность есть в электрических схемах, где у вас есть явное описание входов, выходов и сценариев использования модуля и каждый модуль (микросхема) самодостаточна. Если её что-то нужно она это подключает через внешний интерфейс (i2c, spi, ...), а не ищет сама и использует в втихаря. В языках популярных программирования очень легко это нарушается и не считается чем-то зазорным.
Например у вас есть функция и она использует sin, то или вы реализуете сами вычисление внутри модуля или выставляете наружу требования предоставить эту функцию, а не просто подключаете неизвестно откуда.
Re: Почему модульные системы не получили распространения?
От: Stanislaw K СССР  
Дата: 06.04.24 07:00
Оценка: +3
Здравствуйте, Разраб, Вы писали:

Р>Вот тут дается описание, что понимать под модульными системами.

Р>https://oberoncore.ru/library/gubanov_sekrety_modulnyh_sistem
Р>Получается, что ни один популярный/промышленный ЯП не является модульным.

а зачем, какие преимущества это даст?
Все проблемы от жадности и глупости
Re: Почему модульные системы не получили распространения?
От: CreatorCray  
Дата: 06.04.24 07:21
Оценка: +2
Здравствуйте, Разраб, Вы писали:

Р>Вот тут дается описание, что понимать под модульными системами.

Р>https://oberoncore.ru/library/gubanov_sekrety_modulnyh_sistem
Многабукаф, к тому же от герра "Синтаксический Оверхед" Губанова, у которого с внятным выражением мыслей всегда было очень не очень.

Р>Получается, что ни один популярный/промышленный ЯП не является модульным.

А нафига?
Что это даёт такого без чего жизнь не мила?
Одним абзацем, будьте так любезны.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Почему модульные системы не получили распространения?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.04.24 08:23
Оценка: +1
Здравствуйте, Разраб, Вы писали:

Р>Получается, что ни один популярный/промышленный ЯП не является модульным.

И хорошо. Зачем нужна программа, поведение которой может поменяться неожиданным для автора образом?
Обычно модульность как описана в статье нужна в единичных случаях. И там где она нужна и применяется существуют фреймворки.
Re: Почему модульные системы не получили распространения?
От: velkin Удмуртия https://kisa.biz
Дата: 07.04.24 13:11
Оценка: 1 (1)
Здравствуйте, Разраб, Вы писали:

Р>Вот тут дается описание, что понимать под модульными системами.

Р>https://oberoncore.ru/library/gubanov_sekrety_modulnyh_sistem
Р>Получается, что ни один популярный/промышленный ЯП не является модульным.

Мне больше нравится вот эта статья.
«Забытые» парадигмы программирования

Возьми для примера C++ и.
1. Книгу от его создателя "Язык программирования C++" третье специальное издание Страуструпа Бьерна.
2. Глава "2.4. Модульное программирование ... 65".

Набор связанных процедур и обрабатываемых ими данных часто называют модулем (module).


В C++.

1. Структурное программирование.
1.1. блок кода {}.
1.2. ветвление if, switch.
1.3. циклы do, while, for.

2. Процедурное программирование.
2.1 подпрограммы (глобальная функция, не возвращает значение, не имеет аргументов).
2.1.1 процедуры (глобальная функция, не возвращает значение, может иметь аргументы).
2.1.2 функции (глобальная функция, возвращает значение, может иметь аргументы).

3. Модульное программирование.
3.1. физическое разделение кода #include.
3.2. логическое разделение кода namespace.

Вот смотри.

    Глава 2. Обзор языка C++ ... 59
        2.1. Что такое язык C++? ... 59
        2.2. Парадигмы программирования ... 60
        2.3. Процедурное программирование ... 61
            2.3.1. Переменные и простейшая арифметика ... 62
            2.3.2. Операторы ветвления и циклы ... 63
            2.3.3. Указатели и массивы ... 64
        2.4. Модульное программирование ... 65   <-------------------- Глава 8
            2.4.1. Раздельная компиляция ... 67  <-------------------- Глава 9
            2.4.2. Обработка исключений ... 68   <-------------------- Глава 8
        2.5. Абстракция данных ... 69
            2.5.1. Модули, определяющие типы ... 69
            2.5.2. Типы, определяемые пользователем ... 71
            2.5.3. Конкретные типы ... 73
            2.5.4. Абстрактные типы ... 74
            2.5.5. Виртуальные функции ... 77
        2.6. Объектно-ориентированное программирование ... 77
            2.6.1. Проблемы, связанные с конкретными типами ... 78
            2.6.2. Классовые иерархии ... 79
        2.7. Обобщённое программирование ... 81
            2.7.1. Контейнеры ... 81
            2.7.2. Обобщённые алгоритмы ... 82
        2.8. Заключение ... 84
        2.9. Советы ... 84

Глава 8.
    Глава 8. Пространства имён и исключения ... 219
        8.1. Разбиение на модули и интерфейсы ... 219
        8.2. Пространства имён ... 221
            8.2.1. Квалифицированные имена ... 223
            8.2.2. Объявления using ... 224
            8.2.3. Директивы using ... 226
            8.2.4. Множественные интерфейсы ... 227
                8.2.4.1. Альтернативы интерфейсам ... 229
            8.2.5. Как избежать конфликта имён ... 231
                8.2.5.1. Неименованные пространства имён ... 232
            8.2.6. Поиск имён ... 233
            8.2.7. Псевдонимы пространств имён ... 234
            8.2.8. Композиция пространств имён ... 235
                8.2.8.1. Отбор отдельных элементов из пространства имён ... 236
                8.2.8.2. Композиция пространств имён и отбор элементов ... 237
            8.2.9. Пространства имён и старый код ... 238
                8.2.9.1. Пространства имён и язык C ... 238
                8.2.9.2. Пространства имён и перегрузка ... 239
                8.2.9.3. Пространства имён открыты ... 240
        8.3. Исключения ... 241
            8.3.1. Ключевые слова throw и catch ... 242
            8.3.2. Обработка нескольких исключений ... 244
            8.3.3. Исключения в программе калькулятора ... 246
                8.3.3.1. Альтернативные стратегии обработки ошибок ... 249
        8.4. Советы ... 251
        8.5. Упражнения ... 252

Глава 9.
    Глава 9. Исходные файлы и программы ... 253
        9.1. Раздельная компиляция ... 253
        9.2. Компоновка (linkage) ... 254
            9.2.1. Заголовочные файлы ... 257
            9.2.2. Заголовочные файлы стандартной библиотеки ... 259
            9.2.3. Правило одного определения ... 260
            9.2.4. Компоновка с кодом, написанном не на языке C++ ... 262
            9.2.5. Компоновка и указатели на функции ... 264
        9.3. Применяем заголовочные файлы ... 265
            9.3.1. Единственный заголовочный файл ... 265
            9.3.2. Несколько заголовочных файлов ... 268
                9.3.2.1. Остальные модули калькулятора ... 271
                9.3.2.2. Использование заголовочных файлов ... 273
            9.3.3. Защита от повторных включений ... 274
        9.4. Программы ... 275
            9.4.1. Инициализация нелокальных переменных ... 275
                9.4.1.1. Завершение выполнения программы ... 276
        9.5. Советы ... 278
        9.6. Упражнения ... 278


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

3.3. обработка исключений try, throw, catch.

Но способ которым это происходит в C++ на мой взгляд нельзя отнести к чисто модульному программированию. Хотя так то да, можно из чужого модуля перехватить исключение, если знать, что он его возвращает.

А что касается статьи, которую ты привёл.

Что только ещё ни было названо модулем, какой язык программирования ещё ни был назван модульным. Кто-то называет модулем class, кто-то другой сравнивает модули с объектами.


4. Объектно-ориентированное программирование.
4.1. структура struct.
4.2. класс class.

5. Обобщённое программирование.
5.1. шаблон функции template.
5.2. шаблон класса template.

Я понятное дело не буду расписывать объектно-ориентированное и обобщённое программирование полностью.

Рассмотрим устройство (динамически расширяемой) модульной системы.

Это уже пошла тема про динамическое связывание библиотек алгоритмов.
1. Библиотека
2. Плагин.

Как по мне это с модульным программированием напрямую не связано, как и.
1. Единица трансляции.
2. Объектный модуль.

Мне кажется люди просто попутали понятия из-за сокращений.

По идее мне наверное тоже надо посидеть и упорядочить все понятия на эти темы. Потому что создатели языков ясно знают, что такое модульное или иное программирование. А обычные люди плавают в теории, что смогли, то освоили. Потом начинают рассуждать на тему компиляции.

Им Страуструп прямым текстом говорит, что модульное программирование в C++ это #include и namespace. Ну ещё он обработку ошибок в разных модулях try, throw, catch в эту же тему засунул. Просыпаешься посреди лекции "В то время, как наши космические корабли бороздят просторы вселенной..".

Кстати, это вообще проблема при изучении C++, так как он мультипарадигмальный. Можно намешать кучу парадигм и запутаться в них. Я не раз уже писал, что в C++ можно писать в скриптовом стиле чуть ли не лучше, чем на скриптовых языках программирования, просто люди не различают парадигмы и не могут себя ограничить.

И точно так же когда рассуждают о множестве языков программирования. Понятно, что во множестве языков программирования совокупное множество парадигм программирования. А это ещё сложнее соотнести одну и ту же абстрактную парадигму программирования в разных языках программирования.

К чему относится связывание статических и динамических библиотек алгоритмов? И вот мы как-то незаметно подошли к тому, что.

Р>Получается, что ни один популярный/промышленный ЯП не является модульным.

???

Re[2]: Почему модульные системы не получили распространения?
От: Разраб  
Дата: 08.04.24 06:54
Оценка:
Здравствуйте, velkin, Вы писали:
V>

Р>>Получается, что ни один популярный/промышленный ЯП не является модульным.

V>

???


Возьмем Oberon BlackBox — каждый модуль компилируется в отдельную сборку.
при этом можно прямо в процессе работы выгружать модуль.
ну еще есть скрытые нюансы, типа автоматической генерации интерфейса и фингерпринта для каждого элемента интерфейса.
namespace могут находится в разных пространствах имен(сужу по сишарпу) и в разных сборках, модуль же это и компонент,
т.е. единица сборки. ну и выгрузка/загрузка и инвалидация модулей по отпечатку элементов, все это из коробки.
из компилируемых я других таких яп не знаю))
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Почему модульные системы не получили распространения?
От: FR  
Дата: 08.04.24 09:33
Оценка: 1 (1)
Здравствуйте, Разраб, Вы писали:

Р>из компилируемых я других таких яп не знаю))


В OCaml в принципе все нужное есть First-Class Modules и Dynlink, но насколько я знаю выгрузка модулей так и не реализована, но и без выгрузки на этом очень неплохо работает тот же repl например.
Re[2]: Почему модульные системы не получили распространения?
От: Alekzander  
Дата: 09.04.24 12:03
Оценка: :))
Здравствуйте, Stanislaw K, Вы писали:

Р>>Вот тут дается описание, что понимать под модульными системами.

Р>>https://oberoncore.ru/library/gubanov_sekrety_modulnyh_sistem
Р>>Получается, что ни один популярный/промышленный ЯП не является модульным.

SK>а зачем, какие преимущества это даст?


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

Так вот, этот способ расшаривания сопряжён со следующими недостатками:

1. Неформализованный язык запросов. Это плюс только для дебилов. Для инженеров это минус. Хороший программист мечтает, чтобы даже Гугл выдавал ему точные результаты в соответствии с запросами на специальном языке, а не рекламную муть.

2. Отсутствие индекса и невозможность работать как с каталогом. Если нужна стопицотая реализация сортировки, понятно, что каталог тут не нужен (никто не будет читать все 100500 вариантов). А если нужен алгоритм Пуппенмайера, который в исходном датасете присутствует всего три раза? Было бы удобно просто получить все три реализации и изучить каждую. Но этого нельзя.

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

А могли бы, сцуко, просто юзать модули!!!!

(Вот такие вот преимущества).
Отредактировано 09.04.2024 12:05 Alekzander . Предыдущая версия . Еще …
Отредактировано 09.04.2024 12:03 Alekzander . Предыдущая версия .
Re[3]: Почему модульные системы не получили распространения?
От: Stanislaw K СССР  
Дата: 09.04.24 12:45
Оценка:
Здравствуйте, Alekzander, Вы писали:

Р>>>Вот тут дается описание, что понимать под модульными системами.

Р>>>https://oberoncore.ru/library/gubanov_sekrety_modulnyh_sistem
Р>>>Получается, что ни один популярный/промышленный ЯП не является модульным.

SK>>а зачем, какие преимущества это даст?


A>Сейчас сложилась какая-то странная ситуация: многие программисты расшаривают код через чатботов.


Мне тут рассказали что нет, чатбот не дообучается на запросах. У него закрытая, один раз наполненная/обученная, база не подлежащая изменению. Именно по этому выпускают новых чатботов.

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


"Информация должна быть свободной бесплатной, доступной, достоверной".

Вступайте в наши ряды, товарищ!


A>А могли бы, сцуко, просто юзать модули!!!!


A>(Вот такие вот преимущества).


Так юзайте. вот (простигосподи) node.js чем не модульный?
Все проблемы от жадности и глупости
Re[4]: Почему модульные системы не получили распространения?
От: Alekzander  
Дата: 09.04.24 13:51
Оценка: -1 :)
Здравствуйте, Stanislaw K, Вы писали:

A>>А могли бы, сцуко, просто юзать модули!!!!


SK>Так юзайте. вот (простигосподи) node.js чем не модульный?


Если вопросов про преимущества не осталось, можете теперь с ТСом обсудить, почему же так вышло. Я не знаю, но подозреваю, что как раз из-за того, что многие не понимают роль инфраструктуры. Включая сюда тех, кто не понимает, что стандартная библиотека это часть языка, гораздо более важная, чем какой-то там синтаксис.
Re[5]: Почему модульные системы не получили распространения?
От: Stanislaw K СССР  
Дата: 09.04.24 14:02
Оценка:
Здравствуйте, Alekzander, Вы писали:


A>>>А могли бы, сцуко, просто юзать модули!!!!


SK>>Так юзайте. вот (простигосподи) node.js чем не модульный?


A>Если вопросов про преимущества не осталось,


Я ответа не увидел.

A>Я не знаю, но подозреваю, что как раз из-за того, что многие не понимают роль инфраструктуры. Включая сюда тех, кто не понимает, что стандартная библиотека это часть языка, гораздо более важная, чем какой-то там синтаксис.


Вот еще непонятное — что есть "стандартная" библиотека? Чем npmjs плохая инфраструктура и не стандартная библиотека?
Все проблемы от жадности и глупости
Re[4]: Почему модульные системы не получили распространения?
От: Alekzander  
Дата: 09.04.24 14:04
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

SK>node.js чем не модульный?


И, кстати, я ненавижу эту грёбаную моду на абстрагирование от файлов вообще, и npm в частности. Впрочем, началось это задолго до. Как минимум, когда по стандарту компилятор стал не обязан предоставлять файлы, упоминаемые в #include.
Re[5]: Почему модульные системы не получили распространения?
От: CreatorCray  
Дата: 09.04.24 22:28
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Включая сюда тех, кто не понимает, что стандартная библиотека это часть языка, гораздо более важная, чем какой-то там синтаксис.


Стандартная библиотека это просто библиотека базовых примитивов.
Без неё прекрасно пишутся большие промышленные проекты.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Почему модульные системы не получили распространения?
От: Разраб  
Дата: 10.04.24 00:33
Оценка:
Здравствуйте, Stanislaw K, Вы писали:


SK>Так юзайте. вот (простигосподи) node.js чем не модульный?


В смысле модульности, да, js python лиспы очень близки, но они все динамические и интерпретируемые.
Они не контролируют совместимость, т.е. если я перезагружу модуль в котором отсутствует некоторый элемент,
все сломается в неопределенный момент. т.е. модульность этой категории конечно сильно отличается от например
Oberon BlackBox.
PS вспомнил еще одно определение модуля(источник не помню) — программная единица, минимально — функция.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Почему модульные системы не получили распространения?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.04.24 08:13
Оценка:
Здравствуйте, Разраб, Вы писали:


SK>>Так юзайте. вот (простигосподи) node.js чем не модульный?


Р>В смысле модульности, да, js python лиспы очень близки, но они все динамические и интерпретируемые.

Р>Они не контролируют совместимость, т.е. если я перезагружу модуль в котором отсутствует некоторый элемент,
Р>все сломается в неопределенный момент. т.е. модульность этой категории конечно сильно отличается от например
Р>Oberon BlackBox.
Р>PS вспомнил еще одно определение модуля(источник не помню) — программная единица, минимально — функция.

Ну в .Net Framework есть домены. https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain?view=net-7.0

Сейчас вместо AppDomain прикручивают Wasm https://github.com/SteveSandersonMS/DotNetIsolator
и солнце б утром не вставало, когда бы не было меня
Re[6]: Почему модульные системы не получили распространения?
От: Разраб  
Дата: 11.04.24 00:52
Оценка:
Здравствуйте, Serginio1, Вы писали:


S>Сейчас вместо AppDomain прикручивают Wasm https://github.com/SteveSandersonMS/DotNetIsolator


mono внутри NET? сильно))
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[6]: Почему модульные системы не получили распространения?
От: Разраб  
Дата: 11.04.24 01:50
Оценка: 2 (1)
Здравствуйте, Serginio1, Вы писали:


S>Ну в .Net Framework есть домены. https://learn.microsoft.com/ru-ru/dotnet/api/system.appdomain?view=net-7.0

Ближе к Блэкбокс https://learn.microsoft.com/ru-ru/dotnet/standard/assembly/unloadability (выгружается когда исчезают ссылки)
Отличие в контроле совместимости, вероятно. что произойдет если будет загружена измененная сборка, в которой, к примеру, будет добавлен новый публичный метод?
надо проверить. по хорошему, это не должно помешать исполнению основной программы.
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.