Comments 17
тоесть у вас программа работает на стеке? а если на сцене не чайник а меш с большим количеством вершин, что делать вы пишите без динамической памяти
не забывайте пожалуйста что синтаксис раста шаблонизирован как у С++ виртуальная таблица будет создана так или иначе
для примера можно глянуть в ассемблер, С, С++, Rust, в каждый даже можно прокинуть SIMD
перезаписываемый контейнер можно и в С++ создать
просто Раст даёт решение проверки в момент компиляции, и всё равно проходит через llvm, а возможно и через gcc
и не понятно что по производительности наваливает не наваливает, как используются ресурсы, память, процессор, gpu, фреймтайм, вы не показали диспетчер задач хотябы даже
и самое интересное как драйвер очищает память ) тоесть недалеко от С++ это на самом деле по моим прикидкам
можно ли так же как и С++ кинуть эту сборку в андроид например еще
а если код проходит через llvm и gcc и там гдето есть зависимости на них, как собирать это? тоесть я качаю make и собираю ради этой программы специальную версию gcc и clang и сам rust? тоже интересно
Весь код на чистом Rust, и нет зависимостей от С или С++, соответственно и от gcc и llvm. Конечно компилятор Rust где-то внутри содержит llvm, но устанавливать системный не нужно.
Чтобы собрать, нужно установить компилятор Rust, и запустить строку cargo r -r -p crt < scenes/utah.crt > out.ppm
(она скомпилирует и запустит код). И пожалуй всё на этом.
а есть возможность не устанавливая rustup и cargo собрать этот код и запустить, и тут начинаются нюансы согласны?
Нет редачить я тоже могу
Вы можете собрать код без Cargo. Для этого нужно для каждого .rs файла запускать компилятор rustc с набором ключей компиляции, на выходе будут обычные .o файлы. Далее можно их слинковать системным линкером, желательно lld.
Но я не понимаю, зачем? Cargo это просто система сборки, как CMake для С и С++.
Теоретически можно использовать Cargo без rustup, и указать путь к компилятору rustc через переменную окружения, или .cargo/config.toml файл. Тогда можно будет использовать системный пакет с компилятором rustc, во многих дистрибутивах он есть (Debian и Ubuntu например).
и самое интересное как драйвер очищает память ) тоесть недалеко от С++ это на самом деле по моим прикидкам
Это полностью софтварный трассировщик, пусть и многопоточный. Память освобождается с завершением процесса.
можно ли так же как и С++ кинуть эту сборку в андроид например еще
Учитывая, что библиотека вообще no_std, сборку можно хоть на микроконтроллер кинуть, если памяти хватит.
ну я беру код С++ вставляю в андроид студию, и программа стала на телефоне, а с растом что надо сделать
тоесть видео память не используется?
вы знаете мне чтото подсказывает что Rust просто спрятал эти вызовы своими реализациями
ни про IPC, ни про отрисовку на екран тут ни слова код только про Rust, где линк к библиотеке gdi? это внутренний стандарт винды gdi как вы нарисуете в окно минуя видео память?
...мы разбиваем программу на двоичный файл std и невыделяем[ая] библиотек[а] #![no_std]. ...
Небольшая опечатка
Забавно, что автор статьи - тот самый Алексей Кладов, но написал он ее в своем личном блоге по расту на английском, из-за чего ее пригласить переводить)
большая часть рассуждений о RAII вообще мимо кассы, потому что за всеми этими громкими заявлениями идет код, который просто аллоцирует память из массива фиксированного размера (абсолютная банальщина для любого достаточно низкоуровневого языка)
более того, RAII штука ортогональная к динамическому управлению памяти в том смысле, что вы можете аллоцировать память каким угодно образом, но это не отменяет момента, что объект должен быть уничтожен корректно, через вызов его деструктора
Rust в режиме «жесть»