Size: a a a

Compiler Development

2020 February 07

A

Artem in Compiler Development
Alexander Tchitchigin
Ну тогда точно C и скомпилировать в WASM! 😃
:-) хотелось узнать если есть примеры языков, где стандартный лексический скоуп и можно делать замыкания, но иметь возможность объявить специальную функцию без доступа к scope
источник

AT

Alexander Tchitchigin in Compiler Development
По факту это вопрос замкнутости лямбда-терма, т.е. отсутствия в нём свободных переменных. Эту проблему неоднократно исследовали в контексте сериализации (и отправки по сети) функций в разных языках, но я не припомню таких, чтобы всегда запрещали свободные переменные. С другой стороны, если Вы хотите их запретить в своём (а хоть бы и чужом) языке - это очень легко проверить статически (во время проверки типов или около того). Да хоть линтер такой написать.
источник

DF

Dollar Føølish in Compiler Development
Python scoped eval kek
источник

DP

Dmitry Ponyatov in Compiler Development
Artem
:-) хотелось узнать если есть примеры языков, где стандартный лексический скоуп и можно делать замыкания, но иметь возможность объявить специальную функцию без доступа к scope
выполнение в изолированном контексте — как бы не в Smalltalk такие штуки были, там вроде был явный доступ к стеку фреймов
источник

AT

Alexander Tchitchigin in Compiler Development
Artem
:-) хотелось узнать если есть примеры языков, где стандартный лексический скоуп и можно делать замыкания, но иметь возможность объявить специальную функцию без доступа к scope
Rust, если подумать.
источник

DF

Dollar Føølish in Compiler Development
А как в расте это сделать?
источник

DF

Dollar Føølish in Compiler Development
А, просто не разыменовывать Статик?
источник

AT

Alexander Tchitchigin in Compiler Development
Dollar Føølish
А как в расте это сделать?
Там такое поведение по умолчанию - это если хочется использовать лексический скоуп, то нужно что-то делать. Например, move'ать.
источник

DF

Dollar Føølish in Compiler Development
Вы про замыкания. Понял
источник

AT

Alexander Tchitchigin in Compiler Development
В C++, строго говоря, так же.
источник

МБ

Михаил Бахтерев in Compiler Development
Artem
всем привет. подскажите, а есть ли языки в которых можно запретить функции использовать outer scope? или в которых есть аналогичная функции конструкция (block?) для этого
Scheme
источник

YS

Yuriy Syrovetskiy in Compiler Development
Artem
например сериализация функций, чтобы исполнить код в другом контексте (web workers в браузере)
сериализуйте вместе с замыканием
источник

Ct

Casual tears in Compiler Development
Alexander Tchitchigin
Rust, если подумать.
в Rust все еще можно глобальные переменные дергать.
источник

AT

Alexander Tchitchigin in Compiler Development
Casual tears
в Rust все еще можно глобальные переменные дергать.
"Глобальные константы" скорее. Так что их несложно сериализовать. 😉
источник
2020 February 08

BD

Berkus Decker in Compiler Development
Alexander Tchitchigin
"Глобальные константы" скорее. Так что их несложно сериализовать. 😉
а глобальные мутабельные константы? )
источник

M

MaxGraey in Compiler Development
Berkus Decker
а глобальные мутабельные константы? )
Без unsafe не получиться
источник

AV

Alexander Vershilov in Compiler Development
Alexander Tchitchigin
Rust, если подумать.
Haskell со static pointers :)
источник

AV

Alexander Vershilov in Compiler Development
Не совсем то, но указатель получается именно на функцию, которая не захватывает локальный scope
источник

N

Nikolay in Compiler Development
Подскажите. Правильно ли утверждение, что размещение памяти на стеке для функции определяется во время компиляции. Ну вот в простейшем примере ясно ,что если сразу идёт int x; int y, то можно на стэке выделать по 4 байта для каждой переменной , но если это под условием if? Например так if (something){ intx,y ....} else { double z ...} тут же получается ,что на этапе компиляции нельзя понять сколько памяти понадобится на стеке ?
источник

p

polunin.ai in Compiler Development
Nikolay
Подскажите. Правильно ли утверждение, что размещение памяти на стеке для функции определяется во время компиляции. Ну вот в простейшем примере ясно ,что если сразу идёт int x; int y, то можно на стэке выделать по 4 байта для каждой переменной , но если это под условием if? Например так if (something){ intx,y ....} else { double z ...} тут же получается ,что на этапе компиляции нельзя понять сколько памяти понадобится на стеке ?
Тут выделится память и под x, y и под z
источник