В этой статье я со своих позиций Senior Software Architect и Security Champion в микроядерной операционной системе KasperskyOS рассмотрю кейсы-ловушки, в которые можно попасть практически в любом из стандартов, и покажу, что меняется в С++20/23/26, — уменьшается ли количество кейсов с неопределенным поведением, и становится ли С++ безопаснее.
Рубрика «Компиляторы»
Опасность устарела: несколько важных нюансов в новых стандартах C++
2024-06-27 в 14:17, admin, рубрики: C, c++, C++20, cybersecurity, LLVM, qt, stm32, undefined behavior, безопасность, информационная безопасность, кибератаки, кибербезопасность, компилятор, Компиляторы, Программирование, разработка, Си, системное программирование, статический анализ кода, уязвимости, языки программированияТворим дичь с помощью инструментов веб-разработки
2024-06-24 в 21:59, admin, рубрики: c++, transpiler, Компиляторы, СиИли что бывает если заставить очень опытного разработчика заниматься не своим делом. Думаю после этой статьи термин «overqualified» заиграет для вас новыми красками.
От авторов, запихнувших веб‑сервер на визитку и локализующих корпоративные приложения на клингонский — держим марку!
Объявляю ошибку вида if (x = 42) вымирающей и заношу её в Красную книгу C и C++ багов
2024-05-30 в 7:53, admin, рубрики: C, c++, pvs-studio, баги, Компиляторы, Красная книга, нотация Йоды, ошибки в коде, Программирование, Си, статический анализ кода
Если спросить программиста, какие баги чаще всего можно встретить в C и C++ коде, он назовёт разыменование нулевого указателя, неопределённое поведение, выход за границу массива и другие, на его взгляд, типовые паттерны ошибок. Скорее всего, он назовёт и случайное присваивание в условии. Но действительно ли эта ошибка распространена в наше время?
Каково это, создавать язык программирования сегодня?
2024-02-04 в 10:00, admin, рубрики: langium, ruvds_перевод, zmodel, Компиляторы, Программирование, разработка языков программирования«Эта книга – классика. Относитесь к ней бережно».
Такую фразу произнёс архитектор из нашей команды, передавая мне The Dragon Book. Разработкой компиляторов я увлёкся где-то 15 лет назад ещё на заре своей карьеры. Как-то раз, читая эту книгу поздно вечером, я заснул, небрежно уронив её на пол. Надеюсь, владелец не заметил небольшую вмятину на обложке после того, как я ему её вернул.
Вышла эта книжка в 1986 году. В те времена создание компиляторов было крайне сложной задачей, требовавшей обладания различными навыками в области компьютерных наук в целом и программирования в частности. Теперь, почти четыре десятилетия спустя, этой задачей занимаюсь я. Насколько сложна она сегодня? Приглашаю вместе разобрать процесс создания языка и посмотреть, насколько современные инструменты его упростили.Читать полностью »
11lc — инновационный компилятор для нового языка программирования
2023-12-31 в 21:00, admin, рубрики: 11l, двойная статья, КомпиляторыОтсутствие скрытой неэффективности
Это свойство скорее языка программирования 11l, нежели компилятора. Однако оно настолько важно и настолько отличает язык 11l от C++, D или даже Nim, что я решил разобрать его подробно в данной статье.
Уолтер Брайт, создатель языка D, писал:
Templates in C++ have evolved from little more than token substitution into a programming language in itself. Many useful aspects of C++ templates have been discovered rather than designed.
Так вот, как я считаю, нечто похожее произошло и с семантикой перемещения (move semantics). И в C++ и в D она появилась достаточно поздно, и если бы эти языки проектировались с опорой на семантику перемещения изначально, то в них было бы гораздо меньше скрытой неэффективности (hidden inefficiency). О чём идёт речь? Рассмотрю это на примере C++.Читать полностью »
Поговорим об оптимизирующих компиляторах. Сказ пятый: удаление общих подвыражений
2023-08-13 в 13:00, admin, рубрики: CSE, LLVM, Компиляторы, оптимизацииЭто цикл статей об оптимизирующих компиляторах вообще и LLVM в частности. Смотри все статьи данного цикла:
В этой статье мы поговорим о классе оптимизаций, которые позволяют избегать лишних вычислений при помощи переиспользования уже имеющихся результатов, а именно -- оптимизации семейства CSE. В разном виде такие оптимизации есть практически во всех известных компиляторах.Читать полностью »
Внутреннее представление и оптимизации строк в JavaScript-движке V8: «отмываем» строки, «обгоняем» C++
2023-08-08 в 9:00, admin, рубрики: javascript, node.js, nodejs, ruvds_статьи, V8, Блог компании RUVDS.com, Компиляторы, ненормальное программирование, оптимизацияС самого рождения JavaScript в каком-то смысле был языком для манипулирования текстом — от веб-страничек в самом начале до полноценных компиляторов сейчас. Неудивительно, что в современных JS-движках достаточно много сил уделено оптимизации внутреннего представления строк и операций над ними.
В этой статье я хочу рассмотреть, как могут быть представлены строки в движке V8. Попытаюсь продемонстрировать их эффект, обогнав C++ в очень честном бенчмарке. А также покажу, в каких случаях они могут, наоборот, привести к проблемам с производительностью, и что в таких случаях можно сделать.Читать полностью »
Управление временем жизни объектов: почему это важно и почему для этого пришлось создать новый язык «Аргентум»
2023-07-23 в 12:47, admin, рубрики: garbage collector, memory safety, programming language, Компиляторы, Программирование, сборщик мусора, язык программированияВ основе любого современного языка программирования лежит какая-то ссылочная модель, описывающая структуры данных которыми будут оперировать приложения. Она определяет как объекты ссылаются друг на друга, в какой момент объект можно удалить, когда и как объект можно изменять.
Status Quo
Большинство современных языков программирования строятся на одной из трех ссылочных моделей:
Первая категория это языки с ручным управлением временем жизни объектов. Примеры — C/C++/Zig. В этих языках объекты аллоцируются и освобождаются вручную, а указатель — это просто адрес памяти, никого ни к чему не обязывающий.
Подводные камни С++. Решаем загадки неопределённого поведения, ч. 1
2023-06-28 в 9:58, admin, рубрики: C, c++, compiler, UB, undefined, Unspecified, Блог компании МойОфис, Компиляторы, мойофис, С++, СофтИзучение и понимание неопределённого поведения — важный шаг для разработчика C++, поскольку undefined behavior бывает источником серьёзных ошибок и проблем в программах. UB может проявляться в разных аспектах языка, включая операции с памятью, многопоточность, арифметические вычисления, работу с указателями и так далее.
Поговорим об оптимизирующих компиляторах. Сказ третий: неопределённое поведение и оптимизации
2023-06-14 в 14:00, admin, рубрики: LLVM, undefined behavior, КомпиляторыЭто цикл статей об оптимизирующих компиляторах вообще и LLVM в частности. Смотри все статьи данного цикла:
-
Неопределённое поведение
Вообще-то, третья статья данного цикла должна была рассказывать о конкретных оптимизациях. Но пока я прикидывал её план, стало ясно, что без освещения некоторых аспектов неопределённого поведения многое из дальнейших описаний будет непонятно. Поэтому сделаем ещё один осторожный шаг, прежде, чем окунаться в омут с головой.