Нет, всё так. Истинных целей нет, это бессмысленное понятие.
То, что обычно понимают под навязанностью и истинностью — это просто спектр, где на одной стороне, скажем, прямое пиление со стороны родителей/жены/начальника, что надо хорошо учиться/заработать на шубку/мы одна семья, а с другой — просмотренный вами в детстве мультик про Чипа и Дейла, где Гаечка вызывала определённые тёплые чувства, которые у вас проассоциировались со всяким технарством, или совместный поход с вашим отцом на автовыставку, где вы хорошо провели время и после которого начали куда сильнее интересоваться автомобилями, или просто генетически обусловленные особенности вашей системы вознаграждения, требующей больший контраст нейромедиаторов для той же реакции, отчего вам нравятся громко пердящие авто и тапка в пол.
Разница только в осознаваемости причин и возможности прямо указать на причины, которые сподвигли вас делать те или иные вещи.
Не идеалогический HashMap, чуть более быстрый, использующий низкоуровневые примитивы, с массивами написаными на Си
Это не так. GHC предоставляет достаточно низкоуровневых примитивов, чтобы писать на C вообще не нужно было.
Конечно, какая-то часть этих примитивов в итоге реализована в run-time system через сишку, но и условный аллокатор памяти для чистого кода реализован тоже через сишку, поэтому говорить «для мутабельности и массивов нужно C» смысла нет.
Считается, что использование массива напрямую небезопасно.
Кто считает?
Небезопасно обращаться по индексу через unsafeRead / unsafeWrite у условного Data.Vector, но это и в других языках небезопасно, а тут зависимые типы нас рано или поздно в итоге спасут.
А в местах, где производительность совсем критична всегда можно вызвать функцию, написанную на чистом си, и творить внутри неё что угодно на своё усмотрение.
Только почти всегда не нужно. На хаскеле не сильно сложно писать код, который будет на уровне C по производительности. Разве что, если вам нужно прямо дёргать SIMD-интринсики (но тогда вы не на С пишете), или если у вас какие-то хитрые хаки с памятью (но я не могу сходу такое придумать, что при этом не было бы UB в С).
Нет, всё так. Истинных целей нет, это бессмысленное понятие.
То, что обычно понимают под навязанностью и истинностью — это просто спектр, где на одной стороне, скажем, прямое пиление со стороны родителей/жены/начальника, что надо хорошо учиться/заработать на шубку/мы одна семья, а с другой — просмотренный вами в детстве мультик про Чипа и Дейла, где Гаечка вызывала определённые тёплые чувства, которые у вас проассоциировались со всяким технарством, или совместный поход с вашим отцом на автовыставку, где вы хорошо провели время и после которого начали куда сильнее интересоваться автомобилями, или просто генетически обусловленные особенности вашей системы вознаграждения, требующей больший контраст нейромедиаторов для той же реакции, отчего вам нравятся громко пердящие авто и тапка в пол.
Разница только в осознаваемости причин и возможности прямо указать на причины, которые сподвигли вас делать те или иные вещи.
Это не так. GHC предоставляет достаточно низкоуровневых примитивов, чтобы писать на C вообще не нужно было.
Конечно, какая-то часть этих примитивов в итоге реализована в run-time system через сишку, но и условный аллокатор памяти для чистого кода реализован тоже через сишку, поэтому говорить «для мутабельности и массивов нужно C» смысла нет.
Кто считает?
Небезопасно обращаться по индексу через
unsafeRead/unsafeWriteу условногоData.Vector, но это и в других языках небезопасно, а тут зависимые типы нас рано или поздно в итоге спасут.Только почти всегда не нужно. На хаскеле не сильно сложно писать код, который будет на уровне C по производительности. Разве что, если вам нужно прямо дёргать SIMD-интринсики (но тогда вы не на С пишете), или если у вас какие-то хитрые хаки с памятью (но я не могу сходу такое придумать, что при этом не было бы UB в С).