Size: a a a

Compiler Development

2020 February 12

p

polunin.ai in Compiler Development
Yuriy Syrovetskiy
1. я говорил о читаемости, а не о новых проектах.
2. ок, пора посмотреть в сторону неалголов, например, Окамль или Рэкет.
3. нет, на С++ я не пишу. а в Хаскеле ничего этого не нужно (есть, но используется редко).
4. спасибо, полезный datapoint
3. Там все значения передаются по ссылке изначально?
источник

G

Gymmasssorla in Compiler Development
polunin.ai
3. Там все значения передаются по ссылке изначально?
По значению
источник

FO

FORTRAN ONE LOVE in Compiler Development
Gymmasssorla
По значению
А надо по ссылке
источник

p

polunin.ai in Compiler Development
Gymmasssorla
По значению
То есть копируются при передаче в функцию?
источник

G

Gymmasssorla in Compiler Development
polunin.ai
То есть копируются при передаче в функцию?
Не знаком с деталями реализации ghc, но думаю, что он таки оптимизирует это дело
источник

G

Gymmasssorla in Compiler Development
То есть копируется не всегда
источник

p

polunin.ai in Compiler Development
Михаил Бахтерев
Зачем? Мне для составления мнения хватает открытых источников. Мне Rust не подходит в силу определённых причин. Другим он вполне может подходить. Хотя мне и сложно представить, почему. Я просто оспариваю мнение, что Rust - панацея.
Я могу посмотреть на плюсовый код студента и сказать что с++ нечитабельный язык. Кто-то здесь говорил что единичный случай не является стандартом.
источник

МБ

Михаил Бахтерев in Compiler Development
polunin.ai
То есть копируются при передаче в функцию?
Нет. В Haskell нет необходимости что либо копировать
источник

МБ

Михаил Бахтерев in Compiler Development
polunin.ai
Я могу посмотреть на плюсовый код студента и сказать что с++ нечитабельный язык. Кто-то здесь говорил что единичный случай не является стандартом.
Я плохо разбираюсь в мире Rust, но разве Servo не флагманский проект Mozilla?
источник

p

polunin.ai in Compiler Development
Gymmasssorla
Не знаком с деталями реализации ghc, но думаю, что он таки оптимизирует это дело
То есть памятью управляет исключительно компилятор? Как мне кажется это влечет за собой невозможность оптимизации кода (поправьте если не так)
источник

YS

Yuriy Syrovetskiy in Compiler Development
polunin.ai
3. Там все значения передаются по ссылке изначально?
1. об этом нет нужды думать.
2. физически по ссылке, но выглядит так, будто по значению.
источник

G

Gymmasssorla in Compiler Development
polunin.ai
То есть памятью управляет исключительно компилятор? Как мне кажется это влечет за собой невозможность оптимизации кода (поправьте если не так)
> То есть памятью управляет исключительно компилятор?
Хаскелль слишком высокоуровневый, чтобы управлять памятью вручную
источник

YS

Yuriy Syrovetskiy in Compiler Development
polunin.ai
То есть памятью управляет исключительно компилятор? Как мне кажется это влечет за собой невозможность оптимизации кода (поправьте если не так)
вот компилятор и оптимизирует
источник

p

polunin.ai in Compiler Development
Gymmasssorla
> То есть памятью управляет исключительно компилятор?
Хаскелль слишком высокоуровневый, чтобы управлять памятью вручную
Везде есть возможность как-то влиять на память. В большинстве языков это подкрутка настроек ГЦ, а как в хаскеле?
источник

YS

Yuriy Syrovetskiy in Compiler Development
polunin.ai
Везде есть возможность как-то влиять на память. В большинстве языков это подкрутка настроек ГЦ, а как в хаскеле?
есть настройки рантайма и ГЦ, есть хитрые виды памяти
источник

МБ

Михаил Бахтерев in Compiler Development
polunin.ai
То есть памятью управляет исключительно компилятор? Как мне кажется это влечет за собой невозможность оптимизации кода (поправьте если не так)
Там есть свои приёмы оптимизации. Но компилятор Haskell очень хорош. Чтобы победить Haskell, написав более оптимальный код на Си, надо серьёзно постараться.

P.S. Бывает, конечно, что Haskell тупит. Но в типовых ситуациях он исключительно хорош. Как и JavaScript, например. Поэтому мне и не понятно желание свалить управление памятью на пограммиста, когда уже выработаны стратегии оптимизации для более простых языков. Подружиться со сборщиком мусора проще, чем подстраивать алгоритм под borrowchecker.
источник

YS

Yuriy Syrovetskiy in Compiler Development
Михаил Бахтерев
Там есть свои приёмы оптимизации. Но компилятор Haskell очень хорош. Чтобы победить Haskell, написав более оптимальный код на Си, надо серьёзно постараться.

P.S. Бывает, конечно, что Haskell тупит. Но в типовых ситуациях он исключительно хорош. Как и JavaScript, например. Поэтому мне и не понятно желание свалить управление памятью на пограммиста, когда уже выработаны стратегии оптимизации для более простых языков. Подружиться со сборщиком мусора проще, чем подстраивать алгоритм под borrowchecker.
но borrow checker не меняет алгоритм, а только заставляет сформулировать зависимости данных более явно
источник

p

polunin.ai in Compiler Development
Михаил Бахтерев
Там есть свои приёмы оптимизации. Но компилятор Haskell очень хорош. Чтобы победить Haskell, написав более оптимальный код на Си, надо серьёзно постараться.

P.S. Бывает, конечно, что Haskell тупит. Но в типовых ситуациях он исключительно хорош. Как и JavaScript, например. Поэтому мне и не понятно желание свалить управление памятью на пограммиста, когда уже выработаны стратегии оптимизации для более простых языков. Подружиться со сборщиком мусора проще, чем подстраивать алгоритм под borrowchecker.
В целом борроу чекер не мешает а помогает. Практически всегда работает стратегия place * and & until rustc is happy.
Так что мифы про сложность борроу чекера сильно преувеличены.
источник

AT

Alexander Tchitchigin in Compiler Development
polunin.ai
В целом борроу чекер не мешает а помогает. Практически всегда работает стратегия place * and & until rustc is happy.
Так что мифы про сложность борроу чекера сильно преувеличены.
Но при такой стратегии и производительность является мифом, увы. No free lunch. 😞
источник

p

polunin.ai in Compiler Development
Если борроу чекер пропустил твою программу и там нет неотлаженного unsafe ты можешь быть уверенным что у тебя программа не упадет в рантайме из-за Segfault или разыменования нулевого указателя, и не будет задержек GC по несколько секунд
источник