После трёх лет разработки представлен исследовательский проект Vcc (Vulkan Clang Compiler), нацеленный на создание компилятора, способного транслировать код на языке С++ в представление, выполняемое на GPU, поддерживающих графический API Vulkan. В отличие от моделей программирования GPU на базе языков шейдеров GLSL и HLSL в Vcc развивается идея полного отказа от использования отдельных языков шейдеров и предоставляется возможность прямой компиляции кода C/C++ для Vulkan. Наработки проекта распространяются под лицензией MIT...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=60413
> В Vcc применяются штатные возможности C/C++ для управления ходом выполнения программы, включая возможность использования оператора "goto".Шах и мат хейтерам goto !!!!
Железно-деревянные грабли, разбросанные по земле, заменили на грабли из композитных материалов, но они все так же больно лупят по бошкам.
Причём ещё и с неправильной лицензией:
> Наработки проекта распространяются под лицензией MITа не GPL как у GCC (с которого название сплагиатили) - это чтобы корпорациям было легче тырить ваши труды
>возможность использования оператора "goto"Возможность, но не обязательность.
goto hell
Не кричи. В сишке тоже есть goto, но никто в здравом уме не будет его использовать.
Это же прямой способ выйти или войти из чего-то. Очень полезно.
А заодно и прекрасный индикатор б#длокода и/или плохо продуманной архитектуры.
> А заодно и прекрасный индикатор б#длокода и/или плохо продуманной архитектуры.Сразу видно, что кто-то не открывал Кнута ни разу в жизни, а о недостатках goto знает только от "IT-инфлюенсеров". Разумеется, что поводов применять goto в 21 веке не так уж много (а чаще их вообще нет), но и заявлять вещи, подобные вашим, может только сам быдлокодер с уровнем знаний "где-то в инете или в универе сказали, что goto - это плохо и ведёт к спагетти-коду" (типичное заявление о goto), в то время как к ещё бОльшему спагетти-коду ведёт банальное ООП в кривых руках и мозгах.
Вот на универ бочку катить не нужно — в моем достаточно хорошо объяснили и научили думать когда и как что применять, включая оператор goto. Это вот как-раз ребятки не желающие учиться и на готовых ответах от своих коллег желающие выглядеть перед начальством сильно умными обычно говорят то что не понимают сами. Где-то что-то слышали, а почему тогда в каком-то конкретном решении именно так поступили в целом не знают. Ох, я много раз видел таких синьерчиков — зарплату получают больше, все значит начинают права качать. Самодуры!
А вы ассемблер я так понимаю не изучали?
Ну и причем тут Ассемблер?
Людям в универах и лорах скажут, что goto плохо, а вот почему плохо - не скажут. Вообще, пока за пределы функции с ним не вылезаешь, то никто и пикнуть не должен о том, что оно плохо.
Вы, мягко говоря, несёте невероятну чушь, вам не стыдно? Как такая *7*?*? может прийти в голову?На кой чёрт вам goto?
с goto и внутри функции можно дров наломать
идиот использующий goto - может использовать его как переход из одной функции вообще в другую. В результате получается такой ахтунг - что никто и никогда отладить не сможет на предмет утечек или двойного/тройного освобождения памяти.
Кто-то решил переизобрести OpenGL и OpenCL?
кто-то не видит разницы между api графики и языком шейдеров
> Кто-то решил переизобрести OpenGLЭто вообще не конкурент вулкану.
> и OpenCL?
А он сугубо про вычисления... вулкан забавен тем что там можно и графику, и вычисления, сразу.
>C++
>код — на C
C/C++
C++/C
неправильно.
потому что переменные сокращаются: С/C++ == (С/C)++ == 1++ == 2.
поэтому "код написан на C/C++" == "код написан на 2".
Как ты будешь инкрементировать литерал?
следующая буква. А если последняя, то будет AA. AA++ = AB, AB++ = AC и т. д.
ты разве ничего не слышал про приоритет операций ?
https://ru.wikipedia.org/wiki/Приоритет_операции
С/C++ == С/(C++)
отсюда следует что выражение для С/(C++) будет всегда меньше единицы при положительном С
С/(C++) < 1
Вы забываете, что ++ по умолчанию является int-овым оператором, то есть мы тут имеем дело исключительно с целочисленными операциями, поэтому:С/C++ = C/(C++) = 1/(1++) = 1/2 = 0
Всегда тождественный нуль!
Поэтому "код написан на C/C++" следует читать как "код написан на 0".
Неправда, тут UB
По стандарту, между двумя последовательными "точками последовательности" (sequence points) значение изменяемого объекта (например, переменной) не должно быть изменено более одного раза, а также не должно быть считано, за исключением случаев, когда это считывание предназначено для определения значения, которое должно быть записано (как в выражении C = C + 1).Соответственно в данном месте компилятор имеет право выплюнуть ub2 и будет сегфолт.
> Соответственно в данном месте компилятор имеет право выплюнуть ub2 и будет сегфолт.Имеет право, но может и не делать)
Тут уже зависит от разработчика компилятора.Т.е это тот самый знаменитый Стандарт СИ!
Который сводится к "Колбаса состоит из мяся и добавок. Происхождение мяса и вид добавок (специи, шпик, туал.бумага, овно) определяет компилятор рецепта"
И за который так ценят дыряшку любители CVE.
> Имеет право, но может и не делать)
> Тут уже зависит от разработчика компилятора.Но полагаться на конкретное поведение нельзя, компилятор имеет право на всё в данном случае, а соответственно даже если C/C++ где-то и отрабатывает как человек ожидает (pun intended), то это всё равно остаётся UB и говном.
косинус/синус=ко
)
> косинус/синус=ко
> )поздравляю с открытием, коллега
из этого прямо следует, что тангенс всегда тождественен единице, ибо:косинус/синус = ко = котангенс
а также становится понятно, что
синус/косинус = 1/ко = тангенс = 1
и следовательно получаем, что ко = 1
наконец-то мы знаем, чему равна константа ко!
>наконец-то мы знаем, чему равна константа ко!Если ко=1, то все углы в мире = 45 градусам (n * pi/4)
ко - это не константа, а функция: ко = 1/x )
Как много нам открытий чудных...
Ты дурачек чтоли? Как это ты так скобки выставил? А тем более в равенство все вписал?Предположим С=1
С/С++ = 1/2; (C/C)++ = 2;Мда, математическая грамотность языка программирования у недопрограммистов на высоте.
А зачем усложнять, если можно упростить?
Не увидел в приведённом примере раскрытия потанцевала c++. Приведённый код практически идентичен коду на обычном языке шейдеров.
> потанцевалаВ следующий раз заходи на OpenNet по-трезвому.
Не, это специально так написано. Видел мемы про "раскрытие потанцевала" в консолесрачах ещё давно.
> по-трезвомуЛови нюфага!
А не нужно. Нужна скорость.
Скорость за счёт аппаратной реализации параллельных матопераций в GPU, а не за счёт конструкций языка.
А чем оно лучше/хуже rust-gpu, который уже давно есть и работает?
> А чем оно лучше/хуже rust-gpuЛучше тем, что это C и C++, а не Rust.
То есть примерно ничем. По твоим словам. Хотя оно, например, поддерживает Windows XP. Не то, чтоб прям что-то нужное, но ситуативная фича надо полагать.Полагаю, самый существенный минус - весьма скудная документация. Сложно определить, что именно будет интересными фичами, если про них даже прочитать негде. У rust-gpu есть доки разные и сообщество. Например списки, чего они сделали/недоделали с точки зрения SPIR-V https://github.com/EmbarkStudios/rust-gpu/issues/383
Да всем плевать, иди проповедуй в другом месте.
И хуже тем, что это C и C++, а не Rust.
Минусы будут?
Ищущий да найдёт.
> Ищущий да найдёт.Имещий да покажет
1) Зачем тебе rust в шейдерах?
2) Зачем тебе rust?
1) Лично мне не нужен, мне wgpu-rs достаточно для моих скромных задач.
2) Я код на нём иногда пишу. Перешёл на оный с гошечки и крестов.Гошечка юзабельна только для вебсерверов, хотя и неплоха в этом. Но мне нужны генерики, которых тогда не было, да и сейчас.
Кресты (в отличии от Няшного Си, который подкупает своей простотой) слишком неудобны для реального использования. Любая многопоточность - боль (а мне нужна). Нормальной инфраструктуры нет. Компилятор медленный. Все пишут на каком-то своём диалекте. Управления зависимостями нет.
Все неосиляторы С++ так сначала пишут. А ты попробуй попрограммировать на нем пару годиков, тогда поймешь его мощь и выразительную силу.
В моём понимании "попробовать язык" это как раз попрограммировать на нём пару годиков.Проблема в том, что кресты невозможно как-то освоить за эти пару годиков. Собственно у меня нет желания тратить всю жизнь на один единственный ЯП. Все практически полезные фичи, которые есть в крестах так или иначе покрываются растом. С другой стороны у крестов нет концепции лайвтаймов и в целом штуки, так или иначе завязанные на многопоточку это боль в крестах. А для меня это важно, соответственно переход от ржавого к крестам для меня будет даугрейдом.
Получается, что да. C++ я не осилил, но при этом ничего не потерял, только приобрёл.
От повторения слова "халва", во рту слаще не станет. Я неосиялтор, но это звучит гордо! Неосиляторы превосходят всех остальных! Все завидуют неосиляторам, потому что чем больше они неосиливют - тем больше приобретают!
Кресты для осиливания, ржавый для программирования. Получается так с твоих слов
Может Rust и не лучше Си, но уж точно лучше С++
Странный вопрос.
> 2) Зачем тебе rust?Язык ядра линукс, в отличии от C++.
Но который лучше чем С (тк его взяли в ядро на замену сишки).> 1) Зачем тебе rust в шейдерах?
А почему бы и нет)?
Слишком громко сказано, учитывая сколько кода rust в ядре и что он по умолчанию вообще отключен и даже не требует зависимости от rust. А так же то, что C - это подмножество C++.
Нет, уже давно не так. Это скорее два частично пересекающихся подмножества, т.к. есть валидный сишный код, который не скомпилится как с++ и наоборот.
https://www.geeksforgeeks.org/write-a-c-program-that-wont-co.../
Это никогда не было так (пример с `int new = 5;` этак и в 1985 должен не работать) но на практике это более-менее так с точностью до процента библиотек, не собирающихся плюсовым компилятором.К тому же нет постоянной тенденции к расхождению, точнее, к выходу за подмножество C++. Вот в C++20 добавили недо-сишные designated initializers и часть C перестала выходить за подмножество C++.
С++ создавался изначально как доработка С, но вырос самостоятельным языком и пошёл своим путём. Хотя до сих пор есть проекты, где пытаются писать код, способный компилироваться в обоих языках (психи).
>rust-gpu
>Note: This project is still heavily in development and is at an early stage.Этим как бы все сказано. Обычная ситуация для ржавых проектов - вечная альфа-версия.
То ли дело это поделие) Прям завершенный релиз-кандидат))
"Vcc - the Vulkan Clang Compiler, is a proof-of-concept C and C++ compiler"
Это вообще proof-of-concept.
Если это будет переносимо на уровне собранных бинарников - я обеими руками за.
Наверное, только между одинаковыми чипами GPU.
Компилируется в SPIR-V, так что должно по идее.
Как всё сложно. Почему бы просто не компилировать из LLVM в машинный код GPU?
> Как всё сложно. Почему бы просто не компилировать из LLVM в машинный код GPU?Которого именно их GPU для начала, например?
Ну хотя бы в наиболее популярную архитектуру.
Так они даже у одного производителя разных моделей не обязаны быть двоичносовместимыми.
Компилировал LLVMом в r600 OpenCL-ядро. При задействовании комп вис намертво.
очередной велосипед?
Да! А ты что против?
Может ты еще скажешь, что 100500 разных DE и дистрибутивов линкуса это тоже ненужно?
Так, тебя еретика, тут быстренько анафеме придадут!
регулярно тут на попеннете это говорю))на диванную инквизицию пох
Вспомнился один древний знакомый, который ещё лет так 20 назад негодовал: "Почему всем так не нравится goto? Это же простой JMP".
Потому, что ЯВУ не ассемблер. Даже и Сишка.
> Почему всем так не нравится goto? Это же простой JMPНу не совсем. JMP позволяет прыгнуть по регистру, а в него ты можешь заранее вычислить то, что тебе нужно. Так что goto -- это частный случай JMP, а именно -- прыжок по фиксированному адресу.
Кстати, а setjmp/longjmp поддерживаются?