(no subject)
Волею судеб я сейчас изучаю язык Ocaml, вернее убираю пробелы.
Ocaml - древний язык, если учитывать его родословную, поэтому
в нём можно легко найти множество костылей, некрасивостей,
и откровенно слабых мест.
Они, видимо, появились из-за перехода от ML к более лаконичному
и удобному синтаксису, который делали зрелые промышленные практики
с ипотекой и детьми.
Первое, это, конечно, примотанная изолентой и соплями система модулей.
Рассмотрим простейшие конструкции - это пустой модуль и пустой тип модуля:
Сразу же бросаются в глаза явно инородные ключевые слова struct и sig, кроме того,
ключевое слово 'end' нельзя заменить на ')' как в основном языке да и у
него нет пары begin.
Сокращения struct и sig произошли от structure/signature в SML (MacQueen, D B (1984). Modules for Standard ML.):
Для ядра SML же обычен и непарный end - "let x = 8 in x end".
Хотя описание и определение функтора в Ocaml выглядят похоже на синтаксис
основного языка, хотя и содержат module вместо let:
Конечно, система модулей примотана изолентой и в SML, но там она
выглядит хоть чуточку более целостной. И, поскольку сам язык SML
многословнее, чем CAML, подъязык модулей выглядит в нём достаточно
естественно.
В F#, кстати, этот синтаксис заменён на более лаконичный.
Ocaml - древний язык, если учитывать его родословную, поэтому
в нём можно легко найти множество костылей, некрасивостей,
и откровенно слабых мест.
Они, видимо, появились из-за перехода от ML к более лаконичному
и удобному синтаксису
с ипотекой и детьми
Первое, это, конечно, примотанная изолентой и соплями система модулей.
Рассмотрим простейшие конструкции - это пустой модуль и пустой тип модуля:
module X = struct end
module type Z = sig end
Сразу же бросаются в глаза явно инородные ключевые слова struct и sig, кроме того,
ключевое слово 'end' нельзя заменить на ')' как в основном языке да и у
него нет пары begin.
Сокращения struct и sig произошли от structure/signature в SML (MacQueen, D B (1984). Modules for Standard ML.):
structure X = struct end
signature Z = sig end
Для ядра SML же обычен и непарный end - "let x = 8 in x end".
Хотя описание и определение функтора в Ocaml выглядят похоже на синтаксис
основного языка, хотя и содержат module вместо let:
module X = functor (A : Asig) (B : Bsig) -> struct end
Конечно, система модулей примотана изолентой и в SML, но там она
выглядит хоть чуточку более целостной. И, поскольку сам язык SML
многословнее, чем CAML, подъязык модулей выглядит в нём достаточно
естественно.
В F#, кстати, этот синтаксис заменён на более лаконичный.