Size: a a a

Compiler Development

2021 January 03

M

MaxGraey in Compiler Development
Roman na
Это ничего не меняет. Никому wasm как таковой ненужен, поэтому пошли туда, где нету конкуренции и нету вопросов. Это всё так же находится в рамках моей логики. К тому же, про какой-то "бек для раста" говорил не я.

И да, он стал им задним числом.
Серьездно?) А вы вообще в курсе кто сейчас спонсирует разработку wasmtime, bytecode alliance и Rust-компилятор в придачу, а так же lucet?
источник

Rn

Roman na in Compiler Development
MaxGraey
То есть cranelift это не бекенд аналогичный LLVM? Или что? Вообще овет звучал как отрицание того, что cranelift это middleend. А этот ваш комментарий я не очень понимаю. Что вы пытаетесь оспорить или дополнить?
llvm не является бекендом. Аналогичным llvm он не является, причины я назвал выше. а) он целиком и полностью его повторяет, потому как раст завязан на llvm полностью. б) он неконкурентоспособен, потому как не может генерировать что-то, кроме откровенного мусора. Если бы llvm генериовал подобный мусор - он никому бы не был нужен.
источник

Rn

Roman na in Compiler Development
MaxGraey
Серьездно?) А вы вообще в курсе кто сейчас спонсирует разработку wasmtime, bytecode alliance и Rust-компилятор в придачу, а так же lucet?
Какая разница кто там его спонсирует? Что это меняет?
источник

EP

Egor Pugin in Compiler Development
MaxGraey
Серьездно?) А вы вообще в курсе кто сейчас спонсирует разработку wasmtime, bytecode alliance и Rust-компилятор в придачу, а так же lucet?
нет, кто?
источник

M

MaxGraey in Compiler Development
Roman na
llvm не является бекендом. Аналогичным llvm он не является, причины я назвал выше. а) он целиком и полностью его повторяет, потому как раст завязан на llvm полностью. б) он неконкурентоспособен, потому как не может генерировать что-то, кроме откровенного мусора. Если бы llvm генериовал подобный мусор - он никому бы не был нужен.
Нет и нет. Rust абсолюно не завязан на LLVM=) Rust завязан на MIR, в котором происходят все проверки в том чесле и borrow checking. Вместо того что бы спорить, хотя бы изучите пайплайн раста
источник

Rn

Roman na in Compiler Development
Roman na
llvm не является бекендом. Аналогичным llvm он не является, причины я назвал выше. а) он целиком и полностью его повторяет, потому как раст завязан на llvm полностью. б) он неконкурентоспособен, потому как не может генерировать что-то, кроме откровенного мусора. Если бы llvm генериовал подобный мусор - он никому бы не был нужен.
И это всё с учётом того, что llvm это уникальный проект. А кранлифт - это просто перепаста на расте. Т.е. если llvm нужно было что-то придумывать, то вот его перепасте придумывать уже ничего ненужно. Но даже в этой ситуации перепаста не может догнать оригинал ни в каком виде
источник

Rn

Roman na in Compiler Development
MaxGraey
Нет и нет. Rust абсолюно не завязан на LLVM=) Rust завязан на MIR, в котором происходят все проверки в том чесле и borrow checking. Вместо того что бы спорить, хотя бы изучите пайплайн раста
Так, хорошо. Покажи мне атомики в расте
источник

M

MaxGraey in Compiler Development
Вообще в расте есть HIR и MIR и вот они очень тестно завязаны на модели и семантике раста и его модели. А когда дело доходит до кодогенерации, там уцже ничего не остается такого что бы Cranelift не справиться. Собственно так и происходит. Сейчас можно выбирать чем генерировать LLVM-м или Cranelift (сейчас его нужно включать отдельно, так как это экспериментальная кодогенерация)
источник

M

MaxGraey in Compiler Development
Roman na
Так, хорошо. Покажи мне атомики в расте
При чем здесь атомики? Или вы думаете cranelift не поддерживает интринсики?)
источник

Rn

Roman na in Compiler Development
MaxGraey
Вообще в расте есть HIR и MIR и вот они очень тестно завязаны на модели и семантике раста и его модели. А когда дело доходит до кодогенерации, там уцже ничего не остается такого что бы Cranelift не справиться. Собственно так и происходит. Сейчас можно выбирать чем генерировать LLVM-м или Cranelift (сейчас его нужно включать отдельно, так как это экспериментальная кодогенерация)
Ещё раз, кранлифт - это перепаста llvm. Он не предлагает своей модели исполнения.
источник

Rn

Roman na in Compiler Development
MaxGraey
При чем здесь атомики? Или вы думаете cranelift не поддерживает интринсики?)
ещё раз, покажи атомики раста. Они же не из llvm и не завязаны на нём. Вот ты сможешь их показать.
источник

M

MaxGraey in Compiler Development
Roman na
ещё раз, покажи атомики раста. Они же не из llvm и не завязаны на нём. Вот ты сможешь их показать.
Что такое атомики? =) Может мы разное понимаем под этим?
источник

Rn

Roman na in Compiler Development
MaxGraey
Что такое атомики? =) Может мы разное понимаем под этим?
Ну говорить о моделях памяти/исполнения/многопоточности с пользователями раста сложно. Поэтому мне нравится пример с атомиками, потому как он сразу завязан и на модель памяти и на модель многопоточности.

А далее всё просто. Если раст не завязан на это - оно у него своё. Если завязан и всё так, как сказал я - оно будет завязано, т.е. использоваться чужое
источник

Rn

Roman na in Compiler Development
к тому же здесь уже всё ясно, когда речь зашла за интринсики. Ведь для раста всё - это и нтринсики, которые даются окружением(llvm). В языка же полноценных это не так, они определяют то, как работают эти интринсики и они создают те модели, которые они и реализуют
источник

Rn

Roman na in Compiler Development
поэтому такая вот история. llvm имплементирует модель памяти/многопоточности/исполнения от С/С++, для которых он и создан. Всё остальные скрипитовые языки прикрученные к нему - не обладают этими свойствами и не могут диктовать llvm что-то,  они обязана следовать и обязаны быть завязаны
источник

Rn

Roman na in Compiler Development
к тому же подобные языки попросту не способны на создание чего-то. Им всегда нужно готовое окружение, vm - среда исполнения. Вот llvm и даёт такую среду. Это была одна из идей. Людям, конечно же, сложно понять что vm это не обязательно жава, поэтому этим пользоваться перестали
источник

M

MaxGraey in Compiler Development
Roman na
Ну говорить о моделях памяти/исполнения/многопоточности с пользователями раста сложно. Поэтому мне нравится пример с атомиками, потому как он сразу завязан и на модель памяти и на модель многопоточности.

А далее всё просто. Если раст не завязан на это - оно у него своё. Если завязан и всё так, как сказал я - оно будет завязано, т.е. использоваться чужое
атомики это не модель) Это самые примитыивные операции поддерживаемые на уровне инструкций CPU для определенных архитектур, вроде RWM операций, cmpxchg и т д, на базе них строятся уже более высокие примитивы синхронизации - CAS, SpinLock и т д, на базе этих - Futex, Mutex, семафоры и т д. Потом могут идти еще более высокоуровневые такие как Actor model, STM и т д. И вот это уже можно сказать модели

Теперь вопрос. При чем здесь атомики?)
источник

Rn

Roman na in Compiler Development
MaxGraey
атомики это не модель) Это самые примитыивные операции поддерживаемые на уровне инструкций CPU для определенных архитектур, вроде RWM операций, cmpxchg и т д, на базе них строятся уже более высокие примитивы синхронизации - CAS, SpinLock и т д, на базе этих - Futex, Mutex, семафоры и т д. Потом могут идти еще более высокоуровневые такие как Actor model, STM и т д. И вот это уже можно сказать модели

Теперь вопрос. При чем здесь атомики?)
Нет, атомики это модель. Я говорю про конкретную реализацию. Этот уровень инструкций нужно обобщить, формализовать и прочее.
источник

M

MaxGraey in Compiler Development
Roman na
Нет, атомики это модель. Я говорю про конкретную реализацию. Этот уровень инструкций нужно обобщить, формализовать и прочее.
Еще раз повторюсь в 10й раз. Как это относиться к «llvm не является бекендом» или «Cranelift это middleend»?
источник

M

MaxGraey in Compiler Development
Я вообще уже не понимаю что мы здесь обсуждаем)
источник