Установка: .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 = 42

FSI печатает выведенный тип и значение. Переменная it всегда хранит результат последнего выражения — удобно для цепочки экспериментов.

Скрипты .fsx

Файлы .fsx — это скрипты F#: их не нужно оборачивать в проект, они запускаются напрямую. Создайте hello.fsx.

// hello.fsx
let name = "мир"
printfn "Привет, %s!" name
dotnet 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) — типобезопасный вывод.
Проверьте себя
1. Как запустить интерактивную консоль F#?
Adotnet repl
Bdotnet fsi
Cfsharp --interactive
Ddotnet console
2. Чем завершают выражение в сессии FSI, чтобы оно выполнилось?
AТочкой с запятой ;
BДвумя точками с запятой ;;
CПустой строкой
DСловом run
3. Что такое файл .fsx?
AБинарная сборка
BСамостоятельный скрипт F#, запускаемый без проекта
CФайл конфигурации NuGet
DМодуль, обязательно входящий в проект