LINUX.ORG.RU

Средства разработки, которые мы заслужили...

 , , ,


1

7

Привет, ЛОРчане!

А вам не кажется, что со средствами разработки в последнее время творится что-то странное или даже страшное?

В общем делюсь своей историей «успеха».

Не так давно создатели SDCC добавили новый стандарт вызова процедур, ломающий обратную совместимость со старым ассемблерным кодом. Причем добавили они его в версии SDCC 4.2.0, то есть сломали совместимость в минорщине…

И вот 29 декабря прошлого года я решил, что на текущих выходных не буду заниматься проприетарщиной на фрилансе, а внесу соответствующие изменения в порт BuguRTOS на stm8/sdcc. Сами ассемблерные вставки я поправил ещё 29-го перед корпоративом, а вчера решился внести изменения в код ОС, поднять всё, что нужно для разработки и тестирования имбедов на своём ноуте с debian bullseye (inb4 некрофилия), и протестировать BuguRTOS на реальном железе, ибо грядёт релиз.

В общем, включил ноут, запустил git-gui, чтобы склонировать репу с Гитхаба и…

Тут меня ждали первые грабли

Название ветки master по дефолту депрекейтед и вообще не политкорректно, меняй дефолтное название ветки, ибо белые цисгендерные гетеросексуальные шовинистические членомрази должны страдать!

Ладно, сделал git clone из консоли, начал ставить инструметы для разработки и тестить.

Под AVR все тесты удачно собрались штатными avr-gcc и avr-binutils, запустились на штатном simavr с отладкой через штатный avr-gdb, загрузились штатным avrdude и удачно отработали на старенькой Arduino(tm) nano.

Отладка работает быстро.

На Cortex-Mх меня ждали следующие грабли

Пакет stlink в debian oldstable оказался стабильно глючный: точки останова не ставятся, дисасм не работает и т.д.

Пол дня пытался подобрать команды gdb в попытках заставить отладку работать. В итоге скачал с GitHub васянскую сборку от создателей пакета, поставил, отладка заработала сразу же со старыми проверенными командами gdb!

Третьи грабли встретились мне на rp2040

Использую VSCodium вместо VSCode, дабы избежать «телеметрии». Установка cortex-debug и ms-vscode.cmake-tools прошла успешно, а вот комада:

codium --install-extension ms-vscode.cpptools

выдала

Installing extensions...
Extension 'ms-vscode.cpptools' not found.
Make sure you use the full extension ID, including the publisher, e.g.: ms-dotnettools.csharp
Failed Installing Extensions: ms-vscode.cpptools

и такая проблема не только у меня.

Ладно, на сборку и отладку это не повлияло, но осадочек остался.

Да, кстати

Отдадка на rp2040 через старую версию picoprobe под vscodium работает гораздо быстрее, чем на любом stm32 через stlink под Code::Blocks.

Четвёртые грабли ждали меня… правильно на stm8 и sdcc

В debian bullseye стоит SDCC-4.0.0 и нет пакета stm8flah.

В общем, stm8flash собрал из исходников, протестил ОС на старой версии компилятора.

Дальше скачал SDCC-4.3.0 и Code::Blocks под Офтопик, и перешёл в виртуалку с офтопиком 10, поставил тулчейн, IDE, st-toolset для прошивки, стал собирать и «заливать» тестовые проекты на Discovery…

И один из проектов не собирается ни в какую, т.е. на SDCC-4.0.0 в debian собирался, а тут sdccld посчитал, что мои статики не статики и ругается на множественные определения функций!

Все остальные тестовые проекты, отличающиеся только файлом main.с, собрались и успешно отработали, т.е. ассемблерные вставки были написаны без ошибок в слепую перед корпоративом.

Итого

Вместо того, чтобы поставить средства разработки и протестировать BuguRTOS за ПОЛ дня я протахался ДВА!!!

Из-за множественных ошибок в средствах разработки!

Кто из вас сталкивался с чем-то подобным?

Напишите в комментариях, что вы на этот счёт думаете, и поделитесь своими историями «успеха».

★★★★★

Последнее исправление: shkolnick-kun (всего исправлений: 1)

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

ya-betmen ★★★★★
()
Ответ на: комментарий от Ygor

А они будут тебе пояснять с покерфейсом - ты просто не понимаешь что такое volatile-переменная.

Это лалки, настоящие будут

А они будут тебе пояснять с покерфейсом - что такое volatile-переменная.

:) И это хорошо. Надо провоцировать умных людей на речи.
А то взяли моду умники, увидят что-то носик к верху, фырк и пошли, шлёп-шлёп-шлёп.
Главное не забудут рука-лицо или/и клоуна поставить. Ведь ответить то им нечего я провоцирую :)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от zx_gamer

Мне не надо ничего дописывать, мне надо чтобы когда я переношу функцию из файла «a» в файл «b», во всем местах программы где эта функция используется, «from a import function» изменилось на «from b import function». Я же вроде не многого прошу? Про подобные элементарные вещи в 2024м году стыдно говорить вообще, но почему-то хваленый имакс этого не умеет.

Я не пишу на питоне, поэтому не скажу. В C/C++ проектах eglot автоматически #include’ы дописывает.

Вот так и рождается миф о могучем GNU Emacs. Сколько есть роликов на ютубе рекламирующих силу и мощь имакса, это всегда какой-то флуд про орг-мод (да нахер он мне не нужон ваш орг-мод), какие-то рассказы про «перешёл на имакс и не жалею», какие-то хелло-ворды в качестве примера, а когда дело доходит до конкретики - ну… я сам этим не пользуюсь, ну… попробуй другой плагин, ну… это юникс-вей ты просто не понимаешь. Да не хочу я понимать, я хочу чтобы программа работала из коробки и помогала мне автоматизировать рутину. Я не хочу ковыряться в лиспе, не хочу знать что там под капотом есть какой-то eglot, я не хочу компилировать Emacs из исходников, чтобы активировать поддержку treesitter, я знать не хочу что такое treesitter, это не нужно мне чтобы писать программы в рамках моих компетенций. И более всего я не хочу ничем из всего этого набора веселых равлечений для кружка «собери себе ИДЕ из говна и палок» заниматься потому, что даже после всех ковыряний, настроек и допилок оно не работает, как надо. Ты удаляешь файл в одном плагине, но он продолжает отображаться в другом, потому что они никак не синхронизируются, ты не можешь приметить цветовую схему для всей программы, потому все плагины индивидуально настраиваются, ты устанавливаешь плагин и видишь краказябры, потому что какого-то шрифта в системе не хватает - и прочее и прочее. Потом ты окрываешь Idea, видишь там, например, предиктивный автокомплит, который ты раньше даже не замечал, потому что… а в смысле, а чо такова? и понимаешь, что две недели на настройку Emacs ты потратил абсолютно впустую.

FishHook
()
Ответ на: комментарий от FishHook

Ещё раз. Я не знаю как настраивать поддержку скриптовухи, я ее не пишу. Я пишу на С и на C++, и у меня eglot сам изменяет #include’ы. Я вообще не понимаю зачем скрипты писать больше чем в 1 файл: если у вас получается что-то большое, то стоит задуматься, не пора ли переписать это на прикладной язык.

zx_gamer ★★
()
Ответ на: комментарий от zx_gamer

Я не знаю как настраивать поддержку скриптовухи… Я вообще не понимаю

А если бы я дал для примера вместо питона раст, джаву или го то вы бы писали «Еще раз, я не знаю как настраивать поддержку раста, я вообще не понимаю нафиг он нужен». Ценнейшие комментарии выдаете! Не знаю, не умею, не пробовал, но имею авторитетное мнение:

На вряд ли найдется IDE, которая может хотя бы столько же, сколько GNU Emacs.

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

FishHook
()
Ответ на: комментарий от t184256

Если тебя загнали на сервер, и доступ только к консоли по ssh, или что-то подобное, то vim - отличное средство для разработки, хотя и требует конфигурирования и привыкания.

Если же есть возможность запустить GUI, то скорость разработки значительно повышается в GUI IDE.

blex ★★
()
Ответ на: комментарий от zx_gamer

Ещё раз. Я не знаю как настраивать поддержку скриптовухи, я ее не пишу.

Правда, подумал я, может надо попробовать что-то другое, может со статической типизацией всё сильно лучше? Дай-ка попробуем Имакс с Раст-аналайзером, вдруг бомба?

LSP :: Connected to [rls:92533/starting /Users/fishhook/code/misc/rust_test].
LSP :: rls has exited (exited abnormally with code 1)
Server rls:92533/starting exited (check corresponding stderr buffer for details). Do you want to restart it? (y or n) y
LSP :: Connected to [rls:92538/starting /Users/fishhook/code/misc/rust_test].
LSP :: rls has exited (exited abnormally with code 1)
Server rls:92538/starting exited (check corresponding stderr buffer for details). Do you want to restart it? (y or n) n
Updating buffer list...
Formats have changed, recompiling...done
Updating buffer list...done
ibuffer-projectile: groups set
Commands: m, u, t, RET, g, k, S, D, Q; q to quit; M-SPC h m for help

Хм, зараза! Нам предлагают заглянуть в stderr buffer for details. Глядим в log-lsp, что же там нам напишут.

Command "rls" is present on the path.
Found the following clients for /Users/fishhook/code/misc/rust_test/src/main.rs: (server-id rls, priority -1)
The following clients were selected based on priority: (server-id rls, priority -1)

ну просто lsp-сервер не стартует по какой-то причине, господь её ведает по какой. Правда же, какая еще ИДЕ так умеет?

Ну что, @zx_gamer, у меня руки кривые, я не тот язык программирования использую, или «вы не знаете, вы не пользуетесь», или что еще новое вплывёт в деловой наш разговор?

FishHook
()
Ответ на: комментарий от FishHook

У вас есть интерпретатор Emacs Lisp. Вы можете (довольно легко) написать вообще всё, что вам нужно. Поддержку Java очень хвалят, у меня нет сомнений, что там все работает нормально. Про другие языки (из вами перечисленных), вы правы, не скажу. И, вы опять-таки правы, я не знаю зачем их используют (это и к Java тоже относится). Более абстрактными или фичастыми языками, чем С++ они не являются (скорее наоборот, жалкие костратыши). И зачем мириться с интерпретатором, GC и прочим – мне тоже не понятно.

Могу предположить, что в тематических чатах или на форумах, вам могут помочь. Но даже если представить, что поддержки этого функционала действительно нет ни в одном плагине (в чём я сильно сомневаюсь), то в чем проблема написать программу, которая прыгнет в упомянутый файл и найдёт там все def ? Мне кажется, что решить данную задачу с нуля можно строчек за 50 или даже меньше на Emacs Lisp.

Что же делаете вы? Вы просто хейтите, не более. Поставили себе программируемый текстовый редактор, написанный на программируемом языке программирования и жалуетесь, что не хотите программировать. Ну это же смешно! Зачем тогда ставили, спрашивается?

zx_gamer ★★
()
Ответ на: комментарий от zx_gamer

Вы поражаете уронем аналитики, вы знаете? Я вам даже завидую, у вас в голове каким-то чудесным образом уживаются совершенно противоположные по смыслу концепции. То есть, вы на полном серьезе утверждаете, что Emacs - самая продвинутая ИДЕ потому что, теоретически и потенциально, для неё можно написать практически какое угодно расширение. Тот факт, что за сорок (или сколько там лет?) существования Emacs нужных мне для работы расширений в Emacs не появилось, вы ставите в вину мне - пользователю. В то же время, опыт пользователей альтернативных ИДЕ, для которых есть тысячи отличных расширений, которые устанавливаются нажатием кнопки, и которые просто работают, вы игнорируете. Тот факт, что та же vscode написана «на программируемом языке программирования» и есть в опен-сорсе и вы можете сколько угодно программировать если вам больше нечем заняться, вы игнорируете, Emacs все равно самый лучший и уникальный, потому что «написать вообще всё, что вам нужно». Для vscode тоже можно «написать вообще всё, что вам нужно», но почему то это вам не интересно, это же другое. Для Idea тоже можно написать какой угодно плагин, но нет. Почему-то вы отвечая на мое сообщение проигнорировали содержание этого сообщения, вы просто никак не отреагировали на демонстрацию очевидного бага, который блокирует мою работу с Emacs. Как-то так у вас получается, что вы боготворите С++ считая все остальные (и особенно динамические) языки говном, но при этом тут же, в том же предложении призываете весь мир писать на динамическом Emacs Lisp. Зачем JavaScript вы не понимаете искренне, а зачем Lisp - понимаете.

Дорогой, у вас шизофрения?

FishHook
()
Ответ на: комментарий от zx_gamer

На вряд ли найдется IDE, которая может хотя бы столько же, сколько GNU Emacs.

я предлагаю челлендж. Вы дадите пример хотя бы одной функциональной возможности Emacs, которой нет в Idea. Только не орг-мод, ладно? А потом, я вам дам пример того, что я считаю, есть в Idea но нет в Emacs и вы не сделаете это в «50 строк кода на Emacs Lisp»

FishHook
()
Ответ на: комментарий от zx_gamer

Что же делаете вы? Вы просто хейтите, не более.

Я же не на пустом месте хейтю. Я наслушался рекламы от разного рода балаболов, которые мне прожужжали уши про «вряд ли еще какая-то ИДЕ». Я попробовал, охренел от примитивности и кривизны поделки, и теперь я делюсь своим мнением. Emacs - это примитивная, тупая, кривая поделка, которой пользуются полтора гика, чтобы еще больше считать себя гиками, своеобразный мозговой онанизм. Живите с этим.

FishHook
()
Ответ на: комментарий от Psilocybe

Тоже нельзя. Нельзя любые «compound assignment» применительно к volatile. Типа, неявные чтение-модификация-запись. Неожиданно начали нас оберегать от этой страшной опасности.

Beewek ★★
()
Ответ на: комментарий от Psilocybe

Совершенно верно, во многом помогает.

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

Понятно, что есть решения, позволяющие вести разработку через удаленное подключение к серверу. Но обвешанный плагинами vim в этом случае оказывается хорошей альтернативой.

Да, речь о C++.

blex ★★
()
Ответ на: комментарий от FishHook

Я про JS ничего не говорил. Я говорил про Java. JS – скриптовуха. Скриптовуха может быть на чем угодно. Просто не надо скриптами писать то, что должны делать полноценные программы. Какой смысл писать на Java, я действительно не понимаю. Можно написать почти строчка в строчку столько же кода на C++, но получить код, который в разы быстрее и потребляет меньше ресурсов.

Ваши проблемы я не игнорировал. Я прямо ответил, что я не знаю о их существовании, их решении и не хочу знать (мне это просто не нужно, потому что я не пишу скрипты на питоне).

Да, вероятно в других IDE можно тоже написать все, что угодно. Но Emacs предоставляет очень много возможностей из коробки. Фактически, можно вообще ничего не доставлять, чтобы кодить на C или C++ без резкого отторжения. (Хотя еще несколько плагинов жизнь облегчают сильно.)

zx_gamer ★★
()
Ответ на: комментарий от FishHook

Что скажете насчет клавиатурного макроса? Можно нажать <f3>, сделать ряд действий, нажать <f4>. После чего повторное нажатие <f4> приведет к повторению заданного ряда действий. Этот функционал есть из коробки уже очень много лет как. Естественно, в этот ряд действий может входить вызов любых функций, например mark-word (выделить слово под курсором).

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

zx_gamer ★★
()
Последнее исправление: zx_gamer (всего исправлений: 2)
Ответ на: комментарий от FishHook

Emacs - это примитивная, тупая, кривая поделка, которой пользуются полтора гика, чтобы еще больше считать себя гиками, своеобразный мозговой онанизм. Живите с этим.

🧌 Мы тебя записали в отдел примитивов.

Спроси у GPT4, что он считает по редакторам и почему. Но ИИ хитёр и изворотлив, собака такая. Он не может теперь из-за толерантности сказать в лицо - ты тупой лось. Он напишет, что Emacs требует долгого изучения, а тебе мол результат надо сейчас. Бери Visual Studio и работай, а то распылишься и бла-бла-бла.

Emacs - это примитивная

Особенно дибильно срать на ходу такими выражениями в сторону «примитивного» Emacs, где ещё в прошлом веке напедалили почтовый клиент и музыкальный проигрыватель.

Ещё веселее тормоза, накидывающие пару чашек примитиву. Расписались чаем xD

anonymous
()

Stlink отказались от поддержки макоси. Это сподвигло меня на покупку jlink. Странноватый программатор и странный софт у них, но по крайней мере работает.

Вообще в теории твои проблемы решаются докером. Но понятно, что юсб в докер пробросить не всегда можно.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 2)

Я так понял, в треде собрались vscode профессионалы. Подскажите каким плагином можно gdb интегрировать. Я ставил c++ плагин но как там gdb использовать не разобрался. Надо подключаться удаленно по порту.

vbr ★★★
()
Ответ на: комментарий от zx_gamer

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

Вот у госконтор или НИИ там совсем плохо.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от zx_gamer

Можно написать почти строчка в строчку столько же кода на C++, но получить код, который в разы быстрее и потребляет меньше ресурсов.

Круто конечно, жаль только неправда:

  1. Не в разы на 10% на крупных приложениях, а то и вообще одинаково. Пруфы в недавнем топике о сравнении языков.

  2. С/С++ по сути write-only языки с пачкой UB.

Если бы у OSS-сообщества были бы хотя бы зайчатки разума, как например у Гугля, больше половины десктопного софта было бы написано на джаве, которая в своей стандартной библиотеке имеет апи от асинхронного шифрования до графики на ogl начиная с начала нулевых. И всё это вылизано как у кота яйца. Но в итоге мы имеем пачку несовместимых между собой графических тулкитов и написанного на них кривого софта с такими же кривыми форками в соревновании между собой кто сделает ещё кривее. И раздутое чсв майтейнеров всего этого «софта», осиливших написание анектодов на С.

В отличии от андроида, на котором реализовано почти все то же самое, но за время на порядки меньше чем развитие всего этого кривого гамна написанного на C/C++.

Ygor ★★★★★
()
Ответ на: комментарий от Ygor

Не в разы на 10% на крупных приложениях, а то и вообще одинаково. Пруфы в недавнем топике о сравнении языков.

Только у пользователей обычно объем памяти не стремится к бесконечности, как на серверах. И постоянное подтекание памяти у Java довольно сложно не заметить. А если это какая-то слабая железка, вроде фотоаппарата, то ещё можно насладится зависанием интерфейса намертво, во время работы GC.

С/С++ по сути write-only языки с пачкой UB

Это неправда. И UB там довольно очевидное: не дели на 0, не разыменовывай нулевой указатель или указатель, который указывает на то, что тебе не принадлежит, не переполняй знаковую переменную.

Вроде все. Я что-то забыл?

WO язык – это – Forth – например. А даже лютейший говнокод вроде Boost C++ libraries читать реально.

zx_gamer ★★
()
Ответ на: комментарий от zx_gamer

то ещё можно насладится зависанием интерфейса намертво, во время работы GC.

Дорогой пользователь имакса, вам ли не знать, почему это происходит?

А хотите я объясню?! Граждане быдлокодеры на джаве запускают исполнение основной код программы в главном потоке гуйни. Но что с быдлокодеров взять, не то что 40 лет опыта разработки имакса, хотя постойте…

Вроде все. Я что-то забыл?

Не используй префиксный инкремент всуе! Скажи сколько будет

int i = 5;
i = ++i + ++i;

а? а? А???

WO язык – это – Forth – например. А даже лютейший говнокод вроде Boost C++ libraries читать реально.

Там это - главный майтенер XFS из ядра линакса давеча сгорел и послал все нахер. По тем же причинам. Но правда не буста не форса там не было. Но ооп по мнению Линуса не торт.

Ygor ★★★★★
()
Последнее исправление: Ygor (всего исправлений: 1)
Ответ на: комментарий от FishHook

Это и подходит под обращение по указателю к ресурсу, который программисту не принадлежит. Если вы систематично мажете, попробуйте флаг GCC -fsanitize=undefined,address для не релизной сборки. Будут писать, в каком конкретном месте и по какой причине случилось UB, вместо, непосредственно UB.

Но я не знаю, как надо программировать, чтобы вылезти за границы массива. Логика там очень простая: с нуля и не включая размер массива – все индексы. Я не помню, чтобы я в таком когда-то ошибался, может, еще при изучении программирования.

zx_gamer ★★
()
Ответ на: комментарий от Ygor

Не используй префиксный инкремент всуе! Скажи сколько будет

А ну да, согласен, забыл.

Но зачем так делать? Это же противоречит любой здравой логике! Когда пишете i++, ++i, i–, –i просто думайте о том, что это просто inc i или dec i в соответствующем участке кода.

zx_gamer ★★
()
Ответ на: комментарий от Ygor

Там это - главный майтенер XFS из ядра линакса давеча сгорел и послал все нахер. По тем же причинам. Но правда не буста не форса там не было. Но ооп по мнению Линуса не торт.

Ну а он и не бог, чтобы ему поклоняться. Пусть Линус тогда не использует 90% софта, включая браузер, которые написаны в этой парадигме.

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

zx_gamer ★★
()
Ответ на: комментарий от zx_gamer

Но я не знаю, как надо программировать

Я не помню, чтобы я в таком когда-то ошибался

За тебя погуглить, сколько за последние 10 дет в линуксе нашли багов связанных с выходом за границы массива?

FishHook
()