?

Log in

No account? Create an account

January 9th, 2019

Волею судеб я сейчас изучаю язык Ocaml, вернее убираю пробелы.
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#, кстати, этот синтаксис заменён на более лаконичный.

Tags:

Latest Month

February 2019
S M T W T F S
     12
3456789
10111213141516
17181920212223
2425262728  
Powered by LiveJournal.com
Designed by Tiffany Chow