Pull to refresh
4
0
Send message

Конструкторы, деструкторы, операторы — частые практики при программировании на C++

Level of difficultyMedium
Reading time16 min
Views3.4K

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

Читать далее
Total votes 3: ↑3 and ↓0+5
Comments2

zero2prod (Rust)

Reading time5 min
Views2.9K

Лет так много назад, если верить слухам того времени, питон был не зыбко популярен, flask был где-то в узких кругах, а за django продавцам нужно было замолвить слово. Все, конечно, понимали - за django будущее, и не только потому, что java всем поднадоела, но потому что было удобно и для бизнеса, и для кодинга. Что кривить, читая книгу zero2prod невольно вспоминаешь удовольствие от изучения django, удивления - "а что, так можно было", и пожалуй, глубину проработки деталей, которые обычный разработчик осилил бы самостоятельно, но обычно было лень.

Rust при всей своей скромности по скорости весьма удобен для day to day разработки, и книга (которая в тайтле) раскрывает детали этой парадоксальной особенности.

Читать далее
Total votes 8: ↑0 and ↓8-8
Comments5

Создание парсеров на Rust

Level of difficultyEasy
Reading time7 min
Views5.5K

Привет, Хабр!

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

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

А именно - о двух библиотеках, которые позволяют это сделать. Начнем с первой под названием nom.

Читать далее
Total votes 16: ↑15 and ↓1+18
Comments5

Гибкая обработка арифметических вырожений с AST на Scala

Level of difficultyMedium
Reading time11 min
Views858

Обработка арифметических выражений с AST в Scala

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

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

Читать далее
Total votes 2: ↑2 and ↓0+4
Comments2

Как делать бинарно-совместимые API на компилируемых языках

Reading time10 min
Views2.9K


При разработке продукта на компилируемом языке (таком как C или Rust) рано или поздно может наступить момент, когда нужно разделить продукт на несколько компонентов, развивающихся независимо, или дать возможность расширять функциональность плагинами, разрабатываемыми отдельными коллективами или сообществом.
Читать дальше →
Total votes 20: ↑20 and ↓0+23
Comments8

Учимся летать: симуляция эволюции на Rust. 1/5

Level of difficultyMedium
Reading time10 min
Views9.5K



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


Я расскажу вам, как работают простая нейронная сеть и генетический алгоритм, затем мы реализуем их на Rust и скомпилируем приложение в WebAssembly.


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

Эта серия состоит из нескольких статей:


  1. Введение (что мы будем симулировать, как работает нейронная сеть и генетический алгоритм).
  2. Реализация нейронной сети.
  3. Реализация генетического алгоритма.
  4. Реализация глаз, мозга и самой симуляции (в двух частях: первая, вторая).




Интересно? Тогда поехали.

Читать дальше →
Total votes 24: ↑24 and ↓0+33
Comments3

Как реализовывается WebAssembly в Rust: кратко

Reading time4 min
Views5K

Привет, Хабр!

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

з.ы: предполагается, что читатель знает основы webassembly и про что-то из rust

Читать далее
Total votes 14: ↑12 and ↓2+11
Comments1

Ржавое наследование 2. Славянский проброс Get/Set

Level of difficultyMedium
Reading time7 min
Views4.4K

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

Продать душу дьяволу
Total votes 14: ↑14 and ↓0+14
Comments4

Compile Time Dependency Injection в С++: как обуздать зависимости не прибегая к позднему связыванию

Level of difficultyMedium
Reading time26 min
Views8.3K

Начав свою карьеру в качестве C# разработчика, я постоянно сталкивался с использованием техники внедрения зависимостей (Dependency Injection). За то время, что я работаю с C++, я не заметил здесь такого же широкого распространения этой идеи.

В то же время мне показалась весьма интересной такая возможность C++, как написание кода, который частично либо полностью может быть выполнен на этапе компиляции.

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

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments19

Премия Жуазеля по оригами в 2023 году

Reading time8 min
Views9.2K

Что должен рисовать художник? Чувство. Вечность. Шизофрению. Художественное искусство на заре цивилизации прожевало и выплюнуло попытки отражать реальность. Однако, когда художник садится создавать анимационную картину, то становится заложником геометрии. Искра, буря, безумие - должны состоять из кубов, точек и орезков. Дождь, пыль и блики - узлы математических блоков. Выйти за пределы геометрии можно совместив двухмерную и трехмерную графику в одном кадре. Сейчас это золотой стандарт анимации. А вот в оригами выйти за рамки геометрии невозможно. Парадоксальный сюжет необходимо воплотить своими руками в углах и биссектрисах универсального рабочего тела - квадрата. Думаю, что именно поэтому художники в технике оригами - представители конструктивного мышления - математики, физики, преподаватели технических вузов.

Читать далее
Total votes 41: ↑40 and ↓1+48
Comments12

Как работать в кайф. How to от тестировщицы, которая вынесла уроки после выгорания

Reading time10 min
Views25K

Думаю, многие помнят чувство первой влюбленности. Ты ни на шаг не можешь отойти от предмета своего обожания, постоянно хочется «больше» и кажется, что это навсегда. Оказывается, влюбиться можно не только в человека, но и в работу. Сначала ты будешь тонуть в его/её  ̶г̶л̶а̶з̶а̶х̶  Jira-бордах, а закончится всё тем, что ты (вдруг) сгорел. Для полных ощущений мне захотелось пройти ещё и медные трубы, поэтому делюсь своей историей с вами. 

Привет! Меня зовут Татьяна Дерягина, я Mobile QA в СберМаркете. Эта история про то, как мне понадобилось выгореть до углей, чтобы понять, что ворк-лайф бэланс необходим. Причём не только, чтобы не остаться совсем без лайф, но и чтобы делать свою любимую ворк хорошо и с удовольствием.

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

Читать далее
Total votes 34: ↑28 and ↓6+23
Comments19

Теория типов

Level of difficultyMedium
Reading time43 min
Views32K

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

Что можно узнать из этой статьи?
Total votes 75: ↑75 and ↓0+75
Comments70

Реализация ссылочной модели в языке программирования Аргентум

Level of difficultyMedium
Reading time18 min
Views1.9K

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

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments42

Верификация рекурсивных функций в Coq. Проблема остановки. Горючее

Level of difficultyHard
Reading time5 min
Views1.6K

Статья предполагает, что читатель имеет опыт работы с интерактивным программным средством доказательства теорем — Coq.

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

В данной статье мы рассмотрим прием, который используется для работы с рекурсивными функциями, которые не проходят проверку завершаемости (тотальности) в Coq. Под «горючим» мы будем понимать натуральное число, которое вводится как дополнительный параметр в тело функции, чтобы обозначить верхнюю границу числа итераций, которые функция может совершить. Таким образом функция трансформируется в завершаемую, удобную для работы, и радушно принимаемую компилятором Coq. В литературе термин встречается под названиями: petrol, fuel, gas и т.д.

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

Это значит Coq не может определить какой аргумент на каждом шаге итерации будет уменьшаться. Можно попробовать явно указать Coq на аргумент, который, мы точно знаем будет уменьшаться на каждом шаге {struct уменьшаемый_аргумент}:

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments5

Вычислительная сложность некоторых игр и головоломок (часть 1)

Reading time11 min
Views7.9K

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

Дальше-больше..
Total votes 21: ↑21 and ↓0+21
Comments17

Alpha Go && Alpha Go Zero

Reading time3 min
Views1.7K

Today I would like to discuss the games Chess and Go, the world's champions, algorithms and Al.

In 1997, a computer program developed by IBM Deep Blue defeated the world Chess champion Garry Kasparov. Go remained the last board game in which humans were still better than machines.

Why is that?

Chess is primarily distinguished from Go by the number of variations for each move. Chess, the game is more predictable with more structured rules: we have value for each figure (e.g bishop = 3 pawns, rook = 5 pawns -> rook > bishop), some kind of openings and strategies. Go, in turn, has incredibly simple rules, which creates the complexity of the game for the machine. Go is one of the oldest board games. Until recently, it was assumed that a machine was not capable of playing on an equal footing with a professional player due to the high level of abstraction and the inability to sort through all possible scenarios - exactly as many valid combinations in a game on a standard 19×19 go-ban are 10180 (greater than the number of atoms in the visible universe).

However, almost 20 years later, in 2015, there was a breakthrough. Google's Deep Mind company enhanced AlphaGo, which was the last step for the computer to defeat the world champions in board games. The AlphaGo program defeated the European champion and then, in March 2016 demonstrated a high level of play by defeating Lee Sedol, one of the strongest go players in the world, with a score of 4:1 in favour of the machine. A year later, Google introduced to the world a new version of AlphaGo - AlphaGoZero.

Read more
Total votes 2: ↑2 and ↓0+2
Comments1

Диаграммы без боли и страданий: PlantUML

Level of difficultyMedium
Reading time9 min
Views58K

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

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

Читать далее
Total votes 65: ↑64 and ↓1+74
Comments35

Как написать первую статью на Хабр: полный чек-лист

Level of difficultyEasy
Reading time14 min
Views14K

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

Читать далее
Total votes 69: ↑69 and ↓0+69
Comments47

Используем модель нейросети на C++

Level of difficultyEasy
Reading time4 min
Views15K

Большинство туториалов по созданию и использованию моделей нейросетей написаны на Python. Однако для какого-нибудь проекта рано или поздно может понадобится использовать более быстрый и надежный язык для этих задач, например, C++. Эта статья о том, как на C++ можно использовать модель нейросети на примере модели YOLOv8 для детектирования лиц и библиотеки PyTorch.

Читать далее
Total votes 16: ↑15 and ↓1+18
Comments8
1
23 ...

Information

Rating
Does not participate
Registered
Activity