Size: a a a

Compiler Development

2019 September 17

LW

Lev Walkin in Compiler Development
проехали
источник

SS

Sergey Sverdlov in Compiler Development
источник

E

EgorBo in Compiler Development
изменений ппц конечно
источник

EO

Eugene Obrezkov in Compiler Development
в игрушечных языках можно углы срезать и упрощать, чего не скажешь о других
источник

PS

Peter Sovietov in Compiler Development
Ну почему, внутри Питона тоже можно поработать с игрушечными языками.
источник

PS

Peter Sovietov in Compiler Development
Вот, например, как: http://dev.stephendiehl.com/numpile/
источник

SS

Sergey Sverdlov in Compiler Development
Eugene Obrezkov
в игрушечных языках можно углы срезать и упрощать, чего не скажешь о других
В этом примере нечего особо срезать, ИМХО.
источник

А

Алексей in Compiler Development
То что вы в вашем примере используете только числа совершенно не означает, что в питоне надо будет "платить" только за числа.
источник

EO

Eugene Obrezkov in Compiler Development
Sergey Sverdlov
В этом примере нечего особо срезать, ИМХО.
Это если брать конкретно этот пример в расчёт и не обращать внимание на общую картину
источник

А

Алексей in Compiler Development
К тому же число в питоне - это тоже объект, аллоцируемый в куче, со счётчиком ссылок и так далее. Конечно определённый диапазон значений кешируются, но всё же.
источник

PS

Peter Sovietov in Compiler Development
Sergey Sverdlov
В этом примере нечего особо срезать, ИМХО.
Хуже сделать всегда можно!

PUSHI 0
PUSHI 100000
STORE
PUSHI 1
PUSHI 2
STORE
PUSHI 3
PUSHI 0
STORE
L3: PUSHI 1
LOAD
PUSHI 0
LOAD
LESS_OR_EQUAL
JUMP_IF_FALSE L4
PUSHI 2
PUSHI 2
STORE
L0: PUSHI 1
LOAD
PUSHI 2
LOAD
MOD
PUSHI 0
EQUAL
PUSHI 0
EQUAL
JUMP_IF_FALSE L1
PUSHI 2
PUSHI 2
LOAD
PUSHI 1
ADD
STORE
JUMP L0
L1: PUSHI 2
LOAD
PUSHI 1
LOAD
EQUAL
JUMP_IF_FALSE L2
PUSHI 3
PUSHI 3
LOAD
PUSHI 1
ADD
STORE
L2: PUSHI 1
PUSHI 1
LOAD
PUSHI 1
ADD
STORE
JUMP L3
L4: PUSHI 3
LOAD
PRINT
DONE
источник

M

MaxGraey in Compiler Development
Попробуй Ruby=) тот еще медленее Python-а 😂 Кстати они поработали над ним и похоже он иногда даже обхоняет Python)
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/ruby.html
источник

SS

Sergey Sverdlov in Compiler Development
Peter Sovietov
Хуже сделать всегда можно!

PUSHI 0
PUSHI 100000
STORE
PUSHI 1
PUSHI 2
STORE
PUSHI 3
PUSHI 0
STORE
L3: PUSHI 1
LOAD
PUSHI 0
LOAD
LESS_OR_EQUAL
JUMP_IF_FALSE L4
PUSHI 2
PUSHI 2
STORE
L0: PUSHI 1
LOAD
PUSHI 2
LOAD
MOD
PUSHI 0
EQUAL
PUSHI 0
EQUAL
JUMP_IF_FALSE L1
PUSHI 2
PUSHI 2
LOAD
PUSHI 1
ADD
STORE
JUMP L0
L1: PUSHI 2
LOAD
PUSHI 1
LOAD
EQUAL
JUMP_IF_FALSE L2
PUSHI 3
PUSHI 3
LOAD
PUSHI 1
ADD
STORE
L2: PUSHI 1
PUSHI 1
LOAD
PUSHI 1
ADD
STORE
JUMP L3
L4: PUSHI 3
LOAD
PRINT
DONE
Это кто породил?
источник

PS

Peter Sovietov in Compiler Development
Sergey Sverdlov
Это кто породил?
Это PigletC. Зато это самый маленький компилятор :)
источник

SS

Sergey Sverdlov in Compiler Development
Peter Sovietov
Это PigletC. Зато это самый маленький компилятор :)
Ага. Очень любопытно
источник

PS

Peter Sovietov in Compiler Development
Sergey Sverdlov
Ага. Очень любопытно
По поводу набора команд VM — все претензии к Владимиру. Это его PigletVM из статьи для хабра я взял в качестве примера :)
источник

PS

Peter Sovietov in Compiler Development
Sergey Sverdlov
Ага. Очень любопытно
В Вашем случае хорошо работает INC. Но в Питоне ADD делает много разных вещей: https://github.com/python/cpython/blob/master/Python/ceval.c#L1745

Он, как можно видеть, сначала, например, пытается сложить строки.
источник

SS

Sergey Sverdlov in Compiler Development
Peter Sovietov
В Вашем случае хорошо работает INC. Но в Питоне ADD делает много разных вещей: https://github.com/python/cpython/blob/master/Python/ceval.c#L1745

Он, как можно видеть, сначала, например, пытается сложить строки.
Да уж... Не позавидуешь интерпретатору...
источник

SS

Sergey Sverdlov in Compiler Development
func fINC(arg INT) {
    M[arg]++
}
источник

SS

Sergey Sverdlov in Compiler Development
Peter Sovietov
В Вашем случае хорошо работает INC. Но в Питоне ADD делает много разных вещей: https://github.com/python/cpython/blob/master/Python/ceval.c#L1745

Он, как можно видеть, сначала, например, пытается сложить строки.
Теперь мне понятней причина неэффективности: скрыта в реализации команд, вынужденных на лету разбираться с типами.
источник