RSS Telegram YouTube Apple Яндекс Spotify Google Amazon Почта

25. Слайсы

12.11.2023

Скачать

К списку выпусков

Группа Charm получила USD 6_000_000 от фонда Gradient

В предыдущем подкасте мы упоминали Wish - один из продуктов под зонтиком группы Charm. 2 ноября группе Charm фонд Gradient от Google выделил USD 6*10e6. Главный репозиторий группы BubbleTea набрал 20к+ звезд на GitHub. BubbleTea - развитие двух предыдущих проектов группы Charm: Glow и Glamour.

Glow - удобный и красивый навигатор командной строки по markdown (md) файлам. less-навигация, плюс легкое сохранение (stashing) симметрично зашифрованных md-файлов в облаке (Charm Cloud). Облако, Charm Cloud, тоже с открытым исходным кодом.

Glamour - библиотека для красивого рендеринга md-файлов в терминале. Можно использовать готовые стили или создать свой. Стили в glamour описываются одним JSON-файлом.

Сам BubbleTea - это фреймворк для создания действительно красивых интерактивных приложений командной строки. Среди компонентов есть почти все: табы, прогресс-бары, спинеры, формы, таблицы, интерактивные селекты и т.д. Если мне нужно будет делать что-то интерактивное для командной строки, то я скорее всего возьму BubbleTea.

Главные преимущества командной строки:

Группа Charm верит в то, что CLI-клиенты могут конкурировать с привычными нам web-приложениями, где клиент - это неверноятно сложный браузер. Интересно будет наблюдать за развитием этого проекта. Плюс, это дополнительная инвестиция в продукты на базе языка Go. Чем больше инвестиций в продукты на базе Go, тем они интереснее и тем их больше, а значит Go наберет еще популярности и мы останемся востребованными разрабочиками :).

Krater: опыт перехода с Rust на Go

Krater - дебаггер для Laravel в виде устанавливаемого приложения, т.е. есть GUI. Я много лет писал на PHP и знаком с Laravel (но больше предпочитал мета-фреймворк Symfony). Krater накапливает данные о выполнении web-приложения на базе Laravel в локальной БД (SQLite). Данные при этом сохраняются между сессиями.

Первая версия Krater была написана на Rust с GUI-фреймворком Tauri (70К+ звезд на GitHub) весной этого года. Rust был - для команды с бэкграундом разработки на PHP - новым языком. Спустя пару месяцев команда адаптировалась и темп разработки ускорился, но медленная сборка никуда не делась. В итоге решили перейти на Go + Wails (19К звезд на GitHub).

Почему отказались от Rust?

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

Кстати, если вы планируете написать десктоп-приложение и стоите перед выбором фреймворка для этого, то может пригодится репозиторий сравнения web-to-desktop фреймворков.

Слайсы в Go

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

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

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

К списку выпусков