На мой взгляд, оберонщини недостаточно глубоко знают мир С++, поэтому позволю себе, как "пограничник", внести ясность в некоторые вопросы.
Отвечаем по пунктам.
Цитата:
[list]
[*] присутствует безопасный тип данных "массив длины, неизвестной во время компиляции". Длина массива хранится вместе с массивом и обычно среда выполнения автоматически проверяет выход за пределы массива. В Си есть только указатели и массивы длины, известной во время компиляции. В С++ есть много разных контейнеров, но С++ слишком сложный язык и фактором ненадёжности выступает как сложность самого языка (ограниченность его понимания разработчиком), так и сложность его компиляторов, сред выполнения и библиотек (в них могут быть ошибки).
Давно уже не так.
Обычными массивами в профессиональной разработке фактически не пользуются. А пользуются контейнерами.
В том числе для всех индексируемых контейнеров реализовано два метода доступа по индексу: неохраняемый и охраняемый, который генерит исключения при "вылете за границу".
Цитата:
[*] конструкция WITH реализует безопасный аналог union-ов - в Си есть только опасные. В С++ есть объекты, но см. предыдущий пункт.
Юнионами в профессиональной разработке тоже давно уже не пользуются. В стандартной библиотеке реализовано несколько безопасных видов подобной структуры (variant, optional...)
Цитата:
[*] понятие модуля изначально присутствует в языке - повышает надёжность на архитектурном уровне
Вот это - КРУПНЫЙ недостаток языка. В С++20 модули введены, но мне, знакомому с виртовскими языками с 70-х годов, эти модули представляются безобразной заплатой. Модули в Компонентном Паскале просты и понятны, и являются практически идеальной конструкцией.
Особенно в среде БлэкБокса, где они фактически заменяют любые динамические библиотеки как в Винде, так и в Лине.
Цитата:
[*] как правило, среда выполнения Оберона обнуляет локальные и глобальные переменные, при этом заполнение неинициализированных переменных случайными данными становится резко менее опасным.
Глобальные переменные - обнуляются. Локальные - нет. С другой стороны, неинициализированная локальная переменная у профи отсутствует как класс. В этом смысле отсутствие инициализации по месту в Обероне сильно раздражает.
Цитата:
[*] меньше неявных преобразований типов
Проблема, собственно, не столько в неявных преобразованиях, сколько в вызовах конструкторов по умолчанию. И некоьторых других специальных методов, реализованных в классе. Тут - реальная засада.
Недаром мы в семантике вообще отменили ЛЮБЫЕ умолчания.
Если сравнивать Оберон и С++, то ГЛАВНАЯ разница заключается именно в подходе к умолчаниям.
В С++: все, что не запрещено - разрешено.
В Обероне ровно наоборот: все, что не разрешено - запрещено.
Даже наследование. И это, с моей колокольни, абсолютно правильное решение.
Цитата:
[*] сборка мусора - резко снижает вероятность ошибок типа "висячий указатель" и "утечка памяти", хотя вносит и свои проблемы вида "утечка ресурсов", которые частично сглаживаются финализаторами. Существуют языки оберон-семейства с задачами реального времени, которые могут прерывать сборщик мусора. Для таких задач на уровне языка запрещено обращение к объектам из кучи, и это сглаживает противоречие между сборкой мусора и реальным временем без ущерба для надёжности.
В стандартной библиотеке С++ реализовано несколько видов интеллектуальных указателей, которые вполне надежно защищают от утечек памяти. Все контейнеры пользуются стандартным аллокатором, который тоже вполне надежно обеспечивает отсутствие утечек. Все это работает достаточно быстро.
Существуют и сборщики мусора для С++, но я их не использовал.
Цитата:
[*] один язык - системы на Обероне зачастую являются однородными по языку, значит, в них нет FFI (интерфейс для вызова инородных функций), который является слабым местом с т.з. надёжности. Бывают ассемблерные вставки, но они есть и в Си/Си++
Это - дискуссионное утверждение. Например, если мы делаем веб-систему, и интерфейс у нас уже на другом языке, хотя бы и того же семейства.
Так и я могу веб интерфейс написать на С++ - смотрим библиотеку Wt.
В принципе ЛЮБУЮ систему можно написать на ОДНОМ языке. Примером тому является node.js, которая обеспечивает на сервере среду для разработки серверной части на js.
Цитата:
[*] простой язык - по сравнению с С++ - устраняет такой фактор ненадёжности, как недостаточное понимание языка разработчиком.
Писать ПРОСТО можно на ЛЮБОМ языке. Только на С++ для этого нужна самодисциплина...

)))))
Цитата:
[*] простые компиляторы. Многие компиляторы Оберона достаточно просты, можно залезть и понять, какой машинный код будет сгенерирован и почему. Это позволяет выйти на понятие "доверенности". Популярные компиляторы Си достаточно сложны, поэтому создать доверенный компилятор Си сложно
С этим согласен абсолютно. Только речь не о Си, а о
С++. Компилятор Си я могу написать довольно быстро. И даже студент под моим управлением. И всегда можно посмотреть, какие команды сгенерированы - достаточно включить выдачу ассемблерного листинга.
Цитата:
[*] безопасность была одним из важнейших критериев для принятия решений при разработке языка. В том числе, роль безопасности поставлена выше роли производительности. Поэтому в Обероне зачастую никогда не отключаются проверки, аналогичные санитайзерам, а объём выполняемых оптимизаций ограничен. Это снижает подверженность таким вещам, как ошибки в оптимизаторах, удаление кода, важного для надёжности и безопасности, облегчают диагностику и отладку промышленного кода, который не отличается от отладочного. В случае Си, мы отлаживаем одну версию программы, а в промышленности используется другая, оптимизированная, между их поведением может быть существенный зазор, который снижает надёжность внедрения.
С этим никто не спорит. Целью С++ была именно высокая производительность.
Цитата:
[*] стиль оберона - это копирование и адаптация кода вместо создания обобщённого кода. Хотя такой код является более трудоёмким в разработке и поддержке, этот код проще, а значит, более постижим и вследствие этого более надёжен.
Вот здесь могу отметить интересность С++.
На С++ можно писать в 4 стилях: процедурном, объектно-ориентированном, функциональном, и обобщенном. Ничего подобного в любых других языках нет.
В том числе и в Обероне.
Цитата:
[*] молниеносная компиляция и горячая замена модулей. Кратковременная память человека стирается через 30 секунд. Если процесс компиляции и перезапуска не укладывается в этот порог, то происходит скачкообразное снижение производительности труда программиста с одновременным снижением надёжности, поскольку модель разрабатываемого фрагмента приходится строить в голове заново после каждой перекомпиляции. В Обероне за счёт быстроты компиляции и за счёт горячей замены модулей довольно сложные программы
можно перезапустить менее, чем за 30 секунд (хотя не знаю, как это относится к встраиваемым применениям, но если говорить вообще, то такой фактор есть).
Ну, наверное, зависит от объема компилируемого кода.
Цитата:
Можно также сказать, хотя это не относится к данному набору, что язык оберон-семейства сегодня вошёл в мейнстрим - это golang. Golang позиционируется как язык для написания сетевых сервисов. В этой роли он вытесняет Java и C++. А настоящий Оберон может использоваться и в других областях, в т.ч. в системном программировании - на нём написано несколько операционных систем. Поэтому, опираясь на успех golang, можно предсказать успех Оберона в более широкой области применения.
Можно привести примеры операционных систем на обероне?
А то в мейнстриме только винда и линукс.