Обновить
2
2.2

Специалист по теории типов USB-кабелей

Отправить сообщение

Не идеалогический HashMap, чуть более быстрый, использующий низкоуровневые примитивы, с массивами написаными на Си

Это не так. GHC предоставляет достаточно низкоуровневых примитивов, чтобы писать на C вообще не нужно было.

Конечно, какая-то часть этих примитивов в итоге реализована в run-time system через сишку, но и условный аллокатор памяти для чистого кода реализован тоже через сишку, поэтому говорить «для мутабельности и массивов нужно C» смысла нет.

Считается, что использование массива напрямую небезопасно.

Кто считает?

Небезопасно обращаться по индексу через unsafeRead / unsafeWrite у условного Data.Vector, но это и в других языках небезопасно, а тут зависимые типы нас рано или поздно в итоге спасут.

А в местах, где производительность совсем критична всегда можно вызвать функцию, написанную на чистом си, и творить внутри неё что угодно на своё усмотрение.

Только почти всегда не нужно. На хаскеле не сильно сложно писать код, который будет на уровне C по производительности. Разве что, если вам нужно прямо дёргать SIMD-интринсики (но тогда вы не на С пишете), или если у вас какие-то хитрые хаки с памятью (но я не могу сходу такое придумать, что при этом не было бы UB в С).

12 ...
135

Информация

В рейтинге
1 238-й
Зарегистрирован
Активность