Pull to refresh
33
0
Sam Protsenko @skb7

User

Send message
Перезалито на Github: https://github.com/joe-skb7/bmcontrol
Примеры перезалиты на гит-репозиторий: https://gitlab.com/joeskb7/qt-mvp
Давно заметил, что на всех вменяемых проектах используется связка: Git, Jenkins, JIRA, Gerrit, Mailing Lists. Хотя можно заменить Gerrit через review в Mailing Lists. Еще можно посоветовать использовать cgit в качестве веб-интерфейса для git.
точно, не так понял. но и для такого случая можно что-то придумать. например как делает это Eclipse? по таймеру? ну так наверняка и в vim можно завести обновление базы по таймеру.
Поймите, я не против IDE как таковых, мой месседж в другом:

1. vim настраивается до уровня IDE с помощью плагинов и настроек

2. мне не понравилась категоричность и нигилизм ваших высказываний:
— в сторону «дедушек» с 40-летним опытом разработки реально крутых проектов типа Джо Армстронга, польза одного проекта которых превосходит пользу от всех энтерпрайзных поделок на C#/Java вместе взятых. да и сложность я уверен тоже
— в сторону инструментов типа vim и make, которые ну никак не устарели. да, на них нельзя тягать кнопочки на формочки, но что касается работы с кодом — они с ней справляются на 100%. ПО не портится и не гниет само по себе. задачи программирования почти никак не изменились за последние 50 лет, и способы писать программы тоже.

3. IDE даже по сравнению с простым блокнотом + консольные тулзы (grep, find и т.д.) дают ВЕСЬМА малый выигрыш по времени, я имею ввиду суммарное время разработки проекта. я думаю это и был основной посыл Джо Армстронга, и я с ним согласен
Для этого даже cscope не нужен:

$ find. -name '*.[ch]' -exec grep -H 'struct socket ' {} \; | sed 's/:.*//g' | sort -u >cscope.files
$ for i in $(cat cscope.files); do grep -PHn '\.flags\b|->flags\b' $i; done

Если вам не нравится, что не все flags здесь будут именно из структуры socket, желаю удачи в отладке ситуаций когда синтаксический анализатор не «словит» присвоение типа такого:

struct socket a = {
.flags = 0x8,
};

или другое хитроумное, коих полно в сложных проектах на Си (например с использованием void*, container_of() и т.д.).

С другой стороны, если у вас постоянно возникают такие ситуации (вот у меня за 2 года еще ни разу такого не нужно было, иначе бы я уже полазил и нашёл бы, как такое сделать, или сам дописал бы в тот же cscope), то никто не мешает в качестве синтаксического парсера (не IDE!) использовать парсер из Eclipse или clang, которые намного мощнее (но и намного дольше) чем cscope:

eclim.org/
lists.cs.uiuc.edu/pipermail/cfe-dev/2013-March/028452.html
1. cscope строит базу ядра по времени намного быстрее Eclipse
2. cscope делает быстрое перестроение при уже построенной базе
«функции в принципе… не применительно к какому-то языку» не бывает и быть не может. у каждого языка своя семантика, и ни один IDE не умеет парсить абсолютно все языки.
Первое что нашлось:

> I can't rebuild a database automaticly.

If you really want to do that each time you save the changes to a file,
you can use an autocommand something like this:

au BufWritePost * call system(&csprg. " -R -b") | cs reset

That's untested but uses pieces of commands I'm using currently, so it
should work as is or with some minor tweaks.

See

:help 40.3 " Autocommands
:help BufWritePost
:help :call
:help system()
:help :bar
Никто не мешает намапить обновление DB cscope в виме на сохранение файла. cscope второй раз и далее не переделывает DB, а обновляет. Из мана:

cscope builds the symbol cross-reference the first time it is used on the source files for the program being browsed.
On a subsequent invocation, cscope rebuilds the cross-reference only if a source file has changed or the list of source
files is different. When the cross-reference is rebuilt, the data for the unchanged files are copied from the old
cross-reference, which makes rebuilding faster than the initial build.
Не теряйте контекст разговора. Говорили именно про Си, вот изначальная цитата «eyeofhell», на которую я отвечал:
> Я очень хорошо владею VIM, Emacs, ctags, grep и прочим легаси — так вот, с помощью них это сделать невозможно

Раз был упомянут ctags — очевидно разговор шёл именно о Си.

Пользоваться IDE я умею — 3 года просидел за QtCreator и KDevelop. В QtCreator на тот момент знал 95% функционала, т.е. все менюшки и настройки, и почти все комбинации клавиш. Да, такого парсера C++ как в KDevelop для вима я не видел, хотя на офф. сайте cscope пишут что он и C++ тянет, но опять же, разговор шёл про Си.
Про J2EE не знаю, пишу только на Си/Си++. Для того что я делаю, — да, есть. sudo aptitude install cscope vim, и всё по сути, в самом виме уже есть плагин для cscope, подсветка синтаксиса, автодополнение (omni-completion), браузер файлов (:Sex, хотя я использую NerdTree), поддержка make (:make). Дальнейшие настройки, плагины — каждый себе по вкусу ставит и настраивает. Наверняка нет визуальной поддержки gdb по-умолчанию (уверен, что есть плагин), но ядро не так дебажат, так что не задавался вопросом.

Если вам нужно только h/j/k/l — может проще в вашей IDE поискать Vim режим или Vim-плагин? Потому что если вам кнопочки тягать на формочки — наверняка такого в vim нет и не будет, это ж вообще чисто консольный редактор.
да, linux это и есть kernel. если подробнее — то я индексирую только файлы, существенные для используемой архитектуры (arm64) и нужной мне платформы, но это детали — по .config файлу вообще можно оставить только файлы, которые собираются для заданной конфигурации, но кому-то нравится чтобы были проиндексированы все файлы, чтобы можно было искать в них примеры кода. Всё тоже самое нужно делать в Eclipse — выбирать, какие файлы индексировать.
> Я не спешу

Нет, вы спешите.

> Возможности VIM, Emacs и Visual Studio я знаю похуже авторов

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

> но все равно очень, очень хорошо

Нет, очевидно что очень-очень плохо, по крайней мере что касается vim.

> Повторить в Vim или Emacs функциональность «Find All References» как она реализована в Visual Studio для C# или в JetBrains IDEA для Java имеющимися средствами невозможно.

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

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

Не только можно, но уже написано. cscope называется и плагин для вима одноименный. Уже лет как… надцать. Уже для PDP-11 было, но вы же всего 15 лет разрабатываете, тем более судя по всему только в виндовс и вижуал студии и только на c#, — откуда же вам про это знать.

> Но на данный момент указанное сделать невозможно.

Можно, cscope/ctags. Всех устраивает вроде, если уметь использовать.

> Так что по моему скромному мнению, заслуженный разработчик эрланга лжет, когда утверждает что современные средства работы с исходным кодом «ничем не лучше тех, что были 40 лет назад».

Лучше, но это дает настолько несущественный выигрыш в производительности, что им вообще можно пренебречь. Я могу побыть примером тут. Работаю с кодовой базой Linux. Использую для навигазии vim+cscope. Рядом работает парень, который использует Eclipse. То что я вижу — у меня уходит столько же времени на то чтобы раскрутить аналогичный код. Так что да, все эти монструозные навороченные IDE с претензией на удобство, на самом деле суть те же редакторы кода, и не дают абсолютно ничего по сравнению с vim. Единственное — это что у них порог вхождения ниже.

> Возможно, ему просто никто не показал как сейчас выглядит большой и сложный коммерческий проект, сколько в нем строчек кода, какие задачи каждодневно решаются и какие для этого используются инструменты?

Ох, вспомним про слона и Моську. Подозреваю что он поболее вас видел, и опыта у него явно поболее чем 15 лет в си-шарпике на венде, со «сложными большими коммерческими поделками».

> И они намного лучше тех, что были 40 лет назад.

Смотрел Eclipse — ни нашёл для себя ни одной возможности, которая была бы полезна и которой не было бы в vim в виде плагина или известной надстройки конфига.
> А в перспективе, когда исполнительные устройства будут слишком мощными и процессор будет сбоить от коммутации тока
> как такового, нужно будет использовать оптроны для создания 100% гальванической развязки.

Двигатели постоянного тока действительно дают ВЧ помехи, из-за чего у меня например портились транзакции по SPI (но может и проц заглючить от этого). Я их давил с помощью саппресоров:

[1] reprap.org/wiki/GM3_Noise_Suppressor_1_0
[2] reprap.org/wiki/Nophead%27s_Extruder_Tweaks#Interference_suppressor
[3] www.beam-wiki.org/wiki/Reducing_Motor_Noise
[4] www.kerrywong.com/2012/01/26/a-short-guide-on-motor-electrical-noise-reduction/
Сделал клон оригинального репозитория с версией 1.1, улучшив немного код:
— починил задержки
— починил выход за границы массива
— починил остальные ворнинги от "-Wall" и cppcheck
— сделал код полностью кросс-платформенным (теперь и на венде и на линуксе собирается одним и тем же мейк-файлом)
— перевел из C++ на чистый Си (там C++ не нужен абсолютно), чем уменьшил размер бинаря в 2 раза
— много других мелких улучшений

Получить код можно тут:
code.google.com/r/joeskb7-bmcontrol/source/checkout

Инструкции по сборке в README файле.

Посмотреть коммиты можно тут: code.google.com/r/joeskb7-bmcontrol/source/list

Также интересную инфу можно посмотреть из этой переписки: www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=show_thread&om=9804&forum=vsluhforumID9&omm=0&m=1l
> В линуксе для этого должен быть разработан единый для всех некий нерушимый стандарт пакет-инсталлеров и библиотек который бы железно соблюдался всеми без выпендрежа и допилок. Что явно невозможно при такой анархии

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

> Собственно массовая безопасность линукса держится не на качестве системы как таковой, а на более высоком уровне квалификации ее пользователей и их малочисленности

Нет.

Она держится в первую очередь (на уровне обычных пользователей) на доверенном репозитории, из которого ставятся все программы и где по идее (да и на практике) нет никаких вирусов, бекдоров и т.д. Если у приложения нет меинтейнера, обычно им является разработчик и выкладывает пакет в своем репозитории (как вариант, PPA). Существование такого репозитория возможно в первую очередь благодаря свободному коду программ (про non-free ветку промолчим), во вторую очередь — бесплатности программ. В противном случае, думаю, не нашлось бы столько желающих быть меинтейнерами. Это кстати то, почему в мире Windows это практически нереально сделать и не сделано до сих пор.

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

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

Information

Rating
Does not participate
Location
Краматорск, Донецкая обл., Украина
Date of birth
Registered
Activity