pkg install linux_base-c7 linux-c7-icu service linux onestart
By-need
About Haskell and Standard ML
понедельник, 4 апреля 2022 г.
dotNET on FreeBSD
Виявилося, що dotnet можна використовувати на FreeBSD.
Завантажуємо dotnet runtime для Linux від Microsoft.
среда, 14 июня 2017 г.
RedisSharding - SCAN command added
В Standard ML версию RedisSharding (собирается при помощи MLton and PolyML) (https://github.com/kni/redis-sharding-sml) добавил поддержку команды SCAN.
При этом есть нюанс: курсор - это целое произвольной точности.
То есть, если клиенты оперируют с курсором как со строкой или числом произвольной точности, то они будут работать с командой SCAN, иначе нет.
При этом есть нюанс: курсор - это целое произвольной точности.
То есть, если клиенты оперируют с курсором как со строкой или числом произвольной точности, то они будут работать с командой SCAN, иначе нет.
пятница, 3 февраля 2017 г.
From Haskell to Standard ML
Фух... Полностью избавились от Haskell на серверах.
Причина: свойства MIO (Threaded RTS) избыточны для нас и сам MIO настолько сложен, что в настоящий момент не может быть без ошибок. А обычный RTS медленный и использует устаревший системный вызов select.
Сопутствующий минус: кода стало в 2 раза больше,
но есть еще один плюс: скорость выросла 2 раза.
P.S. Про ошибку в MIO не скажу - это будет маркер.
Причина: свойства MIO (Threaded RTS) избыточны для нас и сам MIO настолько сложен, что в настоящий момент не может быть без ошибок. А обычный RTS медленный и использует устаревший системный вызов select.
Сопутствующий минус: кода стало в 2 раза больше,
но есть еще один плюс: скорость выросла 2 раза.
P.S. Про ошибку в MIO не скажу - это будет маркер.
пятница, 9 декабря 2016 г.
Standard ML, Haskell parser benchmark
https://github.com/kni/sparcl
Redis protocol benchmark (seconds):
CSV benchmark (seconds):
P.S. Haskell ByteString - is Substring
But Substring has no apparent advantages over String in a real application (https://github.com/kni/redis-sharding-sml) :-)
Redis protocol benchmark (seconds):
String Substring Reader-String Reader-Substring Attoparsec Haskell: 4.63 7.98 Mlton: 3.07 1.81 1.90 1.50 PolyML: 6.32 4.43 7.86 6.08
CSV benchmark (seconds):
String Substring Reader-String Reader-Substring Attoparsec Haskell: 7.85 14.41 Mlton: 6.91 5.61 3.51 3.10 PolyML: 9.31 9.29 10.56 9.14
P.S. Haskell ByteString - is Substring
But Substring has no apparent advantages over String in a real application (https://github.com/kni/redis-sharding-sml) :-)
четверг, 1 декабря 2016 г.
От Haskell к Standard ML
Переписал сервер с Haskell на Standard ML (MLton и Poly/ML).
Кода стало больше, скорость стала выше. Быстрей не только MLton версия, но и Poly/ML. И это, несмотря на то, что у PolyML медленный FFI.
Кода в Standard ML версии больше чем в Haskell потому, что в Haskell используются "зеленые треды" и менеджер IO, а в Standard ML - "голый" kevent (epoll) и функции обратного вызова. Да и синтаксис компактней в Haskell, но в Standard ML "модульней".
В целом, хотя в Standard ML версии кода больше и используются функции обратного вызова, она не сильно сложней Haskell версии. Сложность какбы размазана равномерно. А в Haskell сложность скрывается за "простыми" вещами. Haskell требует больше знаний и имеет больше нюансов, когда копнеш глубже.
Если коротко, то в сравнении с Standard ML Haskell выигрывает в малом, но проигрывает в большом.
P.S.
Да, еще в GHC MIO есть баг, который лимитирует использование Haskell версии.
Кода стало больше, скорость стала выше. Быстрей не только MLton версия, но и Poly/ML. И это, несмотря на то, что у PolyML медленный FFI.
Кода в Standard ML версии больше чем в Haskell потому, что в Haskell используются "зеленые треды" и менеджер IO, а в Standard ML - "голый" kevent (epoll) и функции обратного вызова. Да и синтаксис компактней в Haskell, но в Standard ML "модульней".
В целом, хотя в Standard ML версии кода больше и используются функции обратного вызова, она не сильно сложней Haskell версии. Сложность какбы размазана равномерно. А в Haskell сложность скрывается за "простыми" вещами. Haskell требует больше знаний и имеет больше нюансов, когда копнеш глубже.
Если коротко, то в сравнении с Standard ML Haskell выигрывает в малом, но проигрывает в большом.
P.S.
Да, еще в GHC MIO есть баг, который лимитирует использование Haskell версии.
понедельник, 28 ноября 2016 г.
Haskell: ошибка в Mio...
Кажется, в Mio ("Scalable IO Manager") есть ошибка.
Mio - это IO менеджер для threaded режима в GHC 7.8 и выше.
В сервере, при превышении определенного размера данных, происходит зависание треда.
Mio считает, что писать в сокет еще нельзя, а на самом деле можно.
Проверил на GHC 7.8.[34] и 8.0.1.
В не-threaded режиме зависания нет, все работает.
А ведь считал, что основное преимущество Haskell - это "зеленые нитки" с многопроцессорностью при высокой скорости. А тут, оказывается...
Mio - это IO менеджер для threaded режима в GHC 7.8 и выше.
В сервере, при превышении определенного размера данных, происходит зависание треда.
Mio считает, что писать в сокет еще нельзя, а на самом деле можно.
Проверил на GHC 7.8.[34] и 8.0.1.
В не-threaded режиме зависания нет, все работает.
А ведь считал, что основное преимущество Haskell - это "зеленые нитки" с многопроцессорностью при высокой скорости. А тут, оказывается...
вторник, 1 ноября 2016 г.
Whole program optimization
Не хватает в GHC whole program optimization.
Есть "data type" и две функции. Одна возвращает по входным данным этот "data type", другая его используется для разветвления логики.
Перенес определение data type и первую функции в другой файл - производительность сервера упала на 20%.
Есть "data type" и две функции. Одна возвращает по входным данным этот "data type", другая его используется для разветвления логики.
Перенес определение data type и первую функции в другой файл - производительность сервера упала на 20%.
Подписаться на:
Сообщения (Atom)