Size: a a a

Compiler Development

2020 January 04

OM

Oleg Morozov in Compiler Development
cap?
источник

K

Kir in Compiler Development
"Шляпа"?
источник

OM

Oleg Morozov in Compiler Development
сокращение
источник

K

Kir in Compiler Development
Я щас думаю про use
источник

OM

Oleg Morozov in Compiler Development
как всякие ref, var
источник

K

Kir in Compiler Development
ref, как вариант, да
источник

K

Kir in Compiler Development
Вас бы сильно задолбало, если бы
1) любое имя было бы импортировано явно (кроме встроенных функций)?
2) перед каждым импортируемым именем не-модуля в списке импорта пришлось бы писать use?

Т.е., либо

let
 import data.list as { use sort, use group }

sort (group [1,2,3,3,2,1])

либо

let
 import data.list as list

list.sort (list.group [1,2,3,3,2,1])

либо, для ненавидящих пунктуацию

let
 import data.list as module
   use sort
   use group

sort (group [1,2,3,3,2,1])

?
источник

BD

Berkus Decker in Compiler Development
Kir
Вас бы сильно задолбало, если бы
1) любое имя было бы импортировано явно (кроме встроенных функций)?
2) перед каждым импортируемым именем не-модуля в списке импорта пришлось бы писать use?

Т.е., либо

let
 import data.list as { use sort, use group }

sort (group [1,2,3,3,2,1])

либо

let
 import data.list as list

list.sort (list.group [1,2,3,3,2,1])

либо, для ненавидящих пунктуацию

let
 import data.list as module
   use sort
   use group

sort (group [1,2,3,3,2,1])

?
Import data.list.{sort, group}
источник

AT

Alexander Tchitchigin in Compiler Development
Kir
Вас бы сильно задолбало, если бы
1) любое имя было бы импортировано явно (кроме встроенных функций)?
2) перед каждым импортируемым именем не-модуля в списке импорта пришлось бы писать use?

Т.е., либо

let
 import data.list as { use sort, use group }

sort (group [1,2,3,3,2,1])

либо

let
 import data.list as list

list.sort (list.group [1,2,3,3,2,1])

либо, для ненавидящих пунктуацию

let
 import data.list as module
   use sort
   use group

sort (group [1,2,3,3,2,1])

?
Я за второе "либо": явный префикс типа list.sort.
источник

K

Kir in Compiler Development
Berkus Decker
Import data.list.{sort, group}
Не смогу при всём желании. У меня есть
1) максимально тупой алгоритм, который из уровней отступа вставляет дополнительные лексемы {, ; и }, который включается только после определённых лексем (например, после module)
2) правило "import" qname "as" pattern, чтобы делать импортируемому модулю pattern-match
источник

M

MaxGraey in Compiler Development
Kir
Вопрос.

В жаваскрипте можно делать name capture в объектах:
let a = 1

let b = {foo: 2, a}

У меня в языке так получилось, что нужно перед a сделать какое-то слово. Я пробовал capture, но оно длинное:
{
 foo = 2
 capture a
}

Я пробовал pin, но оно уж больно многозначное:
{
 foo = 2
 pin a
}

Что тут можно придумать?
name capture? Впервые такое определение слышу. В JS это называется object property shorthand notation и это всего лишь синтаксический сахар, который раскрывается в {foo: 2, a: a}.
источник

M

MaxGraey in Compiler Development
В Rust это кстати тоже есть
источник

K

Kir in Compiler Development
Это да. Но у меня язык ленивый и запись { foo = 1; a = a } создаст a, ссылающееся само на себя. В моём случае - это именно capture.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Kir
Это да. Но у меня язык ленивый и запись { foo = 1; a = a } создаст a, ссылающееся само на себя. В моём случае - это именно capture.
что если не давать ему ссылаться на себя? то есть зачем имя поля делать объектом?
источник

BD

Berkus Decker in Compiler Development
Kir
Не смогу при всём желании. У меня есть
1) максимально тупой алгоритм, который из уровней отступа вставляет дополнительные лексемы {, ; и }, который включается только после определённых лексем (например, после module)
2) правило "import" qname "as" pattern, чтобы делать импортируемому модулю pattern-match
Тогда то что Александр написал.  Явное лучше.
источник

МБ

Михаил Бахтерев in Compiler Development
Kir
Это да. Но у меня язык ленивый и запись { foo = 1; a = a } создаст a, ссылающееся само на себя. В моём случае - это именно capture.
Чё-то это очень-очень неверная логика.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Kir
Это да. Но у меня язык ленивый и запись { foo = 1; a = a } создаст a, ссылающееся само на себя. В моём случае - это именно capture.
Хаскель тоже ленивый, но эта фича работает нормально (NamedFieldPuns)
источник

МБ

Михаил Бахтерев in Compiler Development
Походу у @slowpnir попутаны введение нового имени и его биндинги.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Yuriy Syrovetskiy
Хаскель тоже ленивый, но эта фича работает нормально (NamedFieldPuns)
а именно, в записи {a = a} первое слово ссылается на поле, а второе на переменную в текущей области видимости
источник

K

Kir in Compiler Development
Yuriy Syrovetskiy
Хаскель тоже ленивый, но эта фича работает нормально (NamedFieldPuns)
Да, это встроенный NamedFieldPuns. Работать должно как в хаскелле, но все поля объекта доступны друг другу по неквалифицированным именам.
источник