Каковы последние изменения в F #?
Я начинаю изучать F #. Я хорошо разбираюсь в языках программирования, таких как С# (и вообще использую .NET Framework), но функциональное программирование для меня нова. То, как я лучше всего учусь, - это взять книгу о предмете и начать читать - поэтому я схватил копию "Эксперт F #" и "F # для ученых". Несколько раз у меня создалось впечатление, что эти книги, кажется, уже устарели из-за недавних изменений в языке - ничего слишком драматичного, но это дает немного ошеломляющее ощущение, что может быть больше.
Теперь, когда F # 2.0, похоже, стабилизировался, было бы неплохо увидеть, как получилось "реальное" F # по сравнению с версиями языка, описанного в этих (и подобных) книгах.
Итак, мои вопросы:
- Какие темы изменились с тех пор, как были напечатаны книги, и перестали действовать, как описано? Есть ли какие-либо главы, которые я могу полностью пропустить? (Я знаю, что некоторые функции были перенесены в PowerPack, хотя мне не совсем ясно, какие функции находятся в PowerPack и которые находятся в стандартной установке).
- Какие особенности языка описаны правильно, но есть ли новые альтернативы? (Является ли описание событий еще актуальным?)
- Какие функции языка, о котором я должен знать, были добавлены (или изменены), поскольку эти книги были написаны?
- Есть ли другие недавние изменения в языке, о котором я должен знать?
изменить:
Спасибо всем за ответы!
Что касается выпусков заметок, я смог выкопать следующие "подробные заметки о выпуске" в блоге Don Syme, применив к версиям F # после 1.9.2 (версия "Expert F #" упоминается как версия используемые в книге):
Я ничего не нашел о версии 1.9.5 - сделал ли это когда-нибудь?
Ответы
Ответ 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, и большинство изменений относятся к закрытым функциям, которые не отображаются напрямую. Единственное, что может повлиять на пользователя, - это отличная печать наборов и карт.
Ответ 3
Ознакомьтесь с Примечания к выпуску.