Стандартный C-шный API реализован поверх циклического буфера, и из-за этого требует лишнего копирования при чтении блоков байтов. Вместо этого рантайм можно реализовать поверх файлов отображаемых в память, при этом сделать другой программный интерфейс. Никто не видел подобного?

The method is not widely used, though, because its standard implementations cannot be applied to stream objects like pipes, sockets or (pseudo-)terminal devices.

https://www.complang.tuwien.ac.at/syro/thesis.html

см. так же Концепция "потока" и модель предметной области

В общем, если бы было хорошее ядро, то можно было бы использовать отображение файлов в память. Но такого ядра у нас нет, а есть ядро линукса. Поэтому надо идти по пути стандартной библиотеки C - читать в буфер, затем из буфера копировать по мере необходимости. Решение с mmap приведёт к необходимости разбирать аргументы командной строки, чтобы открыть файл вручную, а это приведёт к усложнению кода. Рано это всё, пока ассемблер для тулчейна не готов.

Отредактировано Лис (2019-03-26 18:17:22)