Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Holy Wars > Цэ vs LLVM


Автор: JoeUser 06.12.18, 16:55
Буэнос диас, амигос!


Наверное у всех прогеров, использующих язык программирования Цэ, на слуху избитое утверждение, а-ля "си - это высокоуровневый ассемблер". И таки да, сложно не согласиться. Все управляющие операторы легким взмахом руки можно перевести в небольшие ассебмлерные конструкции. Как говорится "иду я по полю с автоматом, никого не трогаю ... и вдруг из-за угла выезжает танк!". И на броне у него написано LLVM...

Согласно последним исследованиям британских ученых такие языки программирования как C++, Go, Haskell, Fortran, rust, Javascript, Ruby, C# уже переметнулись на "сторону врага" (LLVM). Самое интересное, так и Цэ тоже с ними!!!

Собственно, вопросы!

1) Как вы считаете, нужно ли язык Цэ лишить права называться "высокоуровневый ассемблер" за предательство?
2) Ну почему, ну почему LLVM, а не бэкэнд-прослойка в виде Цэ? Почему LLVM?!! :wall:

Общаемся аккуратно и по делу, название темы уже "прямо трИсет" :) модераторскую руку перенести тему в холивары.
Но она еще не там. И так хочется услышать сперва именно сишников. Понеслась.

Всем - счастья! :victory:

Автор: amk 06.12.18, 17:07
1) Не нужно. LLVM вполне себе низкоуровневый язык виртуальной машины а никак не "высокоуровневый ассемблер"
2) Потому что см. ответ на п. 1
И где можно почитать про этот Цэ?

Автор: korvin 06.12.18, 21:45
Цитата JoeUser @
Go

В смысле? У них свой компилятор.

Цитата JoeUser @
JavaScript

В смысле? JS интерпретируемый.

Цитата JoeUser @
Ruby

В смысле? Ruby интерпретируемый/компилируемый-в-байткод, давно есть, например, JRuby под JVM, хоть и мало кому нужный.

Цитата JoeUser @
C#

В смысле? C# компилируется в байт-код виртуальной машины dotNET, при чём тут LLVM?

Цитата JoeUser @
уже переметнулись на "сторону врага" (LLVM)

Врага чего?

Цитата JoeUser @
Ну почему, ну почему LLVM, а не бэкэнд-прослойка в виде Цэ?

А зачем бэкэнд-прослойка в виде Цэ?

Цитата JoeUser @
Почему LLVM?!

Потому что подошло.

Вообще не понимаю, из-за чего эта истерика?

Добавлено
Цитата JoeUser @
Все управляющие операторы легким взмахом руки можно перевести в небольшие ассебмлерные конструкции.

А всякие оптимизации кто делать будет? А в ассемблерные инструкции под какую архитектуру процессора? Что-то лёгкий взмах уже не такой лёгкий оказывается.

Автор: JoeUser 07.12.18, 01:02
Цитата amk @
И где можно почитать про этот Цэ?

Например тут.

Добавлено
Цитата korvin @
В смысле? У них свой компилятор.

Пока воттак. Про остальные ЯП прошу отнестись к гуглению более серьйозно! 8-)

Автор: korvin 07.12.18, 18:30
Цитата JoeUser @
Пока воттак

Как «вот так»? Это сторониий проект. Который, к тому же, судя по датам коммитов, умер 4 года назад. Официальный компилятор Go не использует LLVM.

Цитата JoeUser @
Про остальные ЯП прошу отнестись к гуглению более серьйозно!

Отнесись, в чём проблема?

Автор: Qraizer 07.12.18, 19:56
JoeUser, смотри на LLVM как на переносимый ассемблер. По сути так и есть, т.к. бэкенд-компайлер из LLVM в натив входит в любую компилирующую среду разработки, использующую LLVM как промежуточную платформу.

Автор: JoeUser 07.12.18, 20:32
Цитата Qraizer @
JoeUser, смотри на LLVM как на переносимый ассемблер.

Да, так оно и есть. Но почему оно живет, при живом ЦЭ?!

Автор: LMM 07.12.18, 21:35
Джо, отмодерась себя сам. Нахера холиварной х..нёй забивать тематику?

Автор: JoeUser 08.12.18, 01:22
LMM, хорошо, а теперь давай говори по теме :)

Автор: applegame 08.12.18, 06:18
А в чем собно холивар? Кто против кого?

Автор: amk 08.12.18, 07:48
Цитата JoeUser @
Например тут.
Я про сам язык, а не про обсуждение его использования в проектах, написанных на совсем другом языке.

Автор: JoeUser 09.12.18, 00:29
Цитата applegame @
А в чем собно холивар? Кто против кого?

Про нужность или ненужность LLVM. Есть же Цэ?!

Автор: D_KEY 09.12.18, 09:39
Разного уровня же вещи.
Простой пример. SPIR-V транслируется один в один и в обе стороны с LLVM. Для си такое вряд ли бы стало возможным. Можешь сравнить с встроенным C в open cl, как вариант.

Автор: negram 09.12.18, 14:12
ой мама. Набросай-ка jit на C, а потом рассказывай про ненужность LLVM.
LLVM -- фреймворк для построения компиляторов. C - компилируемый язык программирования, по-моему, они созданы друг для друга. И ещё много для чего

Автор: applegame 10.12.18, 05:40
Чота какой-то крайне унылый вброс. Как будто вбрасывающий сделал это от отчаяния, в попытке хоть как-то расшевелить форум.

Автор: LMM 10.12.18, 13:33
M

LLM, покайся! Не знаю, Борис ли ты - но ты непарв!

Автор: JoeUser 11.12.18, 16:17
Цитата applegame @
Чота какой-то крайне унылый вброс.

Ну што?!! >:( Вторая часть марлезонского балета, господа присяжные заседатели!

С вашего позволения - командовать парадом буду я (L) ...

Для начала разговора давайте освежим в памяти все аспекты LLVM по скромной ссылке из вики - это лежит тут. Чтобы ничего не убежало из нашего пристального взгляда, мы должны понимать, что любая глава из вышеуказанной ссыли имеет значение, (пусть) равное и (пусть) неоспоримое.

Итак ... читаем "LLVM (ранее Low Level Virtual Machine[5]) — универсальная система анализа, трансформации и оптимизации программ, реализующая виртуальную машину с RISC-подобными инструкциями". Да, действительно, когда-то, когда многие из спопящих заканчивали средние классы не мение средней школы, такие системы на базе RISC-технологии, как UltraSPARC - считались просто божеством тогдашних технологий. Я не ёрничаю, современный комп от интела, стоящий рядом в моей лабе имел целых!!! 16 Мегабайт оперативы. Я боюсь быть позорно неточным, в той лабе я поработал по переводу месяца три, но на слуху отложилось, что лаба тестировала некий симбиоз аппрататно-программного АЛУ на 64 RISC-процах. Для точночти - примерно 1993 год, тогда еще Институт Технической Кибернетики Академии Наук БССР (позже уже РБ). Исторический экскурс заканчиваем ...

Итак LLVM и подход-RISC

Чем же это было революционно в то время? Если грубо - упрощаем набор команд (не по количеству, а по скорости исполнения, по тактам), строим и оптимизируем кэширование, уже потом - строим предугадывание. Не, чо, все ровно!!! На то время модно и современно. LLVM это все патриотично впитал, нет базара!

А что сегодня?

А давно уже сегодня появилась тьма спецификаций типа SSE и иже с ней куча версий до сего дня. Стопэ, товарисчи, а туда ли мы идем??! Сперва была попытка все раздербанить на "сложение/вычитание", а тут все наоборот, штоле?!!! Какие-то скалярные типы (команды а ля CVTSI2SS, CVTSS2SI, CVTTSS2SI), упакованные типы (команды а-ля CVTPI2PS, CVTPS2PI, CVTTPS2PI), почему-то к кэшу дали доступ (команды а-ля MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE), что за бесовщина?! Омериканская холодная война в области IT?

Меня тут типа спрашивали

Цитата
ой мама. Набросай-ка jit на C, а потом рассказывай про ненужность LLVM

А в чем проблема? Сам LLVM на машинном коде писан? Все конструкции LLVM можно реализовать на Цэ. Только вот возникает вопрос ... Почему некоторая часть IT-комьюнити уже некоторое время задается вопросом "а не создать ли нам аппаратный Forth-процессор?". Я понимаю, лавэ, то, се, интересы жЫрных компаний ... Но тренд каков? Опять не в пользу RISC-подхода! Я человек не обремененный социальными обязательствами, могу дополнить - Цэ универсален! Можно и в системную область влезть, можно и в предметную и выше.

Цитата Qraizer @
JoeUser, смотри на LLVM как на переносимый ассемблер. По сути так и есть, т.к. бэкенд-компайлер из LLVM в натив входит в любую компилирующую среду разработки, использующую LLVM как промежуточную платформу.

Да, дружище - ты прав! На счет LLVM. Но и Си - "как на переносимый ассемблер". Не? А ведь он не на столько "высокоуровнее"))) Отношу тебя к стате в вики по LLVM (по типам тамошних данных, операциями с памятью, операциям) ... Ну вот скажи чо, это Цэ не может? (про реализацию компайлеров не говори - прокляну!)

С бестами и регардами,
JoeUser

.

Автор: D_KEY 11.12.18, 17:56
Давай знаешь что сделаем? Ты можешь озвучить один небольшой тезис(одно-два предложение)? И попробуем обсудить только его. Для начала.
А то тяжело.

Добавлено
Или давай рассмотрим один из аспектов llvm - готовая инфраструктура для backend компилятора. Чем активно пользуются. Один из примеров - kotlin native, который не стал городить собственный бэкенд, а получил его на халяву (ну почти).
user posted image

Автор: amk 11.12.18, 18:06
Цитата JoeUser @
Все конструкции LLVM можно реализовать на Цэ.
Любую инструкцию можно реализовать на любом языке. Причём Си тут не слишком и выделяется. Так что…
Цитата JoeUser @
Почему некоторая часть IT-комьюнити уже некоторое время задается вопросом "а не создать ли нам аппаратный Forth-процессор?".
Об аппаратном forth-процессоре речь ведётся с момента появления самого языка FORTH. А это 70-е годы - более 40 лет.
Точно так же велась речь о создании LISP-процессора.
И, внимание, оба были в своё время созданы. Тут вопрос в другом, почему сейчас про них все напрочь позабыли и поднимают вопрос о создании такого процессора снова?

Си получил такое звание - "переносимый ассемблер" - потому, что давал сравнимые с автокодами возможности по доступу к аппаратуре ЭВМ, и в то же время мог был достаточно эффективно реализован на всех существующих платформах.

Автор: JoeUser 11.12.18, 19:40
Цитата amk @
Любую инструкцию можно реализовать на любом языке.

Вот только не надо бездоказательных инсинуаций!!! Не видел драйвера (в виде "любых инструкций") на языке Джава.

Цитата amk @
Об аппаратном forth-процессоре речь ведётся с момента появления самого языка FORTH. А это 70-е годы - более 40 лет.
Точно так же велась речь о создании LISP-процессора.

Можно ссыль? Ни разу не слышал об аппаратном Форт-процессоре :)

БИНГО!

Цитата amk @
Си получил такое звание - "переносимый ассемблер"

А што же такое тогда LLVM? :lol:

D_KEY, давай на затравки просто скромно изменим на твоей схеме - заменим блок "LLVM оптимизатор" на схожий "Си оптимизатор"... Неужели синтаксис Си так убог по сравнению с синтаксисом LLVM??? :-?

Автор: D_KEY 11.12.18, 20:50
Цитата JoeUser @
D_KEY, давай на затравки просто скромно изменим на твоей схеме - заменим блок "LLVM оптимизатор" на схожий "Си оптимизатор"...

Си оптимизатор намного сложнее. А остальные части чем заменить? Вон в js как компилировать будешь? :D

Пример с opencl и spir-v проигнорировал?

Автор: korvin 11.12.18, 20:50
Цитата JoeUser @
Да, действительно, когда-то, когда многие из спопящих заканчивали средние классы не мение средней школы, такие системы на базе RISC-технологии, как UltraSPARC - считались просто божеством тогдашних технологий

В смысле «считались»? SPARC и сейчас вполне хорошие процы, не то что эти ваши meltdown'утые интели-шминтели.

А RISC и сейчас популярная архитектура:
Цитата
In the 21st century, the use of ARM architecture processors in smartphones and tablet computers such as the iPad and Android devices provided a wide user base for RISC-based systems. RISC processors are also used in supercomputers such as Summit, which, as of November 2018, is the world's fastest supercomputer as ranked by the TOP500 project.

https://cs.stanford.edu/people/eroberts/cou.../risc/risccisc/

Ну и Интел от чистого CISC давно перешёл к гибридной микроархитектуре с RISC'ом внутри.

Автор: applegame 12.12.18, 16:44
Вообще, какое-то странное противопоставление. С - это язык. LLVM - это нечто гораздо большее - это целая инфраструктура.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)