Rust в Dropbox

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

> Are you happy using rust ?
Yes, overall the team has been very pleased with it. Compile times are the only serious complaint.

> How many lines of rust code are you using in production?
About 60k of our own, about 300k incl crates.

> Are you using nightly? or just stable version of rust?
We’re pinned to a particular nightly right now, as we rely on a fair amount of features that are still stabilizing. I imagine we’ll be on a stable by this summer.

> What drove the move to Rust precisely? Most of the players in the industry are somewhat reluctant about moving to Rust.
Well, we basically needed C++, but:
1) Dropbox doesn’t have a strong C++ ecosystem on the backend, and it takes a lot of work to build one.
2) Given (1), we had basically a blank slate, and our team is C++ and Haskell type folks, we decided to use Rust so we could get C++ with better type safety and fewer sharp corners.
So realistically, if we had been at a place with an awesome preexisting set of C++ libraries, practices, etc, we probably never would have used Rust.

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

Генератор CMakeLists.txt файлов

Довольно часто возникает необходимость быстренько написать тестовое приложение на C++ и опробовать в нем что-то. IDE я не слишком люблю, а каждый раз где-то выискивать завалявшийся шаблон к CMake-у довольно лениво. После очередных поисков запилил небольшой вспомогательный скриптик (само собой на Python) для генерации CMakeLists.txt.

На данный момент поддерживается только генерация приложений, как надоест конвертировать приложения в библиотеки, так будут и они генериться

Сам скриптик с руководством по использованию тут: https://github.com/astavonin/gen-cmake

Clojure & SQLite

С базами данных я не работал уже лет… 10 наверное. Само собой, мой старый опыт это ODBC, C++ обертки над ним и прочие реально страшные штуки. И тут я столкнулся с современными способами взаимодействия с базами данных и не в монстроподобном C++, а в изящной Clojure и обомлел! Все так просто, изящно, правда, потенциально, тормознуто Но про тормознутость это не более чем теория вызванная тяжелым C++ опытом, когда подозреваешь в плохой оптимизации все, что автоматически генерирует какие-либо сущности.

На мой неискушенный взгляд, поддержка баз данных в Clojure замечательная. Я ограничился довольно скромным набором состоящим из ядра org.clojure/java.jdbc, драйвера для SQLite org.xerial/sqlite-jdbc и библиотечки для работы с SQL в Clojure-стиле java-jdbc/dsl. Continue reading

Правильно выбранный инструмент творит чудеса

Сегодня мне попалась на глаза замечательная заметка о том, что мессенджер, с более чем 900 миллионами пользователей, пишет команда из, внимание, 50 человек! Да, именно 50, а не 500 и не 1500, как можно было бы ожидать. При этом, пишется сие чудо (серверная сторона, само собой) на Erlang. Не то что бы я огромный поклонник этого языка, но сама ситуация наводит на мысли о том, что правильный выбор инструмента может сильно сократить необходимое количество разработчиков. Continue reading

Как уехать в…

В последнее время довольно популярной темой на РСДН-е стал вопрос “как уехать в …”, хотя в большинстве случаев он больше похож на “как уехать из РФ”. Как мне кажется, у меня действительно есть что сказать по этому вопросу, все же переездов у было мягко говоря не мало. Если коротко, то вырос я в Бишкеке, после этого работал в Алмате откуда переехал в Москву. Из Москвы я отправился в Сувон, Ю.Корею, откуда вернулся в Москву. Сейчас я пишу эту заметку из Сингапура и, с довольно большой вероятностью, этот город может оказаться не последним в списке переездов. Что довольно важно, только первый “понаезд в Москву” был сделан за мой собственный счет, все остальные переезды полностью оплачивались работодателем.

Continue reading

Обработка исключений в Clojure

Одной из основных претензий к Java у меня всегда была её “многословность”. Особенно эта многословность раздражает в обработке исключений, где сравнительно небольшой участок кода часто обильно сдабривался “соплями” обработки исключений. Разнообразные среды типа IDEA эту многословность позволяли в той или иной степени сгладить в процессе написания кода, но, к сожалению, она никуда не девалась из кода уже написанного и мозолила глаза. Как эту радость прятали в Scala я уже не помню, т.к. язык мне показался мало пригодным для моих нужд, а вот варианты доступные в Clojure мне очень даже понравились.
Исключения в Clojure, по логике работы с ними, можно разделить на две группы. Первая группа – это исключения возбуждаемые Java-библиотеками. Для примера возьмем функцию выполняющую запрос HEAD:

(defn test-fn [url]
  (client/head url)
  )

Continue reading

Конфигурации

Со всех сторон нас окружают файлы конфигураций. Иногда, это просто некий набор значений по умолчанию, который читается на старте и пишется при изменениях. Такой тип конфигураций обычно оказывается в более-менее приемлемом и читабельном виде вне зависимости от его формата. Но периодически приходится сталкиваться с довольно странной формой извращения – “программирование на конфигурациях”. Обычно для этих целей берется совершенно не пригодный инструмент, например XML файл или, что еще хуже, база данных и придумывается загадочный псевдоязык для скрещивания логически не совместимых вещей.
Continue reading

C++XX в CMake

Вообще я очень люблю использовать CMake для создания различных небольших тестов. Собирается везде, ручной работы ощутимо меньше, чем если писать правила для Make, генерируется поддержка для любой IDE (если тестик в что-то более крупное перерастет и т.д). И как-то меня угораздило “проспать” как CMake 3.x так и довольно полезную фифу в нем – простое и понятное подключение поддержки C++11. Я всегда подключал C++11 по старинке:

list( APPEND CMAKE_CXX_FLAGS "-std=c++11")

Но, оказывается-то, прогресс шагнул далеко вперед! так что для тех кого так же как и меня “заморозили” сообщаю – все стало проще и понятнее:

cmake_minimum_required(VERSION 3.1 FATAL_ERROR) # (1)
project(cpp11_test)

add_executable(cpp11_test main.cpp)

set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)          # (2)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) # (3)

Прекрасная фича доступна начиная с CMake 3.1 1 и включается она 2 очень просто. Если какие-то обходные пути при отсутствии у компилятора поддержки C++11 не планируются, то стоит объявить 3 наличие поддержки C++11 обязательной.

Релиз Rust 1.0. Возможности и сомнения

Разработчики Rust прошли долгий путь и 15 мая ожидается выпуск первой версии языка с вечеринкой по случаю новорожденного. Лично я долго ждал этого события, хотя и вызывает оно довольно смешанные чувства. Вроде что-то и родилось, но хочу ли я это что-то использовать и стоит ли оно того? Вот в чем вопрос. Дело в том, что в процессе развития Rust претерпел довольно сильные изменения и теперь это далеко не тот же язык, о котором я писал в 2013.
Continue reading

Браузер в песочнице

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

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

  • Запустить генератор профайла и выкинуть все лишнее;
  • Запускать приложение и отслеживать все, что выводится в консоль с тегом sandbox.

Continue reading