Как стать автором
Обновить
-5
Карма
1.9
Рейтинг

Пользователь

  • Подписчики 2
  • Подписки

Модульное программирование в C++. Статические и динамические плагины

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

Хотя, как по мне, программы, может быть, будут и разные, но базовый код то будет один.

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

5 самых старых нерешенных задач Математики о простых числах

Умножение в математике операция достаточно абстрактная. Формально никто не запрещает вам назвать любое бинарное отношение умножением. Но если вы настаиваете, пусть вместо умножения для KD(5) и выше будет бинарное отношение. Значит, в моем случае, речь идет о явной формуле для бинарного отношения в любой алгебре KD(n), при натуральных n.

Хотя, как по мне, теряются свойства не умножения, а тех числовых систем, для которых оно определено. Поля R и C поглощаются телом K, а оно – не ассоциативными октавами O, а те седенионами, с делителями нуля, S. Потом начинаются малоизученные системы, типа KD(5) и выше. Что они из себя представляют? Скорее всего, распадаются в декартово произведение более простых алгебр, но не обязательно. Я бы с удовольствием почитал бы информацию об их свойствах.

О теореме Абеля-Руффини без групп и теории Галуа

Трансцендентные ?! Вы шутите. Трансцендентные числа по определению не являются корнями алгебраических уравнений.

Вы правы! Речь должна была идти именно о корнях алгебраических уравнений над полем С, не являющихся целыми, рациональными либо иррациональными числами (с точностью до обычной или мнимой единицы). Думаю, что существование подобных чисел как раз и связано с неразрешимостью их в радикалах, другими словами, подобные числа нельзя представить в виде конечной комбинации радикалов с рациональными степенями. Такая комбинация обязана быть бесконечной, как бесконечна цепная дробь из рациональных чисел, сходящаяся к иррациональному числу.

Как я писал, это только моя интуиция, могу и ошибаться.

5 самых старых нерешенных задач Математики о простых числах

А вы вообще точно уверены, что операция умножения для чисел выше седенионов вообще определена?

Алгебры Кэли-Диксона порядка n определяются рекурсивно, согласно процедуре удвоения. Более подробную информацию можно найти в, упомянутой выше, популярной статье В.В. Сильвестрова: «Системы чисел» ( https://ua1lib.org/dl/806012/ae9407 ).

на кватернионах она перестаёт быть коммутативной. А в октонионах ещё и ассоциативность теряется. А дальше и делители нуля появляются.

Ну, да, это так, только делителя нуля не отменяют процедуру умножения, которая вполне определенна. Но определена рекурсивно. У меня же формула умножения единиц явная, только очень сложная для знака.

О теореме Абеля-Руффини без групп и теории Галуа

Слово «знака» здесь можно опустить. Получается, «с точностью до ортогональной единицы». Все верно, ортогональными могут быть и единицы. В данном случае, это обычная «1» и мнимая «i». Они составляют базис поля комплексных чисел. С геометрической точки зрения это (ортогональные) «вектора», а с алгебраической (ортогональные) «единицы».

Из алгебраического уравнения выйти за пределы поля C уже не получится. А ведь на этом ортогональные единицы не заканчиваются. Далее следуют ортогональные единицы тела кватернионов: «j» и «k». Потом единицы e_4, e_5, e_6, e_7 алгебры Кэли (октонионов). Затем единицы e_8, …, e_15 алгебры седенионов. А для дальнейших алгебр Кэли-Диксона, этого типа, нет даже специальных названий. Все их относят к гиперкомплексным числовым системам.

Кстати, в свое время, я опубликовал формулу для умножения единиц алгебр Кэли-Диксона, произвольного порядка (см. мой комментарий здесь в https://habr.com/ru/company/itsoft/blog/562518/#comment_23144568 ).

Объектно ориентированное программирование на Си без плюсов. Часть 1. Введение

Мои познания Windows закончились на «WinXP», после которой в Windows стало уже очень много политики («безопасности») и коммерческой составляющей

В этом смысле удобнее работать с серверными версиями Windows, настроенных, как десктопные.

Статья рассчитана на тех кто уже знаком с Си, а все примеры ориентированы на ОС Linux.

Сейчас много опенсорса разработанного на Линуксном Си. Но любителям «форточек» приходится конвертировать код под Виндоуз, для бесплатных компиляторов, типа MS Visual Studio C++ Community Edition (там требуется только регистрация). Можно не любить M$, но компиляторы VS C++ у него хорошие.

Что меня угнетает в примерах Си под Линукс, так это нелюбовь к оконному интерфейсу. Только консоль, только хардкор. Хотя опенсорный код там встречается замечательный. Например, FFplay.c. Это «консольный» видеопроигрыватель. Точнее видео проигрывается в окне, с поддержкой большинства кодеков, а управление им осуществляется в консоли. Когда понадобилось портировать код под C++ / WTL в Windows, то пришлось изрядно повозиться. Но получилось! Видео отображается в клиентской части главного окна (разделенного сплитером), в отдельном потоке. В левой части отображается текущий каталог с файлами мультимедиа. Программа делается как обучающая. Само видео работает великолепно!

Поэтому, лично я сторонник С++. Изумительный язык и превосходные компиляторы под него.

О теореме Абеля-Руффини без групп и теории Галуа

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

Весьма похвальное желание! Я бы отнесся к этому серьезно. У меня самого второе (дневное) высшее образование – мехмат МГУ (математика). А по первому я горный инженер. Правда, поступал в Московский университет после работы (по распределению) во Всесоюзном НИИ в Белгороде, где отработал четыре года. Пять лет учебы по специальности (куда поступают либо в 17 лет, либо никогда), хотя мне было тогда 26 лет, дали очень и очень много. Жаль, что, через год после моего выпуска, развалили СССР, поэтому, как математик, я так и не был востребован, хотя перспективы в Советском Союзе у меня были сногсшибательные.

Поэтому, «пришлось переквалифицироваться в управдома», то бишь, программиста, но это уже другая история.

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

Абстрактная алгебра, у нас она шла как «Алгебра-3» это вещь покруче «Фауста» Гёте будет. А на первых курсах нам преподавал матан, с элементами абстрактной алгебры, Л.И. Камынин (в Интернете нашел только его первый типографский том, 430 стр., для первых двух семестров: fileskachat.com/getfile/27047_d05727eb8e4a7ae1f574f7fd501e2c21 ). Во втором типографском томе 620 страниц. Для меня лично это был просто «шок и трепет».

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

Я бы порекомендовал пообщаться на математическом форуме dxdy.ru. Там можно прояснить многие вопросы непосредственно от профессионалов.

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

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

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

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

О теореме Абеля-Руффини без групп и теории Галуа

большинство серьёзных учебников по математике пишутся на достаточно на серьёзном уровне и с весьма серьёзным лицом — рецензенты ведь серьёзные уважаемые в научном сообществе люди и несерьёзную хрень не пропустят на за какие коврижки (даже порой и денежные...)

Однако от ошибок никто не застрахован. Наш преп по матану (один из авторов пятитомной математической энциклопедии) имел страсть искать ошибки (не опечатки!) в серьезных математических публикациях. Например, он говорил, что в 22-м (!) издании «Линейной алгебры» Куроша всего две ошибки!

Модульное программирование в C++. Статические и динамические плагины

Ну, в такой постановке, информации в Интернете, как мне кажется, более чем достаточно. Обычно бывает трудно найти именно конкретное решение.

Модульное программирование в C++. Статические и динамические плагины

Минусы это потому что вы на любой конструктив пишете комментарии в стиле «я художник я так вижу».

Ну, это вы так считаете. С моей точки зрения, минусы это элемент агрессии на человека, его взгляды и точку зрения. У меня почему-то нет желания никому ставить минусы, независимо от того, нравится мне чужое мнение или нет. На Политикусе, скажем, минусы и плюсы не анонимные. Всегда видно, кто есть кто. Так, по крайней мере, честнее.

Ваши проблемы с модульностью решены очень давно в Qt и «банде четырёх». Но непонятно почему вы считаете при этом фреймворк Qt плохим

Может быть, не спорю. Но, чаще всего, проблема в терминологии. Если Qt понимает модульность как Python, то это не совсем то, что нужно мне. С другой стороны, я не говорил, что Qt плох. Мне он нравится, писал здесь, что его опенсорный грид один из лучших, а поддержка моего любимого SQLite там встроенная.

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

И потом, вы хоть и спец по Qt, но ваша фраза: «Возьмите Qt. Там из коробки есть плагины, причем кросс-платформенные.» меня как-то не устраивает. Вот если бы вы продемонстрировали чей-либо аналог моего демо-проекта на Qt, то это был бы другой разговор. Можно было бы сравнить два проекта. А так, ваш совет мне напоминает фразу из прошлого: «Читайте Ленина / Маркса / Энгельса! У них все есть!!!». Или как сейчас любят советовать: «Ищите в Интернете! Там все есть!». Есть, да не все, больше вопросов, чем ответов. Без конкретной ссылки любые советы подобного рода воспринимаются плохо.

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

Приведите конкретные проблемы, которые не решены в Qt, но решены у вас. Только без фраз типа «я не разобрался, поэтому кутэ плохой, а мой велосипед хороший».

Это не разговор. В таком стиле общаться желания нет. Мне нужен программный конструктор. Добавил плагин (dll), увеличил функционал. Убрал, уменьшил. Только не надо мне ссылок на сложные опенсорсные проекты. Там всегда базовый (главный) модуль уже сам по себе сложен. А плагины часто тоже очень ограничены в своем функционале этим самым главным модулем. Мне такой подход не нравится. Поэтому я упростил задачу до предела, чтобы была видна только суть. Иначе за деревьями можно не увидеть леса. Не нужно на начальном этапе загромождать задачу деталями и фреймворками. Для демонстрации идеи достаточно С++ и WinAPI. Причем, сейчас не время говорить о кроссплатформенности. Это все уже детали и нюансы реализации, в которых, как известно, скрывается Дьявол.

Интервью с Марселем Ибраевым о распиле монолита или «Успех распила монолита – грамотный менеджмент»

Вот, начал писать на эту тему: «Модульное программирование в C++. Статические и динамические плагины» ( https://habr.com/ru/post/566864/ ).

Модульное программирование в C++. Статические и динамические плагины

Какой-то велосипед, прям.

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

Поэтому я и написал в статье: «из чего-то, ведь, исходить надо». Никто наши задачи за нас решать не будет. За «так» будут только минусовать либо строить из себе крутого ментора. Но, в таких случаях обычно намекают: «Не говори мне, что мне делать, а я не буду говорить тебе, куда идти!».

Реализация модульности на dll не очень удобна.

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

Для меня лично, это вполне удобно. Поэтому, надеюсь на продолжение публикаций, если, конечно, не заминусуют так, что невозможно будет публиковаться. Тогда придется идти на другие сайты, например, буржуйский codeproject.com. Там у меня есть несколько статей, принятых довольно благожелательно, несмотря, на то, что я сам от них не в восторге.

А так, я могу согласиться, что изложение еще не идеальное, код отшлифован не до конца. Однако идея вполне рабочая. Мне, по крайней мере, нравится. Сейчас, в этом стиле, готовлю другую программу, она уже будет заточена под реальное приложение.

Ну, а критика? Как говорится: «Критики боятся, в Интернет не ходить!». Однако, по-видимому, придется меньше отвечать на комментарии, тогда и минусов будет меньше.

Модульное программирование в C++. Статические и динамические плагины

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

Возьмите фирму «1С», поднялась на Виндоуз платформе, теперь пишет отдельные свои продукты под Линукс и мобильные платформы. Насчет Мака не знаю. Но не думаю, что там будет тот же самый «кроссплатформенный» проект, что и под Линукс.

Поэтому не распространяете свои заблуждения среди неокрепших умов. По крайней мере, по методу: «Хайли лайкли». Если есть возражения по существу, приводите аргументированные примеры. И не учите других «правильно» программировать. Сами вы много публикаций написали, да еще кросплатформенных?

Модульное программирование в C++. Статические и динамические плагины

Лучше бы цеплялись к ошибкам в коде. Больше пользы было бы и вам и мне.

Модульное программирование в C++. Статические и динамические плагины

Это из разряда мифотворчества. Проще писать отдельно для Линукса и отдельно для Виндоуз. Большинство так и делают. А если вы пытаетесь одновременно сидеть на двух стульев, то, как минимум, кое в чем себя ограничиваете.

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

Модульное программирование в C++. Статические и динамические плагины

Читал все, но примеров по модулям С++ из нового стандарта недостаточно.

Я кажется понял, почему у вас возникли проблемы с модулями из стандарта С++ 20. Просто это еще сырая технология, до конца нигде не реализованная. Только местами, в отдельных компиляторах. Автор статьи об этом пишет прямо. Соответственно, нормальных и, главное, полезных примеров, вы пока нигде не найдете.

Но, с другой стороны, если вам нужна полноценная модульность, используйте Python, там она, по словам автора, на идеальном уровне. Хотя меня, лично, это не особо впечатляет. Ведь, что такое модульность в Питоне? По сути, удобная и эффективная работа с внешними пакетами, можно сказать, фреймворками. А что, разве нельзя удобно работать с фреймворками (или их подобиями) в С++? Вполне можно, если хорошо разбираться в теме. Другими словами, я думаю, разговоры о новых фичах в С++, это скорее от лени и желании переложить свои проблемы на новые компиляторы. Но они за вас, вашу работу, все равно не сделают. Поэтому, просто ищите альтернативы решений своим задачам.

Вашу статью оценить не могу

Мне это и не надо. Оценку себе я дам сам. А народу я просто даю информацию, которой он может пользоваться, при желании, либо нет. Хотя, говорить можно что угодно. По принципу: «А Васька слушает, да ест».

Модульное программирование в C++. Статические и динамические плагины

Исключительно потребностями собственных задач. Например, в Qt есть встроенный драйвер для работы с SQLite. Отличная вещь, а последний мне очень нравится. Но в моей задаче надо использовать MMF для навигации по данным, а SQLite применять только для построения индексов. В Qt это моэжно сделать, но надо применять много лишних телодвижений, тогда как в WinAPI это все делается с пол-пинка.

Далее, в Qt существует самый лучший, в опенсорсе, табличный компонент для работы с данными, другими словами грид, или, как говорят в 1С, форма списка. Но, опять же, мне нужен просто другой табличный редактор, более простой, заточенный исключительно под мои цели. И реализовать это проще в WinAPI, а не в Qt. Просто Qt это промышленное производство, а мне нужна частная мастерская. Только и всего!

Модульное программирование в C++. Статические и динамические плагины

Это я читал, но до конца не въехал.

Там уже шесть статей на эту тему. Вы их все читали? А на ваши вопросы разве не отвечали?

статья оказалось про обычные DLL

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

Информация

В рейтинге
878-й
Зарегистрирован
Активность