Sr
но там было за счет того, что на больших данных в си возрастала фрагментация кучи, в то время как в haskell сжимающий сборщик
Да вот этот довод звучит убедительно. У сей действительно есть проблема с фрагментацией памяти. И обходится он крайне тяжёлыми методами
Anonymous
это не самый часто возникающий эффект, но он есть
т.е. это говорит больше об импелементации чем о языках
Alexander
просто это может быть сильно времязатратнее
KLH
Ну была помню спецолимпиада, где код на питоне работал быстрее хаскела в несколько раз. Потом конечно ускорили, и было почти как в си (естественно обогнав питон во много раз). Правда там нативный был питон или pypy, но не сишное расширение
Alexander
ну там реализация кривая была сначала
Alexander
так то там haskell обогнал rust в конце концов
Alexander
но ту реализацию, что была в конце никто в здравом уме писать не будет
Alexander
хотя питон в 2 раза и наивная обошла
Alexander
нормальная сравнимая с растом
KLH
Ну наверное ребята из раста не сильно может старались. По идее то к раста больше возможностей для оптимизаций
Alexander
не нормальная 1.1/1.2 от сишки
Anonymous
так то там haskell обогнал rust в конце концов
насколько я помню, там для vector fusion нужна была отдельная библиотека, когда в расте это по-дефолту было?
Alexander
Andy ну вроде у них на канале особо идей не было
Alexander
в расте fusion можно через итераторы получить, ну и там от него не много толку
Alexander
там из-за того, как проходятся данные нельзя было временные структуры делать
Alexander
но все равно основной бонус там от того, какой размер буффера
KLH
https://m.habr.com/post/323106/ вот кстати про питон си и раст) можно не читать , а только в конце табличку посмотреть. Правда офтопик , хаскела там нету
Alexander
так что так себе - бенчмарк malloc и write
Sr
Спасибо за подробные пояснения
Sr
Всем спокойной ночи
Alexander
спокойной, обращайся ещё если вопросы будут
KLH
да даже ocaml быстрее питона будет...
А вот это странно. Я имею ввиду, что вообще вроде окамл побыстрее хаскела даже вроде
Alexander
не должен бы
Dmitry
Если не вылизывать код на C / Haskell, то последний может оказаться быстрее ещё и из-за ленивости, т.к. не будет лишнее считать.
Dmitry
Например, надо посчитать f(x, y), причём использование 'y' зависит от значения 'x'. В C придётся считать оба, а в Haskell второй будет вычислен по необходимости
Dmitry
Понятно, что и это можно допрограммировать в C, но это уже то самое "вылизывание кода"
Cheese
Но питон жи тоже во что-то там компилируется. И ещё использует оптимизированные библиотеки на си
компилируется в байт-код, который интерпретируется. компиляция — это не волшебство, делающее всё быстрее
Vladimir
Ещё есть всякий PyPy же, который дикая смесь jit и суперкомпиляции.
Oleg
Обычный tracing JIT
Oleg
Агрессивные оптимизации - это не суперкомпиляция
Denis
Я когда про агрессивные оптимизации слышу, вспоминаю Contra III. Там в самом начале была фраза: we must fight them aggressively.
Oleg
Вообще интересно как трюффелёвые питоны по перфомансу с PyPy
Danila Matveev
никак вродь, змея в трюфелях еще не оч работоспособна
Cheese
и тут оффтопик
Евгений
Неделя без оффтопа в основном чате обернулась неделей оффтопа в обоих чатах
Cheese
да ладно, только капелька
Alexander
жалко, статистика не считает сколько онтопика в абсолютных цифрах
Евгений
В абсолютных цифрах зато можно сказать, что в чате стало тихо, @combot не даст соврать
Alexander
это-то очевидно, но это не говорит о том, уменьшился или увеличился онтопик
Vasiliy
Нужно изменить тактику. Задавить оффтопик продуктивным общением по делу.
Vladislav
data Human a = Age a | Dead на хаскеле можно пофилософствовать о жизни и смерти)
Евгений
Нужно изменить тактику. Задавить оффтопик продуктивным общением по делу.
Это бесполезно, пока в чате не будет какого-нибудь сообщества, поддерживающего опенсорсный проект на хаскеле
Vasiliy
data Human a = Age a | Dead на хаскеле можно пофилософствовать о жизни и смерти)
Кстати, как в этом случае ограничить множество допустимых типов a ? Чтобы можно было подставлять чиселки, но нельзя было подставлять что-то другое ?
Vasiliy
А поподробнее можно, пожалуйста?
Anatolii
а тут инт не нужен возле Human
Alexander
{-# LANGUAGE RankNTypes #-} data Human a = Alive (Num a => a) | Dead
Vasiliy
а тут инт не нужен возле Human
Ага, нужно сделать тип Fix Human и исползовать его как нумералы Пеано.
Vladislav
(Num a => Human a)
вот так что ли? class Num a => Human a where data Human a = Age a | Dead
Alexander
42 :: Human * 27
Alexander
весело будет
Alexander
квадратнолюди
Anatolii
data Human = Age Int | Dead ?
Евгений
вот так что ли? class Num a => Human a where data Human a = Age a | Dead
Ну нет, я имел в виду, что там где юзаешь Human ставишь ограничение на a. burn : Num a => Human a -> Human a
тот
здесь число по хаскелю можно писать или по функциональным зякам? не умере ть - фрукты как первый шаг, лучше пока не знаю
Alexander
вообще обычно так и делают
Alexander
а то потом захочется сделать какой-нить traverse и не получится
Alexander
как ты написал
Alexander
опять к недооформленным вопросам по парсерам
Alexander
вот у меня есть текст fooo foo!bar "qoobidooh foo!bar"
Alexander
так.. пока писал вопрос исчерпался
Alexander
но на всякий случай вот foo!bar и foo это токены, но у foo!bar ещё нужно доразбирать, нужно сказать, что там есть части [foo, !bar]
Alexander
это разумно разделять и возвращать полный токен, а потом его парсить или нет?
Maxim
пасиб
Alexander
парсер этого не знает
Евгений
Вообще без синтаксиса ответить однозначно нельзя
Alexander
т.е. это потом человек решит
Alexander
т.е. foo это или литерал или ссылка
Alexander
foo!bar точно ссылка