Подтвердить что ты не робот

Каковы последние изменения в F #?

Я начинаю изучать F #. Я хорошо разбираюсь в языках программирования, таких как С# (и вообще использую .NET Framework), но функциональное программирование для меня нова. То, как я лучше всего учусь, - это взять книгу о предмете и начать читать - поэтому я схватил копию "Эксперт F #" и "F # для ученых". Несколько раз у меня создалось впечатление, что эти книги, кажется, уже устарели из-за недавних изменений в языке - ничего слишком драматичного, но это дает немного ошеломляющее ощущение, что может быть больше.

Теперь, когда F # 2.0, похоже, стабилизировался, было бы неплохо увидеть, как получилось "реальное" F # по сравнению с версиями языка, описанного в этих (и подобных) книгах.

Итак, мои вопросы:

  • Какие темы изменились с тех пор, как были напечатаны книги, и перестали действовать, как описано? Есть ли какие-либо главы, которые я могу полностью пропустить? (Я знаю, что некоторые функции были перенесены в PowerPack, хотя мне не совсем ясно, какие функции находятся в PowerPack и которые находятся в стандартной установке).
  • Какие особенности языка описаны правильно, но есть ли новые альтернативы? (Является ли описание событий еще актуальным?)
  • Какие функции языка, о котором я должен знать, были добавлены (или изменены), поскольку эти книги были написаны?
  • Есть ли другие недавние изменения в языке, о котором я должен знать?

изменить: Спасибо всем за ответы!

Что касается выпусков заметок, я смог выкопать следующие "подробные заметки о выпуске" в блоге Don Syme, применив к версиям F # после 1.9.2 (версия "Expert F #" упоминается как версия используемые в книге):

Я ничего не нашел о версии 1.9.5 - сделал ли это когда-нибудь?

4b9b3361

Ответ 1

Я, вероятно, не могу дать полный ответ, но вот некоторые вещи, которые приходят на ум, поскольку они претерпели нетривиальные изменения за последние два года, я работал над F #...

Незначительные изменения:

  • Многие библиотечные функции были переименован в. Первоначально была склонность к подчеркиванию, которая так как был удален, чтобы быть больше .Net типа. Так, например, Seq.to_array теперь Seq.toArray. Некоторые существенные изменения в async и котировках API тоже.
  • #light теперь по умолчанию, вы можете оставить его в верхней части каждого файла
  • некоторые изменения в API/объявлениях событий и перечислений (ссылка на язык и docs docs на MSDN полезны для актуальной информации)
  • больше не требуется [<OverloadID>] для выполнения перегруженных функций-членов.

Новые функции:

  • Единицы измерения были новыми в Beta1.
  • comparison и equality ограничения были новыми в Beta2.
  • unmanaged ограничение RC.
  • (ознакомьтесь с "примечаниями к выпуску" для различных выпусков, связанных с предыдущими марками, для более)

Ответ 2

Я делаю ветру из последнего (1.9.9.9) и предыдущего (1.9.7.8) выпуска FSharp.

Я заметил много добавленных вызовов checkNonNull в массиве, Seq, Reflect и Quotation. Я предполагаю, что эти вызовы были добавлены для защиты F # libs от передачи пустых значений с другого языка, такого как С#. Любое прозрение Брайана? Функция nullArg вызывает исключение ArgumentNullException.

let inline checkNonNull argName arg = 
    match box arg with 
    | null -> nullArg argName 
    | _ -> ()
  • В настройке и улучшенном форматировании для установки и печати карт используется новая переопределяющая ToString с помощью sformat aka printf "% A".
  • Некоторая внутренняя очистка BigInteger для использования с .net 4.0.
  • Я вижу много внутренних изменений async, о которых говорил Брайан.
  • Некоторые внутренние изменения в событии для использования IObserver.

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