С/С++ Portal | Программирование
15.4K subscribers
1.6K photos
232 videos
26 files
1.05K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C/C++-разработчика

Сотрудничество, реклама: @devmangx

Работаем с @Spiral_Yuri

РКН: https://clck.ru/3Foc4d
Download Telegram
В своей лекции по случаю вручения премии Тьюринга Кен Томпсон показал, как компилятор C может внедрить бэкдор в программу login и скрыть атаку даже от собственного исходного кода.

Сам компилятор становится бэкдором, не оставляя никаких следов в исходном коде.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤18👀1
В оригинальном исходном коде Doom 1993 года кто-то оставил это в главном заголовочном файле.

У id Software явно было своё мнение о языках программирования.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁42❤5🤣5👀3
Оптимизация кода — невероятно увлекательная тема.

Когда вы умножаете число на константу (например, на 24), LLVM заменяет инструкцию умножения (imul) комбинацией побитового сдвига влево (shl) и вычисления эффективного адреса (lea).

Сдвиг влево на 3 бита эквивалентен умножению на 8, а инструкция lea выполняет арифметические операции над выражением вида [base + index] и сохраняет полученный результат.

И всё это буквально ради экономии одного такта процессора! Ведь imul выполняется за 3 такта, а shl и lea — за 1 такт каждая.

Для множества других констант существуют таблицы с аналогичными эвристиками оптимизации. Разработчики оптимизирующих бэкендов компиляторов прилагают огромные усилия, чтобы сэкономить даже одну инструкцию, поэтому не сводите всю их работу на нет!

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍25❤11🤯3🤔1
До стандартизации операторов присваивания в языке C использовались операторы с обратным порядком символов, например =+ вместо +=.

Знаменитый фрагмент кода с комментарием «Вы не должны этого понимать» в те времена выглядел ещё более странно.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍5❤3😁1🤔1
Безопасная и простая реализация mkdir на C.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1🤣48❤6💊5👍3🤔1
Оказывается, memcpy вполне неплохо подходит для сериализации.

Звучит очевидно, но я уже собирался писать для этого отдельную функцию, пока не заметил, что по сути просто изобретаю слегка приукрашенный memcpy.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤14🤣7🤔3👍1
В Unix V7 (1979 года) команда file могла определять, написан ли текст на английском языке, анализируя частоту встречаемости букв.

Она учитывала гласные, часто встречающиеся и редкие буквы.

Простая эвристика, которая в некоторой степени работает до сих пор.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥14❤7👀5
В сентябре 1992 года разработчики Unix столкнулись с серьёзной проблемой при работе с Unicode. Хранение символов в 16-битном представлении могло приводить к появлению нулевых байтов, которые программы на C воспринимали как признак окончания строки. Более ранние кодировки также имели свои недостатки совместимости.

Однажды вечером Кен Томпсон и Роб Пайк отправились в небольшую закусочную в Нью-Джерси. Там Томпсон набросал схему новой кодировки прямо на бумажной подложке для тарелки.

Её устройство позволяло полностью сохранить совместимость с ASCII. Остальные символы представлялись последовательностями из нескольких байтов, причём такое представление исключало случайное появление нулевых байтов и разделителей путей Unix.

Вернувшись в Bell Labs, разработчики приступили к реализации своего замысла. Уже к пятнице их операционная система Plan 9 целиком работала с новой кодировкой.

Так появилась UTF-8.

Сегодня, спустя более тридцати лет, эта кодировка используется более чем на 99% веб-сайтов, для которых известно представление символов.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥35👍4❤3
Forwarded from Arenadata
🚀 29 октября Arenadata проведёт техническую онлайн-конференцию ArenaTech

На ArenaTech инженеры Arenadata расскажут, как устроены продукты компании изнутри, поделятся опытом решения сложных инженерных задач и представят ключевые направления технологического развития.

🟢Основные темы конференции:

🔜СУБД: архитектура, развитие и эксплуатация. Обсудим планы развития Arenadata DB (ADB) и Greengage DB, новые возможности MPP-СУБД, включая hot standby, вопросы безопасности и устранения уязвимостей. Отдельное внимание уделим утилите ggrebalance, которая позволяет сокращать число сегментов кластера и заменять хосты с сохранением равномерного распределения данных.

🔜Платформа данных: безопасность и Kubernetes. Расскажем об управлении секретами и доступом в Arenadata Hyperwave (ADH) с использованием OpenBao. Разберём особенности переноса Impala, Trino и Spark в Kubernetes: интеграцию с Kerberos, разработку операторов, адаптацию Spark и использование Celeborn и YuniKorn.

🔜Инструменты: кластерный менеджер, документация, ИИ-поиск. Поделимся опытом организации процессов разработки технической документации и расскажем, как создавались интеллектуальный поиск и ИИ-ассистент, упрощающие поиск информации в документации многокомпонентной платформы данных. Также расскажем про развитие нашего кластерного менеджера ADCM.

После каждого доклада участники смогут задать вопросы спикерам в рамках Q&A-сессии.

Конференция будет интересна разработчикам, дата-инженерам, администраторам СУБД, архитекторам, DevOps-инженерам и техническим руководителям.

🗓 29 октября, 12:00 МСК

Формат: онлайн 🔛

Программа и регистрация
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
В 1998 году Брайан Керниган захотел создать движок регулярных выражений, настолько компактный, чтобы его исходный код целиком поместился на одной странице книги по программированию.

Роб Пайк отправился к себе в кабинет и спустя час или два вернулся с реализацией примерно на 30 строках кода на языке C.

Движок поддерживал метасимволы ^, $, . и *, а его реализация практически целиком основывалась на указателях и рекурсии.

Позднее Керниган включил этот код в книгу «Beautiful Code» («Совершенный код»).


👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍9😁8🤔1
Исходный код самой первой версии Linux 0.01, выпущенной в 1991 году, представляет немалый интерес.

В Makefile Линус Торвальдс использовал инструменты для работы с 16-битным ассемблером наряду с компилятором GCC, чтобы собрать загрузочный образ ядра.

А теперь взгляните, как он обрабатывал критическую ошибку ядра (kernel panic):

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22❤5🤔2
В 1996 году студия Naughty Dog выпустила Crash Bandicoot для оригинальной PlayStation, у которой было всего 2 МБ оперативной памяти.

Некоторые уровни занимали более 10 МБ, поэтому загрузить целый уровень в память одновременно было невозможно.

Тогда программист Энди Гэвин разработал собственную систему виртуальной памяти, которая подгружала с компакт-диска блоки данных размером 64 КБ по мере того, как Крэш перемещался по игровому миру.

Обычно игра загружала около трёх таких блоков в секунду. Данные на диске располагались в тщательно рассчитанном порядке, чтобы подгрузка не прерывала игровой процесс.

Представьте: целые трёхмерные миры загружались с компакт-диска со скоростью чтения около 300 КБ/с, а игра при этом должна была работать с частотой 30 кадров в секунду.

И всё это на консоли всего с 2 МБ оперативной памяти.

👉 @Cpportal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯14❤3🌚1