Будет ли Haskell хорошим выбором для моей задачи?

Я начинаю новый проект и не знаю, какой язык использовать.

Мои требования должны быть:

  • Возможность запускать на Windows/LinuxMacOs изначально (собственный исполняемый файл) - пользователь должен иметь возможность запускать .exe(например, в Windows) и видеть результаты.
  • Отсутствуют исполняемые файлы/интерпретаторы (без JVM, CLR и т.д.) - для загрузки приложения должно быть достаточно одной загрузки файла.
  • Полная поддержка Unicode.
  • Уметь управлять потоками ОС (создавать их, параллельно запускать несколько задач на многоядерных процессорах и т.д.).
  • Быть достаточно быстрым (производительность уровня Python и лучше).
  • Чтобы иметь какую-то стандартную библиотеку, которая выполняет низкоуровневые, мирские задачи.
  • Не очень нишу и у нее есть сообщество, чтобы иметь возможность задавать вопросы.

Мои "хорошие" требования:

  • Язык должен быть функциональным.
  • Он должен иметь хорошие возможности манипуляции строками (не обязательно регулярное выражение).
  • Не очень трудно учиться.

Теперь я думаю о Haskell, но также помню OCaml.

Обновление: Это приложение предназначено для простой утилиты для анализа и манипуляции языком.

Пожалуйста, совет, если мой выбор правильный.

Ответ 1

Haskell:

1: он работает на Linux, Windows и OS X, во многих случаях без изменений исходного кода.

2: Созданы исходные двоичные файлы. Нет виртуальной машины.

3: Полная поддержка Unicode. Поддерживаются все варианты UTF.

4: Полная поддержка потоковой передачи, плюс, если вам нужна только параллелизация, вы можете использовать "пар" со 100% гарантией того, что она влияет только на время, а не на семантику.

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

6: включена стандартная библиотека, а в "Hackage" есть еще много пакетов, включая ряд библиотек-парсеров.

7: Дружелюбное сообщество в IRC (#haskell) и здесь.

Изменить: в пунктах "nice to have":

1: Haskell - бескомпромиссно чистый функциональный язык.

2: В целом он хорошо справляется с строкой, с регулярными выражениями, если вы хотите их. Как сказал кто-то в более позднем комментарии, остерегайтесь эффективности встроенного типа "String" (он представляет строку как связанный список символов), но библиотеки ByteString и Text будут решать это для вас.

3: Трудно ли учиться? Его нигде не так сложно, как С++, и, вероятно, намного проще, чем Java или даже, возможно, Python. Но его чистый функциональный характер означает, что он очень отличается от императивных языков. Проблема заключается не столько в обучении Хаскелла, сколько в устранении императивных мыслеобразов.

Ответ 2

Haskell звучит так, как будто он отлично подходит для счета. GHC создает собственный код на OS X, Linux и Windows просто отлично, и в целом имеет производительность, которая намного лучше, чем Python (для многих вещей, а не для всего).

Единственный странный запрос - необходимость в потоках ОС. Программы, созданные GHC, используют легкие потоки, которые работают намного лучше, чем потоки ОС, и намного легче работать с pthreads.

Haskell также отлично подходит для разбора языка, используя библиотеки, такие как Parsec.

Мы также хорошо знаем, как строка и полезно сообщество вокруг Haskell.

Ответ 3

К вашему третьему приятно иметь: взгляните на Real World Haskell, это бесплатно и очень хорошее введение, в том числе введение ко всем необходимые вам очки. (Например, параллельные вычисления, синтаксический анализ строк и т.д.).

Ответ 4

Может быть, "приятно иметь":

  • да чистая функциональная и ленивая оценка.
  • yes (как было сказано ранее).
  • зависит от вас, мне сложно учиться, но дает вам некоторые большие преимущества.