Haskell или D для настольного приложения GUI?

Мне нравится haskell и многие вещи, связанные с ним, как его тип-движок, много пакетов в Hackage, приятное сообщество, активное развитие и т.д.

Otoh, у меня был опыт, что некоторые люди отказались от нашего запланированного проекта, считая Haskell слишком сложным (монады, много жаргона из академических кругов...), чтобы заглянуть (исходя из фона С++), поэтому было бы легче принести некоторые devs для нашего проекта с открытым исходным кодом, если мы будем использовать D.

Мы хотим разработать общее настольное приложение, которое должно иметь базовую базу данных (возможно, sqlite3), использовать C-lib для некоторых обширных вычислительных задач (расчет эфемерид) и использовать Qt toolkit, поскольку мы надеемся предоставить "легкую" версию для MeeGo в будущем.

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

Python и другие языки сценариев слишком медленны для проекта, и я не хочу возвращаться на С++ после стольких лет, поэтому, предпочитайте более высокоуровневое программирование... Не вдаваясь в слишком много деталей, я исключили некоторые другие langauges (Go, Clojure, Java..), который приводит список вниз к Haskell против D.

Одна из проблем, связанных с D, заключается в том, что проект QtD был приостановлен, поэтому мне интересно, если в краткосрочной перспективе можно даже считать D подходящим вариантом.

Любые pro/cons, которые могут быть более подходящими в качестве общего языка программирования для платформ Linux/MaC/Windows?

Изменить: Позвольте мне добавить ссылку на post Я отправил в список D, где Я более подробно объясню наши требования.

Ответы

Ответ 1

Я опасаюсь вашего комментария:

Python и другие языки сценариев слишком медленны для этого проекта

Haskell, написанный в прямом стиле, вероятно, будет на порядок быстрее, чем python. Возможно, за счет детализации программы Haskell сделать ее так же быстро, как низкоуровневая программа C, но она сложна, требует много времени и требует больших знаний о, например. Механизм генерации кода GHC.

Вы говорите, что вы уже используете привязки C, так что же имеет значение скорость? Я просто обеспокоен тем, что вы выбрасываете множество отличных инструментов, основываясь на предположении, что вы не проверили. Похоже, вам нужен инструмент с большой библиотечной поддержкой больше всего.

Как насчет Scala, схемы, С#/VB.NET(на моно)? Я не могу себе представить, какие причудливые критерии заставят вас ограничить ваши возможности Haskell и D.

Тем не менее, Haskell - отличный язык. Если это соответствует вашему проекту, пойдите для него. Просто откройте свой разум, чтобы вы не выбрали Haskell, черт возьми, когда есть другой инструмент, который позволит вам сделать 10% работы для тех же результатов.

Ответ 2

Давайте рассмотрим некоторые требования здесь, и я постараюсь сделать случай Haskell. Возможно, фанаты D или другие могут попытаться сделать то же самое.

  • Настольное приложение

Итак, Haskell, безусловно, используется для настольных и серверных приложений. Инструменты доступны для всех современных настольных компьютеров, просто используя платформу Haskell.

  • Бэкэнд базы данных

Хорошо известные базы данных для Haskell, которые имеют значительное применение, HDBC- * и sqlite, хотя есть многие другие.

Другие коммерческие группы, которые использовали приложения, управляемые базами данных в Haskell, включают: Galois (наша библиотека sqlite связана выше); Deutsche Bank (см. ); Оборудование Hustler Turf (дом HDBC).

  • Библиотеки C (следовательно, привязки FFI)

Haskell имеет высокий уровень, широко используемый FFI, который является стандартной частью Haskell 2010.

  • Использование Qt

qtHaskell был разработан для коммерческого применения и используется, например, JoyRide Labs для своих коммерческих игр.

  • Документация по исходному коду

Haddock широко используется. Другие инструменты анализа: graphmod и sourcegraph также помогают в документации по требованиям.

  • коммунальных

Несколько коммерческих пользователей отметили чистоту и сильные типы, которые облегчают нагрузку на обслуживание приложений в течение длинных циклов проекта, поскольку они облегчают локальные и безопасные изменения кода. Чистота уменьшает сложность между компонентами, а типы гарантируют рефакторинг.

  • Другие факты

Размер сообщества - сообщество Haskell с открытым исходным кодом процветает сейчас, наравне с другими большими языками FP (Erlang, Scala). Коммерческие пользователи финансируют прямую разработку GHC, обеспечивая ее долгосрочную доступность, и есть много отчетов об опыте. Hackage и Cabal помогают снизить риск, упрощая работу с открытым исходным кодом - экономя ваше время.

Ответ 3

Не такие языки программирования, как подружки, сэндвичи и карнавальные аттракционы? Как только вы устраните мусор, ваши любимые больше о вас, чем они.

Поскольку ни Haskell, ни D не являются мусором, и оба могут обрабатывать упоминаемые вами предметы (за исключением поддержки Qt-of-box), если вам это абсолютно необходимо, D может не работать), потребуется некоторое время, чтобы понять который лучше всего подходит вам и вашим особенностям. Постройте прототип с каждым языком. Извлеките некоторые данные из sqlite и отобразите их в gui. Если вы еще не определились, создайте каждый прототип на другой ОС, чтобы убедиться, что кросс-платформенная разработка - это то, что вы ожидаете.

Мы можем повторить то, что мы слышали о икре, и поделиться своим личным опытом, но вам придется попробовать, чтобы узнать, нравится ли вам это.

Ответ 4

В последнее время я слышал, что привязки gtk + и wxWidget haskell были более широко использованы (возможно, больше ошибок), а затем qt.

Как насчет scala либо с родным java widgit, либо с qt java bindings-qtjambi, глядя на их сайт, похоже, что это справедливо хорошо поддерживаемые сообществом (у них уже есть 4,7 бета).

Ответ 5

Недавно я начал изучать Haskell и измерил время для простого примера, найденного в "Узнайте, что вы Haskell для большого блага". В примере выписываются все прямоугольники с целыми сторонами меньше 400 (в учебнике было меньше 10, теперь я знаю почему). Время в WinGHCi составляло > 34 с (на 6 ядре 3,3 ГГц AMD, 64-битная Windows 7), не говоря уже о том, что использование памяти указано ~ 6 ГБ. Для сравнения я написал эту программу в Ada (тройные вложенные циклы), и время было < 0,1s. Я бы сказал, что вы должны сэкономить себе много смущения и выбрать D. D находится в той же категории, что и Ada/С++ (на самом деле это много занимает у Ada), но имеет много современных функций и очень хороший бесплатный компилятор. Есть недавняя книга о D Alexandrescu и, прочитав ее хорошую часть, я могу засвидетельствовать, что вы можете изучать язык полностью в течение нескольких недель (а не лет в случае с Haskell).

Ответ 6

Я хочу рассказать вам, почему я не буду использовать D для проекта:

Состояние цепочки инструментов системы страшно. Существует один компилятор DMC, который работает в Windows и Linux. Этот никогда не будет работать с открытым исходным кодом и, похоже, будет проектом для домашних животных от Walter Bright, а не с Digital Mars.

Компилятор gdc не работает и работает только с D 1.0, большинство из 2.0 расширений недоступны. У проекта, похоже, нет сопровождающих, а источник GCC - это полный монстр, поэтому не ожидайте, что есть много людей, которые возьмут на себя этот проект.

Компилятор llvm является ошибкой и работает только стабильно с подмножеством D 2.0. У проекта, похоже, есть сопровождающий, но он идет медленно.

И состояние поддержки чего-то еще, чем 32-битного Intel, слабое. Я не уверен в amd64, и я думаю, что нет никакой надежды на поддержку ARM.

Основываясь на этом, я потерял всякую надежду на то, что у D достаточно разработчиков, чтобы стать языком выбора для компании, занимающейся большим критически важным приложением. Вы будете сражаться с цепочкой инструментов и даже молиться, чтобы вернуться на С++ часто.

Я не могу комментировать Haskell, иначе вам не следует ожидать, что программисты станут известными специалистам Haskell. Это может быть поводом для выхода из своей работы - это, безусловно, было бы причиной для меня.

Ответ 7

Python может быть медленным, а С++ может быть уродливым, но те, кто настаивают на работе на своем любимом неясном языке, должны быть готовы работать самостоятельно.

Ни Haskell, ни D не являются достаточно популярными, так как это может показаться вам вероятным, что вы когда-нибудь привлечете к себе другого разработчика, если только вы не думаете, что разрабатываете приложение-убийца, которое будет на вашем языке, что Rails было к Ruby.