Как стать автором
Обновить
121
-5
Александр Рябиков @rsashka

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

Отправить сообщение

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

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 310


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


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


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

Читать дальше →
Рейтинг 0
Комментарии 1

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

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 6.3K


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


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


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

Читать дальше →
Всего голосов 8: ↑5 и ↓3 +2
Комментарии 35

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

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 6.4K


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


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

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


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

Читать дальше →
Всего голосов 19: ↑12 и ↓7 +5
Комментарии 68

Размышления о структурном программировании

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 20K


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


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


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

Читать дальше →
Всего голосов 49: ↑42 и ↓7 +35
Комментарии 79

Управление памятью и разделяемыми ресурсами без ошибок

Уровень сложности Сложный
Время на прочтение 7 мин
Количество просмотров 3.7K


Мельком пробежал статью Синхронизация операций в .NET на примерах / Хабр, после чего захотелось поделиться с пользователями Хабра некоторыми мыслями насчет синхронизации доступа к объектам в различных языках программирования.


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

Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 38

Обходим обязательную привязку телефонного номера к своей учетной записи на GitHub

Уровень сложности Средний
Время на прочтение 2 мин
Количество просмотров 15K

Недавно столкнулся с лицемерием GitHub, который якобы под предлогом беспокойства о безопасности обычных пользователей начал вводить обязательную двухфакторную аутентификацию. Сперва выборочно только для самых активных, а в последствии и для всех остальных без исключения.


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


Enable 2FA now. You'll be able to continue on with your work right after.

Но как обычно, дьявол в деталях. Ведь чтобы добавить аппаратный ключ нужно, чтобы двухфакторная аутентификация была УЖЕ активирована.


Другими словами, чтобы использовать аппаратный ключ, нужно предварительно включить двухфакторную аутентификацию с использование SMS (читай номера телефона), либо программы, которая привязана к сетевой учетной записи Googgle, Microsoft или другого сервиса и опять же с привязкой к номеру телефона.


И в данном случае фокус с отправкой SMS на левый номер какого нибудь сервиса для временных телефонных номер вряд ли будет хорошей идеей.


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

Читать дальше →
Всего голосов 26: ↑11 и ↓15 -4
Комментарии 112

Осторожно! Старый н̶о̶в̶ы̶й̶ развод на Алиэкспрессе

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 92K


Довольно часто встречаются статьи про разные варианты обмана покупателей в интернет магазинах. То пришлют кусок камня вместо Айфона, то внутри твердотельного диска будет обычная флешка с гайками как на КДПВ. Поэтому при оформлении новой покупки нужно строго подходить к выбору продавца (не новый, высокий рейтинг, мало отрицательных отзывов и пр.) и не менее важно, в каком магазине совершается покупка.


Сам я вроде не новичок в плане интернет покупок, да и Алиэкспресс довольно неплохой магазин в плане оформления возвратов и разрешения споров с продавцами. Но как оказалось и на старуху бывает проруха. В результате я столкнулся возможно с новым видом развода покупателей на Алиэкспресс о котором раньше не читал. Ну или информация о подобной схеме развода прошла мимо меня.


Как говорится, предупрежден, значит вооружен. И данная статья — предупреждение другим возможным потенциальным жертвам, а так же простые рекомендации как не попадать на ту же самую уловку, на которую попался я при оплате очередного "выгодного" предложения из Китая.

Читать дальше →
Всего голосов 121: ↑109 и ↓12 +97
Комментарии 376

Голь на выдумки хитра или как сэкономить более 200 тыс.руб на изготовлении собственого оборудования

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 7.6K


Как-то пару лет назад была поставлена задача облегчить работу ОТК и создать для них прибор входного контроля некоторых покупных изделий. Суть проверки заключалась в измерении внутреннего сопротивления и последующей сигнализации сотруднику, что результат измерения находится в пределах заранее заданного допуска.


Оборудование с подобной функциональностью уже присутствует на рынке (милли или микроомметры). Его можно свободно купить, запрограммировать на световую или звуковую индикацию при настройке нужного диапазона, но было несколько НО. Устройство требуется сперва настроить и перед началом каждой смены нужно переключать на необходимый для работы диапазон. Да и ценник у подобного оборудования находится в пределах 50-120тыс. руб., а самих приборов нужно было сразу несколько штук.


Типов контролируемых изделий было несколько и у них совершенно разные характеристики, но самая большая проблема была общая — очень узкий диапазон измерений (от единиц до полутора десятков Ом) и необходимость обеспечения высокой степени точности (в некоторых случаях требовалась погрешность порядка 1%).


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


Что из этого в конце концов вышло?

Читать дальше →
Всего голосов 42: ↑37 и ↓5 +32
Комментарии 41

Нюансы разработки парсера для своего языка программирования

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 10K

image


Недавно прочитал на Хабре статью Свой язык, или как я устал от ассемблера и С, и невольно взглядом зацепился за один абзац:


Я решил не сильно париться, поэтому использовал библиотеку parglare. Она очень легкая и удобная, всем рекомендую. Для описания синтаксиса парсер принимает строку в соответствующем формате, использует регулярные выражения (не надо осуждать регулярки, они всесильны!).

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


Ведь в жизни практически любого программиста может наступить момент, когда ему в голову приходит светлая идея — разработать свой собственный язык программирования. Может быть и не ради захвата мира, наравне с C/C++, Python или хотя бы PHP, а в качестве личного пет-проекта, с которым он, длинными зимними вечерами будет оттачивать собственное мастерство.


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


Это история — заметки на память о муках выбора связки лексер-парсер для разбора грамматики NewLang. А так же попытка описать и систематизировать выводы об особенностях разных анализаторов с которыми пришлось поработать при выборе парсера для разбора грамматики у своего языка программирования.

Читать дальше →
Всего голосов 32: ↑30 и ↓2 +28
Комментарии 55

Девайс HabrScore для хаброзависимых с блекджеком и …

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 6.6K

|300


Понравилась статья HabraTab — девайс для хаброзависимых, где описана разработка устройства для визуализации рейтинга пользователя на Хабре.


И мне очень захотелось подобное устройство, вот только было несколько но:


  • Очень лень было делать, заказывать и паять печатную плату
  • Еще хотелось выводить рейтинг последней статьи, но хардкодить адрес и каждый раз пересобирать прошивку показалось очень муторно.
  • Разработка на С/С++ меня не пугает, так как занимаюсь этим более 20 лет, но писать что-то под Arduino у меня душа не лежит. И это не говоря про необходимость настройки системы сборки под конкретный микроконтроллер.

Короче, немного поразмыслив, было принято решение делать свое устройство для визуализации рейтингов на Хабре, и как обычно с блекджеком и… ну вы поняли. И самое главное, чтобы можно было собирать устройство из покупных деталей с Алиэкспресса для максимально простого повторения и кодить на чем-нибудь попроще, чем на С/С++.

Читать дальше →
Всего голосов 37: ↑37 и ↓0 +37
Комментарии 15

Неожиданная проблема с макросами (точнее без макросов)

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 5.3K

image


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


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


Если же говорить о простых реализациях макросов, например как для языков С и С++, то умные люди и умные книжки советуют избегать использования макросов и по возможности заменять их шаблонами, константами и inline-функциями. Ведь с помощью макросов можно не только упростить код, но и не менее изящно стрелять в ноги себе или своих товарищей.


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

Читать дальше →
Всего голосов 5: ↑3 и ↓2 +1
Комментарии 29

Доработка фильтра обратного осмоса

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 22K

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


Хотя фильтры под мойкой менялись не очень давно, я решил поменять их еще раз, и к своему ужасу увидел неприглядную картину, примерно вот такую:


грязные


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


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


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

Читать дальше →
Всего голосов 25: ↑15 и ↓10 +5
Комментарии 266

DSL (domain-specific language) implementation with macros

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 2K

image
This is a translation of my own article


The release of NewLang language with a brand new "feature" is coming, a remodeled version of the preprocessor that allows you to extend the language syntax to create different DSL dialects using macros.


What is it about?


DSL (Subject Oriented Language) is a programming language specialized for a specific application area. It is believed that the use of DSL significantly increases the level of abstractness of the code, and this allows to develop more quickly and efficiently and greatly simplifies the solution of many problems.

Conditionally, we can distinguish two approaches to DSL implementation:


  • Development of independent syntax translators using lexer and parser generators to define the grammar of the target language through BNF (Backus–Naur form) and regular expressions (Lex, Yacc, ANTLR, etc.) and then compiling the resulting grammar into machine code.
  • Development or integration of the DSL dialect into a general-purpose language (metalanguage), including the use of various libraries or special parsers / preprocessors.

We will talk about the second option, namely the implementation of DSL on the basis of general-purpose languages (metalanguages) and the new implementation of macros in NewLang as the basis for DSL development.

Read more →
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 2

Вариант реализации DSL (domain-specific language) с помощью макросов

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 3.6K

image


Близится релиз языка NewLang с принципиальной новой «фишкой», переделанным вариантом препроцессора, который позволяет расширять синтаксиса языка для создания различных диалектов DSL за счет макросов.


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


О чем идет речь?


DSL (Предметно-ориентированный язык) — язык программирования, специализированный для конкретной области применения. Считается, что использование DSL существенно повышает уровень абстрактности кода, а это позволяет вести разработку более быстро и эффективно и существенно упрощает решение многих задач.

Условно, можно выделить два подхода к реализации DSL:


  • Разработка независимых трансляторов синтаксиса с помощью генераторов лексеров и парсеров для определения грамматики целевого языка посредством БНФ и регулярных выражений (Lex, Yacc, ANTLR и т. д.) и последующей компиляцией полученной грамматики в машинный код.
  • Разработка или встраивание диалекта DSL на языке (метаязыке) общего назначения, в том числе за счет применения различных библиотек или специальных парсеров / препроцессоров.

Далее речь пойдет о втором варианте, а именно, о реализации DSL на базе языков (метаязыков) общего назначения и новом варианте реализации макросов в NewLang как основы для разработки DSL.

Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 22

Простой лайфхак для ввода символа "#" в русской раскладке клавиатуры под Linux

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 20K

знак решетки


Давно полюбил формат Markdown за простоту и легкость его использования при документировании исходного кода и за возможность его применения при оформлении статей для Хабра. Потом добавился Obsidian для ведения заметок. И формат Markdown стал по сути основным способом форматирования набираемого текста.


Единственной, но весьма большой ложкой дегтя, оставалась проблема ввода символа решетки «#» при использовании русской клавиатуры. А так как знак решётки (октото́рп, хеш, знак номера, дие́з, sharp), в русской раскладке клавиатуры отсутствует, то каждый раз переключаться на английскую раскладку, меня немного утомляло. И «немного утомляло» еще мягко сказано, так как символ решетки, кроме указания заголовков в Markdown и тегов в Obsidian, еще часто используется как начало комментария до конца строки (в Bash, Python, NewLang).


А так как предлагаемые на просторах интернета способы ввода символа решетки в русской раскладке клавиатуры меня совсем не вдохновляли (и если Alt+35 на Numpad под виндой еще сойдет, но этот способ не работает под Linux, а занимать буфер обмена ради вставки одного символа, вообще не вариант), то пришлось потратить некоторое время на эксперименты, результатами которых я и хочу поделиться.

Простой лайфак ввода # в русской раскладке под Linux
Всего голосов 27: ↑19 и ↓8 +11
Комментарии 45

Встречайте, новая стратегия Embrace, Extend, and Expropriate для Linux?

Уровень сложности Средний
Время на прочтение 2 мин
Количество просмотров 8.6K

image


Помните, несколько лет назад была проведена согласованная клеветническая компания против Ричарда Столлмана, в которой он был ложно обвинён в одобрении изнасилований, и по результатом которой его вынудили уволиться с поста президента Фонда Свободного Программного Обеспечения?


Уже тогда многие предполагали, что данная спланированная акция является подготовкой к атаке производителей проприетарных программ на экосистему свободного программного обеспечения. Многие в это не верили (типа, «не приписывайте обычную глупость злому умыслу»), а кто-то не верит и сейчас. Ведь гораздо проще и удобнее игнорировать якобы не существующую опасность, ведь в противном случае на нее нужно как-то реагировать (хотя бы морально).


И вот сейчас, в релизе ядра Linux 6.2, произошло очень важное изменение — разрешён приём кода в ядро Linux под лицензией Copyleft-Next, для которой заявлена совместимость с GPLv2, что подтверждено юристами компаний SUSE и Red Hat (кто бы сомневался?).


Данная лицензия также содержит пункт о предоставлении прав на запатентованные технологии, что делает Copyleft-Next совместимой и с Apache 2.0. А для обеспечения полной совместимости с GPLv2, в тексте Copyleft-Next явно указано, что производная работа может поставляться не только под исходной лицензией Copyleft-Next, но и под лицензией GPL.


Но как говорится, «есть нюанс».

Читать дальше →
Всего голосов 50: ↑36 и ↓14 +22
Комментарии 66

Релиз языка программирования NewLang 0.3

Время на прочтение 9 мин
Количество просмотров 7.1K
image

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


NewLang находится в процессе активного развития. Это третий публичный релиз в который добавлены новые существенные возможности по сравнению с предыдущей версией.

Читать дальше →
Всего голосов 11: ↑8 и ↓3 +5
Комментарии 51

А слабо собрать скоринговую базу доверчивых клиентов лох̶терей?

Время на прочтение 2 мин
Количество просмотров 6.6K


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

С самим лотереями особо не заморачивался и покупал билеты, которые не требуется заполнять. Какие нибудь 100-Лото и тому подобные. И вчера, я как и обычно, попросил несколько билетов на сдачу и… покупка не состоялась, потому что у меня потребовали номер мобильного телефона!
Читать дальше →
Всего голосов 10: ↑6 и ↓4 +2
Комментарии 25

История одного перехода с gcc на clang

Время на прочтение 5 мин
Количество просмотров 11K


На прошлой неделе, после нескольких месяцев разработки, вышла очередная версия языка программирования NewLang. Одной из технических особенностей данного релиза является переход на использования компилятора clang вместо gcc.

Данная статья описывает причины смены компилятора, некоторые особенности этого процесса, проблемы, которые приходилось решать и итоговые выводы.

Автор надеется, что эта информация может оказаться полезной и позволит сэкономить кучу времени, если заранее знать некоторые подводные камни, а так же положительные стороны от перехода на clang.
Читать дальше →
Всего голосов 17: ↑14 и ↓3 +11
Комментарии 5

Релиз языка программирования NewLang 0.2

Время на прочтение 5 мин
Количество просмотров 8.2K

image


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


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


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

Читать дальше →
Всего голосов 12: ↑7 и ↓5 +2
Комментарии 22

Информация

В рейтинге
Не участвует
Откуда
Россия
Работает в
Дата рождения
Зарегистрирован
Активность

Специализация

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