ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFAGAH
1
НадежностьФункциональностьБезопасность
2
Устойчивость к ошибкам человека
Исключение неоднозначностей при компиляции. Читаемость, защита от опечаток копипасты, определенный порядок вызовов,
отсутствие похожих операторов
Юникодные строки и исходники, тип строк (защита от перерасхода памяти), датавремяКонтроль приведения типов, переполнений, потери точностиКонтроль границ массивов, коллекций итпКонтроль памяти (null-area), стека, GC, защита от фрагментацииОбработка ошибок, исключения, коды, трапы, ADT (nullable), RAIIМодульность [иерархическая]ООП, Параметрический полиморфизм (дженерики)ФПКонтракты, юниттестыДоступ к железу, обработчики прерыванийМногопоточность, акторы, почтовые ящики, микросервисыСетевые ф-ции, ВебГУИФайловый в/вКонтроль времени исполненияОчистка освобожденной, получаемой памяти
3
Active Oberon
регистрозависимые идентификаторы, автоинициализации переменных нет (кроме объектов в куче и массивов)
строки asciiz rw-массивы, дат нет, есть UTF8
естьестьGC
коды возврата, но аварийные сигналы дают возможность очистки и перезапуска сбойной процедуры
неиерархическая
есть интерфейсы, делегаты, полиморфизм делать руками с помощью RTTI, генериков нет
нетнет
да, сисфункции, ассемблерные вставки
Многопоточность, примитивы синхронизации
Часть системы Оберон
Часть системы Оберон
Часть системы Оберон
нет, но потоки с высоким приоритером не вытесняются ГЦ
да
4
Ada
есть, но писать многобукофф
строки - мутабельные массивы, датавремя и юникод есть
естьесть
есть, not null типы параметров и данных, есть защита от фрагментации
исключения
иерархия, но не файловая
дада
Контракты, юниттесты возможны в дочерних пакетах
да
Многопоточность, примитивы синхронизации, обмен
нет
сторонние - GtkAda
дада
нет, можно делать кастомный аллокатор для типа
5
BetterC (dlang subset)
лучше С - определен порядок выражений и вычисления параметров, автоинициализация, есть сложные выражения
только С - строки, юникод есть
float+core.checkedint
есть
как в С, но есть @safe
RAII + ADT (Nullable с предв.значением)
да
ООП ограничено структурами без наследования, интерфейсы и дженерики есть
нет, требует GC
естьда
только С - системными вызовами
нетНетc.stdioнетнет
6
D (для сравнения с betterC)--//--
строки иммутабельные в std, на GC
float+core.checkedint
есть
GC + @safe + @nogc, Nullable
исключения, RAII, ADT
дададаесть
да, но прерывания конфликтуют с GC
есть
да, web библиотека vibe-d
библиотеки - несколько
данет
получаемой да, освобождаемой только в отладочной сборке GC, деструкторы
7
IEC 61131-3 STдада, есть UTF16естьесть
не требуется
вызывается пользвательский обработчик
да, хранение от реализатора
ООП, интерфейсы
нет, но есть ф-ции с сохранением состояния
нет
да, специфика ПЛК
есть, синхронизация семафорами
сеть - библиотеки, веб иногда в ПЛК
нет
сторонние библиотеки
да
нет динамич.памяти
8
Safe-C
лучше С - определен порядок выражений и вычисления параметров
мутабельные строки, дата в библиотеке
только floatесть
полный контроль, refcount для доп. контроля, допустимо #unsafe
коды возврата, но ф-ции могут возвращать несколько параметров
есть +пакеты
дженерикинетнетдаесть, минимуместь, минимуместь, минимумданет
получаемой да, для затирания есть clear
9
Extended Pascal ISO 10206 - черновик
порядок вызовов и вычислений неопределен
строки неюникодные, датавремя есть
нетесть
нет, ручное упраление
коды возврата, но ф-ции могут возвращать несколько параметров и структуры
неиерархическая
нетнетнетнетнетнетсторонниеданетнет
10
Delphi
порядок вызовов и вычислений неопределен
есть, но со строками бардак (одни CoW, ARC - другие без)
Integer $Q, float как С
есть, $R
нет, ручное упраление
исключения, RAII в виде finally
неиерархическая
есть, старые object и новые class, дженерики
нетнет
есть, но ограничены платформы - "тяжелый" софт
Многопоточность, примитивы синхронизации
дададанетнет
11
Rust (в основе по анализу @TargetSan)
Многовато спецсимволов, сложная идеология, синтаксис еще меняется, идентификаторы регистрозависимые, порядок вычисления и аргументов определяется заимствованиями ??, проблемы с FFI
Строки RW UTF8 на хипе, слайсы
есть, с выбором необходимости
естьестьADT, RAIIда
дженерики, инкапсуляция, AST-макросы
даЮниттестыда
да, каналы обмена
дасторонние - Gtkданет
нет, можно делать глобальный кастомный аллокатор
12
C++
дефолтный уровень, сложный местами неоднозначный синтаксис
да, строки мутабельные
float + boost/safe_numerics + SafeInt
для std::для std::дас++20дада, но (*)
Контракты экспериментальные С++20, юниттесты сторонние
да
std::thread и сторонние акторы
сторонниесторонниеданет
кастом аллокаторы, деструкторы
13
Go
хорошо. регистрозависимые идентификаторы, автоинициализация переменных, порядок вычислений однозначен
да, строки иммутабельные
переполнения не контролируются
естьGCADT, defer
да, дорабатывается версионирование
ООП ограничено нет виртуализации, есть интерфейсы, дженерики ожидаются в 2.0
да, но (**)Юниттесты
да, но прерывания конфликтуют с GC
естьда
сторонние, заточка под Веб-сервисы
данет
только получаемой, для безопасности сторонний memguard
14
Oxygene
хорошо. контроль регистра идентификаторов, автоинициализация переменных, порядок вычислений однозначен
строки UTF-16, мутабельные, похожи на Delphi WideString, датавремя есть
переполнения целых могут проверяться, float - нет
есть
GC, ARC, Manual - в зависимости от платформы, но GC основной
дада
да, кроме шаблонов
даестьнетlocked
от целевой платформы
от целевой платформы
данетполучаемой
15
Swift
хорошо. контроль регистра идентификаторов, контроль инициализации переменных, порядок вычислений однозначен
строки UTF16, мутабельные CoW, датавремя есть
переполнения целых проверяются, float - нет
есть
ARC для Apple, GC для RemObj
Исключения, defer, Nullable, RAII
да
да, кроме шаблонов
да
Контрактов нет, юниттесты есть
нет
библиотеки, разные для платформ
да, для RO от целевой платформы
от целевой платформы
данетполучаемой
16
17
C#
проще С++ и определен порядок выражений и вычисления параметров
дададаGCдада
да, кроме шаблонов (но есть T4)
даестьнет
да, стронние акторы
дададанет
при получении, при освобождении только SecureString
18
(*) What can C++ offer as far as functional programming?
19
(**) Functional Go
20
21
Ниже языки, не вошедшие в рассмотрение по причине низкой популярности (а значит и нет библиотек) или по другим, прописанным явно
22
Crystalhttps://crystal-lang.org
нет в Tiobe100 хотя и наследник популярного Ruby (Tiobe11), только вышел март 2021, специализирован для веб
23
Eiffelhttps://www.eiffel.orgнет в Tiobe100, древний
24
Haxehttps://haxe.org
нет в Tiobe50, транспилер, специализирован для веб
25
Juliahttps://julialang.org
Tiobe50, динамическая типизация, специализирован для математических вычислений
26
Nimhttps://nim-lang.org
нет в Tiobe100, только зарелизился 1.4, но еще нестабилен
27
Oberon
http://cas.inf.ethz.ch/projects/a2
Хотя и рассмотрен, нет в Tiobe100 и практически бесполезен - нет нормального тулчейна
28
OCamlhttps://ocaml.org
нет в Tiobe100, сильный уклон в ФП, ML-синтаксис
29
Redhttps://www.red-lang.orgнет в Tiobe50, бета
30
Terrahttps://terralang.org
нет в Tiobe100, 1.0.0-beta1, развитие прекращено
31
Vhttps://vlang.io
нет в Tiobe100 еще бета
32
Zighttps://ziglang.org
нет в Tiobe100 еще бета
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100