LINUX.ORG.RU

Про Дурова, но не скандал. Это вообще нормально так писать на Си?

 , ,


4

9

Про Дурова, но не скандал. Чтобы слить наработки ВК в Телеграм, они выложили их в опенсорц. Идем читать исходник и первый же файл - 5 тысяч строк. Какие всё-таки крестовики упоротые. И это тут же привело к чудным названиям в виде adjust_message0 и process_message1, типа интерфейсы :) Ну довели бы идею до конца, вообще бы в один файл всё напихали, длиной триллион строк.

Ну и вообще посмотрите, что там внутри, божечки-кошечки.

assert (E->a == 0x504d4554 && s == 24);

без комментариев, без ничего. Поднимите руки все, кто по виду числа 0x504d4554 понимает, что это такое. А циклы... циклы... циклы!

Или может, это нормально, просто мы анскильные?

Ссылка для просмотра: https://github.com/vk-com/kphp-kdb/blob/master/text/text-index.c

★★★★☆

Обычный говнокод, что тебе не нравится?

hateyoufeel ★★★★★
()

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

Zhbert ★★★★★
()

а что не устраивает то? сишники так и пишут

umren ★★★★★
()

Поднимите руки все, кто по виду числа 0x504d4554 понимает, что это такое.

Это строчка TEMP, прочитанное как little-endian 32-битное.

Или может, это нормально, просто мы анскильные?

Да, мы анскильные. Надо учиться понимать эти криптик-мессаджес.

i-rinat ★★★★★
()

это нормально

Нет.

мы анскильные?

Да.

всё-таки крестовики упоротые

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

gemand
()
Ответ на: комментарий от Im_not_a_robot

Почему писали сишники сишный код, а вы обвиняете «крестовиков»?

Жабисты не могут в логику.

gemand
()

5к строк на файл? Вот когда функи по 1.5к, это беда...

А сиё вроде вполне в духе различных популярных открытых утилиток, функи не большие, реализуют возможно один интерфейс, так зачем выдумывать всякое pimpl если в 2017ом такое в любой иде можно читать невозбранно для здоровья, да и вимах с эмаксами вполне?

Константы на вид да, страшненькие, но может надо просто спеку протокола почитать и все магические номера перестанут быть таковыми?

Если ещё помножить на nih эффект, скорее всего код более менее?

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

Константы на вид да, страшненькие, но может надо просто спеку протокола почитать и все магические номера перестанут быть таковыми?

Так почему бы не сделать какой-нибудь protocol.h, где будет #define NOT_MAGIC_CONSTANT_ANYMORE 0x504d4554?

А ещё лучше, если #define NOT_MAGIC_CONSTANT_ANYMORE LittleString('T', 'E', 'M', 'P'), который развернётся в компилтайме в тот же самый 0x504d4554.

a1batross ★★★★★
()

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

Softwayer ★★
()

Как говорится: «О сколько нам открытий чудных...» Вы, наверное, первый раз увидели код, который только что открыли? Это же обычное дело. Зачастую открывать не хотят именно по этой причине - стыдоба.

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

Идем читать исходник и первый же файл - 5 тысяч строк.

IDEA на таких кстати тормозит, как улитка:

http://esxi.z-lab.me:666/~exl_lab/movies/ide-speed/idea.webm

Даже GitHub'овский редактор в браузере себе такого не позволяет.

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

мне норм, всяко лучше жабы

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

ненужно на таких, кстатиЮ ненужнит как ненужно

Fixed.

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

всё-таки крестовики упоротые

Ну, кресты — далеко не чистая сишечка

По ссылке говнокод на чистом си.

Сам себя обосрать решил?

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

Чем же? Готов поспорить с тем, что кресты и си — разные вещи?
По ссылке — да, код на чистом Си. Сказать-то что хотел?

gemand
()
Ответ на: комментарий от pon4ik

если в 2017ом такое в любой иде можно читать невозбранно для здоровья

См. мой мультик выше, IDEA, CLion и Android Studio на подобных файлах опасны для психического здоровья.

EXL ★★★★★
()

Зачем ты притащил сюда тег C++, когда даже гитхаб видит, что там 87% - чистый C?

Какие всё-таки крестовики упоротые.

Интересно, почему тогда не питонщики или джависты.

asaw ★★★★★
()

Плюсовики хотя бы С от С++ отличают...

BceM_IIpuBeT ★★☆☆☆
()

Там в авторах Николай Дуров, а он вроде как математик. Для математика код еще вполне себе ничего, хотя воняет изрядно, да. Программирующие математики вообще делятся строго на две группы: тех, кто пишет очень классно (их меньшинство) и тех, кто пишет так, что не приведи Господь с их кодом дело иметь.

Хотя вот такое вызывает недоумение:

    if ((op & 1) && temp_file[i].fd > 0) {
      assert (close (temp_file[i].fd) >= 0);
Они там в release вообще свой код не компилируют?

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

Они там в release вообще свой код не компилируют?

Не обязательно собирать релиз с NDEBUG.

П.С. а типичный С-ый код ужасен, да, но это может быть открытием только для тех, кто перенимает мнение об ЯП у других, а не пробует/смотрит сам.

anonymous
()

Идем читать исходник и первый же файл - 5 тысяч строк

И что бы изменилось, если бы его порезали на 5 по 1к?

BceM_IIpuBeT ★★☆☆☆
()

вообще бы в один файл всё напихали, длиной триллион строк

Триллион строк — это, с точностью до порядка, 1-10 триллионов долларов и 1-10 миллионов человеколет. Таких проектов в мире пока не было :D

KRoN73 ★★★★★
()

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

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

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

и тогда для читающего со стороны, отдельные файлы стали бы инкапсулированными кубиками, с которыми можно делать разные операции. Например, если у одной функции есть несколько реализаций, то можно подкладывать нужную реализацию в момент сборки/конпеляции, а не городить process_message = process_message1.

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

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

Мне вот просто интересно, а ваш код где-нибудь в OpenSource лежит, можно посмотреть образчики того, как надо писать?

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

А что выкинет линкер вместе с отладочной информацией?

Где будет «Ой!» ?

P.S. Компилировать вот это вот все, сам понимаешь, мне лень :-)

Twissel ★★★★★
()

Или может, это нормально, просто мы анскильные?

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

anonymous
()
Ответ на: комментарий от eao197

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

stevejobs ★★★★☆
() автор топика

И правду фигня какая-то. Глобальных переменных мульйоны. Попробовал распарсить функцию закрывающую временные файлы (судя по названию) — не смог.

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

Я не говорю, что так делать хорошо, или что это лучше чем делать как говоришь ты. Однако, много раз замечал, если все в теме то проще(о5 же не лучше) обзывать сущности как они есть в спеке, а константы брать по значению.

Другое дело, если спеки нет, или пуще того действительно выбирается неожиданное никем представление.

pon4ik ★★★★★
()

ну это же олимпиадники чего ты от них хочешь :)

Jopich1
()
Ответ на: комментарий от EXL

Ну дык оно на джава, ты просто железа закупить забыл:)

pon4ik ★★★★★
()

5 тысяч строк

Считай это имитация модулей/пакетов.
Меня больше смущают некоторые флаги компиляции. -fno-strict-aliasing -fno-strict-overflow -fwrapv

Deleted
()
Ответ на: комментарий от Twissel

А что выкинет линкер вместе с отладочной информацией?

Все, что лежит внутри assert-а, будет просто изъято на стадии препроцессинга, если определен символ NDEBUG (а он, обычно, определен). Т.е. операция close (temp_file[i].fd) даже компиляцию проходить не будет.

Хотя, наверное, встречаются индивиды, которые делают релиз-сборки без NDEBUG.

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

Безопасный мессенжер, всё в порядке. /сарказм

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

Однако, много раз замечал, если все в теме то проще(о5 же не лучше) обзывать сущности как они есть в спеке, а константы брать по значению.

Получается, QA тогдашнего ВКонтакте в принципе не обращал на это внимания? Или вовсе отсутствовал?

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

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

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

https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/his...

Твой браузер прожуёт?

Ну а вообще — там очень упоротая архитектура. По сути в Telegram Desktop все элементы GUI выполнены на QPainter. Ну то бишь костыльки к канвасу. И вишенка на торте: многомегабайтный патч на неактуальный Qt, без которого Telegram работать не будет.

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

а зачем этот патч нужен вообще? Почему он не в апстриме?

Твой браузер прожуёт?

пока листал, на телефоне закончилась оперативная память. Пришлось купить новый телефон, теперь всё в порядке, спасибо

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от pon4ik

Я о тех, кто занимается вопросами качества кода, да. Наверное перепутал.

a1batross ★★★★★
()

Для олимпиадников очень даже ничего.

UPD: увидел close и unlink в assert-e — это звиздец, товарищи. Как перейдут на cmake, так и накроется все медным унитазом.

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

а зачем этот патч нужен вообще? Почему он не в апстриме?

Патч нужен для тех велосипедов, которые изобрели олимпиадники Дурова. А не в апстриме он, потому что они делают довольно странные вещи:

https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/Patches/qtbase_...

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.