Как стать автором
Обновить
58
0.5
Алексей Сидоров @Gorthauer87

Программист

Отправить сообщение

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

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

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

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

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

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии11

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

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

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

Читать дальше
Всего голосов 26: ↑26 и ↓0+26
Комментарии14

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

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

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


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

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

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

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


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


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

Читать дальше →
Всего голосов 47: ↑47 и ↓0+47
Комментарии6

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

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

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

Читать дальше →
Всего голосов 40: ↑39 и ↓1+38
Комментарии5

Rust: От &str к Cow

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

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

Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии3

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

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

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

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

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

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

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

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

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

А давайте пощупаем Qt5

Время на прочтение4 мин
Количество просмотров26K
Выход первой альфы Qt5 уже не за горами, но зачем нам ждать этого момента, если мы можем прямо сейчас окунуться в ближайшее будущее с его QtQuick2, V8 и qpa?
Поехали
Всего голосов 45: ↑43 и ↓2+41
Комментарии67

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

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

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

Время на прочтение14 мин
Количество просмотров5.3K
Этот пост участвует в конкурсе „Умные телефоны за умные посты“.

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

Читать дальше →
Всего голосов 62: ↑51 и ↓11+40
Комментарии9

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

Время на прочтение4 мин
Количество просмотров17K
image
Рано или поздно наступает тот момент, когда приложения из наших лабораторий, полных чудес, вкусных библиотек и красивых фреймворков начинают проситься в большой мир, на компьютеры простых людей, не искушённых в магии. На их компьютерах не то, что не стоят наши новомодные фреймворки и средства разработки, там даже простого компилятора днём с огнем не сыщешь. Не может наше приложение жить без библиотек, которые так редко встречаются в дикой природе, зачахнет оно без них, никогда не видать ему белого света…
Но не всё так печально.
За подробностями под хабракат
Всего голосов 32: ↑31 и ↓1+30
Комментарии15

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

Время на прочтение4 мин
Количество просмотров1.3K
Традиционным способом начала разработки было выкачивание всех исходников и их компиляция, и даже из беглого сравнения размера инструкции для Windows и Ubuntu видно, что эта задача очень даже непростая. К счастью, появился способ проще и быстрее.
Читать дальше →
Всего голосов 34: ↑27 и ↓7+20
Комментарии17

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

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

Читать дальше →
Всего голосов 112: ↑103 и ↓9+94
Комментарии41

Вышел qutIM 0.3 beta

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

Читать дальше →
Всего голосов 112: ↑102 и ↓10+92
Комментарии277

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

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

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

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

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

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

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

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

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

Nokia Remote Compiler

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

Информация

В рейтинге
1 987-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность