
Рассказываю, как получилось, что в итоге не чат-боты помогали мне писать книгу, а скорее я стал скромным соавтором, и какие выводы можно сделать после работы с четырьмя моделями одновременно.
Пользователь
Рассказываю, как получилось, что в итоге не чат-боты помогали мне писать книгу, а скорее я стал скромным соавтором, и какие выводы можно сделать после работы с четырьмя моделями одновременно.
Рекомендую пощупать затылочную часть черепа — вдруг она есть вместо обычного сочленения костей. Кость инков — пример хаотичной мутации, когда в результате генной » беготни» и перемешивания, у некоторых людей вместо тройного шва от трёх костей черепа, есть четвёртая кость, она находится как островок между тремя базовыми костями. К тому же кость инков бывает симметричной, не симметричной, состоящей из 2 и 4 частей.
Привет, меня зовут Марат Зимнуров, я тимлид в кросс-функциональной команде HR Admin Tech Авито. Тема функционального программирования не обделена вниманием — и все же тяжело найти действительно понятный и структурно изложенный разбор данного инструмента. Нет нормального гайда для старта — ни у нас, ни на Западе. Многие говорят про иммутабельность и монады, но путаются в основах. В статье разбираю, что такое функциональное программирование на самом деле и зачем оно нужно.
В данной статье мы разъясним вопрос, который, находясь в самой основе теоретического программирования, при этом парадоксальным образом очень часто объясняется неправильно или неполно, причём эти неправильные объяснения даже иногда входят в учебные пособия (по крайней мере, известный китайский чатбот не смог мне правильно ответить на вопрос об отличии машины Тьюринга от конечного автомата, хотя, казалось бы, они приходятся чатботу ближайшими родственниками, и он мог бы изучить область деятельности своих создателей в обучающей выборке).
А в конце мы немного пофилософствуем на тему, что же такое программа и что такое семантика.
Электричество глубоко пронизывает жизнь человека. Порой даже сложно представить, насколько сильно мы зависим от этого удивительного физического явления.
Само функционирование человеческого организма является следствием биоэлектрических процессов. Наш организм — своеобразная электростанция, которая всегда с тобой (возможно, вам в детстве доводилось играть с маломощными светодиодами, которые начинали светиться от соприкосновения с кожей?). Основные источники электрического тока в нашем организме — нервная система и мышечная ткань. Нервная система представляет собой сложную электрическую сеть, по которой ежесекундно передаются тысячи импульсов. Эти импульсы генерируются нейронами в ответ на внешние раздражители. Фактически, именно благодаря им мы способны ощущать и осознавать окружающий мир.
Всем привет! Продолжаем делиться тем как мы разрабатываем наш инструмент моделирования. К предыдущей статье было много вопросов о том можно ли модели хранить и редактировать в текстовом виде, как насчёт architecture as code, code first и т. д. Мне хотелось бы написать, что мы добавили эту фичу в текущем релизе, но нет, пока есть только такая демка с исходниками. И в этой статье я расскажу как она сделана, как запилить свой предметно‑ориентированный язык (DSL) и текстовый редактор для него.
В прошлых статьях мы разобрали теорию: что такое полиморфизм и какие существуют способы его реализации. Настало время посмотреть, как это реализуется на практике. В качестве примера был выбран Rust — язык с богатой функциональностью, с одной стороны, и простой, прозрачной реализацией — с другой.
QapDSLv2 — это язык который транслируется в обычный C++ код. Он позволяет удобно и компактно задавать грамматики/правила разбора кода программ, значительно упрощая разработку компиляторов/анализаторов/трансляторов.
QapGen — это генератор дерева_лексеров/парсеров описанных на QapDSLv2. Сама грамматика QapDSLv2 описана на QapDSLv2 на 100%. Поэтому QapGen как основной читатель этой грамматики сам генерирует часть своего кода(весь парсер QapDSLv2).
Основные фишки QapDSLv2 + QapGen — это:
1) Отсутствие этапа токенизации — дерево лексеров разбивает входной поток на лексемы и сохраняет их в строго типизированных древовидных С++ структурах пропуская этап токенизации.
2) Генерация оптимизированного кода полиморфных лексеров.
3) Полное сохранение всех лексем(даже разделители сохраняются, такие как пробелы/переходы на новую строку и комментарии) в результирующем дереве.
4) Возможность сохранить как оригинальное дерево, так и модифицированное обратно в код/текст без потери разделителей/комментариев.
5) Автоматическая генерация кода посетителей(это такой паттерн проектирования).
А теперь пример самой сочной части(рекурсивно самоописывающийся код):
struct
t_target_struct:i_target_item{
struct
t_keyword{
string
kw=any_str_from_vec(split("struct,class",","));
" "? // optional separator
};
struct
t_body_semicolon:i_struct_impl{";"};
struct
t_body_impl:i_struct_impl{
"{" // жрём скобочку
vector<TAutoPtr<i_target_item>>
nested?; //
рекурсия!
" "?
vector<TAutoPtr<i_struct_field>>
arr?; // парсим поля
" "?
TAutoPtr<t_cpp_code>
c?; // остальной С++ код
" "?
"}"
};
struct
t_parent{
string
a_or_c=any_str_from_vec(split("=>,:",","));
" "?
t_name
name;
};
//точка входа в парсер:
TAutoPtr<t_keyword>
kw?; //парсим
struct/class
t_name
name; //парсим имя
" "?
TAutoPtr<t_parent>
parent?;
" "?
TAutoPtr<i_struct_impl>
body;
};
QapDSLv2: Новый стандарт AST-heavy парсинга
QapDSLv2 обеспечивает:
Молниеносное построение AST
Полное сохранение структуры исходного кода
Простоту интерпретации и модификации грамматик
Забудьте о любы других парсерах! С помощью QapDSLv2 можно создавать компиляторы/анализаторы/форматировщики кода за минуты/часы.
Парсеры и генерация абстрактных синтаксических деревьев (AST) — это обычно долго, сложно и требует тонны шаблонного кода. Но что если я скажу, что теперь можно описывать грамматики и структуры данных одновременно и получать готовый, оптимизированный C++ код автоматически?
QapDSLv2 — новый стандарт эффективности и удобства в парсинге. Это язык описания парсеров, который избавляет от синтаксического шума, упрощает интеграцию с C++ и позволяет создавать сложные анализаторы без боли и ошибок. Забудьте о бесконечных циклах отладки и непонятных генераторах — теперь всё просто, понятно и эффективно.
В этой статье вы узнаете, как QapDSL v2 меняет правила игры в мире парсинга и компиляторов, увидите реальные примеры и поймёте, почему это важно для каждого, кто работает с языками программирования и обработкой текста.
Готовы ускорить разработку и вывести свои проекты на новый уровень?
QapGen — мощный генератор парсеров, построенный на основе QapDSLv2, который из грамматик QapDSLv2 сразу создаёт высокопроизводительный C++ парсер с типизированным AST, описанным прямо в грамматике.
t_sep
{
string
body =
any
(" \t\r\n");
}using
" "
as
t_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?;
"]"
" "?}
Многие интеллектуалы склонны называть математику «царицей наук» и преподносить её теоремы как абсолютную истину, полученную чисто логическим дедуктивным выводом безотносительно физической реальности, не опираясь на эмпирические данные. Якобы математические объекты существуют вне пространства-времени, в разуме Бога или в платоновском мире идей, а мы лишь открываем вечные истины: числа и арифметические операции, геометрические фигуры, аксиомы и теоремы, а также правила вывода и доказательства истинности или ложности любых математических утверждений. Говорят, наше сознание имеет прямой доступ к этому миру математических абстракций посредством интуиции – не иначе, как божественного откровения или снисхождения самой истины, открывающейся только тем, кто её достоин.
Но в данной статье я собираюсь обосновать прямо противоположную и достаточно крамольную идею, что всё наше математическое знание производно от физического знания, а не наоборот. Знание не имеет гарантий, его невозможно получить одной логикой или интуицией. Знание экспериментально, подвержено ошибкам и не является абсолютной истиной, так как мы изучаем математику на опыте, взаимодействуя с физическими объектами. Поэтому математика ничем не лучше и не «точнее» естественных наук. За такую ересь инквизиторы уже могут приговорить меня к сожжению на костре, но пока этого не произошло, позвольте объяснить и обосновать свою позицию.
На древних глиняных табличках из Месопотамии встречаются математические тексты с достаточно сложными вычислениями. Кроме прочего, для записи чисел использовалась шестидесятеричная система, которая имеет существенное «компьютерное» преимущество перед современной десятичной. Посмотрим, как можно считать в клинописных «галках» и «палках», как записывать дроби, и что это даёт в сравнении не только с десятичной, но и с шестнадцатеричной системой.
В следующий раз когда жена или мамка начнёт пилит тебя, что ты опять сидишь за компом и тратишь бесценное время, то вспоминай мои пост и утверждай, что это тренажер важных навыков для предпринимателя, основателя стартапа или менеджера продукта. И если вы ожидали тут увидеть сплошные экономические симуляторы, то это не так. Они конечно тоже будут, но это далеко не исчерпывающий список как можно прокачать свои скилы!
Кидайте свои примеры в комментарии - какие игры именно вам помогли прокачать свои навыки предпринимателя? Буду дополнять общий список из ваших предложений.
Возьмём, к примеру, сложение. Одна из первых истин, которые мы усваиваем: 1 плюс 1 — это 2. Казалось бы, операция элементарная. Но даже она продолжает порождать у математиков вопросы без чётких ответов. Какие глубинные закономерности заложены в сложении? — до сих пор остаётся открытым. «Это фундаментальная операция, — отмечает Бенджамин Бедерт, аспирант Оксфорда, — и тем не менее в ней до сих пор много загадок».
В попытке разобраться в природе сложения, математики заодно пытаются установить его предельные границы. С начала XX века они изучают особый класс чисел — так называемые бессумные множества, в которых ни одна пара чисел не даёт в сумме третьего из этого же множества. К примеру, любое два нечётных числа в сумме дают чётное, значит, все нечётные образуют бессумное множество.
В 1965 году математик Пол Эрдёш задал на первый взгляд скромный вопрос: насколько часто встречаются такие бессумные множества? Ответ на него оказался крайне непростым — десятилетиями в решении этой задачи почти не наблюдалось прогресса.
Привет, Хабр! Представьте, что ваш мозг — это IDE, в которой 95% крутых плагинов попросту спят. Мы часто слышим об «Антихрупкости» или «FOMO», но сейчас этого стало настолько много, что я решил аггрегировать всё в одну статью, с примерами, чтобы всем было понятно.
В этой статье я собрал 50 самых насущных концепций из психологии, нейронауки и философии — от «синдрома утёнка» до «нейроэстетики».
Почему даже самая мощная LLM иногда выдаёт бессмысленные фразы и противоречия? Всё дело в экспоненциальном росте вариантов (N^M) и свободном копировании человеческих ошибок. Читайте статью, чтобы узнать, как мы с помощью формальных грамматик превращаем хаотичную генерацию в управляемый синтез, усиливая роль семантики и соблюдая структурные правила.
Вы когда‑нибудь задумывались о том, как здорово было бы, чтобы в вашей игре происходили настоящие человеческие диалоги? Представьте себе систему диалогов NPC, которая кажется невероятно реалистичной, или нарратора, который моментально реагирует на действия игроков. А может быть, вам нужен инструмент, способный генерировать уникальный контент «на лету» прямо в игре? Вне зависимости от того, создаете ли вы одиночную или многопользовательскую игру, внедрение генеративного искусственного интеллекта может сделать ваше творение намного интереснее и динамичнее. В этом руководстве я поделюсь с вами пошаговой инструкцией того, как это можно воплотить в вашем проекте.