На волне ажиотажа вокруг новых карточек от Nvidia с поддержкой RTX, я, сканируя хабр в поисках интересных статей, с удивлением обнаружил, что такая тема, как трассировка путей, здесь практически не освещена. "Так дело не пойдет" - подумал я и решил, что неплохо бы сделать что-нибудь небольшое на эту тему, да и так, чтоб другим полезно было. Тут как кстати API собственного движка нужно было протестировать, поэтому решил: запилю-ка я свой простенький path-tracer. Что же из этого вышло вы думаю уже догадались по превью к данной статье.
Рубрика «Программирование» - 130
Пишем простой Path Tracer на старом добром GLSL
2020-12-19 в 12:38, admin, рубрики: ПрограммированиеКоды ошибок — это гораздо медленнее, чем исключения
2020-12-18 в 13:22, admin, рубрики: c++, ruvds_переводы, Блог компании RUVDS.com, отладка, Программирование, разработка, Тестирование IT-системНа современных 64-битных PC-архитектурах использование C++-исключений означает всего лишь добавление к функциям недостижимого кода с вызовами деструктора и ухудшение производительность менее чем на 1%. Такие небольшие ухудшения производительности сложно даже измерить. Обработка редких ошибок с использованием возвращаемых значений требует дополнительных операций ветвления, которые, в реалистичных сценариях, замедляют программы примерно на 5%. Такой подход, кроме того, менее удобен, чем использование исключений. Если выбрасывается исключение, то на «раскрутку» каждого кадра стека тратится примерно 2 мкс.
C считается самым быстрым языком программирования. В C++ есть возможности, которые лишь повышают удобство работы, не влияя на производительность, в сравнении с C, и возможности, которые на производительность влияют. Эти возможности очень помогают в деле улучшения качества кода. В результате ими, несмотря ни на что, достаточно часто пользуются. Полиморфизм времени выполнения — это буквально вездесущая возможность, а вот исключения распространены меньше.
Читать полностью »
Как самые медленные компьютерные программы проливают свет на фундаментальные ограничения математики
2020-12-18 в 10:13, admin, рубрики: skillfactory, Блог компании SkillFactory, математика, Программирование, Читальный залКак правило, программисты хотят минимизировать время выполнения кода. Но в 1962 году венгерский математик Тибор Радо поставил противоположную задачу. Он задался вопросом: как долго может выполняться простая компьютерная программа, прежде чем она закончит работу? Радо назвал эти максимально неэффективные, но все же функциональные программы «усердными бобрами».
Поиск таких программ — жутко отвлекающая головоломка для программистов и других любителей математики с тех пор, как она была обнародована в колонке Computer Recreations в журнале Scientific American в 1984 году. Но за последние несколько лет игра в усердного бобра, как её называют, сама по себе стала объектом изучения, поскольку она связана с самыми возвышенными понятиями и открытыми проблемами в математике.
Цель игры «Усердный бобёр» — найти компьютерную программу, которая работает максимально долго. Её поиски удивительным образом связаны с некоторыми глубочайшими вопросами и понятиями в математике.

Модули в JavaScript
2020-12-17 в 8:00, admin, рубрики: javascript, Блог компании ДомКлик, модули javascript, Программирование
Фронтенд-разработчики каждый день используют модули. Это может быть функция из локального файла или сторонняя библиотека из node_modules. Сегодня я кратко расскажу об основных модульных системах в JavaScript и некоторых нюансах их использования.
Избавляемся от «мистических» строк в системе реактивного связывания на Unity
2020-12-17 в 7:14, admin, рубрики: Gamedev, reactive programming, unity, unity3d, Блог компании Pixonic, валидация, оптимизация, Программирование, разработка игр, реактивное программирование, реактивностьЛюбая система, которая часто используется в проекте, со временем обречена на эволюцию. Так случилось и с нашей системой реактивного связывания reactive bindings.
Что это за система? Она позволяет нам связывать данные на префабе с данными в коде. У нас есть ViewModel, лежащая на префабе. В ней есть некие ключи с разными типами. Соответственно, вся остальная логика, которая у нас привязана к UI, привязана к этим ключам и их изменениям. То есть, если у нас есть некая логическая переменная, меняя ее в коде, мы можем менять любые состояния UI автоматически.

Использование reactive bindings принесло нам как множество новых возможностей, так и ряд зависимостей. Для связи переменных кода и ViewModel, лежащей на префабе, нам необходимо было соответствие строковых имен. Это приводило к тому, что в результате неосторожной правки префаба или ошибки мерджа могли быть утеряны какие-то из этих связей, а ошибка замечалась уже на этапе поздних тестов в виде отвалившегося UI-функционала.
Росла частота использования системы — росло число подобных сложностей.
Два основных неудобства, с которыми мы столкнулись:
- Строковые ключи в коде;
- Нет проверки соответствия ключей в коде и ключей в модели.
Эта статья — о том, как мы дополнили систему и тем самым закрыли эти потребности.
Читать полностью »
9 тяжелых уроков, которые я усвоил за 18 лет разработки
2020-12-16 в 14:17, admin, рубрики: skillfactory, Блог компании SkillFactory, карьера, Карьера в IT-индустрии, карьера программиста, лпыь, Программирование, Читальный залЯ начал писать код в моей комнате родительского дома, когда мне было 14. Помню, как читал всё, что мог достать с помощью своего медленного соединения с Интернетом. Затем, когда мне было 20, я подписал первый контракт, став веб-разработчиком и изучая PHP и JavaScript. Мне потребовалось 18 лет, чтобы осознать, что кодинг — только часть профессии. Заметьте, я по-прежнему наслаждаюсь кодингом. Не думаю, что когда-нибудь перестану программировать, даже если это станет просто моим хобби, но есть нечто гораздо большее, чем код. Вот почему я хочу поделиться своим опытом. Я думаю, что иногда разработчики усваивают эти уроки слишком поздно.

«Чертовски глупое решение»: история появления языка C
2020-12-16 в 7:42, admin, рубрики: C, C#, c++, история создания, Программирование
Как ни сложно в это поверить, C не родился в виде истрёпанного руководства в бумажной обложке.
В том или ином виде, язык C повлиял на формирование практически каждого языка программирования, разработанного с 1980-х. Некоторые языки наподобие C++, C# и Objective C должны были стать прямыми наследниками C, а другие просто переняли и адаптировали его синтаксис. Программист, перешедший с Java, PHP, Ruby, Python или Perl, почти не испытает сложностей с пониманием простых программ на C, и в этом смысле C можно воспринимать как lingua franca программистов.
Однако C не возник из ниоткуда как единый монолит программирования. История C начинается в Англии, с коллеги Алана Тьюринга и программы, игравшей в шашки.
Читать полностью »
Бенчмарки Apple M1 в реальной разработке
2020-12-15 в 15:37, admin, рубрики: apple m1, бенчмарки, Компьютерное железо, Программирование, Процессоры
Я очень впечатлён результатами тестов Apple M1. Это действительно быстрый и мощный чип в важных повседневных задачах, таких как просмотр веб-страниц, работа с приложениями x86 и инструментами разработчика. Да, экосистема ещё не развита, и это может занять некоторое время, но эта работа стоит того, с учётом феноменальной производительности M1.
М1 действительно быстрый, и многие бенчмарки доказали его эффективность. Однако мне было любопытно посмотреть на производительность языков программирования. Поэтому я решил протестировать чип в самых популярных рабочих нагрузках в разработке.
Следует иметь в виду, что некоторые наборы тестов нагружают память, другие зависят от производительности CPU, а в некоторых задачах нет преимущества от многоядерной обработки из-за накладных расходов или сложности использования многопоточности. Это означает, что M1 может показать лучший результат, чем десктопный Ryzen даже с меньшим количеством ядер. Самое главное, что я сосредоточился на тестах реальных задач разработки, а не на синтетических тестах продакшна.
Читать полностью »

