Pull to refresh
49
0
Дмитрий Баскаков @Furax

Разработчик

Send message

Работа с void* в стиле C++

Level of difficultyEasy
Reading time15 min
Views12K

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

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

Читать далее
Total votes 8: ↑6 and ↓2+6
Comments6

ОС «Сивелькирия»: архитектура

Level of difficultyMedium
Reading time21 min
Views2.2K

Некоторое время назад я писал об идее проекта под названием «Сивелькирия». Данный проект представляет собой гибрид среды выполнения и операционной системы. Сегодня, когда прототипы нескольких ключевых систем завершены и покрыты тестами, подтверждающими, что модули в такой среде способны выполняться и обмениваться вызовами, я хотел бы подробнее рассказать об архитектуре решения.

Читать далее
Total votes 7: ↑3 and ↓4-1
Comments8

Трансляция кода с C# на C++: работа портера

Reading time31 min
Views12K

Привет, Хабр. Некоторое время назад я рассказывал о том, как нам удалось наладить ежемесячный выпуск релизов для платформы C++ (Windows и Linux) продуктов, исходный код которых получается автоматической трансляцией кода оригинальных продуктов, написанных на C#. Также я писал о том, как мы заставили такой транспилированный код выполняться в рамках нативного C++ без сборки мусора.

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

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

Моя первая Ардуинка: переключатель USB

Reading time15 min
Views29K

Пару лет назад я обзавёлся топовым смартфоном одной южнокорейской компании. Среди его особенностей оказалась поддержка DeX - возможности запуска на большом экране, подключаемом к док-станции через HDMI, отдельных приложений и даже Linux в контейнере (к сожалению, последнее было убрано в свежей версии Android). Кроме того, порадовала поддержка периферийных устройств - так, внешняя звуковая карточка Asus Xonar U7, с которой у меня пущен сигнал на ресивер с большими колонками, завелась без проблем. Отсюда возникло желание превратить телефон в мини-рабочее место, научив делить периферию с системником - например, чтобы вой кулеров не мешал слушать музыку или смотреть видео. По сути, требовалось KVM-решение, удовлетворяющее ряду хотелок. Так я познакомился с Arduino.

Читать далее
Total votes 27: ↑26 and ↓1+39
Comments31

Как мы заставили код, портированный с C#, работать с моделью памяти C++

Reading time19 min
Views7.8K
Привет, Хабр. В прошлой статье я рассказывал о том, как мы создали фреймворк для перевода кода C# на (неуправляемый) C++, чтобы выпускать свои библиотеки, изначально разработанные для платформы .Net, и под C++ тоже. В этой статье я расскажу о том, как нам удалось согласовать модели памяти этих двух языков, добившись работы портированного кода в необычном для него окружении.

Я расскажу о том, какие умные указатели мы используем, и почему нам пришлось разработать для них собственные реализации. Я также расскажу о процессе подготовки кода C# к портированию с точки зрения управления временем жизни объектов, о некоторых проблемах, с которыми мы столкнулись, и о специфических способах диагностики, которыми нам приходится пользоваться при работе.
Читать дальше →
Total votes 18: ↑17 and ↓1+21
Comments25

ОС «Сивелькирия»: пример построения программы

Reading time7 min
Views5.1K
Привет, Хабр.

Этим постом продолжается цикл публикаций о проекте ОС «Сивелькирия». В первой статье цикла было дано общее описание концепции, во второй объяснялось, зачем это надо и в каком виде продукт сможет увидеть свет, в третьей тезисно описывались архитектурные решения, а в четвёртой был дан ответ на вопрос о том, как согласовать действия разработчиков ОС и ПО в данной модели. В данной статье будет показан пример разбиения простой программы на модули, чтобы вписать её в реалии новой ОС.
Читать дальше →
Total votes 8: ↑2 and ↓60
Comments20

Как мы автоматизировали портирование продуктов с C# на C++

Reading time13 min
Views6.9K
Привет, Хабр. В этом посте я расскажу о том, как нам удалось организовать ежемесячный выпуск библиотек для языка C++, исходный код которых разрабатывается на C#. Речь идёт не об управляемом C++ и даже не о создании моста между неуправляемым C++ и средой CLR — речь об автоматизации генерации кода на C++, повторяющего API и функциональность оригинального кода на C#.

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

В этой статье я кратко опишу историю нашего проекта и используемые в нём технологии. Вопросов экономического обоснования я коснусь лишь вскользь, поскольку техническая сторона для меня гораздо интереснее. В следующих статьях цикла я планирую подробнее остановиться на таких темах, как кодогенерация и управление памятью, а также на некоторых других, если у сообщества будут соответствующие вопросы.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments27

ОС «Сивелькирия»: процесс разработки ПО

Reading time6 min
Views2.1K
Привет, Хабр.

Этим постом продолжается цикл публикаций о проекте ОС «Сивелькирия». В первой статье цикла было дано общее описание концепции, во второй объяснялось, зачем это надо и в каком виде продукт сможет увидеть свет, в третьей тезисно описывались архитектурные решения. Поскольку многие комментаторы поднимали вопрос об удобстве разработки под данную ОС, настоящая статья призвана осветить эту тему.
Читать дальше →
Total votes 10: ↑3 and ↓7-2
Comments16

Операционная Система «Сивелькирия»: технологии

Reading time10 min
Views8K
Привет, Хабр.

Данная статья продолжает цикл публикаций о проекте операционной системы «Сивелькирия». Как уже упоминалось в прошлых статьях, данная ОС в настоящее время находится на ранней стадии проектирования и разработки, так что желающим получить пруфы придётся набраться терпения. На всякий случай ещё раз упомяну, что автор не ставит перед собой цели убедить кого-либо в чём-либо, вместо этого продолжая публикацию с целью получения пользы от обсуждений. Пользуясь случаем, хочу выразить благодарность всем, кто оставил полезные комментарии под прошлыми публикациями.

В первой статье цикла приводилась краткая информация о структуре данной ОС. Во второй статье описывались цели проекта, а также то, каким образом он предполагает вырваться из порочного круга «нет софта — нет пользователей — нет разработчиков — нет софта». В этот раз основное внимание будет уделено архитектурным вопросам. Будет показано, какими техническими средствами предполагается обеспечить взаимодействие модулей, написанных разными людьми на разных языках и собранных под различные окружения. Кроме того, будут затронуты мелкие детали архитектуры.
Читать дальше →
Total votes 14: ↑6 and ↓8+3
Comments100

ОС «Сивелькирия»: миссия и форма запуска

Reading time9 min
Views4.5K
Привет, Хабр.

Это — вторая статья из серии публикаций о проектируемой на данный момент ОС «Сивелькирия». Первая статья доступна здесь, следующая — здесь. Поскольку в комментариях к ней многократно задавались вопросы о цели всей затеи, а также о количестве труда, которое придётся вложить в разработку, чтобы она «взлетела», в данной публикации основное внимание будет сосредоточено именно на них.

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

Технические и организационные моменты, упомянутые в данной статье, будут подробно раскрыты в следующих публикациях.
Читать дальше →
Total votes 16: ↑3 and ↓13-9
Comments18

Операционная Система «Сивелькирия»: вводное описание

Reading time6 min
Views19K
Привет, Хабр.

Эта статья открывает цикл публикаций об операционной системе «Сивелькирия», на данный момент находящейся на раннем этапе проектирования и разработки. В статьях цикла будут подробно описаны системные проблемы популярных операционных систем и предложены пути их решения. Автор не ставит перед собой цели убедить кого-либо в чём-либо и сосредотачивается исключительно на описании предложенных решений ради извлечения пользы из обсуждения. Публикация будет вестись частями, поскольку объём полного описания выходит за любые разумные ограничения на размер хабростатьи.

Всем, кто заинтересовался, добро пожаловать под кат.
Читать дальше →
Total votes 23: ↑12 and ↓11+8
Comments100

Указатели C как лингвистический парадокс

Reading time2 min
Views33K
Недавно один знакомый, которого я знаю через совсем не программистские круги, попросил помочь ему с лабораторной по C++. В коде было примерно следующее:

void do_something(MyObj *input[], int count)
{
    MyObj **copy = new MyObj*[count];
    for (int i = 0; i < count; ++i)
        *copy[i] = *input[i];
    ...
}

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

Лет десять назад на одном форуме была загадана детская, вроде, загадка:
Для чего еду обеда
Людоедоедоеда
Пригласила на обед
Людоедоедовед?
Я хочу показать, что эта загадка имеет самое прямое отношение к C/C++, поскольку тема указателей легко может быть разобрана по аналогии.
Читать дальше →
Total votes 65: ↑56 and ↓9+47
Comments244

Часы с кукушкой на базе Lego Mindstorms

Reading time12 min
Views12K
Два с половиной года назад я купил набор Lego Mindstorms EV3, чтобы сделать свои первые шаги в робототехнике. Вкатив на контроллер сборку ev3dev и наигравшись с управлением двигателями и сенсорами по SSH, я на два года охладел к покупке. Причина состояла в том, что мне не хватало фантазии по части того, что бы такое можно было собрать: после нескольких собранных моделей из Lego Technics (как коробочных, так и самодельных) я уже привык к чудесам наподобие дистанционно управляемых игрушек, а простые роботы наподобие представленных на Краковской выставке моделей из Lego у меня как у человека, работавшего в своё время над системой телемеханики, уже не вызывали достаточного вдохновения. Повторять чужой опыт тоже не особо хотелось.

В конце концов, меня осенило: моделью, достаточно сложной, интересной, практичной и при этом не слишком заезженной могли стать часы с кукушкой. Вдохновлённый этой идеей, я взялся за дело.
Total votes 43: ↑43 and ↓0+43
Comments34

Information

Rating
Does not participate
Location
Россия
Registered
Activity