> -- PSV100 писал(а):
> Сейчас в IT наблюдаются интересные решения для альтернативного управления "пространством жизни", с меньшим выламыванием мозга при реализации прикладных задач.
Нашёлся ещё один любопытный язык с автоматическим управлением памятью на основе "регионов" (статически в compiletime):ParaSail(Parallel Specification and Implementation Language) от AdaCore:
-ParaSail: A Pointer-Free Pervasively-Parallel Language for Irregular Computations
-презентация

Впечатление, что это некий испытательный полигон для Ada/SPARK (напр., в новый планируемый стандарт Ada 202x также вводятся параллельные действия и параллельные циклы, имеющиеся и в ParaSail).
Примечательно, какие именно "impediments" ликвидированы в языке:
ParaSail: Less is more with multicore
> -- Цитата:
> What are the impediments to easy parallel programming? With apologies to David Letterman, we would identify the following as the biggest impediments to doing things efficiently and safely in a highly parallel multicore world:* Global Variables* Garbage-Collected Global Heap* Parameter Aliasing* Run-Time Exception Handling* Explicit Threads* Explicit Lock/Unlock* Explicit Wait/Signal* Race Conditionsand worst of all …* Pointers
В языке нет не только глобальных переменных, сборщика мусора и пр., но и "самого худшего" -- традиционных указателей. Введены опциональные типы (объект содержит null или "владеет" определенным значением). Также имеются локальные временные ссылки на объекты (ссылочные параметры процедур и локальные переменные специального типа ref). Конструкции языка позволяют выразить, напр., рекурсивные типы, но затруднительно с циклическими структурами и в целом с произвольными ссылками. В подобных случаях для агрегатных типов предлагают реализовывать (перегружать) операцию "индексации" (как в массивах). Авторы утверждают, что такое положение дел лучше, чем, напр., в SPARK, который для гибких динамических структур принуждает к эквилибристике на массивах (по-видимому, фактически, в ParaSail эта эквилибристика запаковывается вовнутрь реализации типа).
Такие ограничения, однако, позволяют организовать контроль памяти компилятором, в том числе и недопущение алиасов на изменяемые объекты (а также, видимо, возникает больше эффективности у системы верификации программ (имеется на борту) и пр.).