После месяца напряжённого труда и лишений я, наконец, выкатил первую версию своего доморощенного IDE для языка программирования Rust. Версия называется Afterglow 0.1.0 Preview Alpha. Понятно, что за такой короткий промежуток времени невозможно сделать что-то серьёзное в таком сложном проекте, как IDE, поэтому данная версия не предназначена ни для чего, кроме одного - "чисто поржать".
Я поспешил сделать этот релиз исключительно из-за того, что в программе уже накопился необходимый минимум для редактирования кода, и она достигла некоторой промежуточной стабильности в то время, пока я ей ещё занимаюсь. Потому что однажды может наступить момент, когда мне полностью надоест ей заниматься, и, если она в это время будет в неработоспособном состоянии, то и вовсе никакой релиз тогда не появится.
Там сейчас две версии - для Windows и Linux. Обе портабельные, то есть не требуют установки. Даже файл с настройками хранится в папке рядом с исполнительным файлом. Причём, версия для Linux по размерам получилась в 7 раз больше, потому что для этой системы нет лёгкого способа сделать дистрибутив на основе Qt. Поэтому я просто взял и скинул в архив все либы Qt, не сортируя, что надо, а что не надо. Но и это не гарантирует, что на Linux программа запустится. По-хорошему, надо прилинковать все либы статически, как это обычно делается, но для этого надо сперва статически откомпилировать Qt, а этот тот ещё головняк. С Windows всё гораздо проще: запустил windeployqt - и все нужные либы сами собирались в кучу.
Выглядит сие чудо вот так. Скриншот версии для Linux (он же находится на GitHub):
Версия для Windows похожа, за исключением того, что у неё имеется баг с отображением шрифта Font Awesome, в результате которого неправильно нарисовалась иконка кнопки Build (на Linux-версии она похожа на шестерёнку). Сходу не удалось пофиксить, поэтому временно оставил, как есть.
По поводу то, какие фичи имеются.
Есть управление проектами. Можно создать проект (используется команда cargo new) и открыть ранее созданный. При закрытии проекта в специальную папку сохраняются настройки сессии, которые при открытии проекта восстанавливаются. Будут заново открыты все файлы, восстановлена позиция курсора, установлен тип билда (Debug/Release) и аргументы командной строки. В дереве проекта файлы создаются, удаляются и переименовываются.
Можно запускать команды cargo build, cargo run, cargo clean через меню или хоткеями. Консольные сообщения от cargo выводятся в свой отдельный таб, а от приложения - в свой. Сделал, как в Qt Creator. По большому счёту, Afterglow - это симбиоз двух больших IDE - Qt Creator и Intellij IDEA. Когда добавляю новую фичу, заглядываю в эти программы, чтобы поглядеть, как там всё сделано. Пытался смотреть в другие IDE и редакторы, но из них я мало что почерпнул. Разве что у Sublime Text передрал способ сохранения настроек посредством JSON-файла.
Далее. Есть примитивная подсветка синтаксиса. Особо с ней не заморачивался и настроил только выделение отдельным цветом комментариев, текста в кавычках и ключевых слов Rust.
Работает автокомплит при помощи Racer, но получилось неважно. Видать, где-то что-то упустил, и слова подбираются очень плохо. Да и всё равно это временно. В будущем, если сил хватит, сделаю собственный парсинг кода в AST, и тогда будет свой автокомплит, рефакторинг, подсказки и прочая ерунда. Тем более, что автор Racer на свою программу, похоже, уже давно забил, так что выбора у меня в любом случае не остаётся.
Редактор кода пока не сильно далеко ушёл от Блокнота. Может показывать номера строк, объединять строки, дублировать их, вырезать и комментировать. Операции с выделениями не работают - оставил на потом. Текущая строка обозначается светло-синим цветом. Нажатие TAB вставляет перед курсором 4 пробела. Нажатие Enter создаёт автоиндент. Ничего особо хитрого. Всё, как у всех.
И на этом, наверное, можно рассказ по фичам закончить. Собираюсь в ближайшее время заняться добавлением поиска строк, дорабатывать команды редактора и начать подбираться к парсингу кода для замены автокомплита Racer на свой собственный. Но это, конечно, будет самая сложная фича в Afterglow. У меня даже коленки трясутся при мысли о ней.
Можно также попытаться сделать переключение темы интерфейса между светлой и тёмной и русификацию. Хотя для программиста наличие интерфейса в IDE на языке, отличном от английского - это, пожалуй, наименее желаемая из всех фич, так что можно отложить её на год или вообще забить. Никто даже не заметит, что нельзя выбрать другой язык. Это же не Фотошоп какой-нибудь, в котором школота без русификатора двух кнопок нажать не может :))
Есть ещё задумка сделать GUI-менеджер поверх команды rustup, чтобы можно было апдейтить Rust и переключать тулчейны, не выходя из Afterglow. В Intellij IDEA это хорошо сделано на примере Kotlin. Вышла новая версия Kotlin - и Intellij IDEA сразу предлагает её обновить, а потом сама всё скачивает и настраивает.
Показ в дереве проекта всех зависимостей от других крейтов - тоже была бы неплохая фича. В Intellij IDEA это также отлично сделано. В ней многое хорошо сделано. Я бы и не стал морочиться со своей собственной IDE, если бы Intellij IDEA не была такой тормозной. Хотя, с другой стороны, от работы над своим крупным проектом тоже польза есть - можно поглубже в C++ разобраться, повозиться с программными архитектурами, да и деградация головного мозга ненадолго откладывается в итоге :))
Мандельщики, с блогом мандельным беда, вместо Владимира там самозванец, все неугодные комменты удаляет. Помните, Владимир говорил о запасном аэродроме? Встречаемся там.
ОтветитьУдалить