набор различных коллекций, как в Яве, типа хэш массив, еще какой-нибудь массив и т.д., а как они устроены внутри нас это не должно волновать. Допустим, мы решили идти по этому пути, реализовали коллекцию массив, которая внутри себя представляет какой-нибудь VList. Но при этом, у нас будет много избыточной вычислительной работы, которая будет скрыта внутри этого контейнера.
Товарищ лукавит: в яве есть массивы. Кроме того, в яве есть дженерики (которые конечно убоги по сравнению с плюсатыми шаблонами, но тем не менее). Массив, как встроенный тип данных, в Обероне, это тип с двумя параметрами – тип элемента, и число элементов. Либо одним параметром – тип элементов. Свои, не встроенные типы данных мы не можем сделать параметризуемыми. Поэтому, очевидно, мы воссоздать на уровне библиотеки массив (и любую другую коллекцию) просто не сможем. Получится только ущербное поделие, оно будет либо недостаточно гибко, либо небезопасно.
Тип пораметризуемый одним аргументом получается посредством свертки типа с двумя аргумантами по одному из них. Что я и предлагаю сделать. Для этого в компиляторе что-либо менять не нужно.
В Обероне-07 ЕСТЬ массивы длины неизвестной на момент компиляции. Система типов его существованию таких массивов никак не припятствует, достаточно свернуть ARRAY x OF y по первому аргументу, причем так, чтобы первый аргумент был не валиден для непосредственного обычного применения этого самого ARRAY x OF y (то есть чтобы его можно было создать только через функцию-процедуру NEW, но нельзя было создать его экзепляр просто так). Поэтому я и предлагаю использовать x=0.
Так вот меня интересует мнение общественности, как они считают, динамический массив должен быть отнесен к разряду родных для языка или же статических массивов и указателей на записи вполне хватает для большинства применений, а в некоторых случаях можно просто запросить блок памяти у модуля SYSTEM и вручную с ним работать, но при этом естественно не будет контроля границ, а при работе с динамическим массивом будет.
А почему это не будет? Работа с этим куском памяти любого размера может быть инкапсулирована в соответствующий модуль с соответствующим opaque типом данных. И все. И все там будет, и проверка границ, и что угодно еще. Быстродействие будет практически такое же, а при оптимизирующем компиляторе в точности такое же как и при встроенных массивах в язык.