LINUX.ORG.RU

А бывают бинарные библиотеки для Haskell?

 


1

2

Хочу задать дико неприличный вопрос.

Как распространять в Haskell готовые бинарные библиотеки без исходников?

Крайне желательно, чтобы была интеграция с cabal, поскольку будут зависимости от некоторых пакетов из Hackage DB. Зависимость от версии Haskell Platform и операционки не пугает совершенно.

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

Пишут, что многие используют Haskell коммерчески, а значит, какое-то решение должно существовать. Пока его не нашел.

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

★★★★★

Да просто посмотри, как это сделано в haskell platform, там куча пакетов уже скомпиленных в составе, вроде даже правильно зарегистрированных в базе установленных пакетов кабала.

unC0Rr ★★★★★
()

Коммерческое использование не обязательно означает закрытые исходники. Спольски, например, как-то писал, что никакой причины закрывать код вообще не видит, а потому всё держит открытым.

Кроме того, если никакого распространения вообще не предвидится, весь код пишется для себя, то понятие «открытый код» вообще теряет смысл.

Miguel ★★★★★
()

Мне кажется, Вы совершенно не понимаете сути Haskell.

«Готовые библиотеки», «распространение», «бинарный дистрибутив», «коммерческое использование» — все эти термины в контексте Haskell просто не имеют смысла; Haskell работает по-другому.

А именно, Haskell — это: типы как объекты, каррированные функции как стрелки, HOFs как экспоненциалы, чистота, ссылочная прозрачность, аппликативность и свободные (при совпадении доменов-кодоменов) композиции, equational theory settings / reasoning как следствие, в терминах ТК, в том числе, начальные алгебры / финальные ко-алгебры как фреймворк для описания индуктивных рекурсивных данных (как выход - результаты, значения) и ко-индуктивных ко-рекурсивных потоков данных (как вход); функторы, монады, Kleisli категории - многие индуктивные [возможно] рекурсивные типы данных которые функторы (начиная с Identity, Maybe и List), также, обычные суммы, произведения и степени, то есть кортежи/записи, объединения/варианты и функции - writer, error и reader/environment, для функций более специального вида - prompt, parser, state и cont, par/conc/async как cont для fork/join/io/done языка; функторы, ко-монады, coKleisli категории - ко-индуктивные ко-рекурсивные типы данных которые функторы (простейшие потоки и деревья, например), те же произведения и степени (суммы?), указатели и изменяемые подструктуры (линзы, как функции в), зипперы; свободные монады вокруг типов данных которые функторы - iteratees (которые сами по себе потоки, то есть финальные коалгебры для соответвующих (строго-позитивных таки) функторов), разные языки (eDSL на ADT) и их интерпретаторы; ко-свободные ко-монады для типов данных которые функторы - ?; (под)категории и стрелки - линзы (категория, тензор, но не вполне стрелка), обычные функции, Kleisli стрелки, coKleisli стрелки, стрелки biKleisli категорий, функции ограниченные типом - списки-в-списки, потоки-в-потоки, деревья-в-деревья, сигналы-в-сигналы и поведения-в-поведения (как оно применяется в FRP) и т.п., автоматы, симуляции, преобразователи, некоторые языки-eDSL-на-ADT, опять же; монадические трансформеры как определённого вида натуральные трансформации для определённого вида функторов над разными монадами - WriterT, ErrorT, ReaderT, StateT, ContT, MaybeT, ListT и т.д., например, ReaderT (ConstEnvironment, MutableScope, Resources) IO - эффекты, injectable read-only / write окружение, список ресурсов пополняемый их захватами по мере выполнения и автоматически освобождаемый в конце; полугруппы, моноиды, сворачиваемые и обходимые типы и т.п. категорные и алгебраические типы и классы как «паттерны» и средства декомпозиции.

anonymous
()
Ответ на: комментарий от unC0Rr

Да просто посмотри, как это сделано в haskell platform, там куча пакетов уже скомпиленных в составе, вроде даже правильно зарегистрированных в базе установленных пакетов кабала.

Вероятно, там просто срез кабала. Это если для винды и мака. На линухе компиляется из исходников одна часть, а другая идет предустановленной с ghc. Но за идею спасибо, буду изучать.

dave ★★★★★
() автор топика
Ответ на: комментарий от stevejobs

По-поему там все равно требуются исходники.

dave ★★★★★
() автор топика
Ответ на: комментарий от true_admin

А есть готовые обфускаторы для Haskell? Что-то сильно сомневаюсь, но поищу.

dave ★★★★★
() автор топика
Ответ на: комментарий от Miguel

Спольски, например, как-то писал, что никакой причины закрывать код вообще не видит, а потому всё держит открытым.

где лежат _новые_ его коммиты в меркуриал? Старые - всё там же, а новые?

нормальных проектов он никогда в паблик и не выкладывал, вроде? Дай плз ссылку на исходники фогбагза..

stevejobs ★★★★☆
()
Ответ на: комментарий от Miguel

Распространение в исходниках по копирастической лицензии (License AllRightsReserved) - крайний вариант.

dave ★★★★★
() автор топика
Ответ на: комментарий от dmitry_malikov

Нашел только что-то связанное со скрытием данных в рисунках.

dave ★★★★★
() автор топика
Ответ на: комментарий от stevejobs

нормальных проектов он никогда в паблик и не выкладывал, вроде? Дай плз ссылку на исходники фогбагза..

Если я правильно понимаю, то те, кто пускает у себя фогбагз, получают и исходники.

http://blog.fogcreek.com/take-control-of-fogbugz/ — раздел Source Code Modification.

Miguel ★★★★★
()
Ответ на: комментарий от qnikst

Спасибо! Возможно, что это выход.

dave ★★★★★
() автор топика
Ответ на: комментарий от qnikst

Было бы здорово, если бы разные песочницы можно было объединять в одну в cabal-dev. А так получается, что клиенты будут привязаны только к моей песочнице, что не очень хорошо.

dave ★★★★★
() автор топика

А что мешает просто собирать и распространять so'шки? Кроме нестабильного ABI разумеется…

KblCb ★★★★★
()
Ответ на: комментарий от dave

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

qnikst ★★★★★
()
Ответ на: комментарий от KblCb

Вариант, но хотелось бы интеграции с cabal, чтобы можно было просто указать зависимость от моей библиотеки в файле *.cabal, и этого было бы достаточно.

dave ★★★★★
() автор топика
Ответ на: комментарий от dave

cabal прост как валенок. Напиши тулзу, которая будет брать бинарную библиотеку впихивать её в сандбокс cabal-dev'а например и править базы данных установленных пакетов.

Меня значительно больше удивляет, что ты хочешь распространять закрытые библиотеки на хаскеле. Во-первых непонятно что должна делать библиотека чтобы её купили. Во-вторых если библиотека на хаскеле, то ты не сможешь рассказывать истории про ультраперфоманс, низкоуровневые оптимизации и прочую хрень. А в силу простоты хаскеля группа студентов не осиливших купить твою библиотеку перепишет её за месяц. В-третьих если это библиотека то её придётся обмазать FFI в C, чтобы дёргать её могли не только из хаскеля.

KblCb ★★★★★
()
Ответ на: комментарий от KblCb

Могу только сказать, что, вероятно, будет версия по GPL.

В этом топике меня волновала сама принципиальная возможность. Похоже, что cabal-dev является решением, но я его всесторонне еще не тестировал.

dave ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.