История изменений
Исправление MOPKOBKA, (текущая версия) :
Ничего этого ненужно. Ни в каком окампле никакой тег ты не добавишь.
Под тегом я имею виду:
type tag =
| EtoInt of int
| EtoStroka of string
Аналогично ненужно путать таплы в цпп и таплы во всяких окамлах.
Если взять примитивные типы, исключив тем самым боксинг, то представлении в памяти будет одно и тоже, (int * int * int) == struct { int, int, int}. Есть ли отличия кроме боксинга вызванного GC?
Это ты так говоришь. Зачем оно нужно если ничего не делает?
Разница в видимости, я же написал:
// Без rec можно переопределять переменные
let x = 10 in
let x = x + 20 in
print x // 30
// С rec поведение как в С
let x = 10 in
let rec x = x + 20 in // Ошибка, x еще не назначен
print x
То, что посмотрел какой-то преобразованный из под компилятора
На уровне языка нету конструкций где понадобилось бы хранить тип, нету динамической диспетчеризации. Тут наоборот, компилятор может вставить нечто, что языку в общем то не требуется.
У гц-языка все типы ссылочные.
В Lisp/Smalltalk часто типы размером примерно с указатель вшивают в ссылку, вместо того что бы выделять слот под них в памяти.
Optional не может быть заменой указателя без боксинга. Ты же писал что его нет? Это сложный тип?
Там почти все боксится, исключение есть для пары скаляров. Optional будучи определенный как
type 'T option =
| None
| Some of 'T
Исходная версия MOPKOBKA, :
Ничего этого ненужно. Ни в каком окампле никакой тег ты не добавишь.
Под тегом я имею виду:
type tag =
| EtoInt of int
| EtoStroka of string
Аналогично ненужно путать таплы в цпп и таплы во всяких окамлах.
Если взять примитивные типы, исключив тем самым боксинг, но представлении в памяти будет одно и тоже, (int * int * int) == struct { int, int, int}. Есть ли отличия кроме боксинга вызванного GC?
Это ты так говоришь. Зачем оно нужно если ничего не делает?
Разница в видимости, я же написал:
// Без rec можно переопределять переменные
let x = 10 in
let x = x + 20 in
print x // 30
// С rec поведение как в С
let x = 10 in
let rec x = x + 20 in // Ошибка, x еще не назначен
print x
То, что посмотрел какой-то преобразованный из под компилятора
На уровне языка нету конструкций где понадобилось бы хранить тип, нету динамической диспетчеризации. Тут наоборот, компилятор может вставить нечто, что языку в общем то не требуется.
У гц-языка все типы ссылочные.
В Lisp/Smalltalk часто типы размером примерно с указатель вшивают в ссылку, вместо того что бы выделять слот под них в памяти.
Optional не может быть заменой указателя без боксинга. Ты же писал что его нет? Это сложный тип?
Там почти все боксится, исключение есть для пары скаляров. Optional будучи определенный как
type 'T option =
| None
| Some of 'T