Hacker News Digest

13 сентября 2025 г. в 13:15 • mtlynch.io • ⭐ 213 • 💬 72

OriginalHN

#gleam#beam#erlang#elixir#functional-programming#static-typing#text-parsing#command-line-interface

My first impressions of Gleam

Первые впечатления о Gleam

Ищу новый язык для изучения и выбрал Gleam — это «эликсир» со статической типизацией.
Чтобы понять, подойдёт ли он, решил переписать старый pet-project: парсер логов AIM 1999-2007 гг.
Формат простейших логов — plain-text:

Session Start (DumbAIMScreenName:Jane): Mon Sep 12 18:44:17 2005
[18:44] Jane: hi
[18:55] Me: hey whats up
Session Close (Jane): Mon Sep 12 18:56:02 2005

Цель: вытащить только тексты сообщений, потом добавить метаданные и веб-интерфейс.

CLI-аргументы

Стандартной библиотеки для argv нет.
Сторонний пакет argv решает задачу в 4 строки:

case argv.load().arguments {
  [path] -> io.println("arg: " <> path)
  _      -> io.println("Usage: gleam run <dir>")
}

Компиляция

gleam build собирает проект, но исполняемого файла не создаёт.
В build/dev/erlang/... появляются .beam-файлы — байт-код для BEAM-ВМ.
Запускать удобнее через gleam run.

Парсер

Начал с теста: функция принимает многострочный текст и возвращает список сообщений.

plaintext_logs.parse(log)  
|> should.equal(["hi", "hey whats up"])

Дальше — добавлю структуру Message {time, author, text} и разберу XML/HTML-логи.