я тут подумал: у нас есть чудесная штука `SYSTEM.THISARRAY()`. всем хороша — кроме того, что опасная. но ведь мы можем сделать её безопасный усечённый вариант, и избавиться от постоянной передачи `arr, beg, end` и ты пы.

поскольку при передаче аргументов компилятор передаёт тэг и размеры массива (иначе THISARRAY была бы невозможна), мы можем ввести безопасную функцию `SLICE(arr, beg, end)`, которая сначала проверит, правильный ли тип у `arr`, и не выходят ли `beg` и `end` за его границы, а потом просто сделает `THISARRAY()`.

изменения в основном в CPP, для проверки правильного типа `arr`, и в кодогене вставление проверок `beg` и `end` (процедуры для этого уже есть). ещё я бы предложил считать `SHORTCHAR` и `BYTE` совместимыми, потому что давайте честно: знаковый байт нафиг никому не нужен, он такой потому что в жабке такой; а на деле все или сразу делают с ним `MOD 100H`, или используют напрямую `SHORTCHAR`. поэтому я вижу смысл разрешить такие слайсы.

плюсы: раз и навсегда избавляемся от глупостей `arr, beg, end`, и всех связаных с ними ручных ассертов: компилятор всё сделает за нас. при декларировании совместимости шортчаров и байтов перестаём делать в апи типа Files.Reader со товарищи отдельные обёртки для обработки байтовых массивов и шортчар-массивов. (ну да, нарушение типизации в какой-то степени; ну камон, вы реально где-то использовали байты для арифметики — особенно с учётом безвариантного их расширокивания до интов при любой операции?)

минусы: не вижу.

если что, в компиляторе уже есть подобный чит: `arr$`. это тот же самый слайс, только менее «генерализованый». поскольку любой компилятор CP обязан такую штуку поддерживать — то можно смело предполагать, что все компиляторы будут передавать массивы как `тэг, адрес, длина`, и наличие `SLICE()` никаких дополнительных ограничений на компилятор не накладывает.

изменения для mainline компилятора я сделаю, если что, вы, главное, мигните.

p.s.: слайсы динамических массивов совершенно безопасны, потому что динамические массивы заякорены вызывающей процедурой. а слайс в `POINTER TO ARRAY`, натурально, не разрешается.

p.p.s.: нет, библиотечно это не реализуется, в том-то и проблема. надо в язык добавлять.