Modern technology gives us many things.

Мой вам подарок к Новому году или как наконец запустил то, что надо было давно запустить…

173

Уровень сложности Средний Время на прочтение 6 мин Количество просмотров 4.6K Assembler *Программирование * Обзор

Мой вам подарок к Новому году или как наконец запустил то, что надо было давно запустить…

Немножко истории

Начну с истории вопроса.

Очень давно, я написал 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 и попробовал написать какой-никакой код, чтобы разобраться.

Читать на TechLife:  Без кондиционера, ЭУР, подсветки багажника и даже уплотнителей дверей. АвтоВАЗ придумал, что ещё можно убрать из Lada Granta

И оно получилось! Код получался очень компактный, все особенности работы 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)

Читать на TechLife:  НАМИ разрабатывает газотурбинный двигатель для российских автомобилей

Какая-то статистика:

Размер исполняемого файла (для 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» где нибудь в пустом каталоге и запустите. Он скачает все исходники и скомпилирует их.

Читать на TechLife:  Экран без вырезов и отверстий, топовая камера, большой аккумулятор и оригинальный дизайн. Огромная подборка живых фото и официальных изображений Nubia Z60 Ultra

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

Кстати, если вам 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 нет никакого зловредного кода.

Я это к тому, что антивирусы сильно не любят такие программы – на ассемблере, небольшие и без сторонних зависимостей. Так что если что сработает, знайте – всё ложь!

Много работы еще предстоит и она обязательно будет сделана. Рано или поздно.

Сказано мастером-программистом: «Даже если программа состоит из трёх строчек, рано или поздно, её придётся сопровождать»

Пишите в комментариях, что нравится, что не нравится. Что афтар занимается ерундой тоже пишите, если уж так хочется.

Всем с Новым годом!

Теги:

  • ассемблер
  • программирование
  • средства разработки
  • среда разработки
  • производительность

Хабы:

  • Assembler
  • Программирование

Источник

Оставьте ответ

Ваш электронный адрес не будет опубликован.

©Купоно-Мания.ру