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.
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.