169 похожих чатов

Может быть, кто-то укажет мне на позицию авторов языка относительно

следующего вопроса.

Почему ним компилируется именно в c и cpp? У трансляции в llvm ведь есть однозначно больше преимуществ. К примеру при разработке на си всегда нужно учитывать, что где-либо может вылезти UB. Или же если хочется оптимизировать какое-либо место в программе через SIMD, то в текущих компиляторах си это сделать во много раз менее удобно, чем в llvm.

28 ответов

21 просмотр

Позиция простая, компилятор С есть везде, а llvm - нет.

Bogdan-(Bogdan) Автор вопроса
Bogdan (Bogdan)
Но ведь nim компилируется и в objective-c 🤔

И что в этом такого? Я думаю что это один из самых неиспользуемых бэкендов генерации.

Bogdan-(Bogdan) Автор вопроса
Vladimir Berezenko
И что в этом такого? Я думаю что это один из самых...

Я не утверждаю, что в этом есть что-то "такое". С одной стороны вы говорите, что си выбрали ввиду вседоступности. А с другой стороны в nim есть бэкенд, который есть далеко не везде.

Bogdan (Bogdan)
Я не утверждаю, что в этом есть что-то "такое". С ...

Ну да, есть бэк который генерирует objc, но компилятор objectiveC есть много где. Другой вопрос, что этот бэк генерирует текст, а не llvm PR.

В LLVM IR нет UB?

Bogdan-(Bogdan) Автор вопроса
Gabben
В LLVM IR нет UB?

Есть. И баги там есть, порой даже куда более серьезные, чем в компиляторах си. Я про возможности оптимизаций.

Bogdan (Bogdan)
Есть. И баги там есть, порой даже куда более серье...

В конце концов, есть NLVM https://github.com/arnetheduck/nlvm

Bogdan-(Bogdan) Автор вопроса
Gabben
В конце концов, есть NLVM https://github.com/arne...

Глянул. Он перестал развиваться?

Возможность работы с С и С++ библиотеками (помимо того что уже упомянули).

Bogdan-(Bogdan) Автор вопроса
𝖍𝖆𝖝𝖘𝖈𝖗𝖆𝖒𝖕𝖊𝖗
Возможность работы с С и С++ библиотеками (помимо ...

В этом отношении мне импонирует язык zig. Там в целом, я считаю, весьма уникальный подход.

𝖍𝖆𝖝𝖘𝖈𝖗𝖆𝖒𝖕𝖊𝖗
Возможность работы с С и С++ библиотеками (помимо ...

Уточню: лёгкой работы, не требующей сложных конструкций а-ля java JNI.

не очень понял. почему в llvm simd проще чем в си?

Bogdan-(Bogdan) Автор вопроса
Alexander
не очень понял. почему в llvm simd проще чем в си?

Это субъектив. Мне не особо нравится пользлваться <immintrin.h> или же писать нечто подобное вручную. Лично для меня, в llvm многое из подобного выражается проще. Более того, такого же мнения разработчики языка zig. Он поддерживает целочисденные типы произвольной длины (огранияения есть) и выражается это именно в llvm.

Bogdan (Bogdan)
Это субъектив. Мне не особо нравится пользлваться ...

я, признаться не очень понимаю, я понимаю, что чисто теоретически, можно что-то такое подсказать в llvm, что он соптимизирует лучше, но 1) это должно быть доступно только на уровне нима 2) это нельзя перетащить в c-код, чтобы там тоже самое указать. Я не уверен что такие случае вообще бывают, я понимаю, может в каких-то более других языках, но врядли это применимо для nim/rust и подобного

Bogdan-(Bogdan) Автор вопроса
Alexander
я, признаться не очень понимаю, я понимаю, что чис...

Да в целом можно. Но, может быть, многое будет зависеть от атрибутов конкретного компилятора?

Bogdan (Bogdan)
Да в целом можно. Но, может быть, многое будет зав...

как писали в одном чате, надо понимать - что: 1) llvm это то, что целиком и полностью заточено под c/cxx 2) то что на неё лезут других платформы - не сильно меняет курса llvm по тому на что он заточен/оттимизирован 3) расту остаётся только пытаться можно больше походить на c/cxx при генерации ?хинтов? для llvm, потому что пункт 1, никаких своих особенных оптимизаций раст туда не приносит, ну или совсем минимум

Alexander
как писали в одном чате, надо понимать - что: 1) l...

Вот тут из пп.1 и 3 сразу понятно что генерация С-кода в ним это эпик вин. :)

Bogdan-(Bogdan) Автор вопроса
Alexander
как писали в одном чате, надо понимать - что: 1) l...

Не знаю, возможно вы и правы. Не стоит забывать, что с++ - сборная солянка из нескольких языков. Мой опыт говорит об обратном, не берусь судить.

Bogdan (Bogdan)
Не знаю, возможно вы и правы. Не стоит забывать, ч...

ИМХО практически любой из известных на текущий момент языков - сборная солянка из других так или иначе.

Bogdan-(Bogdan) Автор вопроса
Vladimir Berezenko
ИМХО практически любой из известных на текущий мом...

Я немного о другом. C++ - это как минимум 3 языка, собранных в один. Язык препроцессора си, улучшенная версия си с классами, более-менне декларативный язык, который транслируется в предыдущий. Ресурс вроде cppinsights.io - тому подтверждение.

Bogdan (Bogdan)
Не знаю, возможно вы и правы. Не стоит забывать, ч...

если разрешите - подсыплю соли - раст это сборная солянка из unsafe и просто самых худших макросов из тех что было, на этом фоне мне даже макросы плюсов уже не кажутся плохими. Анекдот про мужика и козу, которому посоветовали купить козу для счастья, а купив, он понял. действительно - я теперь понял - я счастливым был .. до того как козу купил.

Bogdan (Bogdan)
Я немного о другом. C++ - это как минимум 3 языка,...

Э... шта? С++ это просто улучшеный С с генериками, нормальным ООП и прочими классными ништяками. Никакого транслируется там нет. Про декларативный вообще не понял. Ну и конечно-же препроцессор там и многое взято из С, что неудивительно.

Bogdan-(Bogdan) Автор вопроса
Alexander
если разрешите - подсыплю соли - раст это сборная ...

Ну, решение сделать для макросов отдельный dsl - это скорее про тараканов в головах разработчиков А без unsafe в целом никуда.

Bogdan-(Bogdan) Автор вопроса
Vladimir Berezenko
Э... шта? С++ это просто улучшеный С с генериками,...

Ну, во-первых шаблоны, а не дженерики. Во-вторых про ооп я сказал, что это улучшенный си с классами. Транслируется. Те же шаблоны легко раскрываются до опредеденного уровня вложенности. Вы можете попросить компилятор сделать это. Те же новомодные концепты часто можно представить в виде сахара над std::enable_if. Те же лямбды раскрываются в struct-классы с переопределенным operator()

Bogdan (Bogdan)
Ну, во-первых шаблоны, а не дженерики. Во-вторых п...

Шаблоны это те-же генерики, только в профиль, отличий мизер. Улучшенный, но написаный заново, при этом реализованый так, чтобы легко интегрировать тот-же С код. Шаблоны раскрываются на уровне AST и никуда не транслируются. Концепты можно представлять как угодно, но реализованы они как, думаю что не как куча шаблонов с enable_if и уж тем-более в них не транслируются. Про лямбды не знаю, но терзают меня суровые сомнения, особенно с учётом захватов и прочего. С и С++ ABI разные в принципе и влёгкую слинковать С и С++ код не получится. То что С++ поддерживает компиляцию С кода не означает при этом что С++ куда-то там внутри транслируется в С.

Bogdan-(Bogdan) Автор вопроса
Vladimir Berezenko
Шаблоны это те-же генерики, только в профиль, отли...

Не согласшусь, шаблоны более гибки Нет, скорее си может быть внутренним языком для си++. В последнем и типизация построже будет, да и не весь код на си полностью совместим с си++. Я и не говорил, что транслируется в си. В си-подобный язык да. Любая лямбда будет транслирована в класс. Выше скинул сайт, prove it yourself. >влегкую не получится Очень часто бывает достаточно #ifdef __cplusplus extern "C" { #endif

Bogdan (Bogdan)
Не согласшусь, шаблоны более гибки Нет, скорее си...

Дженерики это название шаблонов в Жабе. Отличия минимальны. С не является внутренним языком для С++. Там вообще нет никакого "внутреннего" языка. С++ никуда не транслируется, кроме как в AST и далее в IR компилятора. Я по кишкам полазил что LLVM, что GCC, что других компиляторов. Слинковать С и С++ код нельзя просто добавив явное использование ABI C. Точнее так: чисо функции - можно, всё что касается чего-либо более сложного - можно сразу забыть.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта