Discreet · and · not · discrete.


Do you want to crack jokes about it or do you want me to go?

Recent Entries · Archive · Friends · Profile

* * *
Enlgish readers, look no further: my english postings. Mostly about Haskell and its applications.

Про функциональное программирование и программирование вообще:Про язык Хаскель:Вне ЖЖ:Поиск по моему блогу:Потом еще чего добавлю.

Тут в ЖЖ что-то с какими-то разрешениями насчёт копирования чего-то не то. Поэтому, чтобы сразу уточнить это чего-то насчёт каких-то разрешений копирования, вот:
Используйте всё, что вам понравится так, как это вам угодно. Ограничений вводить не буду, это усложнит мне жизнь.

Если при использовании сошлётесь на меня, буду благодарен.
* * *
* * *
  1. Здесь только то, что интересно мне.
    1. Мои посты именно об интересном мне.
    2. Для меня интересно чужое хорошо аргументированное мнение.
    3. Я предупрежу, если мне что-то станет неинтересным.
  2. Запрещены:
    1. Хамство.
    2. Мат.
    3. Мемы.
    4. Переходы на личности (в принципе, даже в виде "да это идиотское решение!", если только за ним не следует сразу уточнение технических деталей в виде извинения)
    5. Комментарии-однострочники.
  3. Я предпочитаю чужие посты чужим комментариям.
За запрещённое может последовать бан сразу.

За "неинтересное" будет бан после не выполненной просьбы перейти к постам.

Всё это, как и предыдущие правила, направлено на увеличение доли видимой или полезной информации.

PS
Исключения существуют - это давно знакомые мне пользователи ЖЖ.
* * *
* * *
Последний эпизод чрезвычайно трогательный. И мне, похоже, не к чему придраться. Создатели молодцы.
* * *
* * *
Переполз на неё из под Windows, поскольку последний деградировал достаточно сильно.

Хочу отметить какую-то невероятно эффективную работу хаскельных программ под Линуксом. Одна и та же программа работает быстрее и, похоже, требует меньше памяти под Линуксом.

Удивительно.

* * *
* * *
Вот: https://hackage.haskell.org/package/containers-0.5.5.1/docs/Data-Map-Lazy.html

МИ-НИ-МУМ.

Мне там многого не хватает, поэтому минимум. Самое простое - есть keysSet, но fromKeysSet нет, а мне часто надо.

Именно поэтому я не могу нормально программировать на .Net, тамошние словари убоги. Да, там есть LINQ, с помощью которых можно реализовать многое из вышеприведенного, но для LINQ нет гарантий, что вызовется метод правильной сложности, а не преобразование в непонятно что с последующим непонятно каким преобразованием.
* * *
* * *
...так чушь пишут. Комбинаторные разборщики у них плохие сообщения об ошибках дают, ага.

Макс убрал мой репозиторий с mskhug (и вообще сайт убил), там у меня были примеры.

Ладно, пойду с начала, только не буду проверять примеры.

Самый простой монадический разборщик имеет внутренний тип data P a = P (String -> [(a, String)]) и представляет собой помесь State и List монад. Откат представляет собой просто возврат пустого списка: nope msg = P $ const []

Если мы хотим вести позицию в файле, то внутренний тип разборщика меняется на data P a = P ((Pos, String) -> [(a, (Pos, String))]). Опять помесь State и List, только параметр State другой. nope не изменится.

И если мы хотим вести позицию в файле и выдавать сообщения типа "на позиции ZZ ожидали QQ, ВВ и ПП", то нам надо вести наибольшую глубину разбора и прицепленный к ней список ожидаемого: data P a = P ((Pos, String) -> ((Pos, [String]), [(a, (Pos, String))])).

В этом случае nope будет уже иметь некий нетривиальный код: nope msg = P $ \(pos, rest) -> ((pos, [msg]), []). Альтернатива должна пустить одну ветвь, потом вторую и вычислить наиболее глубокое место, в котором произошла ошибка. Если оба места были одинаково глубоки, надо объединить сообщения.

(реализация оставлена читателю в качестве упражнения;))

Этот метод вполне рабочий, показывает совершенно правильное место ошибки, да ещё и в три раза быстрее Java кода из ANTLR спецификации на разборе VHDL-AMS.
* * *
* * *
Источник вдохновения: http://juick.com/provaton/2748659#54

Я начал работать программистом в 1989 году. Примерно в этом же году коллеги (тогда в каком-то институте в Одинцово) начали осваивать сей Рожок.

Я видел в сравнении базы на dBase и на Рожке, а также скорость написания. Натурально, программист на Рожке нарезал круги вокруг программиста на dBase III, IV и, потом, Клиппере.

Почему сей инструмент не получил широкого развития? Не знаю. Но Википедия пишет, что он всё ещё используется в одной трети Fortune 500 компаний. Значит, не пропал.

В дополнении к дискуссии, я могу сказать, что важна скорость освоения сложности предметной области. Я сам предпочитаю библиотеки и функции высших порядков, но я могу вообразить себя и на месте человека, которому большую часть кода создают по шаблонам, а он только вписывает (даже через тупое копирование) необходимое.
* * *
* * *
https://github.com/thesz/storage

В моём любимом стиле страта проекта - всё в одном файле. ;)

Посмотрим, что получится.

Пока только успел Patricia tree собрать, вроде, работает.

Patricia tree требуется для 1) хранения той части, что в памяти находится и 2) для организации слияния нескольких потоков при выборке или фиксации транзакции. В первом случае оно работает, как улучшенный Data.Map, во втором случае, как priority queue, с приоритетами в виде ключей.

Завтра надо собрать вставку, хотя бы в память.
* * *
* * *
Критику HashMap можно найти в описании crit-bit trees: http://cr.yp.to/critbit.html

Сами crit-bit trees это разновидность Patricia Tree with skips. Только детали реализации отличаются.

* * *
* * *
...что использование Data.Vector.Storable.Vector Word8 в качестве значения и ключа для key-value хранилища это не такая уж и плохая идея?

Не Bytestring потому, что байтовые строки прибиты к памяти (для работы с C).

Возможно, это может быть и Data.Vector.Unboxed.Vector, но я ещё не решил окончательно.

* * *
* * *

Previous