Pull to refresh

Comments 41

UFO just landed and posted this here
И, скорее всего, абсолютно не применима на продакшене
В принципе применима. Использую библиотеку почти во всех своих проектах. Скорее ее сложно использовать по ряду очевидных причин, типа отсутствия документации и сложности понимания.
Я не говорю, что она плохая.
https://github.com/yandex/ClickHouse
вот пример другой опенсорсной либы
С учетом того что библиотеку предлагают подключать при помощи cpp реализация в хедерах не выглядит чем-то из ряда вон
Да, вопрос с лицензией упустил. Исправлюсь, выберу подходящую. Сейчас о лицензии написано только в https://github.com/mikelsv/opensource/blob/master/msvcore/msvcore.cpp:
Лицензия популяризации автора. :]
Вы не должны изменять имя и другую информацию о разработчике и не присваивать авторство себе.
Не продавать и не брать денег за код из данной библиотеки.
Разрешается модифицировать и дорабатывать.
Код предоставлен как есть и автор не отвечает, даже если вы попытаетесь прострелить себе ногу.

Библиотека не собирается, она подключается в проект в виде кода. Пример минимального проекта приведен в посте. (#define USEMSV_GENERALCPP...)

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

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

Стиль кода со временем улучшается. Старый код переписывается. Движемся в нужном направлении.

Не очень понятно про опечатки. Можно примеры?

В какой-то момент код начал писаться и в .cpp и в .h. Компиляторам все равно, с людьми сложнее. Вопрос тоже требует рассмотрения и переработки библиотеки.
UFO just landed and posted this here
Действительно, настолько привык, что не замечаю очевидных ошибок.

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

// free to lists
if(!fre){ globalerror("OMATRIX2 !fre"); return 0; }
int num=fre->getfree(); usesz++; if(num<0 || num>=newsz){ globalerror("OMATRIX2 num>maxsz"); return 0; }
PROCSTRUCTCN *el= ((PROCSTRUCTCN*)(fre->data)) + num;
fre->u++; fre->set(num, 1);
new(el)PROCSTRUCTCN;

P.S.: А еще ни одного ассерта.

В приведенном фрагменте целых 2 ассерта же.

Я говорю про контракты.
Этот класс устарел и в следующей версии библиотеки будет заменен. Новый класс написан и тестируется.

Признаться, не использую ASSERT(). Насколько помню, в Windows он вызывает окно и программа встает. Вместо них использую globalerror() которая выведет сообщение в консоль. При фатальной ошибке программа продолжит работать дальше.
UFO just landed and posted this here
Фатальная ошибка для одного класса часто не фатальна для программы. Ошибки часто возникают, когда программа запущена, а меня нет рядом. В такой ситуации лучше, чтобы программа хоть как-то доработала, до того как я смогу ее починить.

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

в Windows он вызывает окно и программа встает.

Только в дебаг режиме, в релизе макрос ASSERT ничего не делает
Комментарии навскидку. Позже напишу ещё вопросы.

Набор функций для анализа машинных кодов и перехвата функций

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

начиная со строк, массивов, написаны обертки для openssl, может заинтересовать msl, или класс для создания ботов в телеграмме, и наконец, stormserver – платформу для создания различных серверов


Вот это разнообразие… Разнообразие, которому буст позавидовал бы. Но проблема в том, что чтобы понять насколько всё написанное имеет смысл — такой статьи мало. Чтобы кто-то серьёзно рассматривал код, навелосипеденый за десять лет, нужно доказать необходимость существования этого кода. Нужны сравнения какие-то по метрикам: расходы ресурсов компа (память, CPU, и т.д.) и/или людей (время на чтение кода, удобство API, и т.д.). Учтите, что метрики, касающиеся людей, будут субъективны и чтобы вам кто-то поверил стоит очень хорошо сформулировать что выводится под ними.

Я бы на вашем месте перед тем, как публиковать подобную обще-обзорную статью, написал для пробы подробную статью о каком-нибудь одном подмодуле. С вескими доказательствами зачем это вообще нужно.
Если возьмётесь за такое — было бы интересно почитать про строки (если они поддерживают разные кодировки — UTF-8, UTF-16, и т.д.). Я бы такую статью почитал с интересом, данная тема в плюсах хромает.

Класс XCC – парсер кода на C++


Вот это заявка… Вы действительно сами написали парсер С++ с нуля? Я просто в какой-то момент начинал таким заниматься — очень немного, к счастью, начинал. И это… Как сказать, это задача, о которую можно убиться. Серьёзно. Лучше clang покурить. Там достаточно разумно всё устроено.
Это скорее обзорная статья, обо всем и ни о чем. Сказать, что есть такая библиотека, узнать реакцию и узнать, что в ней может быть интересно другим людям. В следующих постах я планирую рассказывать уже о конкретных модулях.

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

Про парсер C++, возможно мы понимаем разное под парсером. Моя реализация работает как препроцессор, обрабатывает #if #ifdef #define #endif… и разбирает код на части. Насколько я помню у меня нет анализа типов или чего-то большего. В принципе, можно как-нибудь заняться и дописать анализ типов, классов и всего остального.
Думаю, вы сами видите комментарии. Люди негодуют. На мой взгляд, всё было бы совсем по-другому, если бы вы подробно описали в статье какую-нибудь вкусность библиотеки и там, в самом конце, приписали бы, что, мол «у меня есть добавка, чего желаете». Опросник бы прикрутить могли, вроде «что ещё интересно»…

Ну и, конечно, вот такое писать некрасиво. При публикации кода и/или библиотеки ставьте себя хоть немного на место читателей.
Касательно парсера, там всё серьёзно (форматирование сохранено)

#define AA(a) int a;
#define B(b) AA(b)

#define A 1, 2, 3
#define B(a, b, ...) printf(a, __VA_ARGS__ );
	B("%d %d %d\r\n", 1, 2, 3);
	B("%d %d %d\r\n", ::A);

	#define B fail
	#define BB(a, b, c) a c
	#define AB(B) BB(B)
	AB(A);

	#define BC(a, b, c) a c
	#define AC(B) BC(::B)

	AC(A);
Что касается мегауниверсальных библиотек вообще… Я тоже веду библиотеку с функционалом, общим для всего множества проектов. Там есть и строки, и коллекции, и события всякие, и парсеры… Вообще очень много чего ещё, короче.

Но фишка в том, что большинство этих классов выступают обёртками вокруг существующих библиотек — от stl до rapidxml. Во-первых, такой подход позволяет экономить кучу времени на детали реализаций, во-вторых, даёт возможность в случае необходимости менять реализации (в том числе на полностью свои, если будет нужно) без переделки кода всех проектов, использующих библиотеку… Ну, и в-третьих, при правильно использовании С++, такой подход почти бесплатный с точки зрения затрат ресурсов компьютера.

Меня описанная организация проектов устраивает. Читающие комментарий, как по-вашему, подобная организация нормальная и жизнеспособна, или вы какие-то другие подходы используете?
Ну автору хотя бы в смелости не отказать, выносить подобное на публичный суд без тени смущения :)
PS. Тут просто сборник самых жутких антипаттернов и просто дичи.
Автор это написал для инвайта, я не уверен, что он рассчитывал, что кто-то всерьез будет смотреть в код. Даже начинается статья так:
Msvcore – это кроссплатформенная библиотека для c++, написанная с нуля по принципам оптимальности, открытости и простоты.

Что такое msvcore? — Библиотека. Что она делает — уже не так важно.
Автор все-таки надеялся, что библиотекой начнет пользоваться кто-нибудь еще, кроме него.
Признаться, мне показалось, что тут целый пост о том, что она делает. Уместить описание в одну строчку мне к сожалению не удалось.
Вот это я понимаю документация.
LMatrix (Live Matrix) ~ 2007г. – вечно живая, как дедушка Ленин. Вы можете взглянуть на код, но даже мне не хочется в этом копаться и вспоминать, по каким принципам она работала.

Пользуйтесь на здоровье.
Это пример того, чем не надо пользоваться. Присутствует исключительно для истории.
Завидую вашей энергии.
Но всё это походит на код написаный из головы, побыстрому и на коленке. Если бы в начале каждого файла был комментарий:
/* это заглушка для попробовать, дальше надо решить писать основательно или нет */
то всё встало бы на свои места.

К слову, писал три года драфт хтлм рендера на Си, вот он примерно так же выглядит. Я достиг нужного мне результата (изучил спецификации, понял тонкие места, проблемы и прочее), и вот только теперь пишу «в чистовик» который в открытом доступе. Но делится с общественностью подобным драфтом я бы ни в коем случаи не стал, и люди не поймут, и вообще, надо иметь «чувство прекрасного».

Я обычно представляю себе серьезную компанию с серьёзным проектом и задаюсь вопросами: а использовала бы она мой код? не возникло бы проблем? мой код решает существующие проблемы? может быть я не до конца познал данную тему/сферу чтобы что-то предлагать своё? — всё это, лично мне, помогает более строго относится к себе и к тому что я делаю.

Вам успехов в проекте!

P.S.: позже увидел хаб «ненормальное программирование» и всё встало на свои места.
Даже мимолётный взгляд и сразу стало больно. Требуется лютый рефакторинг. Для начала разобраться в stl, затем уже рефакторить. А в таком виде я бы не стал использовать.
Требуется. Библиотека раза четыре писалась заново с добавлением кода из прошлой версии. И пятый уже на подходе. По мере сил, возможностей и понимания.
У меня свои подходы и stl принципиально не используется. А иначе половину библиотеки можно выкинуть, а вторую переделывать по принципам stl. Одним словом похоронить.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Лично меня интересует именно реализация Trie в этой библиотеке. Если она оптимальная, то я пожалуй перетащу её частями в Boost.Trie. Если у кого есть красивая и быстрая реализация trie — просьба поделиться.
В Boost нет Trie?
Ммм, все зависит от того, что вам нужно. Это достаточно оптимальная, но не самая быстрая реализация. Для ускорения поиска сюда стоит добавить хеш таблицу или lower bound. Так же у меня реализация многоуровнего дерева(одно дерево может содержать другое), сделанная для быстрого поиска по JSON.

Это все нужно обсуждать. И основываясь на понимании логики Boost, которой у меня к сожалению нет, и на задачах, которое должно решать Trie, писать логику. Это для самого шустрого и оптимального варианта. Для остальных, можно взять текущий: https://github.com/mikelsv/opensource/blob/master/msvcore/list/TrieList.h
Отсутствием дикого количества шаблонов и сложной логики. Я стараюсь писать максимально простой код, хотя и не всегда удается.
Как это не печально, массивы постепенно обрастают шаблонами, с одной стороны это упрощает разработку, с другой усложняет понимание и изменение под свои задачи.

Можете показать как шаблоны могут усложнить изменение под свои задачи?
И вы, конечно, извините, но после 12 лет разработки на плюсах писать, что шаблоны усложняют понимание, как минимум, странно.
Там были свои финты ушами, когда исправлялся каждый класс массива, под свою задачу. С шаблонами так не сделаешь, да и не надо.
Возможно я недостаточно работал с шаблонами и для меня их использование запутывает код. Начал больше писать шаблонные классы и ситуация понемногу исправляется.
К сожалению в шаблонах stl я до сих пор ориентируюсь довольно хреново.
Думаю, когда наконец-то освоите их, захотите переписать всю библиотеку ещё раз. Шаблоны — вещь!
Кстати, тонкая настройка реализации тоже шаблонами на ура решается (почитайте про специализацию шаблонов и traits классы).
UFO just landed and posted this here
Сделать свой велосипед — это нормально, все через это проходят. Ненормально на нём 12 лет ездить… Ещё более странно предлагать другим поездить на этом, мягко говоря, неудобном велосипеде.
Sign up to leave a comment.

Articles