Если вы уже знаете LISP, зачем вам изучать F#?
Какова дополнительная ценность для изучения F#, когда вы уже знакомы с LISP?
11 ответов
- Статическая типизация (с выводом типа)
- Алгебраические типы данных
- Сопоставление с образцом
- Расширяемое сопоставление с активными шаблонами.
- Карри (с хорошим синтаксисом)
- Монадическое программирование, называемое "рабочие процессы", обеспечивает хороший способ асинхронного программирования.
Многие из них являются относительно недавними разработками в мире языков программирования. Это то, что вы увидите в F#, чего не увидите в Лиспе, особенно в Common Lisp, потому что стандарт F# все еще находится в стадии разработки. В результате вы обнаружите, что есть чему поучиться. Конечно, такие вещи, как ADT, сопоставление с образцом, монады и карри, могут быть построены как библиотека в Лиспе, но лучше научиться использовать их на языке, в котором они удобно встроены.
Самым большим преимуществом изучения F# для реального использования является его интеграция с.NET.
Если бы вы знали F# и Lisp, вы бы нашли этот довольно странный вопрос.
Как уже отмечали другие, Lisp динамически типизирован. Что еще более важно, уникальная особенность Lisp заключается в том, что он гомоичен: код Lisp является фундаментальным типом данных Lisp (список). Макросистема использует это преимущество, позволяя вам писать код, который выполняется во время компиляции и модифицирует другой код.
F# не имеет ничего подобного - это статически типизированный язык, который заимствует много идей у ML и Haskell и запускает его в.NET
То, что вы спрашиваете, сродни "Почему мне нужно учиться пользоваться ложкой, если я знаю, как использовать вилку?"
Сравнение Lisp напрямую с F# не совсем справедливо, потому что в конце дня достаточно времени, чтобы написать одно и то же приложение на любом языке.
Тем не менее, вы должны изучать F# по тем же причинам, что и C# или Java-разработчик, потому что это позволяет функциональное программирование на платформе.NET. Я не на 100% знаком с Lisp, но я предполагаю, что у него есть те же проблемы, что и у OCaml, в том, что нет поддержки звездных библиотек. Как вы делаете доступ к базе данных в Лиспе? Как насчет высокопроизводительной графики?
Если вы хотите узнать больше о "Почему.NET", посмотрите этот ТАК вопрос.
Учитывая, что LISP динамически типизирован, а F# статически типизирован, я считаю такие сравнения странными.
Если бы я переключался с Lisp на F#, это было бы исключительно потому, что у меня была задача, которая извлекла огромную пользу из какой-то библиотеки.NET.
Но я не, так что я не.
Деньги. Код F# уже более ценен, чем код на Лиспе, и этот разрыв будет очень быстро увеличиваться, поскольку F# увидит широкое распространение.
Другими словами, у вас гораздо больше шансов получить стабильный доход с помощью F#, чем с помощью Lisp.
Приветствия, Джон Харроп.
F# - это совсем другой язык по сравнению с большинством диалектов Лисп. Таким образом, F# дает вам совершенно другой угол программирования - угол, который вы не выучите у Lisp. Большинство диалектов Лисп лучше всего использовать для инкрементной интерактивной разработки символического программного обеспечения. В то же время большинство диалектов Лисп не являются функциональными языками программирования, а больше похожи на мультипарадигмальные языки - с разными диалектами, которые придают разное значение поддержке функций FPL (без побочных эффектов, неизменных структур данных, алгебраических типов данных, ...). Таким образом, большинство диалектов Lisp либо не имеют статической типизации, либо не уделяют ей особого внимания.
Итак, если вы знаете какой-нибудь диалект Lisp, то изучение F# может иметь большой смысл. Только не думайте, что большая часть ваших знаний Lisp применима к F#, так как F# - это совсем другой язык. Если императивному программированию на C или Java необходимо отучиться от некоторых идей при изучении Lisp, нужно также отучиться от привычек Lisp (без типов, побочных эффектов, макросов,...) при использовании F#. F# также управляется Microsoft и использует преимущества.net framework.
Преимущество F# в том, что разработка.NET (в целом) очень широко распространена, легко доступна и более массова.
Если вы хотите написать код F#, вы можете получить Visual Studio, который уже есть у многих разработчиков... в отличие от запуска и запуска среды LISP.
Кроме того, существующие разработчики.NET гораздо чаще обращают внимание на F#, чем на LISP, если это что-то значит для вас.
(Это от разработчика.NET, который писал и любил LISP, когда учился в колледже).
Я не уверен, если вы? Если вы найдете F# интересным, это будет причиной. Если работа требует этого, это будет причиной. Если вы думаете, что это сделает вас более продуктивным или принесет вам дополнительную пользу по сравнению с вашими текущими знаниями, это будет причиной.
Но если вы не находите F# интересным, ваша работа не требует этого, и вы не думаете, что это сделает вас более продуктивным или принесет дополнительную ценность, тогда зачем вам это?
Если, с другой стороны, вопрос заключается в том, что F# дает, а lisp - нет, тогда следует рассмотреть вывод типов, сопоставление с образцом и интеграцию с остальной частью.NET Framework.
Я знаю, что эта ветка старая, но так как я наткнулся на эту, я просто хотел прокомментировать свои причины. Я изучаю F# просто для профессиональных возможностей, поскольку.NET имеет большой вес в категории компаний, которые доминируют в моей области. Функциональная парадигма расширяется в использовании среди более количественных и ориентированных на данные компаний, и я хотел бы быть одним из первых, кто пришел к этой тенденции. В настоящее время не существует сильного функционального языка, который бы полностью и безопасно интегрировался с библиотекой.NET. Я на самом деле пытался портировать некоторые.NET из кода на Лиспе, и это действительно неприятно, потому что FFI поддерживает только примитивы C, а для взаимодействия.NET требуется конструкция 'interface', и хотя я знаю, как это сделать в C, это действительно огромный боль. Было бы действительно хорошо, если бы Lisp проделал лишнюю милю в своем следующем стандарте и потребовал класс C++ (включая виртуальные функции w/ vtables) и тип интерфейса в стиле C# в своем FFI. Может быть, даже добавить стиль интерфейса Java тоже. Это позволило бы обеспечить полную совместимость с библиотекой.NET и сделать Lisp сильным конкурентом в качестве крупномасштабного языка. Однако с учетом сказанного, происхождение из Lisp-фона сделало изучение F# довольно простым. И мне нравится, как F# делает все возможное, чтобы предоставить типы, которые вы обычно видите, как работает количественный тип. Я считаю, что F# был создан с учетом математической работы и сам по себе имеет значение по сравнению с Лиспом.
Один из способов взглянуть на это (исходный вопрос) - сопоставить язык (и связанные с ним инструменты и платформы) с ближайшей задачей. Если для выполнения задачи требуется подавляющий процент кода.NET, и для ее выполнения потребуется меньше усилий на одном языке, чем на другом, тогда выберите путь наименьшего сопротивления (F#). Если вам не нужны возможности.NET, и вам комфортно работать с LISP, и вам не нужно сгибать руки, чтобы отойти от него, продолжайте использовать его.
Не сильно отличается от сравнения молотка с гаечным ключом. Выберите инструмент, который подходит для работы наиболее эффективно. Попытка выбрать инструмент, который объективно "лучший", - нонсенс. И в любом случае, через 20 лет все "горячие" языки в любом случае могут устареть.