
Если спросить программиста, какие баги чаще всего можно встретить в C и C++ коде, он назовёт разыменование нулевого указателя, неопределённое поведение, выход за границу массива и другие, на его взгляд, типовые паттерны ошибок. Скорее всего, он назовёт и случайное присваивание в условии. Но действительно ли эта ошибка распространена в наше время?
Рубрика «Компиляторы» - 3
Объявляю ошибку вида if (x = 42) вымирающей и заношу её в Красную книгу C и C++ багов
2024-05-30 в 7:53, admin, рубрики: C, c++, pvs-studio, баги, Компиляторы, Красная книга, нотация Йоды, ошибки в коде, Программирование, Си, статический анализ кодаКаково это, создавать язык программирования сегодня?
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 в частности. Смотри все статьи данного цикла:
-
Неопределённое поведение
Вообще-то, третья статья данного цикла должна была рассказывать о конкретных оптимизациях. Но пока я прикидывал её план, стало ясно, что без освещения некоторых аспектов неопределённого поведения многое из дальнейших описаний будет непонятно. Поэтому сделаем ещё один осторожный шаг, прежде, чем окунаться в омут с головой.
Rust моей мечты — несостоявшийся язык
2023-06-11 в 7:24, admin, рубрики: c++, Rust, Исследования и прогнозы в IT, Компиляторы, Программирование, типизацияВ одном недавнем подкасте о том, кто сейчас главный в Rust, вновь всплыл вопрос о том, кому быть BDFL (великодушным пожизненным диктатором), и Джереми Соллер сказал (это был чемпионский заход на приз «за преуменьшение века»): «Я считаю, Грейдон забраковал бы некоторые вещи, которые всем нам сейчас нравятся». Этим он вторит другой дискуссии на redditЧитать полностью »
Поговорим об оптимизирующих компиляторах. Сказ второй: Доминирование
2023-05-28 в 14:00, admin, рубрики: LLVM, ssa, доминирование, КомпиляторыСегодня мы продолжаем наш разговор об оптимизирующих компиляторах для самых маленьких и не очень. Для тех, кто пока не в курсе происходящего, но желает приобщиться - я поставил себе задачу написать цикл вводных статей в эту область для совсем-совсем начинающих. Первую часть, где рассказывается об SSA-форме, можно и нужно прочитать здесь.
Сегодня мы поговорим о доминировании. Это одна из фундаментальных вещей, на которых стоит как теория компиляторов вообще, так и многие компиляторные оптимизации в частности. Пристегните ремни и запишите стоп-слово на бумажке, чтобы не забыть.
