LINUX.ORG.RU
ФорумTalks

Оцените сорцы glogg-а

 , , ,


1

5

Иногда смотрю на говнокод на C++ и Qt. Но первый раз не могу прямо жестко что-то обосрать. Да кое-где что-то в процессе доработки, где-то может чуть-чуть излишние комментарии, но в целом не вижу ничего плохого, хотя я не C++ разраб и знаю этот язык постольку-поскольку (могу наколенное поделие написать, но по настоящему серьёзных проектов от 10 000 строк кода на C++ никогда не писал, если не считать всякую автогенерацию кода). Неужели неговнокод найден? Ссылка на github. Да, вроде там не самые свежие кресты, автор не упарывается в темплейт на темплейте и абстракции на абстракциях, но имейте совесть, проект стар, ему не меньше 11 лет.

По теме просто искал небольшой проект чтобы посмотреть на нормальную программу на Qt, вспомнил что glogg очень стабильно варил огромные файлы и я не мог придраться ни к одному недостатку. Уважаемые профессиональные писатели на C++ в связке с Qt, какое у вас мнение по поводу этого проекта? Можно ли его использовать как пример того как надо писать на C++ в связке с Qt или он полон говнокода/костылей/быдлокода? С поправкой на то что сейчас в крестах фичи новые есть моднявые.

★★★★★

или он полон говнокода/костылей/быдлокода? С поправкой на то что сейчас в крестах фичи новые есть моднявые.

Типичный легаси код, на который всем пох.

Например, минимальная версия:

GCC version 4.8.0 or later

А ещё есть костыль для gcc 4.6.3: https://github.com/nickbnf/glogg/blob/master/src/abstractlogview.cpp#L59-L95

Большинство issues просто проигнорировано. Нет ответа от мейтейнера, считай мёртвый проект.

Забыто обновление минимальной версии: https://github.com/nickbnf/glogg/issues/249

Хз что за программа и как она работает, может и хорошо, но проект заброшен.

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

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

peregrine ★★★★★ ()

Ну там большая часть кода вообще C++03. Возможно вас это и привлекло.

Единственный говнокод там, это факт того, что автор не следует Qt Code Style.

Из странного: раз и два (не ясно зачем тут chrono).

Никакого обилия комментариев я не увидел.

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

Никакого обилия комментариев я не увидел.

посмотри на сорцы того же Inkscape или даже SDL2 (хотя он на си и чуть лучше) и поймешь как тут хорошо с комментариями (в этих проектах огромные блоки кода без комментариев вообще и местами переменные вида var1/a/b/temp). То что я видел в виде проприетарщины это вообще кровавые слёзы. Хорошо если на один файл есть 5 строчек комментов.

C++03

Да мне он нравился больше, чем 11 и тем более больше чем то что сейчас принято лепить, когда шаблон в шаблон и всякие unique_ptr без конца (хоть auto_ptr убрали в 17 версии и на том спасибо и вообще в 17 версии говно выкинули из языка, а в 20 опять больше завезли, чем выкинули), бесконечные cast-ы и ехал auto через auto. Для динамической типизации есть специально заточенные под неё языки, не надо портить читабельность в ЯП которые были изначально без auto, ИМХО.

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

поймешь как тут хорошо с комментариями

Ну по моим меркам очень мало.

всякие unique_ptr без конца

Ну как бы иначе никак.

Для динамической типизации есть специально заточенные под неё языки

auto

auto - это вывод типа, а не дин. типизация. Без auto жизни нет.

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

Для динамической типизации есть специально заточенные под неё языки, не надо портить читабельность в ЯП которые были изначально без auto, ИМХО.

auto - это не динамическая типизация.

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

auto - это вывод типа

Сложно int и double писать или название класса, которое помогает в читабельности кода? Правильно что софт на крестах стал гораздо чаще падать и всякие пивас-студии не помогают толком даже. Как раз когда там лагучий крайзис вышел 11 кресты и подъехали.

Ну по моим меркам очень мало.

А где много? Очень хочу посмотреть на это.

Ну как бы иначе никак.

Отчасти да.

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

Правильно что софт на крестах стал гораздо чаще падать и всякие пивас-студии не помогают толком даже.

Я хоть и C/C++-хейтер, но это полнейший тупняк. auto никак не влияет на стабильность работы проги. Да, есть edge cases, это же сишк, как ни как. Но ничего критичного. В том же Rust тот же самый auto и всё ок.

А где много?

Очевидный Qt. Ещё у Skia отличная дока. Там тоже есть простыни без комментариев, но много и такого кода.

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

Сложно int и double писать или название класса, которое помогает в читабельности кода?

IDE пишет все типы, их всегда видно. Пользователи блокнотов должны страдать.

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

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

auto защищает от неявных преобразований

Шта? Implicit cast ещё не выпилили.

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

а оно надо?

Там какой-то жуткий стиль ставить пробелы после открытой скобки и перед закрытой скобкой. Зачем так делать непонятно. Стиль Qt лучше.

X512 ()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от fsb4000
std::optional<int> f1() { return 1; }
std::optional<double> f2() { return 2; }

int main()
{
    auto v0 = f1();
    std::cout << v0.value() << std::endl; // 1
    v0 = f2();
    std::cout << v0.value() << std::endl; // 2
}

PS: вы точно на плюсах пишите код, или просто на лоре вбрасываете?

RazrFalcon ★★★★★ ()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon
v0 = f2();

тут нету auto, тут обычное присваивание.

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

Тогда потрудитесь объяснить что значит «auto защищает от неявных преобразований».

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

Тогда потрудитесь объяснить что значит «auto защищает от неявных преобразований».

Type a = что-то;// "что-то" может иметь тип не Type, но будет попытка преобразования "что-то" в Type, и если будет успешно, то не будет никакой ошибки, и компиляция пойдёт дальше.

auto b = что-то; // тип b равен типу std::decay_t<decltype("что-то")>
fsb4000 ★★★★ ()
Ответ на: комментарий от peregrine

Сложно писать какой нить typical::iterator<Outer::Inner::value<double>, Policy<Lazy, Resumable<Coroutines<Stackfull>>> it = container.begin();. А ещё сложнее рефакторить.

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

раз тебе делать нехрен, погляди на код LibreOffice, тебе понравится

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

когда шаблон в шаблон

Шаблоны нужны для статического полиморфизма. Чем больше информации получится вынести в мету, тем лучше. Пока не было внятного constexpr и концептов, приходилось пользоваться шаблонами.

а в 20 опять больше завезли, чем выкинули

И правильно сделали. Завезли то, что нужно было завезти еще 10 лет назад. Будь это завезено тогда, не пришлось бы выкидывать то, что выкидывают сейчас – оно просто было бы не нужно.

бесконечные cast-ы и ехал auto через auto

Касты – моветон, если не считать move/forward. auto с одной стороны делает код более полиморфным, избавляет от ненужных приведений типов, и просто упрощает жизнь.

Siborgium ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)