Pull to refresh
8
0.2

https://steamclub.net

Send message

Это всё частности. Главная пробема тестов - хомяки.

Мерлезонский баЛЛет Акт 1. Тесты

Так, юнит-тесты, нужны для проверки алгоритмов (либо устройств), оформленных по образцу конечных автоматов (КА). Ни к чему более они не применимы. По нормальному их называют integrity check tests (проверка целосности КА). То есть если функция не написана по образцу КА (что включает соответствующую на нё доку), то применять их запрещено (либо бессмысленно - как тыкать пальцем в небо).

Можно ли ими проверять всё дерево "бизнес-логики", если его внутрянка напихана черт-знает-чем? Ну, если после того, как данные попали в алгоритм и в нём не сидит рандомизирующих его состояния функций, то, да. Но (!) проверка будет гарантировать лишь работу на том множестве элементов вход->выход, которое подано/снято с алгоритма при тесте.

К примеру, мы проверили операцию для 2-х окошкек бухгалтера тёти Мариши, что при вводе 2+2 в базы пишется 4! И это честный и полный юнит тест! вводи 2+2 - всё будет в порядке. Но ведь, мы не проверили, к примеру, 2+0 и 0+2. А пусть тётя Мариша начисляет % на вклады. И ушлый альтруистично настроенный программист-оптимизатор, к примеру ещё допустил, что иногда начисления бывают нулевые. Но мысль о том, что на 0 руб могут начислить 2 (то ли рубля то ли миллиона $$$, а у нас и так бывает) - просто "взрывала" его мозг. Поэтому для такого случая он возвращал где-то в глубоко функциях ошибку "неверный аргумент", которая должна красным окошком выскочить на столе тёти Мариши. И этот "баг" мог не всплывать годами (Мариша то была тётка "старой закалки" и "у то акошка унь то не сувала"). Ну всё жжжж "работает"! А вот заболела/запила Мариша, и на 1 день на её место назначили Нину. А Нина - у нас (!) математик. Ну, какая разница, казалось бы, как в водить в окошки: 2+0 и 0+2?! Операция (+) же "ко-му-му-тО-тиуна" (им так в универститетах тых рассказвали)! Вот Нина и ввела...

2. Акт Второй. Хомяки

Не лучше ли было предоставить свой DSL, который сам как-нибудь под капотом запустит тесты?

Да я посмотрю, Вы, батенька, раскольник! Слова "свой DSL" хомякам произносить - запрещено! Они не то что начинают смотреть с опаской, а пугаются!

Животрепещущий пример:

О том и речь: хочешь разбирать грамматики - бери BNF/Bison/PEG и иже с ними, хочешь анализировать AST (он же - маркированый граф) - делай соответствующий DSL с паттэрн мэтчингом и специализацией.
Си не предназначен ни для первого ни для второго, и реализация перечисленного на нём будет кривой и корявой.

(с) Я https://habr.com/ru/articles/871296/comments/#comment_27737516

Этот комметарий собрал 5 минусов, а дальнейшая дискуссия стоила мне 2 минуса в карму. И это где! Под статьей с заголовком (!) Анализ AST и рефакторинг кода в Clang!

Вы понимаете, какой там Clang у этих писателей и рефакторщиков будет?! Полный! И тут другие анализы сдавать нужно (совсем не AST-овские).

3. Акт Третий. "Что делать?"

Всё нынешнее ПО сейчас дырявое в усмерть (вон даже Боинги из-за "аусорса" не так давно падали). Но "управленцев" и "менеджеров" - это нисколько не смущает, ибо карманов их не касается: нафтанка качачается, бабульки в банчочках крутятся. А как оно там за окном машины с шофёром - так хоть пожар. :)

А другим-то, кто патриотически не присосан к бюджетам, что делать? - Очевидно, выгонять хомяков. Или у Вас предложения?

С другой стороны, мастера - уже пристроены: либо присосаны к бюджетам, либо извлекают прибыль сами. И врядли они откликнутся на зов покушать сладких пирогов от У.[словного]Яндекса, не говоря уже о шляпных галерах с жуликоватыми "оунерами". УЯндексы могут быть посланы: уж лучше батон с колбаской, да свой. :)

Так, "что делать"? - Закупить попкорна и наслаждаться шоу, равернувшимся у нас на глазах. Это лучшее предложение на ближайшие годы. :)

Спасибо, забрал (2-е издание). Курс с заданиями, эталон книги науки, на дискретной математике. Специализована для инженеров по вычислительной математике (компиляторы, разработчики алгоритмов, ...). Прикладникам читать до Часть 3. Теория сложности. (Дальше - теоретическая математика, если ей не заниматься - будет сложно и в практике не пригодится).

В ответку из моей селекции по теме.

Это разнобойчик, здесь конечные автоматы строят над разными физико-математических пространствами: от электронных дискретных устройств - до моделей на системах дифуров.

По последним особенно рекомендую Сю Д., Мейер А. Современная теория автоматического управления и ее применение. 1972. - вещь!

Книги по направлению Конечные автоматы

Дискретка

Гилл А. Введение в теорию конечных автоматов - 1966.pdf
Арбиб М.А. (ред.) Алгебраическая теория автоматов, языков и полугрупп. 1975.djvu
Коршунов Ю.М. Математические основы кибернетики. 1987.djvu
Мелихов А.Н. Ориентированные графы и конечные автоматы - 1971.djvu
Мелихов А.Н., Берштейн Л.С., Курейчик В.М. Применение графов для проектирования дискретных устройств - 1974.djv
Портер У. Современные основания общей теории систем - 1971.djvu
Эббинхауз Г.-Д., Якобс К., Ман Ф.-К., Хермес Г. - Машины Тьюринга и рекурсивные фукции - 1972.djvu

Физика

Сю Д., Мейер А. Современная теория автоматического управления и ее применение. 1972.djvu

ТАУ/САУ

Солодовников В.В. (ред.) Теория автоматического регулирования. Книга 3. Часть 2. Техническая кибернетика. Теория нестационарных, нелинейных и самонастраивающихся систем автоматического регулирования - 1969.pdf

Бердоносов В.Д. Теория систем и системный анализ - 2003.pdf
Заде Л., Дезоер Ч. Теория линейных систем (Метод пространства состояний).pdf
Месарович М., Такахара Я. Общая теория систем математические основы - 1978.djvu
Месарович М., Такахара Я. Общая теория систем математические основы - 1978.pdf
Мороз А.И. Курс теории систем - 1987.djvu
Швыдкий B.C. и др. Элементы теории систем и численные методы моделирования процессов тепломассопереноса - 1999.djvu

Вроде, в разделе "математика", а ни одной формулы. Грустно...

Кстати, в чём отличие "математики" от "алгоритмов"? слова-то разные, и вроде не синонимы...

(вопрос риторический)

Нужно ли было "исследовать" "34 тысяч IT-специалистов страны", чтобы получить список как заведено так уж получилось IT и иных монополий из рейтинга Форбс?

(вопрос риторический)

Это не этап парсера в компиляторе, это отдельная программа, использующая результат парсера.

Возможно. В этом я не специалист. Поэтому делил не по программам, а по этапам. AST же, вроде, сделал парсер, но не отдал ещё компилятору. Поэтому работу с AST-ом я отнёс к этапу парсинга кода.

С другой стороны, почему бы работу с AST не вынести в отдельный этап?

Давайте условно назовём этот этап "Дерево", и даже, не просто "Этап Дерево", а как у того Льва Толстого Дубище "...с огромными своими неуклюже, несимметрично растопыренными корявыми руками и пальцами, он старым, сердитым и презрительным уродом стоял между улыбающимися березами".

Назовём этот этап "Дерево на костылях" или "Костыльное дерево". Полагаю, на этом все наши разноглася по наименованию этапов сняты.

PS Вступая в дискуссии под темами с Дубо-кодом, где ождаешь кислые мины и душные речи... весь этот (конечно, кодовый) бред, изначально думаешь, а сколько минусов это принесёт в карму. Сия принесла -2. Но и обогатила идеями.

Выводы: карма - это Бог (тот самый)! Сам Бог подсказывает нужно ли ходить по таким путям, если признаки итога проглядывают уже в коде. :)

1.

Писать свой парсер для всех возможных диалектов C++, да еще и на Bison...

Передёргиваете. Разница между тем, что Вы написали и "хочешь разбирать грамматики - бери BNF/Bison/PEG и иже с ними" - ясна?

Если не совсем очевидна, то я доносил мысль, что писать парсеры на Си - это плохая затея, а парсер Clang написан на Си.

Это была критика Clang-а, а не то, что Вы подумали.

2.

Если вы называете костылем, решение использовать уже существующий парсер...

Опять осечка. Давайте внимательно читать, и попробуем вместе подумать, что я называю не костылём, а "костыльно-ориентированным программированием".

Подсказка:

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

Для решения этой проблемы разработчики Clang-а лепят "из того, что есть" костыль в виде - "IfStmtHandler, MatchFinder, MatchCallback, newFrontendActionFactory" и прочей трухи, что не на много лучше того, что было. А Вы его вынуждены брать и лепить из него костыли дальше (ибо куда деваться?).

По-моему это оно: "костыльно-ориентированное программирование".

...шото Вы меня разочаровываете.

Все решения довольно корявые.

Значит, очевидно, пользуемый инструментарий не подходит к этим задачам.

И вот это, говорит о попытке создания полу-меры - недо-DSL-я:

Для упрощения использования сопоставителей при анализе AST в проекте Clang был разработан новый инструмент — clang-query

Далее, глубоко не убеждён, что анализировать/модифицировать алгоритмы на этапе парсера (ака Clang) - есть хорошо. Ибо не его это функция.

Выгрузить дерево и работать с ним специальным инструментом, как писал выше @vadimr - гораздо лучше. Собственно, оно так и работает: Clang (функция: парсинг)->выгрузка дерева (в байткод)->анализ и оптимизация алгоритма в LLVM. А уж та простроит из байткода нужные ей графы, и с учётом выбранных опций проведёт над ними оптимизацию. Всё сделано "академически", по науке.

Деревья Clang-а разве что для статистического/эвристического анализа пригодятся (но опять же в отдельном специальном модуле такого анализа). Но если вы на этом этапе хотите отлавливать некоторые узлы и ставить в них свои метки, либо что-то сливать в свои бинарники, - так ставьте. Я что, где-то запрещал это делать?! :)))

Что по DSL-лям для работы c AST-ами (то есть структурами на графах), то они были и будут. Пример:

GraphIt - A High-Performance Domain Specific Language for Graph Analytics https://graphit-lang.org/ https://github.com/GraphIt-DSL/graphit

Значит, мы рассматриваем разные аспекты дела.

Я говорю об "академической" стороне дела в терминах научно-теоретического обоснования. Вы - о "здесь, сейчас и быстро" в терминах "лепим из того, что есть".

Такие пассажи:

class IfStmtHandler : public MatchFinder::MatchCallback ... Tool.run(newFrontendActionFactory(&Finder).get()

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

Но, как известно из практики, оно - "наше всё" при решении "задач бизнеса". Особенно "прямо сейчас" - а другого бизнесу и не надо.

Поэтому, коль инструмент есть, проблемы - решает, - пользуйте. Я ж не отговариваю.

Просто говорю, что выглядит всё это криво и коряво, соглашаясь с предыдущим комментатором и Вами (прочтите, что сами писали выше).

Да, но фильтр мультисписка средствами C++ просто выглядит неуклюже, как его ни пиши.

...С этим я полностью согласен.

и ранее.

О том и речь: хочешь рабирать грамматики - бери BNF/Bison/PEG и иже с ними, хочешь анализировать AST (он же - маркированый граф) - делай соответствующий DSL с паттэрн мэтчингом и специализацией.

Си не предназначен ни для первого ни для второго, и реализация перечисленного на нём будет кривой и корявой.

PS ИМХО. :)

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

Сова - С++, глобус - всеядность.

Конкретно:

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

С++ - лишь "синтактический сахар", облегчающий группировку полей и функций внутри Си-структуры (ключевое слово - struct): работу по составлению таблиц, которую в Си можно сделать руками - перекладывают на компилятор.

А для доменного использования (математика, лексеры/парсеры, итд.) - нужны доменные языки ( см. https://ru.wikipedia.org/wiki/Языково-ориентированное_программирование ).

Никогда не было и не будет никаких "языков общего назначения". Вот и мучают этот бедный Си.

У меня была идея из табло стиральной машины сделать аркадную приставку вроде Волк ловит яйца ( играть здесь https://igroutka.ru/igry-nu-pogodi/4494-volk-lovit-yayca.html :) ) или Epoch Dracula House (1982) https://www.youtube.com/watch?v=kOkDpTxTp8w

*

ЖПП = ЛНПА + умение плести интриги :)

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

Такое похоже уже не на "корпорацию", а на захудалый колхоз - со всеми вытекающими отсюда "печеньками" (тем кто знает как их печь), и кнутами (для прочих).

Что до:

как айтишнику выживать в корпорации

То как и не айтишнику. Два золотых ключика:

  1. умение работать с нормативными правовыми актами (в первую очередь ЛНПА)

  2. умение плести интриги (то есть приобретать покровителей и обходить козни врагов)

Тогда - сложится. Остальное - от лукавовго. :)

Уважаемый @ilyanik, похвально Ваше желание упорядочить знания "как делать бизнес". Но метода не верная: заработайте хотя бы 5-15 млн$, и, затем, на этом "кейсе" покажите нам как его повторить.

Вот тогда под Вашими статьями вы будете получать горку плюсов.

А так, когда умные но бедные, учат глупых, но богатых "как делать бизнес" - это выглядит слегка неконгруэнтно и заставляет усомниться в словах, и здесь уже не важно: верных либо не совсем.

С уважением, Ваш подписчик. :)

Зачем так грубо?! Бездарный математик, и такой же физик; запутавшийся в жизни человек. Так точнее. :)

Роскошная статья, побольше бы таких на Хабре! И подборка ссылок соответствующая.

+/+

Дружище, рад, что Вы освоили "умножение обоих частей уравнения" на -1 и " пока поняли...". Но если Вы удосужитесь заглянуть в цитируемые выше страницы, то обнаружите там далеко не "базовые операции", за которые Вы приняли тензоры. А лазить по компонентам тензора и смотреть как он меняется/не меняется и что далее по формулом тянет так... пустячок-с... "смена знаков" у меня никакого желения нет. Равно как и проверять "труды" сих "великих", но не признанных (либо признанных, но в "узких кругах" - это как кому больше нравится).

PS А объяснить "A = (-b)+(-c) ==  (-A)=b+c" - как я уже один раз написал, позволю процитировать себя: "Ага и я так могу.". Такое "объяснение" без понимания зачем они меняли знак, а затем через 20 лет, спустя несколько изданий, - откатили всё назад, меня это не устраивает. Как не устроило и Л.П.Питаевского, который не просто так счёл нужным эту "мелочь" вынести в самое начало книги - в Предисловие редактора.

PPS Угу, Питаевский кагбэ "всем заинтересованным" намекает. Учитесь не только "базовым операциям", но и понимать прочитанное. Это не менее, а более важно. ;)

Ага и я так могу. :)

А такие пассажи со стр. 109 (см. выше) что-нибудь значат?

Плотность потока энергии есть вектор; плотность же потока импульса, который сам по себе есть вектор, должна, очевидно, быть тензором (компонента б этого тензора есть количество a-й компоненты импульса, протекающее в единицу времени через единицу поверхности, перпендикулярную к оси х).

Для меня это значит, что у ребят было много дури и свободного времени. В лучшем случае они гнали дезу, чтоб запутать "врагов" по заказу "КГБ".

PS Пробовал пару раз читать их "монументальный труд", и всякий раз после нескольких странц он летел в корзину.

Преисподняя полна добрыми намерениями, а небеса полны добрыми делами.
Удачи!

Information

Rating
2,681-st
Registered
Activity

Specialization

Project Director, Software Architect
From 700,000 $
Project management
Building a team
Startup management
Development management