Немножко истории
Начну с истории вопроса.
Очень давно, я написал Fresh IDE – навороченнoe IDE для программирования на ассемблере, а точнее на FlatAssembler.
Fresh IDE долгие годы меня полностью устраивал, поэтому я с перерывами выпустил 2 главные версии и начал просто его использовать, время от времени внося какие-то исправления и изредка новые функции.
Когда перешел полностью на Linux, оказалось, что Fresh IDE прекрасно работает под WINE и я продолжил им пользоваться без угрызения совести. В процессе даже удалось исправить несколько багов WINE (вот, вот и вот).
Как бы то ни было, но я начал писать библиотеку для переносимости ассемблерных программ между Linux и Windows (и KolibriOS). Одновременно с этим задумался и чтобы сделать Fresh IDE переносимым. Из за архитектуры библиотеки, огромная часть кода уже и так была переносимой. А точнее все что не касалось GUI. К сожалению GUI был полностью написан на Win32 API и его нельзя просто так перенести на другие платформы.
Поэтому и пришлось начинать все сначала. И третья версия Fresh IDE писалась почти с нуля.
Но так как (я уже говорил) Fresh v2.x меня в общем устраивал, то написание шло очень медленно с большими остановками и частом переписыванием кода библиотеки в части GUI.
Тем более, что я если и знал Win32 API достаточно хорошо, в GUI под Linux был чайник-чайником и все пришлось учить с самого начала.
Из-за этого, конечно, GUI библиотеки пришлось переписывать снова и снова.
Кстати, первая запись в репозиторий проекта сделана 20.04.2019 года.
Сначала написал всё используя XLib. Однако, эта библиотека скрывает очень многие подробности и мешала мне ясно представить суть графического интерфейса в Linux. Когда она перестала мне нравиться, я попробовал перейти на xcb. Но xcb мне не понравилась еще больше. Ведь, она по сути оборачивает протокол X11 не внося никакие новые возможности. Тогда зачем вообще она нужна? Ладно в C/C++ — библиотека обеспечивает правильный «Си-шный» вид программ. Но я ведь пишу на ассемблере? Зачем тогда мне Си-шный вид? Останавливало только незнание протокола X11.
Но вот, в самом начале 23-го года меня угораздило попасть в больницу на недельку. Я был относительно прикован к кровати, но не скажу что сильно страдал и поэтому мне было скучно. И вот, взялся почитать протокол X11 и попробовал написать какой-никакой код, чтобы разобраться.
И оно получилось! Код получался очень компактный, все особенности работы X11 были видны сразу, что так недоставало в XLib, которая эти особенности пытается скрыть от пользователя. Кстати, разобравшись, протокол X11 мне понравился сильно. Он бинарный и очень хорошо ложиться на ассемблерный код. Есть, конечно, недокументированные вещи, особенно расширения, написанные недавно. Но, когда понимаешь суть, всё остальное вопрос времени и правильных вопросов.
Так костяк новой версии GUI библиотеки был написан за эту недельку в больничке. В итоге, в Linux программа теперь использует прямое подключение к X серверу и прямую коммуникацию по протоколу X11 без использования внешних библиотек. Она работает даже через ssh соединение и работает приемлемо быстро.
Когда вышел из больницы, все опять замедлилось. Ведь, я же говорил – меня v2.x устраивала. Да и работа, семья, бытовуха всякая...
Но, устраивать-то она устраивала, но с одним большим исключением – невероятно медленный старт WINE.
Ну не знаю почему, но сам WINE запускается долго. 2..3..4 секунды. А после обновления, запуск занимает не меньше минуты. А он должен сам запустится и только потом запускает программу.
Кто-то скажет, 3..4 секунды это не долго. Но для программы на ассемблере это очень долго. Я хочу чтобы моё IDE запускалось сразу, а не через какое-то время. Даже на медленном компьютере.
И наконец мое терпение лопнуло. Я даже могу сказать когда именно это случилось: 25-ого октября 2023 г.. Я точно не помню что именно там было. То ли разозлился из-за чего-то, то ли просто нечего было делать, то ли WINE начал проверять конфигурацию после очередного апдейта, но факт остается фактом.
С этой даты я сделал 129 коммитов в коде Fresh3 и 121 коммит в коде freshlib и наконец, Fresh3 IDE можно считать рабочим и самодостаточным.
На нем можно писать как код самого IDE, так и всякие ассемблерные программы. Все важные инструменты IDE работают и сильно увеличивают скорость написания программ. IDE падает очень редко, а если и вытекает памятью, то очень медленно.
В настоящий момент я полностью перешел на Fresh3 IDE и теперь счастлив. IDE работает хорошо, стартует мгновенно (и я имею ввиду мгновенно! – время измеряется в миллисекундах, я так и не смог как-то его измерить), интерфейс мне нравится. (Напишите в комментариях – как вам интерфейс?)
Специально для новой версии нарисовал и новую иконку в супрематическом стиле:
Художник из меня так себе, но я старался! (То, что на КДПВ, тоже супрематизм, но рисовал ИИ, а не я. :D)
Какая-то статистика:
Размер исполняемого файла (для Linux) получился 351KB.
Компилируются в сумме: 300442 строки кода.
Много это или мало решайте сами.
Что получилось в итоге (скриншоты)
Я всегда любил классическую темно-синюю тему «Borland-Turbo», поэтому и моя рабочая настройка такая:
Но, конечно IDE позволяет менять тему редактора. Вот вам и светлую тему:
Все настраивается вот отсюда:
Редактор может автоматически заканчивать имена переменных и функций:
Может подсказать какие аргументы у функции или метода:
… показать короткую справку об элементе программы (если кто-то написал eё):
… показать, как макрос разворачивается в код:
И, конечно, сделать справку об элементе – где именно и как он используется (cross reference):
В IDE есть система помощи, которая через встроенный веб сервер (если что, работает только на localhost!) выводит справочные страницы в браузере при нажатия на F1 (контекстные справки), или можно читать справочную библиотеку по заголовкам (Ctrl+F1):
Если разрешить в настройках, IDE может автоматически поискать в Интернет информацию по ключевому слову, если информация не нашлась во встроенной библиотеке. Всякие библиотечные функции находятся прекрасно, что Win32 API, что Linux.
Как потрогать
Если вы все еще читаете эту статью, то, возможно, пожелаете сами потрогать Fresh3 IDE в его, так сказать, пред-релизном виде.
На сегодня единственная возможность – это скачать и скомпилировать самостоятельно. Чтобы подготавливать релизы, я написал простой скрипт, который автоматизирует это дело.
Вам понадобятся Linux (любой), fossil – обязательно есть в программном каталоге вашего Линукса и, конечно FlatAssembler (fasm) – тоже можно инсталлировать через программный каталог.
Текст скрипта:
#!/bin/bash
#clone_and_build.sh
if [ ! -f "./fresh3.fossil" ]; then
fossil clone https://fresh.flatassembler.net/fossil/repo/fresh3/ ./fresh3.fossil
fi
if [ ! -f "./fresh.fossil" ]; then
fossil clone https://fresh.flatassembler.net/fossil/repo/fresh/ ./fresh.fossil
fi
mkdir -p ./FreshLibDev
cd ./FreshLibDev
if [ ! -f ".fslckout" ]; then
fossil open ../fresh.fossil FreshLibDev
fi
fossil settings allow-symlinks 1
fossil settings manifest u
fossil revert
fossil update
cd ..
mkdir -p ./Fresh3
cd ./Fresh3
if [ ! -f ".fslckout" ]; then
fossil open ../fresh3.fossil trunk
fi
fossil settings allow-symlinks 1
fossil settings manifest u
fossil revert
fossil update
cd ./source
env lib=../freshlib TargetOS=Linux fasm -m 262144 ./Fresh3.asm
env lib=../freshlib TargetOS=Win32 fasm -m 262144 ./Fresh3.asm
cd ..
cp -r source/IDE ./
cp IDE/themes/classic.theme IDE/themes/current.theme
mv source/Fresh3 ./
mv source/Fresh3.exe ./
Скопируйте этот текст под имени "clone_and_build.sh" где нибудь в пустом каталоге и запустите. Он скачает все исходники и скомпилирует их.
Каждый раз, когда запускаете скрипт он будет обновлять версию до самой новой в репозиториях.
Кстати, если вам Fresh3 IDE так понравился, что захотите установить его в своем Linux-е, то запустите скрипт install/install-fresh он все сделает за вас. Кстати, скрипт интерактивный и покажет вам что он будет делать и спросит о разрешении. Так что смело запускайте, ничего не сломается. А если не понравится, можете запустить install/uninstall-fresh и он все исправит.
Если у вас нет Linux, но есть желание потрогать Fresh3 IDE, можете исполнить все команды из этого скрипта вручную в конзоле. Он совершенно прямолинеен, Fossil и FASM для Windows есть, но их нужно скачать и установить самостоятельно. (Если что, спрашивайте в комментариях, я помогу).
После компиляции в каталоге Fresh3/ будут 2 исполнимых файла: Fresh3 и Fresh3.exe.
Это версии Fresh3 IDE для Linux и Windows. Еще в этой директории есть всё необходимое для программирования на ассемблере – копие исходников Fresh3, библиотека freshlib, справочные материалы и т.д.
Запустите Fresh3 и откройте файл source/Fresh3.fpz; Это проект Fresh3 и он должен компилироваться из коробки – Ctrl+F9
Репозиторий Fresh3 находится по адресу: https://fresh.flatassembler.net/fossil/repo/fresh3/
Репозиторий Fresh IDE v2.x и по совместительству freshlib, находится по адресу: https://fresh.flatassembler.net/fossil/repo/fresh3/
Предостережение
Несмотря на то, что Fresh3 работает прекрасно у меня, не следует ожидать слишком многого от такого сырого продукта. Баги там обязательно есть. Есть и куча недоработок по графическому интерфейсу.
Некоторые привычные вещи не будут работать, а другие будут работать не так как вы привыкли. (ну например из известного – бутоны на тулбаре можно нажимать и левым и правым бутоном мыши. Я это исправлю, но потом.)
Кстати, я почти не тестировал версию под Windows. И запускал ее только под WINE. (У меня просто нет постоянного доступа к Windows) Она точно работает, но у нее наверное свои собственные баги.
Что я могу точно-точно гарантировать, так это то, что в IDE нет никакого зловредного кода.
Я это к тому, что антивирусы сильно не любят такие программы – на ассемблере, небольшие и без сторонних зависимостей. Так что если что сработает, знайте – всё ложь!
Много работы еще предстоит и она обязательно будет сделана. Рано или поздно.
Сказано мастером-программистом: "Даже если программа состоит из трёх строчек, рано или поздно, её придётся сопровождать"
Пишите в комментариях, что нравится, что не нравится. Что афтар занимается ерундой тоже пишите, если уж так хочется.
Всем с Новым годом!
Автор: John Found