Pull to refresh
152
127.3
Александр Рябиков @rsashka

Системный архитектор

Send message

Анализ AST и рефакторинг кода в Clang

Level of difficultyMedium
Reading time6 min
Views3K


В продолжение темы кастомизации компилятора С++ публикую перевод еще одной интересной статьи от Eli Bendersky AST matchers and Clang refactoring tools.

Инструментарий Clang вызывает большой интерес и внимание к разработке в последние годы. Наконец-то у нас есть удобный, точный, с открытым исходным кодом и хорошо поддерживаемый фреймворк для программного анализа и рефакторинга кода C++ и это я нахожу это очень захватывающим!


Прекрасным результатом этого быстрого темпа разработки является то, что постоянно появляются новые API и инструменты.


Например, некоторое время назад разработчики инструментария Clang выяснили, что людям, выполняющим обходы AST, приходится писать много повторяющегося кода, чтобы найти нужные им узлы AST, поэтому они придумали отличный новый API под названием AST matchers.

Читать дальше →

​Как создать собственное расширение компилятора C++

Level of difficultyMedium
Reading time10 min
Views8.8K


Это перевод статьи, которая, к сожалению, у меня не доступна без слова из трех букв. А так как тема довольно интересная, то я решил совместить полезное с полезным и не только самому покопаться с примерами из публикации, но и сделать её перевод на Хабре. Вдруг еще кому данный материал будет интересен?

Создание пользовательского расширения компилятора C++ подразумевает понимание базовых механизмов работы компиляторов, изменение или расширение их функциональности и бесшовную интеграцию этих изменений в существующую инфраструктуру компилятора. Это руководство проведет вас через весь процесс, от понимания основ до внедрения и тестирования вашего пользовательского расширения. Целевая аудитория этого руководства — разработчики, которые уже знакомы с C++ и имеют базовое понимание концепций компилятора.

Читать дальше →

Создаем комфорт на рабочем месте или неочевидные характеристики при выборе кондиционера

Level of difficultyEasy
Reading time5 min
Views3.9K


Как говорится, "нет худа без добра" и результатом пандемии COVID стал массовый перевод сотрудников на удалённую работу. Так же получилось и у меня, и сразу остро стал вопрос об организации комфортного рабочего пространства.


Хорошо, что для работы удалось выделить отдельную комнату, но её дверь выходит в общий коридор. И в результате тихий шум кулеров компьютера часто перекрывается шумом посуды на кухне, звуками телепередач, музыкой и прочими отвлекающими шумами, которые мешают сосредоточиться.


К сожалению, рабочая комната очень маленькая, и при закрытой двери там можно просидеть всего 10-15 минут, после чего комнату приходится проветривать из-за слишком спертого воздуха. А для этого нужно или больше открывать окно (а это обязательный сквозняк) или дверь в коридор, где слышно практически все и всех :-(


К счастью, данную проблему удалось решить с помощью установки кондиционера с притоком свежего воздуха. Причем некоторые нюансы выбора кондиционера оказались настолько важными, что я был очень неприятно удивлен тем фактом, что при выборе и покупке модели мне про них продавец ничего не рассказал. Более того, некоторые особенности наоборот попытался скрыть или выставить как не важные.


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


Ведь как нельзя лучше про это сказал Генри Форд, что "разочарование от низкого качества длится дольше, чем радость от низкой цены".

Читать дальше →

Переосмысление концепции подсчета ссылок и полный отказ от сборщика мусора

Level of difficultyHard
Reading time6 min
Views12K


Фундаментальной (по моему мнению) проблемой множества языков программирования является неявное использование ссылок (ссылочных переменных).


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


Еще одной проблемой (или следствие предыдущей) является многопоточное и/или асинхронное выполнение программы, когда к одной и той же области данных может быть получен доступ из разных потоков приложения, что в купе с неявным доступом по ссылкам еще больше усугубляет ситуацию.


А как бы хотелось отдать эти проблемы на откуп компилятору! Чтобы компьютер сам автоматически проверял корректность доступа по ссылкам, в том числе и из разных потоков и чтобы все это делалось во время компиляции приложения без накладных расходов в рантайме!


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

Читать дальше →

Кот не птица, на жёрдочке не усидит

Level of difficultyEasy
Reading time2 min
Views1.7K

При написании этой статьи сперва мне хотелось описать какие нибудь параллели с ИТ, а потом с умным видом сделать вывод, но потом я решил, что фотографий котиков в статье будет вполне достаточно. Ну а для тех, кому статью читать не хочется, а фотографии кошачьих не интересуют, держите итоговый вывод.

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

Но обо всем по порядку под катом (с картинками)

Читать далее

Г̶р̶о̶ш̶ 1 рубль цена Mail.ru

Level of difficultyEasy
Reading time2 min
Views56K

Недавно прочитал новость, что Mail.ru отменила бесплатные вечные 100 ГБ для первых пользователей «Облако Mail.ru»


В конце октября 2024 года компания Mail (принадлежит VK) предупредила клиентов, что отменяет бесплатные вечные 100 ГБ для первых пользователей «Облако Mail.ru» спустя 11 лет старта проекта.

К сожалению, это не единственное нововведение от бывшего бесплатного почтового сервиса, который постепенно начинает коммерциализировать свою клиентскую базу, что совсем не удивительно, если введен законодательный запрет на использование иностранных почтовиков, а твою почту рекламируют на самих Госуслугах как замену бесплатной, но к сожалению запрещенной gmail.com.


Но это предыстория, а сама история вот:


Уже давно обратил внимание, что при отправке любого письма на Mail.ru показывается плашка "Письмо отправлено. Вы можете отменить отправку ..." со счетчиком оставшихся секунд до отмены, но я никогда на это не реагировал, всегда нажимая крестик для закрытия окна.


rbyee81nnp_jvwmddupm71ti-iw.jpeg


Но однажды, к своему сожалению, решил ради интереса посмотреть, что же будет, если нажать на кнопку "отменить отправку".


И как оказалось ничего хорошего!

Читать дальше →

Нормализуем собственное рабочее время или «очумелые ручки» в борьбе с прокрастинацией

Level of difficultyEasy
Reading time3 min
Views4.3K


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


И чтобы решить эту проблему раз и навсегда, купил себе простенький таймер, чтобы максимально легким способом (без всяких смартфонов), можно было устанавливать временные периоды для работы и перерывов.


Сразу хочу написать, что это решение, что называется "зашло", и даже сейчас я пишу статью под контролем таймера. Но сама статья не о самоорганизации работы, а об устройстве для этого (непосредственно самом таймере). Точнее о том, как я его дорабатывал под собственные нужды в надежде, что вдруг кому-то пригодится мой опыт.

Читать дальше →

What's wrong with the term «Artificial Intelligence»?

Level of difficultyEasy
Reading time4 min
Views782


Recently, there has been a lot of talk about the success of artificial intelligence (AI), although this usually means another achievement in the field of generative neural networks.


And few people, speaking about AI, try to explain what they themselves understand by the term “artificial intelligence.” After all, it’s one thing to write about “AI problems,” and quite another to endow an ordinary computer algorithm with at least the rudiments of intelligence.


After all, the etymology of the established phrase “artificial intelligence” is not unambiguous and can take on different meanings depending on what meaning the author is trying to put into it.

Read more →

Неоднозначный термин «искусственный интеллект»

Level of difficultyEasy
Reading time5 min
Views3.2K


Последнее время кто только не говорит про успехи искусственного интеллекта (ИИ), часто подразумевая под этим очередное достижение в области генеративных нейросетей. И как обычно, одни делают деньги на хайпе, другие жаждут появления Сары Коннор настоящего сильного ИИ (который в будущем захватит мир), а кто-то просто в очередной раз насилует журналиста.


И очень мало тех, кто при упоминании ИИ пытается пояснить, а что он сам понимает под термином "искусственный интеллект". Ведь одно дело писать про "область задач из разряда ИИ", и совсем другое, наделять обычный компьютерный алгоритм хотя бы зачатками разума.


Давно хотел написать, что сама этимология устоявшегося словосочетания "искусственный интеллект" не однозначна и может принимать разные значения из контекста, так как обозначает понятие, которое может отличаться от того, которое в него пытается вложить автор. И чтобы понять, что же в словосочетании "искусственный интеллект" не так, давайте разложим его на составляющие:

Читать дальше →

ИТ — сам себе профсоюз

Level of difficultyEasy
Reading time2 min
Views4.6K


Как-то меня зацепила статья Зачем вам нужен профсоюз? в которой от лица работников ИТ-отрасли стран СНГ пропагандируется организованная форма саботажа воздействия на работодателя, как единственный способ решения проблем между работниками и собственниками бизнеса.


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


И ни одном случае ни разу не было ситуации, когда забастовка помогла бы в разрешении кризисной ситуации. Потому что забастовка, это "Ultima ratio", последний довод, и он хорош только в виде аргумента, до использования которого дело не дойдет. Но если уж дошло, то можно со 100% уверенностью готовить заявление на увольнение, потому что у работодателя достаточно способов не нарушая закон избавиться от подобных неадекватных сотрудников.

Читать дальше →

Storybook — генератор сказок с ИИ на Raspberry Pi 5 и 7-цветном дисплее E-Ink

Level of difficultyEasy
Reading time3 min
Views5.4K

Последнее время только ленивый не пишет о великом прорыве человечества в области разработки искусственного интеллекта под общим названием "большая языковая модель" (LLM, large language model). И хотя у них остается еще много возможностей для совершенствования, но за последние несколько лет подобные приложения стали действительно востребованными. Большие языковые модели привлекают своей сверхъестественной способностью резюмировать текст, понимать естественный язык и создавать контент (и судя качеству некоторых статей, в том числе и тут на Хабре).


Правда подобные инструменты иногда сбоят и выдают некорректную информацию т.е. "галлюцинируют", которую выдают за правду. Генераторы изображений могут нарисовать лошадей с пятью ногами или кисть руки с семью пальцами. Однако подобные "фантазии" не всегда плохо. Например, когда творчество ценится выше точности, генерация не существующего контента, но похожего на правду, может оказаться полезной.


Томас Валадес (Thomas Valadez) воспользовался этим творческим потенциалом, чтобы создать интересное устройство под названием «Storybook». Его проект с открытым исходным кодом превращает Raspberry Pi в рассказчика на базе искусственного интеллекта, способного создавать иллюстрированные сказки. Это устройство использует LLM и генератор изображений для создания одной страницы книги из никогда не существовавшего сборника рассказов и выводит их на E-Ink дисплей.


Читать дальше →

Simple complex programming

Level of difficultyMedium
Reading time5 min
Views1.2K


I always pay attention to assessing the complexity of programming in a particular language. Programming is indeed not an easy task and this is perceived as a fact and usually does not require any confirmation.


But the concept of “complexity” is akin to the term “heap”. For some, five coconuts is not so much, but for someone who ate one and “didn’t want any more,” this means that even one coconut will be too much for him.


The same goes for the complexity of programs. It seems that the constant increase in the complexity of programs is obvious to everyone and is observed in all areas of application of IT technologies, and programming languages themselves become more and more complex as they develop, but assessing “complexity” using numerical metrics is a problem. obviously a thankless task, but also “You can’t manage what you can’t measure...”


Typically, talk of “complexity” only implies value judgments without any numerical evaluation. And since I am personally interested in the issue of the complexity of programming languages, I decided to calculate the complexity of implementing the gcc compiler on some conditional “parrots”. What if we could see some patterns of difficulty changing over time?

Read more →

Bodyfuck – как писать программы без клавиатуры и c пользой для здоровья

Level of difficultyEasy
Reading time1 min
Views4K

Brainfuck — это один из эзотерических языков программирования, который имеет всего восемь команд, каждая из которых записывается одним символом.


А Bodyfuck — это жестовый интерпретатор Brainfuck, который позволяет писать код программы, используя различные движения тела без использования клавиатуры.


Смотрите, не перепутайте! :-)


Building blocks in programming languages

Level of difficultyMedium
Reading time5 min
Views933

Practically all programming languages are built either on the principle of similarity (to make like this one, only with its own blackjack) or to realize some new concept (modularity, purity of functional calculations, etc.). Or both at the same time.


But in any case, the creator of a new programming language doesn't take his ideas randomly out of thin air. They are still based on his previous experience, obsession with the new concept and other initial settings and constraints.


Is there a minimal set of lexemes, operators, or syntactic constructs that can be used to construct an arbitrary grammar for a modern general-purpose programming language?

Read more →

Possible solution to the problem of references in programming languages

Level of difficultyMedium
Reading time4 min
Views795


Every programmer is familiar with the concept of "reference." This term usually refers to a small object whose main task is to provide access to another object physically located elsewhere. Because of this, references are convenient to use, they are easily copied, and they make it very easy to access the object to which the reference points, allowing access to the same data from different parts of the program.


Unfortunately, manual memory management, or more precisely, manual memory control, is the most common cause of various errors and vulnerabilities in software. All attempts at automatic memory management through various managers are hampered by the need to control the creation and deletion of objects, as well as periodically run garbage collection, which negatively affects application performance.


However, references in one form or another are supported in all programming languages, although the term often implies not completely equivalent terms. For example, the word "reference" can be understood as a reference as an address in memory (as in C++) and a reference as a pointer to an object (as in Python or Java).


Although there are programming languages that try to solve these problems through the concept of "ownership" (Rust, Argentum, or NewLang). The possible solution to these and other existing problems with references will be discussed further.

Read more →

Возможное решение проблемы ссылок в языках программирования

Level of difficultyMedium
Reading time5 min
Views5.3K


Любому программисту знакомо понятие "ссылка". Под этим термином обычно понимают небольшой объект, главная задача которого обеспечить доступ к другому объекту, физически расположенному в другом месте. Из-за этого ссылки удобно использовать, они легко копируются, и с их помощью очень просто получить доступ к объекту, на который эта ссылка ссылается и можно получить доступ к одним и тем же данным из разных мест программы.


К сожалению ссылки, точнее ручное управление памятью, является наиболее частой причиной возникновения различных ошибок и уязвимостей в программном обеспечении. А все попытки автоматического управления памятью с помощью различных менеджеров упираются в необходимость контролировать создание и удаление объектов, а также периодически запускать сборщик мусора, что отнюдь не положительно сказывается на производительности приложений.


Тем не менее, ссылки в той или иной форме поддерживаются во всех языках программирования, хотя под этим термином часто подразумеваются не полностью эквивалентные термины. Например, под словом "ссылка" можно понимать ссылку как адрес в памяти (как в С++) и ссылку, как указатель на объект (как в Python или Java).


Хотя встречаются языки программирования, которые пытаются решать данные проблемы за счет концепции "владения" (Rust, Аргентум или NewLang). О возможном решении этих и других имеющихся проблем со ссылками далее и пойдет речь.

Читать дальше →

Замена ламп на светодиодную подсветку у старого TFT монитора

Level of difficultyMedium
Reading time4 min
Views16K


У меня уже более пяти лет пылится старый монитор ASUS VH323T. Это довольно старая модель с диагональю 23" и довольно неплохой матрицей (на КДПВ не он), но все дело портит очень плохая подсветка. Мало того, что у нее очень низкая яркость (всего 300 кд/м2), так еще лампы подсветки со временем очень сильно потускнели до противного желтого цвета, в результате чего монитор был заменен на более современный, чтобы не ломать глаза.


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


Когда-то встречал на просторах интернета пару статей, в которых описывалось, что можно заменить в мониторе старые лампы подсветки на новые. И после того, как в очередной раз запнулся за коробку со старым монитором, решил попробовать заменить его подсветку на светодиодную. Ведь после этого его можно будет либо честно продать, либо просто выкинуть. В любом случае, избавлюсь от старого хлама :-)


Кому интересны рабочие нюансы и рассказ о не совсем очевидных проблемах, прошу под кат с фотками котиков этапов работ, конечного результата и финальных выводов.

Читать дальше →

Динамическая JIT компиляция C++

Level of difficultyMedium
Reading time12 min
Views7.4K


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


А теперь, похоже, я нашел еще один очень полезный Хаброхак, который заключается в использования Хабра как записной книжки, но не как в том анекдоте я думал, что это блокнот для заметок, а всем видно оказывается что я здесь написал, а в самом хорошем смысле — для хранения результатов различных экспериментов, подведения итогов поиска в решения проблем и публикации итоговых выводов.


Так, на днях искал материалы про JIT компиляцию C++ в рантайме с помощью clang/llvm и поиск мне выдал мою же собственную статью трехгодичной давности: Динамическая JIT компиляция С/С++ в LLVM с помощью Clang / Хабр. В результате появилась уже эта новая статья про JIT компиляцию C/С++.

Читать дальше →

Строительные кирпичики в языках программирования

Level of difficultyMedium
Reading time6 min
Views6.7K


К сожалению, закончилась череда новогодних праздников и опять начинаются рабочие будни. Из-за этого придется опять большую часть времени отводить работе, а не чтению Хабра :-). Но пока новогодний запал не иссяк, опубликую продолжение серии статей на тему разработки языков программирования.


В результате обратной связи по статье с размышлениями о структурном программировании, было много отзывов и споров в комментариях, за которые я хочу сказать всем большое спасибо.


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

Читать дальше →

Постоматы в оффлайн-магазине (или обратная связь для ДНС)

Level of difficultyEasy
Reading time3 min
Views8.2K


Прочитал материал "М.Видео: Нам всё равно" и невольно восхитился терпению его автора (Mike-M):


3 месяца и 40 обращений. Ровно столько времени и усилий мне потребовалось, чтобы прийти к выводу в заголовке статьи.

Тогда как мне хватило всего одного раза столкнуться с непониманием продавца-консультанта, чтобы решить написать обратную связь. Правда не для сети М.Видео, а для магазина ДНС, но это разница не принципиальная.


А поводом ко всему послужили установленные в магазине ДНС постоматы, хотя все началось с покупки SSD диска для ноутбука в магазине Озон :-)

Читать дальше →

Information

Rating
43-rd
Location
Россия
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Software Architect
Lead
C++
OOP
Linux
Programming microcontrollers
Embedded system
C
Qt
Software development