Неудачники и перспективные языки программирования в разрезе надежности и безопасности.
Уже были рассмотрены в части 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++
Комментарии (30)

Stolentine
24.12.2025 22:56какой смысл в новых языках, если любой джун с gpt на перевес, сейчас способен худо бедно что-то реализовать на любом языке?
а у новых языков, ни экосистем, ни готовых решений, ни комьюнити, ни приличной кодобазы для тех же ИИ.
можно конечно это оспорить, но какая разница сколько строк занимает синтаксис если он сгенерирован машиной?

BobovorTheCommentBeast
24.12.2025 22:56Да нахрен вообще развиваться, это какие то лудиты придумали. Ллм скажу, пусть она сделает.

IUIUIUIUIUIUIUI
24.12.2025 22:56Языки функциональной парадигмы (ФП)
Haskell Tiobe 30
Erlang Tiobe 100
Elixir Tiobe 47
Ocaml Tiobe 100
Практически не распространены в реальном, а не академическом мире разработки
Не то что «лидер» Dlang или «заматеревший и достойный разбора» Zig, понимаю.

wmlab
24.12.2025 22:56Go и C# - языки энтерпрайзного говнокодинга
Это точно серьезный разбор языков?

cheshirskins
24.12.2025 22:56Да, очень странно, дело даже не в упоминании говнокодинга, а в том, что концептуально это сильно разные языки

Siemargl Автор
24.12.2025 22:56Концепции разные, область применения - одна.
На Шарпе ещё встречаются какие то утилиты, но нечасто.

w5346c
24.12.2025 22:56Не фанат Go, но на нём написан Kubernetes и инфраструктура вокруг него (операторы, etc), что сейчас весьма востребовано. А ещё Terraform.

Spearton
24.12.2025 22:56Это прикол? Шарп буквально огромный кусок веба, довольно серьезный игрок на поле геймдева (минимум unity, cryengine и всякие godot/stripe), дак еще и единственный способ писать нативные UI под винду без боли (но это уже скорее для всех . NET языков применимо)..

Siemargl Автор
24.12.2025 22:56Подробнее рассматривался в части 3.
Основная область применения, где он хорошо занял позиции это - энтерпрайз.
Доля в обычном вебе на грани погрешности - 3%. Впрочем легаси Asp.Net они отдельно считают, ещё 4%
Гемдев возможен, но в том же Юнити компилируется через С++.
Лагающий нотепад не даст соврать про производительность Гуи =) Нативное УИ под винду это только Винформс.
В общем применения ему много, но связаны с врожденными неудобствами

IUIUIUIUIUIUIUI
24.12.2025 22:56C#
Лагающий нотепад не даст соврать про производительность Гуи =)
Нативное УИ под винду это только Винформс.
Вот это сейчас прикольно получилось. Кекспертно даже, я бы сказал.
Winforms — это дотнетовская штука. Возможно, вы имели в виду WinAPI (или MFC, упаси ЛЛММ, или ATL/WTL какой).

Siemargl Автор
24.12.2025 22:56Конечно, винформс это дотнетовская обертка над вин32 апи контролами. Это называют нативными контролами.
Другие либы на Шарпе, как например ВПФ, рисуют контролы сами.

gedev
24.12.2025 22:56Про V написано "В минусах надежности - не определен порядок при вызове функций" это что значит?

Siemargl Автор
24.12.2025 22:56add(procx(), fny()) - не определено явно, сначала будет вычислено procx() или fny() перед передачей в add()
Пример эксплуатации проблемы f(x++, x)
Возможно, будет определено позже, есть пара issue на эту тему. В настоящий момент реализовано слева направо, но не задокументировано явное поведение в будущем

iklin
24.12.2025 22:56Насколько я помню, в C это тоже не определено.

Siemargl Автор
24.12.2025 22:56И в С++ тоже, из соображений производительности.
В V закрыли тему задокументировав аналогичное поведение.

v_0ver
24.12.2025 22:56По мотивам вашей сводной таблицы
В Rust порядок вычисленя аргументов слева на право. Ваш примерf(x++, x)в Rust либо не валиден еслиxссылка (невозможно единовременно иметь мутабельную и немутабельную или две мутабельные ссылки на одну переменную) или будет две копии, которые будут вычисляться слева на право, но потом в LLVM их порядок вычисление может быть оптимизирован(если не меняет наблюдаемое поведение программы).
Siemargl Автор
24.12.2025 22:56В этой ветке обсуждался Vlang.
В Rust же порядок четко определен, такой проблемы нет. В своей таблице явно поправил, спс.
Выглядит правда это так f({ x += 1; x }, x)

AbitLogic
24.12.2025 22:56Надёжность языков в embedded:
1) Erlang/Elixir
2) rust, fpc, vhdl, ada
3) Си
Чего вы тут обсуждаете вообще не ясно, вы работали в этом направлении как надёжность в embedded? Какое там нах-н C++, где даже непонятно сколько бит займет int по стандарту, убойный набор конструкторов и пойми что где вызовется в initialization list с такими скобками или с такими, у нас в надёжности принципы DRY, KISS, YAGNI, LL(1), только первому удовлетворяют плюсы, остальные мимо

Siemargl Автор
24.12.2025 22:56Речь не только и не столько про эмбеддед.
Часть языков такого тега вообще не удостоена.
Внимательнее надо, а не врываться С шашкой наголо =)
Ну а С++ сложный, его надо учить, и надо смотреть в применении к своей платформе. И более менее все станет понятно.

AbitLogic
24.12.2025 22:56Что там учить? Если в языке есть приватное наследование, то скорее таких учеников нужно проверять на психическое здоровье
bentall
Eiffel Studio разве не под двойной лицензией распространяется gpl для opensource, коммерческая для всего остального?
Вроде все исходники доступны через SVN на Eiffel.com и официальное зеркало на GitHub. На сайтах eiffel.com и eiffel.org я что-то не нашёл, чтобы это было написано, хотя текст gpl можно найти и там, и там, но если заходить со стороны GitHub...
bentall
В общем если кому-то интересно, вот исходный код, публикуется с годовой задержкой, вот описано двойное лицензирование на оф. сайте...
Да и полностью открытый под MIT License Gobo Eiffel выпускает релизы по 2-3 раза в год, другое дело что собственно компилятор там не реализует стандарт полностью, и они как один из вариантов предлагают использовать компилятор от Eiffel Studio и их библиотеки (под не вирусной лицензией) и пишут что они какую то часть инструментов языка ZIG для своего релиза позаимствовали.
bentall
Ну и да, Liberty Eiffel до прошлогоднего релиза, в который вошли результаты GSoC, действительно не релизился несколько лет, но это третья из открытых реализаций языка, как и GOBO, под лицензией MIT (даром что это официальный проект GNU) ну и нет, это не фронтенд GCC, как и собственный компилятор GOBO генерирует си-код
Siemargl Автор
Eiffel интересен, но сейчас начинать писать на нем мало кто будет.
Почему он не получил развития, непонятно.