Size: a a a

Compiler Development

2020 May 08

A

Alex Ф-ф-фэils!🌠︙... in Compiler Development
Alexander Tchitchigin
Например, почему на строчке 9 происходит вызов функции, определённой на строчке 11?
Многопроходный пасрер
источник

M

MaxGraey in Compiler Development
Alexander Tchitchigin
Например, почему на строчке 9 происходит вызов функции, определённой на строчке 11?
Почитай про всплывание (hoisting). Коротко, все function declaration что ты определяешь в глобальном скоупе всплывают и попадают в global или window (для браузера) скоуп. на самый верхний уровень т. e

function g() {
 return "1";
}

function g() {
 return «2»;
}

на самом деле будут на самом верху:

global.g = functin g() {
 return "1";
}

global.g = functin g() {
 return «2»;
}

console.log(f());

console.log(a);
...

ну и последний global.g перепишет предыдущий поэтому будет только global.g = functin g() { return «2»; }
источник

А

Алексей in Compiler Development
Alexander Tchitchigin
Например, почему на строчке 9 происходит вызов функции, определённой на строчке 11?
Всеми любимый хаскель:
let
 a = b
 b = 5
in a + b
источник

M

MaxGraey in Compiler Development
MaxGraey
Почитай про всплывание (hoisting). Коротко, все function declaration что ты определяешь в глобальном скоупе всплывают и попадают в global или window (для браузера) скоуп. на самый верхний уровень т. e

function g() {
 return "1";
}

function g() {
 return «2»;
}

на самом деле будут на самом верху:

global.g = functin g() {
 return "1";
}

global.g = functin g() {
 return «2»;
}

console.log(f());

console.log(a);
...

ну и последний global.g перепишет предыдущий поэтому будет только global.g = functin g() { return «2»; }
Ну и это работает только для function declaration для function expressions (клозюр) уже нет
источник

AT

Alexander Tchitchigi... in Compiler Development
Алексей
Всеми любимый хаскель:
let
 a = b
 b = 5
in a + b
Не вижу связи.
источник

IG

Ivan Grekov in Compiler Development
Alex Ф-ф-фэils!🌠︙
Многопроходный пасрер
Там 2 прохода вроде всего
источник

AT

Alexander Tchitchigi... in Compiler Development
Что рассказали про "поднятие" (hoisting) — спасибо обоим участникам.
источник

IG

Ivan Grekov in Compiler Development
MaxGraey
Ну и это работает только для function declaration для function expressions (клозюр) уже нет
Потому что function expression - переменная, по сути.
Нельзя использовать неинициализированную переменную
источник

IG

Ivan Grekov in Compiler Development
Точнее, нельзя ее использовать до объявления
источник

IG

Ivan Grekov in Compiler Development
MaxGraey
Ну и это работает только для function declaration для function expressions (клозюр) уже нет
А function expression это разве замыкание?
источник

M

MaxGraey in Compiler Development
Ivan Grekov
А function expression это разве замыкание?
Не обязательно, но чаще всего да
источник

IG

Ivan Grekov in Compiler Development
MaxGraey
Не обязательно, но чаще всего да
Ну да, резонно
источник

SM

Sergey Makarov in Compiler Development
Alexander Tchitchigin
Не вижу связи.
b в let-блоке объявлено после использования
источник

AT

Alexander Tchitchigi... in Compiler Development
Sergey Makarov
b в let-блоке объявлено после использования
Так, а пример кода на JS, про который были вопросы Вы смотрели? Там проблемы не с использованием до объявления самим по себе.
источник

AT

Alexander Tchitchigi... in Compiler Development
MaxGraey
Не обязательно, но чаще всего да
Строго говоря, это всегда замыкание, просто в вырожденном случае оно ничего не замыкает (из окружения). Кроме this, если arrow function.
источник

А

Алексей in Compiler Development
Alexander Tchitchigin
Так, а пример кода на JS, про который были вопросы Вы смотрели? Там проблемы не с использованием до объявления самим по себе.
а ну да, сорян, поторопился
источник

M

MaxGraey in Compiler Development
Alexander Tchitchigin
Строго говоря, это всегда замыкание, просто в вырожденном случае оно ничего не замыкает (из окружения). Кроме this, если arrow function.
Все верно. Просто в JS замыкания которые захватили хоть одну переменную или this (в случае с arrow function) принято называть замыканиями, а все остальные функциями / анонимными функциями, что бы хоть как то разделять
источник

IG

Ivan Grekov in Compiler Development
MaxGraey
Все верно. Просто в JS замыкания которые захватили хоть одну переменную или this (в случае с arrow function) принято называть замыканиями, а все остальные функциями / анонимными функциями, что бы хоть как то разделять
Насколько я знаю, это очень условно
источник

KR

K R in Compiler Development
Напомните, пожалуйста, аналог llvm, но графовый, research-style. Он тут упоминался неоднократно.
источник

AT

Alexander Tchitchigi... in Compiler Development
K R
Напомните, пожалуйста, аналог llvm, но графовый, research-style. Он тут упоминался неоднократно.
libfirm?
источник