Как стать автором
Обновить

Все потоки

Сначала показывать
Порог рейтинга
Уровень сложности

QapGen: Создаём мощные парсеры на C++

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

QapDSLv2 — это язык который транслируется в обычный C++ код. Он позволяет удобно и компактно задавать грамматики/правила разбора кода программ, значительно упрощая разработку компиляторов/анализаторов/трансляторов.

QapGen — это генератор дерева_лексеров/парсеров описанных на QapDSLv2. Сама грамматика QapDSLv2 описана на QapDSLv2 на 100%. Поэтому QapGen как основной читатель этой грамматики сам генерирует часть своего кода(весь парсер QapDSLv2).

Основные фишки QapDSLv2 + QapGen — это:

1) Отсутствие этапа токенизации — дерево лексеров разбивает входной поток на лексемы и сохраняет их в строго типизированных древовидных С++ структурах пропуская этап токенизации.

2) Генерация оптимизированного кода полиморфных лексеров.

3) Полное сохранение всех лексем(даже разделители сохраняются, такие как пробелы/переходы на новую строку и комментарии) в результирующем дереве.

4) Возможность сохранить как оригинальное дерево, так и модифицированное обратно в код/текст без потери разделителей/комментариев.

5) Автоматическая генерация кода посетителей(это такой паттерн проектирования).

А теперь пример самой сочной части(рекурсивно самоописывающийся код):

structt_target_struct:i_target_item{
structt_keyword{
stringkw=any_str_from_vec(split("struct,class",","));
" "? // optional separator
};
structt_body_semicolon:i_struct_impl{";"};
structt_body_impl:i_struct_impl{
"{" // жрём скобочку
vector<TAutoPtr<i_target_item>>nested?; //рекурсия!
" "?
vector<TAutoPtr<i_struct_field>>arr?; // парсим поля
" "?
TAutoPtr<t_cpp_code>c?; // остальной С++ код
" "?
"}"
};
structt_parent{
stringa_or_c=any_str_from_vec(split("=>,:",","));
" "?
t_namename;
};
//точка входа в парсер:
TAutoPtr<t_keyword>kw?; //парсимstruct/class
t_namename; //парсим имя
" "?
TAutoPtr<t_parent>parent?;
" "?
TAutoPtr<i_struct_impl>body;
};

Читать далее

COBOL в XXI веке: почему банки и госслужбы не могут отказаться от языка 1959 года

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

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

Как старейший «серверный» язык справляется с XXI веком, где безопасность и гибкость важнее вечной стабильности?

Читать далее

Как создать свой парсер и AST-генератор на C++ с минимальными усилиями: знакомьтесь с QapDSLv2

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

QapDSLv2: Новый стандарт AST-heavy парсинга

QapDSLv2 обеспечивает:

Молниеносное построение AST

Полное сохранение структуры исходного кода

Простоту интерпретации и модификации грамматик

Забудьте о любы других парсерах! С помощью QapDSLv2 можно создавать компиляторы/анализаторы/форматировщики кода за минуты/часы.

Парсеры и генерация абстрактных синтаксических деревьев (AST) — это обычно долго, сложно и требует тонны шаблонного кода. Но что если я скажу, что теперь можно описывать грамматики и структуры данных одновременно и получать готовый, оптимизированный C++ код автоматически?

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

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

Готовы ускорить разработку и вывести свои проекты на новый уровень?

QapGen — мощный генератор парсеров, построенный на основе QapDSLv2, который из грамматик QapDSLv2 сразу создаёт высокопроизводительный C++ парсер с типизированным AST, описанным прямо в грамматике.

t_sep{
stringbody =any(" \t\r\n");
}
using" "ast_sep;
t_value{
TAutoPtr<i_value> body;
" "?
}
t_comma_value{
","
t_value body;
" "?
}
t_array:i_value{
"["
" "?
t_value first?;
vector<t_comma_value> arr?;
"]"
" "?
}

Читать далее

Как я собеседовался в Ozon, Т-Банк, Mindbox и другие крупные компании

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

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

История длинная, но интересная

Уведомление в Роскомнадзор. Что делать?

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

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

Операторы обязаны подавать уведомление в РКН до начала обработки персональных данных. Это старая норма, нет, она не появилась только в этом году. Просто до 30 мая действовали старые штрафы (около 500 рублей), а с 30 мая появилась отдельная статья за неподачу уведомления и стали действовать новые:

Читать далее

Зумерам стало сложнее находить работу в IT. Во всем виноват AI?

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

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

Но рынок изменился — зумерам находить первую работу стало гораздо сложнее. Раньше новички учились на рутине — багфиксы, простая верстка, юнит-тесты, ручная аналитика. Сегодня эти задачи отдают AI. Компании реже вкладываются в рост молодых, предпочитая оптимизацию процессов: здесь меньше рисков и затрат, выше скорость. Это удобно бизнесу, но для тех, кто только начинает карьеру, вход стал намного сложнее. 

Меня зовут Татьяна Горбацевич, я тимлид рекрутинга в KODE. В статье расскажу о том, как меняется рынок, за что ценят зумеров и что делать, если вы только начинаете карьеру.

Читать далее

Когда нужны компромиссы в тестировании

Время на прочтение4 мин
Количество просмотров240

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

Читать далее

Разворачивая свой WAF: открытые инструменты

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

Ранее в блоге beeline cloud мы рассказывали про веб-приложения компаний: почему они часто становятся целями злоумышленников и что способны им противопоставить решения WAF — Web Application Firewall. Сегодня рассмотрим несколько инструментов такого класса от разработчиков из Китая, Франции и Италии.

Читать далее

Запускаем MIPI DSI экраны от смартфонов. Разработка схемы основной платы. Часть 3. Завершаем схему

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

Выбрать подходящий разъём – это просто или сложно? В любом случае это важно.

Как быть с передачей дифференциальных пар на другую плату?

Сколько нужно контактов земли?

Стоит ли применять дифференциальные (common mode) фильтры и защиту от ESD?

Какой разъём лучше выбрать для питания?

В данной части рассмотрим эти и другие вопросы. Подберём разъёмы, добавим фильтры и защиты и завершим разработку схемы нашей платы.

Полетели! :)

Я написал свой VPN-клиент для Android. Зачем, если их сотни, и что скрывается под капотом?

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

Каждый раз, нажимая кнопку «Connect» в очередном VPN-приложении, я ловил себя на мысли: а что там, под капотом? Как эта магия на самом деле работает на уровне Android? Вокруг сотни готовых решений, но простое пользовательское любопытство переросло в профессиональное: мне захотелось не просто использовать, а понять. Понять, какие подводные камни скрывает VpnService, как реализовать весь цикл от авторизации до поднятия защищённого туннеля и что на этом пути может пойти не так.

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

Так родилась идея этого проекта — создать свой, пусть и простой, VPN-клиент. Это не попытка сделать коммерческий продукт, а скорее исследовательское погружение, мой личный "челлендж" и способ разложить всё по полочкам.

Заглянуть под капот

Вы не будете в это играть: игровые миры, в которые больше нельзя попасть

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

Мы привыкли считать, что в цифровом пространстве ничто не исчезает: фильм можно пересмотреть, фото — восстановить, книгу — переиздать. Но с играми все иначе. Стоит серверам замолкнуть, и игра исчезает. Игры умирают как пространство действия. Иногда беззвучно, без прощального сообщения. Виртуальный мир, в который когда-то заходили тысячи игроков, превращается в воспоминание.

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

Вспомнить былое

Гайд на полиморфизм. Rust

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

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

Читать далее

GlobalFoundries укрепляет позиции в RISC-V и приобретает MIPS: разбираемся с патентами компании

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

Компания GlobalFoundries (GF), один из ключевых игроков в сфере контрактного производства полупроводников, объявила о покупке MIPS — разработчика процессорных ядер на архитектуре RISC-V. Сделка позволит MIPS сохранить операционную самостоятельность, но при этом получить доступ к ресурсам GF для ускорения разработки и вывода на рынок новых решений. Разбираемся с патентами MIPS.

Спойлер: всё очень круто!

Читать далее

Ближайшие события

RTX 5060 Ti 16 GB: лучшая бюджетная видеокарта для 2К-гейминга в 2025 году?

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

Научно-технический прогресс неумолим, и по мере его развития растут и требования к стандартам качества. В последнее время все больше людей приходят к выводу, что новый стандарт разрешения для игр — это QHD (2560x1440). Действительно, при современном уровне графики разрешения Full HD (1920x1080) уже недостаточно, чтобы рассмотреть все детали и красоту видеоигр.

Но какая видеокарта оптимальна для игр в разрешении QHD? Вместе с редакцией блога «М.Клик» решили отыскать правильный ответ.

Читать далее

Миграция с Firebird на PostgreSQL. Что может пойти не так? Часть 2

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

В первой части обсуждалось как отличие реализации MVCC в Firebird и PostgreSQL может привести к сложностям при миграции информационной системы. Напоминаю девиз этой серии статей – "Ваши ожидания – это Ваши проблемы". Рассмотрим еще некоторые моменты, которые позволят Вам не находится в состоянии "обманутых ожиданий" при миграции с Firebird на PostgreSQL.

Читать далее

Research Ops в маленькой команде: как наладить процесс без бюджета и отдельной роли

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

Если в команде каждый делает всё, а пользовательские исследования – это «когда-нибудь потом», статья для вас. Я делюсь опытом, как мы наладили процесс discovery в маленькой команде без ресерчера и бюджета. Как шаблоны, хранилище знаний и короткие инсайты на ревью спринта изменили культуру команды. И почему для меня Research Ops – это не должность, а привычка думать вместе с пользователем.

Читать далее

Как поменять работу, не меняя ее на самом деле. Пересобираем смыслы с джоб-крафтингом

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

Огромную часть жизни мы проводим на работе — и если она не приносит удовлетворения, чувствовать себя ценным и счастливым просто не получится. И это не только личная проблема. Представьте: ходить на работу больше не интересно, все валится из рук — о какой продуктивности может идти речь? К тому же, если ты недоволен работой, растет риск конфликтов с командой и торможения процесса в целом. Но это далеко не всегда значит, что работу нужно менять. Можно попробовать «пересобрать» ее под себя, чтобы она снова стала в радость.

Меня зовут Асия Морозова, я руковожу направлением по обучению и адаптации персонала в MWS и часто выступаю с докладами — например, о том, как бороться с выгоранием, выстроить карьерный трек или пройти программу ротации. Моя любимая тема в последнее время — джоб-крафтинг. Могу говорить об этом часами, практикую сама и другим советую. Сегодняшняя публикация как раз об этом. Давайте вместе разбираться, как взглянуть на рутинные задачи под новым углом и заново (ну или впервые) влюбиться в свою работу.

Читать далее

Как мы создавали первую портативную умную колонку Яндекса

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

Меня зовут Александр Батин, я инженер‑схемотехник. Уже больше трёх лет я работаю в Яндексе в команде, которая занимается разработкой умных экранов и новых продуктов. Отвечаю за проектирование материнских плат (разрабатывал материнскую плату для Станции Дуо Макс), а в последних проектах участвую уже в качестве техлида.

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

— рассмотрим интересные моменты на этапе проектирования,

— поговорим о технических решениях, принятые в процессе работы,

— обратим внимание на сложности, с которыми столкнулась команда разработчиков.

Особое внимание уделю подходам к преодолению технических и инженерных вызовов: оптимизацию работы AI‑ассистента в условиях ограниченных вычислительных ресурсов и обеспечения стабильного взаимодействия при мобильном использовании без доступа к интернету.

Читать далее

Свет без источника: компактный датчик обнаружения молекул

Время на прочтение18 мин
Количество просмотров989

Практически любой аспект жизни человека в той или иной степени связан с измерением чего-либо: масса, расстояние, длина, температура и т. д. Часто от точности проведенных измерений зависит точность и успешность выполнения того или иного процесса. Когда речь идет об измерении крайне малых объектов, таких как молекулы используются оптические биосенсоры. Они чрезвычайно точны, но нуждаются в громоздком и дорогом оборудовании для генерации и обнаружения света. Ученые из Федеральной политехнической школы Лозанны (Швейцария) разработали систему, которая использует квантовую физику для обнаружения присутствия биомолекул без необходимости использования внешнего источника света. Как именно работает эта система, какие аспекты квантовой физики позволили ее реализовать, и что именно она может измерять? Ответы на эти вопросы мы найдем в докладе ученых.

Читать далее

О ненависти к российским дистрибутивам Linux

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

Каждый второй комментарий к новостям о российских дистрибутивах Linux можно сформулировать как "опять перерисовали шильдики".

Причем объяснить с чего перерисовали шильдики, комментаторы зачастую не могут. "Чувствую бесовщину, но доказать не могу!".

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

Но давайте поговорим про дистрибутивы.

Читать далее