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

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

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

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

28 ответов

6 просмотров

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

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

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

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

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

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

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

В LLVM IR нет UB?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Карта сайта