Pull to refresh
59
0.5
Алексей Сидоров @Gorthauer87

Программист

Send message

Кросс-компилируем Rust приложения при помощи Nix

Level of difficultyEasy
Reading time7 min
Views3.8K

На текущем месте работы столкнулся с необходимости собирать Docker образы для сервисов написанных на Rust. Обычно в таком случае пишется Dockerfile, который внутри докера просто собирает контейнер и все. Но все оказалось не так однозначно: такая схема довольно неплохо работает, когда у тебя есть x86_64 Linux машина, но любой шаг в сторону и начинаются большие проблемы.

Все довольно неприятно уже на Intel MacBook машинах, докер поедает довольно много ресурсов с хоста, а еще возникают всякие странные приколы с монтированием файловой системы и правами доступа. Но настоящий ужас начинается на Макбуках с Apple Silicon процессорами, где обычной виртуализацией уже не обойдешься и можно часами ждать сборки простого сервиса через qemu. Можно решать эту проблему через сборку контейнеров в CI, но когда разработчиков много, а им надо часто что-то пересобирать, то там образовывалась очередь.

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

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

Rust — сохраняем безразмерные типы в статической памяти

Reading time10 min
Views6.1K

Не так давно в качестве хобби решил погрузиться в изучение embedded разработки на Rust и через какое-то время мне захотелось сделать себе логгер, который бы просто писал логи через UART, но который бы при этом не знал какая конкретно реализация используется. И вот тут я быстро осознал, именно в этом конкретном случае я не могу полагаться на статический полиморфизм и мономорфизацию, ведь компилятор не знает сколько нужно памяти выделять под конкретную реализацию. Фактически это означает, что нам нужно как-то уметь сохранять типы, размер которых неизвестен на этапе компиляции, и такой способностью обладает тип Box и для решения этой проблемы как раз и возникла идея написать свой аналог типа Box, но который сохраняет обьект не в куче, а в предоставленном пользователем буфере.

Читать дальше
Total votes 26: ↑26 and ↓0+26
Comments14

Расширяем возможности процедурных макросов с помощью WASM

Reading time9 min
Views3.1K

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


  • Сложность с поддержкой таких макросов в IDE. По сути дела нужно как-то научить анализатор кода самостоятельно компилировать, загружать и исполнять эти самые макросы с учетом всех особенностей. Это весьма нетривиальная задача.
  • Так как макросы самодостаточные и ничего не знают друг о друге, то нет никакой возможности делать композицию макросов, что иногда могло бы быть полезным.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments3

Пишем API на Rust с помощью процедурных макросов

Reading time18 min
Views12K

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


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


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

Читать дальше →
Total votes 47: ↑47 and ↓0+47
Comments6

Приемы обобщенного программирования в Rust: как мы переводили Exonum с Iron на actix-web

Reading time13 min
Views8.9K
Экосистема Rust еще не до конца устоялась. В ней часто появляются новые библиотеки, которые заметно лучше предшественников, а ранее популярные фреймворки устаревают. Именно это произошло с веб-фреймворком Iron, который мы использовали при разработке Exonum.

В качестве замены Iron был выбран actix-web. Дальше я расскажу, как мы портировали существующий код на новое решение, используя приемы обобщённого программирования.

Читать дальше →
Total votes 40: ↑39 and ↓1+38
Comments5

Rust: От &str к Cow

Reading time6 min
Views12K

Одной из первых вещей, которые я написал на Rust'е была структура с &str полем. Как вы понимаете, анализатор заимствований не позволял мне сделать множество вещей с ней и сильно ограничивал выразительность моих API. Эта статья нацелена на демонстрацию проблем, возникающих при хранении сырых &str ссылок в полях структур и путей их решения. В процессе я собираюсь показать некоторое промежуточное API, которое увеличивает удобство пользования такими структурами, но при этом снижает эффективность генерируемого кода. В конце я хочу предоставить реализацию, которая будет одновременно и выразительной и высокоэффективной.

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

Сравниваем Swift и Rust

Reading time18 min
Views31K

Поводом для написания статьи стала публикация исходного кода языка Swift — мне стало интересно поближе познакомиться с ним. В глаза сразу же бросилась схожесть синтаксиса с другим молодым языком программирования под названием Rust, к тому же за схожими синтаксическими конструкциями просматривалась и схожая область применения этих языков. Оба языка имеют сильную статическую типизацию с локальным выводом типов, оба компилируются напрямую в машинный код. И тот и другой языки впитали в себя многие приемы из мира функционального программирования. И Swift и Rust имеют средства для запуска кода, написанного на C, что позволяет без труда писать обертки над огромным количеством библиотек. Оба языка рассматриваются как замена существующим системным языкам типа C, C++, ObjectiveC. Так что же в них общего, а что различается?
Читать дальше →
Total votes 53: ↑51 and ↓2+49
Comments18

Программируем микроконтроллеры stm32 при помощи QtCreator

Reading time4 min
Views67K

Как-то так незаметно получилось, что программист, который разрабатывал нам прошивку для микроконтроллера, стал банально не успевать и в некоторые моменты я начинал перехватывать инициативу и самостоятельно браться за исправление ошибок.
Разработка велась в среде IAR, и многие согласятся со мной, что по сравнению с разработкой в QtCreator'е это боль и страдание.
В какой-то момент мы решили, что быстрее нанять нового программиста и вместе с ним заново переписать прошивку контроллера stm32, так, как я к этому моменту уже немного сам смыслил в их программировании и к тому же обнаружил, что QtCreator умеет отладку на голом железе (плагин BareMetal), я решил принять в этом активное участие.
Здесь я хочу поделиться шаблоном проекта для stm32f407 от Terra Electronica и рассказать об особенностях его настройки.
Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments37

Vreen — простая и удобная библиотека для работы с vk.api

Reading time7 min
Views39K

Представляю вам новую Qt библиотеку для работы с vk api, которая может пригодиться вам при создании любых настольных и мобильных приложений, взаимодействующих с vk. Проект родился из vkontakte плагина для qutIM'а и перерос в отдельную независимую библиотеку, которой теперь может пользоваться каждый.
Читать дальше →
Total votes 75: ↑69 and ↓6+63
Comments46

QtDockTile — кроссплатформенное использование доков!

Reading time12 min
Views2.3K
Рассматривая современные тенденции в развитии десктопов сложно не обратить внимание на то, что идея дока становится все более и более популярной. Существует как минимум три популярные реализации этого принципа: Маковский док, таскбар из windiws 7 и launcher'ы из unity. К этому списку в kde 4.8 добавится ещё и icon tasks.
Одним словом, назревает необходимость в создании универсальной библиотеки для работы со всем этим многообразием.
Встречаем qtdocktile
Читать дальше →
Total votes 40: ↑39 and ↓1+38
Comments14

Разработка приложений для Meego Harmattan

Reading time14 min
Views5.3K
Этот пост участвует в конкурсе „Умные телефоны за умные посты“.

image
В данной статье хотелось бы поделится с Хабрасообществом своим опытом по разработке софта с использованием QtComponents'ов на примере Meego Harmattan'а. Писать мы будем редактор заметок с синхронизацией средствами Ubuntu One.

Читать дальше →
Total votes 62: ↑51 and ↓11+40
Comments9

Cmake — собираем переносимые приложения для Mac Os X и Windows

Reading time4 min
Views16K
image
Рано или поздно наступает тот момент, когда приложения из наших лабораторий, полных чудес, вкусных библиотек и красивых фреймворков начинают проситься в большой мир, на компьютеры простых людей, не искушённых в магии. На их компьютерах не то, что не стоят наши новомодные фреймворки и средства разработки, там даже простого компилятора днём с огнем не сыщешь. Не может наше приложение жить без библиотек, которые так редко встречаются в дикой природе, зачахнет оно без них, никогда не видать ему белого света…
Но не всё так печально.
За подробностями под хабракат
Total votes 32: ↑31 and ↓1+30
Comments15

Разработка плагинов к qutIM'у из под Windows — быстрый старт

Reading time4 min
Views1.2K
Традиционным способом начала разработки было выкачивание всех исходников и их компиляция, и даже из беглого сравнения размера инструкции для Windows и Ubuntu видно, что эта задача очень даже непростая. К счастью, появился способ проще и быстрее.
Читать дальше →
Total votes 34: ↑27 and ↓7+20
Comments17

Рисуем виджеты в заголовке окна

Reading time3 min
Views11K
Ни для кого не секрет, сегодня у населения в основном преобладают широкоформатные мониторы и они вынуждены экономить количество пикселей по вертикали. Это породило моду на рисование элементов управления прямо в заголовке окна. Сейчас этим уже никого не удивишь, но, тем не менее, нигде ещё не находил решения этой проблемы на Qt, поэтому сейчас мы будем это исправлять:

Читать дальше →
Total votes 112: ↑103 and ↓9+94
Comments41

Вышел qutIM 0.3 beta

Reading time3 min
Views3.3K
Здравствуйте, дорогие хабраюзеры! После длительного перерыва после Alpha мы рады вам представить бета-версию qutIM под кодовым именем SciFi. За год была проделана огромная работа и ниже будет рассказано, что же появилось нового.

Читать дальше →
Total votes 112: ↑102 and ↓10+92
Comments277

qutIM for Symbian — реквием по мечте…

Reading time4 min
Views1.5K
Я планировал рассказать о процессе портирования qutIM'а на платформу S60 тогда, когда порт стал бы более стабильным и полноценным, но увы, последние события не оставляют мне выбора. У меня больше нет никакого интереса продолжать активную разработку Symbian версии — это больше похоже на выступление оркестра на тонущем Титанике.
Кому всё-таки интересно посмотреть, как мы занимались портированием qutIM'а и что из этого получилось, добро пожаловать под кат.
Читать дальше →
Total votes 107: ↑94 and ↓13+81
Comments52

Доступны ночные сборки qutIM 0.3 для Windows

Reading time1 min
Views1K

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

Что же нового в этих билдах в сравнении с альфой (осторожно, много скриншотов)?
Читать дальше →
Total votes 45: ↑34 and ↓11+23
Comments65

Собираем Qt приложения для Symbian'а из-под linux'а

Reading time3 min
Views2.9K
На этот раз собирать будем практически полностью нативными средствами, не используя Nokia remote compiler
Данный метод проверялся на Gentoo-amd64, в результате чего были получены вполне рабочие sis файлы. Огромным преимуществом при сборке из под Linux'а является то, что используется родной make, а не мутная утилита под названием abld. В результате мы получаем такие преимущества, как:
  • Многопоточность
  • Отсутствие лишних шагов в виде обсчета всех зависимостей
  • Отсутствие зависимости от тормозного active perl'а

В итоге скорость сборки увеличивается в разы!
Читать дальше →
Total votes 38: ↑31 and ↓7+24
Comments6

Nokia Remote Compiler

Reading time2 min
Views1.2K
Хотелось бы представить небольшой обзор новой экспериментальной возможности, доступной в недавно вышедшем Nokia Qt SDK. Эта новая возможность позволяет использовать build серверы Nokia для сборки софта.
Эта возможность дает независимость от установленного в системе тулчейна, он вообще может быть не установлен. Соответственно таким образом можно легко собирать Symbian приложения в Линуксе или Макоси, а Maemo приложения в Виндовсе.
Читать дальше →
Total votes 37: ↑32 and ↓5+27
Comments28
1

Information

Rating
1,541-st
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity