Tipi, новое решение для упрощения создания проектов на C++

В этой статье я хотел бы поделиться первым обзором Tipi, облачного сервиса, связанного с C++. К вашему сведению, в будущем возможно сотрудничество между мной и Tipi, но эта статья не спонсируется. Я прямо заявил, что не хочу брать никаких денег за написание обзора. Теперь давайте начнем.

Как я узнал о Tipi

Я узнал о Tipi.build на конференции CPPP 2021. Дэмиен Буль, генеральный директор Tipi, представил презентацию о своем продукте — «массивно масштабируемом облаке удаленного компилятора C++». Идея показалась мне интересной и полезной. Я быстро зарегистрировал аккаунт, используя промо-код, которым он поделился на конференции, но ничего с ним не сделал. У меня просто было слишком много дел в преддверии Рождества.

Но кое-что, что действительно привлекло мое внимание, — это слайд из презентации Дэмиена, и я использовал его в нескольких местах.

Написание программ на PHP, Python, TS или Ruby увеличивает выбросы CO2 намного больше, чем программы, написанные на C++, C или Rust. Как сказал Марек, смысл написания программ на этих языках высокого уровня заключается в «интеллектуальной лени».

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

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

Наконец, я закончил свой первый обзор.

Для чего он нужен?

В прошлом году на одной из конференций по C++ кто-то спросил, сколько языков нужно выучить, чтобы писать на C++. Ответ был примерно 4 или 5. Очевидно, что вы должны знать немного C++. Вам понадобится немного shell scripting в Linux и, наверное, Powershell в Windows. Вам нужен CMake или что-то подобное, чтобы иметь возможность собрать свой проект. Ну, возможно, вам даже придется знать синтаксис makefile и все такое. Ладно, я преувеличил. Вы уже можете обойтись 3 языками.

Это первое место, где Tipi вступает в игру. Он должен уменьшить потребность в двух языках в большинстве случаев. C++ и shell. Необходимость в нашем любимом C++ очевидна, я думаю, и вам также понадобится немного shell. Вы должны как-то вызывать Tipi, верно? Но вам не нужно знать много, так что, возможно, мы можем сказать 1.5.

Обо всем остальном должен позаботиться Tipi. По крайней мере, для среднего пользователя.

Обещается, что вам не придется писать свои скрипты сборки, Tipi позаботится о том, как собрать ваши проекты.

Это может оказаться весьма полезным для многих из нас.

Я кодирую на C++ около 9 лет, и первые 5-6 лет я был неспособен скомпилировать что-то самостоятельно. Я бы не смог существовать вне нашей внутренней системы управления сборками. У меня просто не было необходимости, и я не беспокоился. С тех пор я придумал Cmake Project Creator, который также облегчает создание скриптов сборки и управление зависимостями, но это просто домашний проект, который и близко не стоит с возможностями Tipi.

Tipi отличается тем, что он также заботится о зависимостях и окружениях сборки. Он не только настраивает проекты в соответствии с окружением, в котором вы хотите собирать (например, Linux, Mac, Windows), но вы также можете собирать в облаке. Вы передаете в качестве аргумента желаемое окружение и стандарт C++, а Tipi позаботится обо всем остальном в облаке. Вам не нужно беспокоиться о наличии нужной среды.

Звучит многообещающе, правда?

Давайте посмотрим, как далеко я продвинулся.

Функции, которые я пытался использовать

Во-первых, позвольте мне просто перечислить, что я пытался сделать. Все в этом списке я пробовал как локально, так и в облаке.

  • скомпилировать проект hello world и
  • скомпилировать несколько небольших репозиториев Github с кодом на C++
  • скомпилировать несколько случайных больших библиотек
  • компилировать проекты, созданные с помощью Cmake Project Creator
  • компиляция в новом режиме живой сборки

Я не буду рассматривать их один за другим, а лучше поделюсь тем, что не работало хорошо, и тем, что работало довольно хорошо.

Проблемы, с которыми я столкнулся

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

Позвольте мне поделиться двумя самыми большими проблемами, с которыми я столкнулся.

Установка

Во-первых, я не смог установить его на Ubuntu 18.04. Для этого требуется как минимум 20.04. Жаль, но Tipi планирует сделать его доступным и на более старых версиях. Поэтому я занялся созданием образа docker, который можно использовать. Tipi также предоставляет такой образ, но я хотел узнать немного больше о docker, и это был хороший повод. По пути я столкнулся с некоторыми проблемами, связанными с Tipi, но я спрашивал команду, и они всегда помогали мне с глубокими техническими объяснениями.

Есть несколько незначительных проблем с удобством использования, и я открыл несколько тикетов для их решения. Под проблемами юзабилити я подразумеваю, что иногда цвета подсказок путаются после неудачного выхода или что когда CLI напоминает вам обновить ваш клиент Tipi, то после обновления он возвращается вместо того, чтобы сделать то, что вы изначально просили. Это неприятные, но не серьезные проблемы, и я уверен, что их скоро исправят.

Меня больше беспокоила загрузка всех инструментов сборки (~7 ГБ) каждый раз, когда я инстанцировал свой образ docker. Это заставляло меня терять довольно много времени каждый день, когда я начинал играть с Tipi. Но оказалось, что вы можете установить эти инструменты при установке CLI, что, возможно, не так важно для тех, кто использует Tipi на своей физической машине, но для тех, кто использует образ, это просто спасение.

Хотя мне пришлось обратить внимание на одну вещь, на которую указал Дэмиен. Мне пришлось смонтировать том на TIPI_HOME_DIR, иначе я каждый раз получал полную загрузку библиотек и пересборку либ платформы, от которых я зависел. Решением было смонтировать том docker на TIPI_HOME_DIR (но это означало бы, что наш docker был бы бесполезен, потому что предустановленное состояние было бы скрыто и его пришлось бы переустанавливать снова).

В конце концов, именно так я запустил свой контейнер.

export DOCKER_ID=$(docker run --rm --mount type=bind,source=/home/sdargo/.tipi,target=/home/tipi/.tipi -it -d my-tipi-image /bin/bash) && docker exec -it $DOCKER_ID /bin/bash
Вход в полноэкранный режим Выход из полноэкранного режима

Таким образом, я мог сразу же начать играть, когда мне этого захочется.

Юнит-тесты

Сначала я использовал единственный чертеж для создания проекта с помощью CMake Project Creator. После объявления зависимости от GTest в .tipi/deps возникли некоторые проблемы. Оказалось, что мои тесты находились в каталоге tests/, в то время как Tipi ожидал test/. После изменения имен все заработало нормально.

Мне это показалось не очень удобным, но когда вы начинаете собирать проект с Tipi и знаете ожидаемые соглашения об именах, это не проблема. А еще лучше то, что команда уже исправила это. Теперь вы можете выбрать любое имя для своего тестового каталога. Большое спасибо за это!

// .tipi/deps
{
"google/googletest"
 : { "u" : true, "packages": ["GTest"], "targets": ["GTest::gtest"] }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Я попробовал другой чертеж, где есть несколько библиотек, с несколькими директориями test/. Tipi не смог подхватить тесты, когда каталоги были вложены в другие каталоги. Я думаю, что это важная проблема, и команда Tipi уже работает над ней.

Что мне понравилось

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

Об этом мало что можно сказать, он просто работает с простыми конструкциями и постоянно развивается, чтобы заставить его работать с более сложными конструкциями.

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

Затем я узнал о новой функции, которая называется Live Build. С опцией --monitor ваш клиент Tipi отслеживает изменения в локальной директории и при каждом изменении запускает сборку заново. Если вы также добавите опцию --test all, он также повторно запустит тесты. В общем, всякий раз, когда вы обновляете файл, Tipi будет компилировать и, если возможно, запускать тесты. Это очень аккуратно!

Иногда он запускает слишком много сборок, но эта функция все еще находится в разработке, и когда я сообщил об этом, стало ясно, что команда знает об этом и собирается улучшить «умность» этой очень полезной функции.

Заключение

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

Tipi имеет большой потенциал для упрощения создания проектов на C++ как благодаря отсутствию явных makefiles/CMakefiles, так и благодаря возможности сборки с различными параметрами. С его новыми возможностями Live Build он отлично подходит для повседневной разработки. Я бы с удовольствием попробовал его в CI конвейерах с действиями Github. Разработка все еще продолжается.

Если начальное время, необходимое для создания облака, можно немного сократить, это было бы просто замечательно.

Не стесняйтесь играть с этим и дайте мне знать, что вы думаете.

Подключайтесь глубже

Если вам понравилась эта статья, пожалуйста

  • нажмите на кнопку «Мне нравится»,
  • подпишитесь на мою рассылку
  • и давайте общаться в Twitter!

Оцените статью
Procodings.ru
Добавить комментарий