Неудачники и перспективные языки программирования в разрезе надежности и безопасности.

Уже были рассмотрены в части 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++