Какой язык лучше для программирования общего назначения, F# или Haskell? [закрытый]

Они не одинаковы:

arrayOf() создает Array и mutableListOf() и ArrayList под капотом.

Какой из них вы выберете, зависит от вашего приложения.

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

С другой стороны, ArrayList использует массив для внутреннего представления, но предоставляет вам изменяемый интерфейс. Таким образом, добавление / удаление элемента все равно приведет к копированию внутреннего массива, но этот процесс абстрагирован от вас.

Заключение:

  • Если вам нужно инициализировать список один раз и только после того, как у него есть доступ, вы должны использовать Array.
  • Если вам нужно добавлять / удалять элементы в очень редких случаях, и большинство читает, вы должны использовать ArrayList.
  • Если вам нужно постоянно добавлять / удалять значения, используйте LinkedList.

5
задан Bill the Lizard 8 August 2012 в 14:57
поделиться

7 ответов

Я пошел бы для Haskell. HackageDB является большим набором библиотек, которые записаны специально для языка. В случае F# необходимо было бы пользоваться главным образом библиотеками, которые не записаны с функциональным языком в памяти, таким образом, они не будут так же 'изящны' для использования. Но, конечно, это зависит в основном от того, сколько функционального программирования Вы хотите сделать и ограничения проекта, для которого Вы хотите использовать его. Даже 'общая цель' не означает, что должна использоваться во всех случаях ;)

19
ответ дан 18 December 2019 в 05:11
поделиться

Я сказал бы, что F#, поскольку можно получить доступ ко всей платформе .NET. Однако это - больше вещи библиотеки.

9
ответ дан 18 December 2019 в 05:11
поделиться

Это зависит, что Вы хотите сделать:

Haskell является более чисто функциональным языком двух.

F# является большим количеством гибридного языка, и не чисто функциональный, но имеет большой набор библиотек базовых классов, которые можно использовать, чтобы сделать современные вещи легко в Windows или Моно.

8
ответ дан 18 December 2019 в 05:11
поделиться

Вы могли бы найти это сообщение в блоге Neil Mitchell информативным:

F# с точки зрения Haskell

Комментарии также освещают.

4
ответ дан 18 December 2019 в 05:11
поделиться

Я сказал бы, что это зависит от того, почему Вы изучаете это. При выполнении его для опыта чистого функционального языка пойдите для Haskell. Но если Вы определенно собираетесь использовать язык для больше, чем, что, F#, мог бы быть лучший выбор.

2
ответ дан 18 December 2019 в 05:11
поделиться

Я предпочитаю Haskell.

Заявление Джона Харропа о том, что у Haskell плохие инструменты, заставило меня немного задуматься, поскольку я совершенно не согласен с этим. Я думаю, что проблема здесь отчасти в стиле разработки. Давайте сравним несколько характеристик F # и GHC, связанных с инструментами:

  1. F # имеет обширные визуальные инструменты, а GHC - нет. Для меня отсутствие визуальных инструментов не имеет значения: я работаю с vi, командной строкой Unix и сильно настраиваемой системой сборки. Отсутствие поддержки моего стиля разработки на F # было бы для меня очень мучительным. С другой стороны, если вы предпочитаете работать в среде типа Visual-Studio, у вас будет совершенно противоположное мнение.

  2. F # и / или .NET, насколько я понимаю, имеют очень хороший отладчик. GHC имеет только ограниченный отладчик, работающий в интерпретаторе. Я' Я годами не использовал отладчик (во многом это связано с использованием разработки через тестирование), и когда вы работаете в основном с чистыми функциями, как в Haskell, отладчик гораздо менее необходим. Так что для меня отсутствие этого инструмента не имеет большого значения.

  3. Библиотеки. Это в основном зависит от того, какие библиотеки вам нужны, не так ли? Множество хороших библиотек не поможет, если там нет нужной, а наличие множества плохо спроектированных библиотек может оказаться не столь полезным. У Haskell определенно меньше библиотек, чем у .NET, но у него есть разумный выбор, и качество дизайна API во многих из них очень, очень высокое.

Я не знаю, что такое интерфейс F # для библиотек собственного кода. вроде бы, но GHC отлично подходит для этого из-за фантастического FFI. Я написал сервер Windows DDE полностью на Haskell (да, не строчку C, даже не для того, чтобы иметь дело с обратными вызовами из библиотек Windows C), и это заняло значительно меньше времени и было значительно проще, чем делать то же самое на C или C ++. Если вам нужны интерфейсы с собственным кодом, Haskell, безусловно, лучший выбор.

«Непредсказуемость» использования памяти и производительности - хороший момент. Haskell кажется мне на самом деле достаточно предсказуемым, если вы знаете, что делаете, но вы не будете знать, что делаете, когда начнете, и вам придется многому научиться. F # намного больше похож на другие языки .NET.

В целом, этот вопрос, вероятно, больше связан с платформой, чем с языком: огромная разница между «миром Unixy» GHC, генерирующего собственный код, и «миром Windowsy» F #, работающий в .NET, не является проблемой языка.

«Непредсказуемость» использования памяти и производительности - хороший момент. Haskell кажется мне на самом деле достаточно предсказуемым, если вы знаете, что делаете, но вы не будете знать, что делаете, когда начнете, и вам придется многому научиться. F # намного больше похож на другие языки .NET.

В целом, этот вопрос, вероятно, больше связан с платформой, чем с языком: огромная разница между «миром Unixy» GHC, генерирующего собственный код, и «миром Windowsy» F #, работающий в .NET, не является проблемой языка.

«Непредсказуемость» использования памяти и производительности - хороший момент. Haskell кажется мне на самом деле достаточно предсказуемым, если вы знаете, что делаете, но вы не будете знать, что делаете, когда начнете, и вам придется многому научиться. F # намного больше похож на другие языки .NET.

В целом, этот вопрос, вероятно, больше связан с платформой, чем с языком: огромная разница между «миром Unixy» GHC, генерирующего собственный код, и «миром Windowsy» F #, работающий в .NET, не является проблемой языка.

25
ответ дан 18 December 2019 в 05:11
поделиться

Я думаю, что Джон Харроп по какой-то причине серьезно разочарован в Haskell. Это просто неправда, что он не используется за пределами академических кругов, на самом деле он широко используется в инвестиционном банкинге и гораздо чаще, чем F # и OCaml, и не зря. Если вам нужна работа по функциональному программированию, изучите Haskell, поскольку для программистов на Haskell рекламируется гораздо больше сообщений, чем F # или OCaml. Я уверен, что F # станет популярным, поскольку за ним стоит Microsoft, и он начинает с нуля, но на данный момент Haskell имеет явное преимущество.

Вероятно, 2 или 3 года назад OCaml лидировал в области практических функциональных языков, но с тех пор Haskell обогнал его с большим количеством библиотек, большим количеством функций, лучшей производительностью и более широким коммерческим использованием.

6
ответ дан 18 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: