Обзор языка
Короткая честная картина текущего surface gof.
Эта глава дает короткую, но честную картину текущего surface gof.
Она не пытается описать все edge cases. Ее задача — быстро собрать правильную ментальную модель языка перед более детальным чтением.
Базовая идея
Код на gof должен читаться просто, но вести себя явно.
Сейчас язык строится вокруг:
- top-level функций
- явных type contracts
- immutable bindings по умолчанию
- видимой мутации через
mut - явного моделирования данных через
structиenum - явного управления циклом через
breakиcontinue - явной concurrency через tasks, channels и
select
Функции — основной unit выполнения
fn add(a: int, b: int) -> int:
return a + bТекущие правила:
- функции живут на top level
- параметры могут иметь type annotations
- return type можно задать явно
- все return paths должны быть типово совместимы
Bindings immutable, пока ты явно не выбрал другое
total = 10Это создает immutable binding.
Если логике нужна reassignment, это нужно сказать явно:
mut total: int = 10
total = total + 1Mutation в gof разрешена, но она не является silent default.
С какими значениями уже можно работать
Текущий bootstrap subset уже поддерживает:
int,string,bool,json- списки, словари
- пользовательские
structиenum Result[T, E]- task, channel и cancellation-token values
unit
Этого уже хватает для нетривиальных примеров, но еще недостаточно, чтобы притворяться полной production-экосистемой.
Встроенные helper-ы пока нарочно компактные
Сейчас surface языка включает:
len(...),print(...),assert(...)append(...),contains(...)trim(...),split(...),join(...),starts_with(...),ends_with(...)parse_int(...),to_string(...)range(...),sleep(...)argv(),read_stdin(),read_stdin_lines()unix_seconds(),unix_millis()yaml_parse(...),base64_encode(...),base64_decode(...)env(...),cwd()run_process(...),read_file(...),write_file(...)exists(...),read_dir(...),mkdir(...),remove_file(...)path_join(...),path_dir(...),path_base(...),path_ext(...)dict(),insert(...),keys(...),values(...)channel(),close(...),send(...),recv(...)cancel_token(),cancel(...),is_cancelled(...)json_parse(...),json_stringify(...),json_get(...),json_index(...)json_len(...),json_string(...),json_int(...)template_render(...)http_request(...),http_get(...),http_post(...)
Небольшой размер stdlib — осознанный выбор.
gofлучше иметь маленький, но честный набор helper-ов, чем большой surface, который учит неправильной семантике.
Маленькая программа, которая уже ощущается как gof
struct Point:
x: int
y: int
fn Point.total(self: Point, extra: int) -> int:
return self.x + self.y + extra
fn main() -> int:
point: Point = Point(3, 4)
return point.total(5)Один этот пример уже показывает текущую форму языка:
- typed functions
- structs
- methods
- явный receiver contract
- явный return value