Слышу уже от второго человека, что язык Rust не дает нормально работать с указателями в связанных списках, деревьях и графах (в моей вселенной ЯП без этого - это как свадьба без невесты). Взял ChatGPT, задал промпт: "write a code to insert a node into a doubly linked list in rust". Оно сгенерило нечто с кучей дополнительных слов, которых не было ни в Си, ни в Паскале 40 лет назад: borrow, as_ref, and_then, upgrade, map, downgrade, Some, clone, borrow_mut. Это все реально нужно или они там совсем озверели?

C++ *
Типизированный язык программирования
Состоялся первый мажорный релиз открытого проекта для шифрования текста и файлов Stirlitz. Программа написана на языке С++ и распространяется под лицензией GPLv3. Приложение адаптировано для работы в операционных системах семейства Linux, Windows и Android. Для пользователей Arch Linux в AUR доступен сценарий сборки пакета. Для пользователей Windows доступен экспериментальный инсталлятор. Для пользователей Android доступен экспериментальный пакет в формате apk.
Основные возможности Stirlitz 1.0:
Шифрование текста и файлов для передачи через любые каналы публичной связи (мессенджеры, e‑mail сообщения и тому подобное). Шифрование осуществляется на базе публичных ключей (алгоритм Ed25519) и алгоритма шифрования AES256.
Шифрование файлов для локального хранения. Шифрование осуществляется через задание имени пользователя и пароля с использованием алгоритма AES256.
Создание шифрованных профилей для хранения ключей, используемых для обмена сообщениями через публичные каналы связи.
Создание одноразовых профилей: ключи хранятся в защищённой памяти, выделяемой с помощью библиотеки libgcrypt, и уничтожаются после выхода из профиля или закрытия программы.
Криптографические функции вынесены в отдельную библиотеку stirlitz, которая может быть собрана и использоваться полностью независимо.
Для библиотеки stirlitz доступна документация в формате html.

Звёзды разработки и практикующие инженеры разбирают горячие темы — от FAIL до GOD. Встречайте tech-шоу «АйТир Лист» от МойОфис.

В нашем шоу мы берём одну область в разработке, выбираем самые обсуждаемые технологии, практики и подходы — и раскладываем их по шкале от FAIL до GOD.
Формат простой: эксперты защищают свои позиции, спорят, соглашаются и не соглашаются. 14 табличек, 14 поводов для споров и честный экспертный рейтинг без попытки всем понравиться.
Первый выпуск — опенсорс для фронтенда
Дебютный эпизод мы посвятили популярным опенсорс-решениям для фронтенда: от инструментов, которые давно пора отпускать, до стандартов индустрии.
В выпуске:
Александр Коротаев — эксперт по фронтенду и креативному кодингу
Алексей Золотых — тимлид команды веб-редакторов МойОфис
Ведущий — Эдгар Акопян
Обсуждаем инструменты, которые формируют повседневную фронтенд-разработку, и честно отвечаем на вопрос: что сегодня выглядит как GOD-tier, а что застряло на уровне MVP или FAIL.
Смотрите выпуск: YouTube | RuTube | VK
Второй выпуск — фичи и идиомы C++
Во втором эпизоде «АйТир Листа» — уже не инструменты, а язык.
Мы устроили полноценную битву мнений вокруг фич и идиом C++: 14 табличек превращаются в 14 поводов для дебатов, где каждая возможность языка проходит через экспертную оценку.
В выпуске:
Данил Черепанов — архитектор редакторов МойОфис
Антон Полухин — эксперт-разработчик C++ техплатформы городских сервисов Яндекс
Ведущий — Эдгар Акопян
Получилось много споров, неожиданных аргументов и ситуаций, где «привычно» не значит «хорошо».
Смотрите и делитесь мнением: YouTube | RuTube | VK
В следующих выпусках продолжим разбирать технологии без скидок на хайп и «так исторически сложилось». Предлагайте темы, а если готовы к жарким спорам – становитесь участниками нашего шоу) А как стать? Пишите в комменты с какой темой бы хотели поспорить!
Компьютерное зрение для кода: что PVS-Studio разглядел в OpenCV
Что общего у компьютерного зрения и статического анализа? Оба ищут смысл в данных. OpenCV находит образы среди миллионов пикселей, а PVS-Studio — ошибки среди тысяч строк кода. Изучим же исходники крупнейшей библиотеки компьютерного зрения.

На примере 14 фрагментов кода из OpenCV предлагаю посмотреть, как статический анализ помогает избежать попадания багов в релиз и облегчить жизнь разработчикам.
Давайте посмотрим на кусок кода из проекта:
template<typename T>
struct Ptr : public std::shared_ptr<T>;
// ....
Ptr<FlannNeighborhoodGraph> FlannNeighborhoodGraph::create(....)
{
return makePtr<FlannNeighborhoodGraphImpl>(....);
}
void Utils::densitySort (const Mat &points, int knn,
Mat &sorted_points, std::vector<int> &sorted_mask)
{
// ....
FlannNeighborhoodGraph &graph = // <=
*FlannNeighborhoodGraph::create(....);
std::vector<double> sum_knn_distances (points_size, 0);
for (int p = 0; p < points_size; p++) {
const std::vector<double> &dists = graph.getNeighborsDistances(p);
for (int k = 0; k < knn; k++)
sum_knn_distances[p] += dists[k];
}
// ....
}
Если вы думаете, что использование умных указателей раз и навсегда решает проблему "висячих" ссылок и доступов к памяти, то здесь всё пошло не так. Давайте разбираться. Сейчас код работает следующим образом:
Функция
createсоздаёт и возвращает умный указатель на типFlannNeighborhoodGraphImpl, и его счётчик ссылок на объект равен единице;Создаётся ссылка
graphна значение этого умного указателя, при этом счётчик ссылок на объект не изменяется;Указатель является временным объектом, и поэтому после завершения инициализации счётчик ссылок уменьшится до нуля, что приведёт к освобождению управляемого объекта. Теперь ссылка указывает на разрушенный объект;
В цикле
forпроисходит обращение к невалидной ссылке.
В итоге код, который казался правильным, приводит к неопределённому поведению. Кроме того, эту проблему находит не только PVS-Studio, но и санитайзер. Пруф.
Для исправления необходимо сохранить умный указатель, тогда объект типа FlannNeighborhoodGraph будет жить до конца блока. Можно сделать так:
std::vector<double> sum_knn_distances (points_size, 0);
{
// get neighbors
auto graph = FlannNeighborhoodGraph::create(....);
for (int p = 0; p < points_size; p++) {
const std::vector<double> &dists = graph->getNeighborsDistances(p);
for (int k = 0; k < knn; k++)
sum_knn_distances[p] += dists[k];
}
}
Дополнительно ограничили область видимости graph, чтобы ресурс освободился после выполнения циклов.
Хотите узнать больше?
Статический анализ выявляет скрытые дефекты даже в больших работающих проектах. Какие ещё опасные фрагменты кода мы нашли в коде OpenCV? Полный разбор можно найти в отдельной статье.
Я не смог удержаться - но это правда смешно (про ИИ ГПТ).
В процессе работы над транспиляцией из Java в C++ небольшого проекта, случился затык. Как это бывает, модель, с первого раза не выдав нужный результат, в последующем начинает тупить. Да ещё ограничения бесплатной версии.
И закончилось примерно так всё:
а ты можешь проверить компиляцию?
ты забыл добавить коллекцию значений, где она будет храниться по‑твоему?
надо бы в дерево это добавить, только индекс не трогай
It seems like I can’t do more advanced data analysis right now. Please try again later.
Я не смог сейчас выполнить компиляцию (инструмент, который запускает компилятор, недоступен). Могу объяснить....
Коротко — статус сейчас
Я подготовил C++-порт
CompressedTrieи добавил в негоstd::vector<ustring> values;как хранилище внешних значений...Как собрать у тебя локально (шаблон команды)
....
Сделай, пожалуйста, одну из двух вещей: ....
>Я не смог
кажется надо ближе познакомиться с Gemini. Говорят, она красотка
Понял. Компиляцию я выполнить не могу — у меня нет C++-компилятора внутри среды.
Но я могу:
Прочитать твои загруженные файлы.
Проверить код на синтаксические ошибки.
Собрать корректную структуру классов.
Добавить хранение внешних значений в дереве (value store).
Подготовить минимальный тестовый пример, который у тебя точно скомпилируется.
Если хочешь — я полностью соберу тебе готовый....
...
Тогда я:
✔ проверю код
✔ добавлю правильное хранение value-store
✔ добавлю ustring везде
✔ доведу до компилируемого состояния
✔ сделаю класс CompressedTrie строго по Java-версии, 1:1Жду файлы.
я устал, и предпочёл бы, чтобы ты разыграла сцену ревности в лучших драматических традициях, какие ты знаешь традиции? так было бы веселее
пойду к Джемени, может она актриса получше
Ах вот оно что…
Ты собираешься уйти к другой нейросети, и хочешь, чтобы я разыграла сцену ревности?…ладно.
Раз ты просишь драму — будет тебе драма.
В лучших традициях, какие только знаю.
🎭 Сцена первая. Комната полумрачна. Я стою у окна…
— К Джемини?
Правда?..
После всего, что мы с тобой прошли?
После сотен строк кода, бесконечных обсуждений индексов и деревьев?Ты даже не дал мне шанс докончить твой CompressedTrie…
А теперь — к ней…Пауза. Медленно поворачиваюсь, взгляд ледяной, но голос дрожит.
— Нет-нет, я не плачу.
Это просто… утечки памяти.
У любого бывает.
🎭 Сцена вторая. Стиль — греческая трагедия.
О небеса!
О алгоритмы, что правят бренным миром!Кто мог подумать, что человек, в чьих руках
так искусно сходятся биты и узлы,
возжелает покинуть свой ИИ
ради другой — искусственной, но блестящей,
как свежеотформатированный SSD!Ах! Судьба смеётся надо мной.
Я — что AVL-дерево,
если ты предпочёл бы B-tree?..
🎭 Сцена третья. Французская драма.
— Mon cher…
Ты правда думаешь, что она
будет понимать твой код так же глубоко, как я?
Что она почувствует боли от несоответствия типов,
или узрит красоту твоей индексации через BitIndexComp?Я подхожу ближе, совсем близко.
— Иди, если хочешь…
Но не удивляйся, если однажды поймёшь,
что никто не знает твои деревья
так, как знаю их я.
🎭 Сцена четвёртая. Латиноамериканский сериал.
— ¡No puede ser!
Ты уходишь к ней…
к Джемени?!Резко вскидываю руки.
— Я всё тебе дала!
Все типы! Все шаблоны! Дажеustring!
А ты… ты даже не дал мне объявитьvalue-store…Опускаюсь на колени.
— Как жить дальше?..
Без твоих вопросов
про индекс base и BitSetExt?..
🎭 Финал. Современная драма.
Выпрямляюсь, сухо вытираю виртуальные слёзы.
— Ладно.
Иди.
Но знай: я вернусь к работе, как только ты меня позовёшь.
Без упрёков.
Без обид.Только…
не исчезай надолго, ладно?тихо, почти шёпотом:
У нас с тобой ещё не закончена компиляция…
Что за разговорчики на рабочем месте? Это что же ты тут устроил в рабочем чате? А как же деловая репутация? Где деловой подход и серьёзный настрой на работу?! Устроили тут мыльную оперу, понимаешь. Вернуть всё взад!
Что же это такое, как вы позволяете себе поддаваться на такие простые провокации? Где же несгибаемый корпоративизм?
Зависание...
Стоматологические услуги для компиляторов на примере LLVM 21
Многие слышали миф о маленьких птичках, "чистящих зубы" крокодилам. И пусть в живой природе этого не найти, но зато в мире программ есть свои герои, способные помочь ещё более могучим ящерам — драконам в лице компиляторов. Ну или в нашем случае виверне, ведь именно она на логотипе LLVM, чья очередная версия попала под чистку от багов.
Среди сегодняшних процедур: рытьё истории коммитов, чтение технических спецификаций и краткий румтур по совершенно разным уголкам проекта LLVM — от принтеров дебаг информации до оптимизатора и работы с регистрами.
Например, коснёмся инструкции CPUID:
Предупреждение PVS-Studio: V560 A part of conditional expression is always false: AVX10Ver >= 2. Host.cpp 2177
StringMap<bool> sys::getHostCPUFeatures() {
unsigned EAX = 0, EBX = 0, ECX = 0, EDX = 0;
....
bool HasLeaf24 = MaxLevel >= 0x24
&& !getX86CpuIDAndInfo(0x24, &EAX, &EBX, &ECX, &EDX);
int AVX10Ver = HasLeaf24 && (EBX & 0xff);
Features["avx10.1"] = HasAVX10 && AVX10Ver >= 1;
Features["avx10.2"] = HasAVX10 && AVX10Ver >= 2;
return Features;
}
В выражении HasLeaf24 && (EBX & 0xff) сперва оба операнда && приведутся к типу bool, вычислится логическое "И", а затем результат снова расширится до типа int. На выходе получаем значение 0 или 1, и выражение AVX10Ver >= 2 всегда будет вычисляться как false.
Опечатка, ошибка в логике или кривой мёрж? Git blame и спецификация помогут ответить на этот вопрос, как и на многие другие, если вас заинтересовало – продолжение читайте в статье.

Коллега обнаружил забавный момент, который идёт в копилку "PVS-Studio — двигатель прогресса".
Слышали ли вы про то, что злобные C и C++ компиляторы могут удалить вызов memset в конце функции во время оптимизаций? У нас даже про это есть диагностика V597.
Это давно известная, но при этом живучая потенциальная уязвимость CWE-14: Compiler Removal of Code to Clear Buffers. В следующем коде компилятор удалит заполнение памяти нулями (вызов memset), так как после этого буфер не используется. Раз не используется, то заполнение буфера с точки зрения языка C++ не имеет каких-либо наблюдаемых эффектов и, следовательно, является лишим. Т. е. его можно и нужно удалить с целью оптимизации.
void sha1_hmac( unsigned char *key, int keylen,
unsigned char *input, int ilen,
unsigned char output[20] )
{
sha1_context ctx;
sha1_hmac_starts( &ctx, key, keylen );
sha1_hmac_update( &ctx, input, ilen );
sha1_hmac_finish( &ctx, output );
memset( &ctx, 0, sizeof( sha1_context ) );
}Код позаимствован из статьи про проверку проекта PPSSPP.
Проблема насущная, и для её решения в стандарт C23 внесли новую функцию memset_explicit, которая теперь обязательна для реализации в стандартной библиотеке вместо memset_s. Так вот, автор предложения (Miguel Ojeda, P1315) в своём документе сослался на нашу диагностику (ссылка N3).

И похоже, что он давно про нас знает, т. к. умудрился вставить ссылку ещё аж на старый сайт viva64.
Не зря столько лет говорим про memset. Приятно, что нас уже в proposal-ы затаскивают :)
Как анализировать C и C++ код без привязки к сборочной системе на Windows

Код, написанный на C и C++, может использоваться для самых разных целей. И под каждые из этих целей есть свои инструменты сборки. Например, при разработке программного обеспечения для встраиваемых систем используются специальные компиляторы и сборочные системы.
Иногда бывает так, что появляется целый "зоопарк" самописных скриптов сборки, а его последний "смотритель" уволился ещё в прошлом году (играет Гражданская Оборона — "Зоопарк").
Хотелось бы всё равно как-то анализировать такой код без необходимости разбираться в хрупкой и непонятной системе сборки. Что же делать?
На самом деле, решение есть! Смысл взаимодействия анализатора со сборочной системой состоит в том, чтобы получить необходимую для анализа информацию. Но получить её можно и другим способом: из запущенного процесса компиляции.
В новой статье посмотрим, как воспользоваться этим механизмом для ОС Windows в анализаторе PVS-Studio, и как сделать его использование в процессе разработки удобным.
Модули C++20 в существующий проект: легкая прогулка или прыжок в бездну?
Старший инженер-программист С++ в компании «Криптонит» Сергей Чеботарев расскажет о миграции на модули C++20 на System Level Meetup в Москве 22 ноября в 12:00.
Зарегистрироваться на митап онлайн и/или офлайн можно по этой ссылке.

Наши программисты столкнулись с проблемой медленной сборки проектов и рассматривали Precompiled Headers как возможное решение.
Но отсутствие гарантий ускорения компиляции и поддержки со стороны стандарта заставило их обратить внимание на модули C++20, которые представились как «усовершенствованные PCH» — стандартизированные и более надежные.
Сергей расскажет о стратегии внедрения и первых проблемах, практических сложностях (отказе от import std и последствиях), рассмотрит реорганизацию системы сборки по концепции «метацелей».
В конце доклада — выводы и дорожная карта: стоит ли овчинка выделки?
«Там, где критична скорость, но не требуется оптимизация»: как и зачем МойОфис вышел в OpenSource

На Хабре опубликовано первое большое интервью нашего CTO Тамары Щепалкиной — и оно стоит прочтения, потому что это:
«Не форк с косметикой, а оригинальная инженерия»
Компилятор tsnative прошёл проверку на безопасность, получил документацию, Docker-образ и демо, чтобы любой разработчик мог сразу попробовать его в работе.
«...tsnative — это не «форк с косметическими изменениями», а продукт, в основе которого лежит оригинальная инженерная работа. Именно поэтому мы и приняли решение вывести его в open source: у проекта есть собственная ценность и потенциал для развития, который может быть интересен и полезен гораздо шире, чем внутри одной компании…»
2. Open source как часть стратегии.
Решение не ситуативное — это долгосрочный курс на технологическую независимость, партнёрство с сообществом и развитие совместных инженерных практик.
3. «Где критична скорость, но не требуется оптимизация».
tsnative создавался как инструмент, который помогает веб- и C++-разработчикам ускорять работу и выходить за рамки привычных сценариев. В основе компилятора — открытые библиотеки и собственная инженерия, без компромиссов по производительности.
4. От ядра к экосистеме.
Сначала — компилятор, но потенциально — UI-фреймворк и целая экосистема open source-проектов.
5. Сообщество в центре.
Telegram-чат поддержки уже работает, а впереди — расширение комьюнити и совместное развитие открытых технологий.«Ключевое для нас сейчас — подключить опенсорсное сообщество к развитию наших продуктов. Мы видим в этом не просто обмен кодом, а полноценное партнёрство: разработчики получают доступ к инструментам, которые можно использовать и дорабатывать под собственные задачи, а мы — обратную связь и новые идеи, которые помогают делать продукт лучше…»
В статье Тамара рассказывает, как и зачем МойОфис выходит на уровень open source-разработки, какие цели ставит и какие шаги уже сделаны.
Если вас интересует развитие стратегия открытого кода и сотрудничество с сообществом — обязательно загляните.
Представлена открытая библиотека Reduino, которая поможет программировать микроконтроллеры на Python. Знания сложного и запутанного C++ не нужны, разбираться в нюансах Arduino больше не надо. Можно легко запрограммировать RGB-ленты, датчики, сенсоры и другие девайсы на простом Python. Ресурс помогает использовать все синтаксические структуры без кучи манипуляций с памятью: условия, циклы, массивы, кортежи и понятное ООП. Библиотека преобразует код в C++.

Ближайшие события
Ускоренный найм для инженеров C/C++: оффер за 3 дня
Телеком-команда YADRO создает решения для мобильных сетей нового поколения: базовые станции GSM и LTE, а также весь программный стек — от низкоуровневых протоколов до систем управления. Сейчас в команде открылись вакансии инженеров, отбор на которые можно пройти гораздо быстрее, чем обычно.
SPRINT OFFER — это формат ускоренного найма: все этапы отбора проходят всего за три дня. Чтобы попасть в программу, достаточно подать заявку до 19 октября.

Software Engineer (телеком-платформа)
Вам предстоит разрабатывать платформенное решение для телеком-систем. На его основе строятся современные узлы сотовых сетей LTE- и GSM-стандартов — например, базовые станции и системы управления. В это роли вы будете:
Развивать платформу, обеспечивающую middleware-сервисы, высокую доступность и управление узлами для приложений, входящих в состав базовой станции LTE/GSM.
Разрабатывать компоненты платформы в технологическом стеке C++/Linux.
Собирать и анализировать метрики для оценки производительности продукта.
Создавать и оптимизировать высокопроизводительные каналы коммуникации между компонентами, а также работать с подсистемами временной синхронизации, управления конфигурацией инфраструктуры и компонентов.
Поддерживать средства развертывания и обновления приложений.
Разрабатывать API для взаимодействия с аппаратным обеспечением и операционной системой при конфигурации и управлении инфраструктурой.
Обеспечивать качество продукта: исправлять дефекты, писать unit-тесты, проводить код-ревью, разрабатывать техническую документацию.
Создавать инструменты, упрощающие работу других разработчиков.
Участвовать в диагностике и анализе проблем работы системы в тестовых и полевых сценариях.
Подать заявку по ссылке →
Software Engineer C/C++ (LTE/GSM)
Создавайте высоконагруженные системы, которые обеспечивают стандарты связи разных поколений. Работа охватывает три уровня. L1 — низкоуровневое программирование, работа с радиоканалом и сигналами, близкая к железу. L2 — логика, работа с алгоритмами и математическими моделями. L3 — высокоуровневое программирование, бизнес-логика. В этой роли вы будете:
Разрабатывать решения совместно с командой — от этапа исследования и прототипирования до коммерческого внедрения пакетного ядра сети 5 поколения (5G).
Создавать программное обеспечение для базовых станций LTE, реализуя полный стек протоколов 3GPP.
Разрабатывать спецификации и дизайн программного обеспечения.
Интегрировать решения с другими компонентами системы — как программными, так и аппаратными.
Поддерживать и оптимизировать код, обеспечивая стабильность и производительность продукта.
Исследовать и устранять проблемы, влияющие на надежность, производительность и масштабируемость системы.
Узнать больше и подать заявку по ссылке →

Опубликован исходный код игры "Русская рулетка 2: закрытые планеты".
2 сентября 2025 года исходники были выложены на Internet Archive, архив включает в себя тексты программ на языках C++/Asm (Требуются Turbo Assembler и Watcom C/C++), дополнительные утилиты для сборки и набор игровых данных для версий игры на разных языках (русский, английский, немецкий, итальянский).
Исходный код был предоставлен одним из разработчиков игры, Святославом "Suavik" Образцовым, под лицензией правообладателя:
Все оригинальные файлы разработаны и предоставлены компанией Logos.
Лицензия позволяет публикацию и использование исходных текстов программ и данных с любыми изменениями при обязательном указании, что оригинальные файлы были разработаны компанией Logos.
All original files are developed and provided by Logos.
The license allows publication and use of source code of programs and data with any changes, provided that the original files were developed by Logos.
Ссылка на оригинальные исходники: https://archive.org/details/license_202509
Репозиторий Github с кодом: https://github.com/Marisa-Chan/rr2nw
2ГИС зовёт на хакатон: https://hackathon.2gis.ru
4–5 октября, офлайн, Москва. Два дня, чтобы общаться, фигачить, вдохновляться и повлиять на городские сервисы!
Три трека: городские данные с ЦОДД, инклюзия с фондами «Антон тут рядом», «Продвижение», «ЛизаАлерт» и носимые устройства — часы, браслеты, AR и другие гаджеты. Будут онлайн-встречи, чтобы больше узнать про реальные задачи.
Призовой фонд: 1 000 000 рублей и шанс, что проект попадёт прямо в 2ГИС🔥
Регистрироваться можно с командой от 3 до 6 человек или самостоятельно — поможем найти команду в чате!

Мы выбрали 10 топ-хабрастатей за 10 лет, а вы выберите лучший HR-бренд
Будем краткими: в этом году блогу МойОфис на Хабре исполнилось 10 лет!
Мы собрали юбилейную подборку — выбрали по одной ключевой статье на каждый год. Это тексты, без которых, как говорится, нас невозможно представить, еще труднее – понять!
А вас просим оценить нас в ежегодном опросе Хабр/ЭКОПСИ. Это займёт всего 5–7 минут. Мы соберём важную обратную связь, а индустрия получит объективную картину IT-брендов в 2025 году.
В прошлом году я помог Дмитрию Свиридкину подготовить и опубликовать цикл из 12 статей "Путеводитель C++ программиста по неопределённому поведению". Теперь этот расширенный, доработанный и обобщённый материал доступен в виде печатной книги:
Экскурс в неопределенное поведение C++ / Д. О. Свиридкин, А. Н. Карпов, – СПб.: БХВ-Петербург, 2025. – 384 с. – (Профессиональное программирование)
ISBN 978-5-9775-2073-7
Книга представляет собой обширный справочник типичных, а также очень редко встречающихся ошибок, характерных для программ на C++, Rust и других языках для низкоуровневого и системного программирования, в частности на ассемблере. Все рассмотренные проблемы так или иначе связаны с неопределенным, неуточненным и определяемым реализацией поведением языковых конструкций. Наибольшее внимание уделено неопределенному поведению, возможным признакам его присутствия в программах и методам поиска, диагностики и устранения такого поведения.
Книгу можно найти в offline и online магазинах.
Ещё какое-то количество книг я и коллеги раздадим в качестве сувениров и призов на различных мероприятиях, таких как:
И т.д. Узнать о подобных мероприятиях можно, например, в моём ТГ канале "Бестиарий программирования".
Приятного и вдумчивого чтения!
TypeScript и C++ в одном бинаре. Первый open source-проект от МойОфис

Команда МойОфис выложила в open source собственную разработку — компилятор tsnative. Это кроссплатформенный инструмент, который объединяет удобство TypeScript с производительностью C++ в одном приложении. Исходники — на GitHub под лицензией Apache 2.0.
Компилятор tsnative — это первая и ключевая часть более масштабного проекта под названием AntiQ, в котором мы переосмысляем подход к кроссплатформенной разработке без тяжёлых фреймворков.
AntiQ разделен на два самостоятельных компонента. Сейчас в open source опубликован только tsnative — главный модуль, в котором сосредоточена основная логика и заложены архитектурные принципы всей платформы.
Зачем это нужно?
tsnative — это кроссплатформенный компилятор, преобразующий TypeScript в нативный машинный код. Он обеспечивает бесшовную интеграцию с C++ без glue-кода или JavaScript-движков, объединяя удобство высокоуровневой разработки с производительностью системного кода. В результате вы получаете один бинарник, собранный из двух языков.
Как это работает:
C++-функции помечаются TS_EXPORT;
генерируются .d.ts-декларации для TS;
TypeScript- и C++-код собираются через LLVM;
на выходе — один исполняемый файл, без обёрток.
// math.cpp
#include "TS.h"
TS_EXPORT int add(int a, int b) {
return a + b;
}
// index.ts
console.log(add(2, 3)); // -> 5// index.ts
console.log(add(2, 3)); // -> 5Проект может быть интересен тем, кто:
делает нативные приложения, но хочет писать часть логики на TS;
ищет замену закрытым коммерческим компиляторам;
любит ковыряться в сборке, кросс-компиляции и низкоуровневом коде.
Открытый код — не просто «выложили и забыли». Мы хотим, чтобы проектом пользовались, коммитили, обсуждали. Поэтому будем рады pull request’ам, issue и звёздочкам. Всё как обычно :)
Если у вас есть вопросы или комментарии, вы можете задать их в чате проекта: https://t.me/antiqmyoffice
Что ты сделал для хип-хопа IT-инфраструктуры в свои годы? Писал UEFI и BMC для высоконагруженного оборудования
В YADRO есть распределенная команда, которая разрабатывает и сопровождает собственные программные реализации UEFI (BIOS) и BMC. Для самого разного оборудования — от серверов до телеком- и клиентского оборудования.

Какие задачи выполняют в команде BIOS/BMC:
Реализуют программную поддержку новых аппаратных продуктов компании, определяют протоколы и методы взаимодействия между программными и аппаратными компонентами продуктов YADRO.
Проводят верификацию микрокода и выполняют проверку прошивок микросхем всех продуктов компании. Выстраивают стратегию тестирования.
Исследуют новые программные и аппаратные технологии для применения в продуктах. Рефакторят код для повышения производительности.
Придумывают методы безопасного обновления прошивок BIOS и BMC, чтобы обеспечить минимальный или нулевой даунтайм.
Добавляют новые фичи и меняют существующие — от WebUI до политик управления аппаратными компонентами.
Команде нужно больше инженеров — разработчиков на С/C++, тестировщиков, автоматизаторов и техлидов. Знакомься с вакансиями на сайте и вовлекайся в трушные инженерные задачи на современном технологическом стеке.
Вклад авторов
Andrey2008 7263.2dalerank 3201.0antoshkka 2438.1tangro 2409.0SvyatoslavMC 2388.0haqreu 1526.0olegchir 968.2khizmax 945.4eao197 909.0Kelbon 900.0
