Установка: .NET SDK, dotnet fsi и скрипты .fsx
Готовим рабочее окружение: SDK, интерактивная консоль и скрипты для быстрых экспериментов.
F# Interactive (FSI) — это REPL, который компилирует и исполняет код на лету; запускается командой
dotnet fsiи идеально подходит для обучения и прототипирования.
Ставим .NET SDK
F# поставляется вместе с .NET SDK — отдельно ничего ставить не нужно. Скачайте SDK с сайта Microsoft (.NET 6/8/9 LTS) и проверьте установку.
dotnet --version
# 8.0.404Если команда печатает номер версии — всё готово. SDK включает компилятор fsc, FSI и шаблоны проектов.
Интерактивная консоль FSI
Запустите REPL и вводите выражения. Важная деталь: в FSI выражение завершается двумя точками с запятой ;; — это сигнал «выполни сейчас».
dotnet fsi
> let x = 21;;
val x: int = 21
> x * 2;;
val it: int = 42FSI печатает выведенный тип и значение. Переменная it всегда хранит результат последнего выражения — удобно для цепочки экспериментов.
Скрипты .fsx
Файлы .fsx — это скрипты F#: их не нужно оборачивать в проект, они запускаются напрямую. Создайте hello.fsx.
// hello.fsx
let name = "мир"
printfn "Привет, %s!" namedotnet fsi hello.fsxВывод:
Привет, мир!
Функция printfn печатает строку с переводом строки. Спецификатор %s — для строк, %d — для целых, %A — для любого значения (универсальный вывод). Эти спецификаторы проверяются типами на этапе компиляции: ошибётесь — компилятор не пропустит.
Проекты vs скрипты
Для полноценного приложения создают проект, для экспериментов и обучения — скрипты.
# создать консольный проект на F#
dotnet new console -lang "F#" -o MyApp
cd MyApp
dotnet runКак работает под капотом
FSI компилирует каждый введённый фрагмент в IL и тут же исполняет его в той же среде CLR, накапливая состояние сессии. Поэтому объявленные ранее значения и функции остаются доступными — REPL «помнит» контекст. Скрипт .fsx компилируется целиком при запуске; директива #r "nuget: Пакет" прямо в скрипте подтягивает зависимость из NuGet.
Частые ошибки
- Забыть
;;в интерактивной сессии — FSI будет ждать продолжения ввода. - Перепутать спецификаторы
printfn(%dдля строки) — компилятор выдаст ошибку типов. - Путать
.fs(модуль проекта) и.fsx(самостоятельный скрипт).
Итоги
- F# идёт внутри .NET SDK — отдельная установка не нужна.
dotnet fsi— интерактивный REPL; выражение завершают;;..fsx— скрипты для экспериментов, запускаютсяdotnet fsi файл.fsx.printfnсо спецификаторами (%s,%d,%A) — типобезопасный вывод.