Неудачники и перспективные языки программирования в разрезе надежности и безопасности.
Уже были рассмотрены в части 3. TL;DR:
Лидеры:
Ada - полуфиналист для коллективов, ориентированных на специальные надежные задачи, очень исторически многословен, зато есть всё
Dlang, BetterC - полуфиналист для небольших систем, хорош во многом, удобен, но уровень поддержки бывает недостаточен
Rust - полуфиналист маргиналов, надежен до железобетонности и такой же гибкий
Современный С++, без комментариев, просто царь, но и с царскими требованиями
Еще пройдены:
Go и C# - языки энтерпрайзного говнокодинга, впрочем достаточно развиты и универсальны для многих применений, см.например TinyGo, Wails и Zerosharp
Семейство [Active] Oberon, Modula-2 /3, ISO Pascal - просто, в основном надежно, в разной степени неудобно и без тулсета
Safe-C - только лишь proof of concept
ISO IEC 61131-3 ST - маст хев во всех ПЛК мира, но и не более того (а Ladder Logic в Tiobe 50)
Временно отстранены от рассмотрения, “неудачники”
Delphi, хотя и в Tiobe 9, и особых претензий нет (средняя надежность и функциональность), но дорого, разработка для Линукс (и клиент сервер) требует Enterprise редакции за $3K на лицо, Professional версия за $1K вполне адекватна но без вышеперечисленного функционала, Community версия не пройдёт для работы по условиям лицензии
FreePascal - недо-Delphi, зато бесплатно
Java, Tiobe 4. Туда же в энтерпрайз. Хотя сейчас персональные компьютеры/телефоны и сравнялись с мэйнфреймами времени создания Явы по производительности, накладные расходы велики и заметны даже сейчас
Языки функциональной парадигмы (ФП)
Haskell Tiobe 30
Erlang Tiobe 100
Elixir Tiobe 47
Ocaml Tiobe 100
Практически не распространены в реальном, а не академическом мире разработки, мой комментарий о них.
Нишевые ЯП, но с претензией на надежность
Все недавно разработанные языки, как правило. учитывают опыт прошлых поколений, с упором на надежность и безопасность.
Хотя и можно найти реализации этих языков вне основной платформы и области применения, сложно с тулингом и библиотеками.
Swift, рассмотрен в части 5 - специализирован для Apple платформ, хоть и есть независимый компилятор от RemObjects, Tiobe 23.
Kotlin, также специализирован для Android, хоть и есть native ��еализация, в Tiobe 25.
Julia, Tiobe 35, надёжность для математических вычислений
Crystal, вошёл в Tiobe 100, специализирован для web, является наследником Ruby, который в Tiobe 21
Hack - Tiobe 100, разработка web - сайтов
А почему и кто остается то?
Реальные к использованию в боевых задачах, имеющие не супер дорогие компиляторы, более-менее стабилизировавшиеся.
Обязательно - поддерживаемый компилятор для Linux, а лучше еще и для других платформ, потом наличие библиотек для избранных областей.
Текстовые редакторы как правило имеются, зачастую с LSP-расширениями, а вот отладчики или IDE, если есть - необязательный бонус.
Таблица с областями возможного применения ЯП в предыдущих статьях заменена на теги, надеюсь достаточно самообъясняющие: gamedev, web, desktop, enterprise (db+web OR desktop), math, CLI, mobile, embedded (bios, kernel), system, HFT
Напоследок — обновленная сводная таблица соответствия функциональным требованиям.
Заматеревшие, эволюционировавшие (эволвед) с прошлого обзора, условно стабильные, достойные подробного разбора
Zig
Сайт. Tiobe 100, Redmonk 87
desktop, math, CLI, embedded, system, HFT
С точки зрения безопасности сделано очень много, но не меньше оставлено на добрую волю разработчика. Итак плюсы:
читаемость - нормальная, слегка многословен и cryptic, но терпимо
переменные чувствительны к регистру, можно создать разные one=1 и One=2, но отслеживаются неиспользуемые как ошибка компиляции, переменные требуют явной инициализации, порядок вычислений однозначен, приведение типов аккуратное
очень много операторов с явным контролем переполнения, недополнения итд - выбирай на вкус
контроль некорректного поведения классифицирован. Здесь оно называется Illegal Behavior, там же перечень проверок при компиляции и во время исполнения
есть режим компиляции с оптимизацией, но с включенными проверками - ReleaseSafe. Также проверки можно отключать выборочно на уровне отдельных блоков кода
обработка ошибок явная через optional error. Нечто среднее между Go и исключениями, но без накладных расходов последних. Полная обработка многословнее, чем в Go, можно сократить через errdefer. Но также сохранена возможность запаниковать, явно игнорировав ошибку
для безопасной многопоточности встроены атомики и TLS
есть встроенные юниттесты
скрытые вызовы, накладные расходы и неявные аллокации отсутствуют
Минусы в основном исходят из желания все упростить:
встроенной в язык работы со строками практически нет - это просто массивы UTF-8, библиотеки прикручивайте сами. С учетом бесшовной интеграции с С, впрочем решаемо на выбор
работа с динамической памятью всегда явно требует указания аллокатора, что ведет к многословности. Ручное управление памятью и ресурсами с помощью defer, errdefer. В стандартной библиотеке есть несколько аллокаторов на выбор - libс, arena, fixed buffer, smp_allocator
дата/время - тоже самостоятельно
модульность очень странная, все инклудится в один файл и потом выборочно (?), компилируется. Масштабируемость на большие проекты под вопросом
ООП нет, дженериков нет, есть только инкапсулированные в структуры функции и Duck Typing при вызовах - некоторая шаблонизация
DbC нет, только ассерты
система сборки сделана библиотекой языка - пишите сами build.zig
Итого, если смотреть как язык для небольших или встраиваемых систем - все очень даже неплохо. А отсутствие ограничений для использования системных библиотек - это киллер-фича. Для остального язык достаточно новый, и сыроват.
Oxygene
gamedev, desktop, enterprise, CLI, mobile, system
Коммерческий компилятор с IDE - $200-750, для enterprise вероятно придется докупать Data Abstract для работы с СУБД - $1500
Это мультиплатформенный продвинутый диалект Delphi с GC, но без развитых средств формошлепства.
Подробнее рассмотрен в части 5
Eiffel (немного некромания)
web, desktop, enterprise, CLI, system
Tiobe 100, цена коммерческого компилятора с IDE EiffelStudio $150-$1500, есть бесплатный полуживой Liberty Eiffel Compiler
Автор языка Бертран Мейер, повернутый в хорошем смысле на надежности, автор DbC.
Язык является ровесником Оберона, Алголоподобный синтаксис, вполне читаемый без специальной подготовки и довольно многословный, как тогда было принято.
В плане надежности, я не нашел к чему придраться, разве что это язык со сборкой мусора и нет контроля времени исполнения для систем реального времени. Тут он практически вплотную близок к лидеру - Ada.
V
Сайт. Еще в бете, но уже вошёл в Tiobe 43.
gamedev, web, desktop, enterprise, math, CLI, mobile (Android), system, HFT
Синтаксисом сходен с Go, собственно быстрое представление о языке можно составить по краткому списку отличий от Go.
Использует интересные стратегии использования памяти: основной метод это GC при невозможности стековой аллокации, но есть вариант autofree (пока бетатест), который освобождает объекты ранее, чем отдавать их в GC. Также есть атрибут для принудительной аллокации структур в куче @[heap], уровня функции @[manualfree] для подавления autofree, и есть режимы полностью ручного управления -gc none и полностью предварительных аллокаций для примитивных случаев -prealloc.
В плане надежности минимально улучшает Go (у которого и так все неплохо) за счет явного указания мутабельных параметров, обязательности обработки ошибок с поддержкой SumType и отказа работы с null (кроме unsafe c-interop).
В минусах надежности - не определен порядок при вызове функций, и общая незаконченность языка и библиотек.
Nim
Сайт. Tiobe 100
gamedev, web, enterprise, CLI, math, embedded, system
С момента первой статьи уже вышла версия 1.6, и появилась ветка 2.2.
Язык отступами и приемами работы напоминает Python, только компилируемый через трансляцию в С. Также есть JS-таргет. Очень богатый набор возможностей, например одновременно поддерживает и макросы и дженерики и шаблоны. Фактически, язык расширяемый.
Интересны стратегии использования памяти - основная это ARC с контролем зацикливания (здесь называется ORC), но возможно использование нескольких вариантов GC, а также их комбинации. Пригоден для реалтайм систем, поскольку [де]аллокации имеют гарантированное О(1) и низкую фрагментацию, TLSF алгоритм.
Есть вариант ручной аллокации, также были арены, ныне удалены.
Что касается надежности:
Общее замечание касательно хрупкости кода, построенного на отступах, когда легким движением руки условного индуса, зацепившего Таб, логика летит к чертям. Нивелируется современными средствами разработки и контролем версий, но не полностью.
читаемость - хорошая
переменные чувствительны к регистру, можно создать разные one=1 и One=2, но переменные требуют явного объявления, есть инициализация по умолчанию, порядок вычислений однозначен, явный отказ от возвращаемого значения, допустимы именованные параметры, приведение типов аккуратное, можно ужесточить приведение с помощью distinct
есть контроль переполнений, выхода за границы, нулей итп
есть режим компиляции и с оптимизацией, и c отключенными проверками - отдельный от релизного -d:danger. Также проверки можно отключать выборочно на уровне отдельных функций
обработка ошибок механизмом исключений или defer, причем можно указывать явный перечень допустимых, так называемые checked с помощью {.raises.}
для безопасной многопоточности встроены атомики и TLS, многопоточные функции могут явно помечаться для проверки компилятора (бета). Не 100% безопасность
есть стандартная библиотека юнит-тестирования и контрактного дизайна, есть еще и дополнительные библиотеки
Минусы:
уже упомянутая идентация кода
неявный возврат из функций, неявный result, return либо последнее выражение??
результат вызова мультиметодов при неполной специализации зависит от версии компилятора, видимо баг 2.2.0
многопоточность еще не полностью финализирована, threadpool is deprecated, нужно учитывать применяемый аллокатор, есть несколько внешних библиотек
Перспективные - растущие, на след обзор лет через пять
Odin Programming Language
gamedev, math, CLI, HFT
ТЛ;ДР: Компилируемый язык на базе LLVM, для Win/Lin/MacOS/WASM+Orca. Компилятор написан на С++.
Заточен под геймдев, но можно что-нибудь и рассчитать, простой, похож на С с небольшим добавлением синтаксического сахара, в том числе строками utf8, мапами, динамическими массивами, дженериками, кастомными аллокаторами, обработкой ошибок и defer как в Go. Без жира - GC, ООП, управления пакетом с пакетами. Большинство С-граблей отсутствуют.
Более подробно на английском от автора книги Understanding the Odin Programming Language, в статье Введение в язык программирования Odin | Карл Жилински
Краткий обзор достоинств и недостатков на английском Odin programming language review
Pony
Язык, посвященный актор-модели. Назначение пока неясно.
The Ring Programming Language
Tiobe 100
gamedev, web, desktop, CLI, mobile, enterprise
Terra
gamedev, system
Terra + Lua(Tiobe 33), вышел релиз 1.2
Язык более низкого уровня, встраивается в Lua как JIT
Vox
gamedev
Диалект облегченного D без GC и зависимостей, написан на D, обновлен 04.2025
Для Win/Lin/MacOS, умеет исполняться в JIT как скриптовый.
Вorgo
расширение Go - добавление ADT и обработки ошибок, написан на Rust
Biron
system, embedded
Rox — экспериментальная игрушечная операционная система, написанная на экспериментальном языке программирования Biron.
Написан на С++, с LLVM. Достаточно современный набор возможностей.
Cone
https://www.reddit.com/r/ProgrammingLanguages/comments/722f99/pivoting_from_acorn_to_cone/ Наследник Acorn, для визуализации 3D-моделей в браузере.
https://github.com/jondgoodwin
заброшен 3 года
Xojo
web, desktop, enterprise, mobile, embedded
Tiobe100 - RAD Коммерческая мультиплатформенная реализация бейсика (VB Tiobe8), ранее REALbasic compiler.
Vala/Genie
desktop
Tiobe100.
Программирование приложений для GTK. Genie диалект устарел
Haxe
gamedev, web, desktop, CLI, mobile
ActionScript - подобный транспилер, для создания браузерных игр и не только
Hare
system
Использует QBE вместо LLVM https://habr.com/ru/news/920704/
Местечковые, Хабр
В статьях авторы сами описывают что, и зачем.
Язык программирования Ü. Введение, мотивация к созданию, цели.
https://github.com/Panzerschrek/U-00DC-Sprache/
Управление временем жизни объектов: почему это важно и почему для этого пришлось создать новый язык «Аргентум»
Анонс части 7.Бастарды или же диалекты С и C++
