LINUX.ORG.RU

Как читать и понимать С/C++ код?

 ,


0

6

На ютубчике недавно появился ролик с сабжевым названием.

https://www.youtube.com/watch?v=5P5TmcGj9Mk

И после его посмотра у меня возник один вопрос. Вопрос не праздный, потому что я сейчас хочу выкинуть на свалку мои единоличные двадцатилетние бодания с языком C++. Я хочу отказаться от плюсов и забыть их как страшный сон. Матерые плюсисты мне говорят: ты тупой, ты не наш, ты позоришь светлое имя языка C++. Если ты за такое время не смог осилить язык, зачем ты мучаешься? В твоей тупости виноват только ты и твои родители, но не язык. Ты неспособен обучаться, смирись с этим и иди работать таксистом (я уже почти готов).

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

unsigned short *(*(**bazz[][7])())[];

Скажите мне, великие сплюсовики, вы действительно можете представить себе в голове структуру этого выражения, как она размещается в памяти, и что на что указывает? Или, когда ее разбираете, просто произносите слова? Мне это очень интересно, а узнать не у кого, и эту тонкость автор ролика опускает, вскользь говоря что пример академический. Когда меня такое спрашивают на собеседованиях, я честно пытаюсь представить в голове всю структуру, и чувствую, что торможу на третьем уровне «который...», после чего мое понимание заканчивается. Я могу оттараторить с грехом пополам парсинг "по спирали", но у меня понимания структуры не будет, это какой-то непредставляемый монстр. Неужели представление есть у автора ролика?

★★★★★
Ответ на: комментарий от DELIRIUM

Тех, кто пишет нечитаемую херню, обычно повышают.

Fixed.

P.S. Тех, кто пишет нечитаемую херню, обычно не любят коллеги.

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

Т.е. повышают тех, кого не любят коллеги? WTF?

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

Владимир, для чего мы в development постоянно читаем ваши рассуждения около темы и даже не около? Вам одиноко?

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

На удивление легкочитаемо. А синтаксис действительно простой, просто поскольку нет байтоёбства (если его не придумывать конечно).

anonymous
()

1. Нечитаемый код не нужен.

2. В тех крайне редких случаях, когда нечитаемый код всё-таки бывает нужен, на одну строку кода должно приходиться 10 строк исчерпывающих комментариев. Это неплохой сдерживающий фактор для тех, кто любит экономить на спичках.

ТС: не обращай внимания, продолжай делать MyTetra. Если ты поддашься и перепишешь её на питоне, мне лично будет обидно.

hobbit ★★★★★
()

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

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

Убейте его. Разве сложно развернуть это на 20-ть строк.

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

К Groovy и Grails тепло отношусь. Но к питону удобно на Си плагины/расширения писать. То есть, ООП пишешь на Питоне, а число-молотилку к нему в довесок на Си.

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

Верный признак лютейшего говнокода

А я даже не буду возражать. Более того, я сейчас даже навскидку не скажу, для чего такой говнокод может понадобиться. Может, для случая, когда надо очень-очень быстро пробежаться по какому-то массиву со специфической обработкой. Хотя даже в этом случае, думаю, разбиение на несколько инструкций быстродействие не просадит, а понятность выиграет.

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

если только автор не фанат Кнута

Как будто что-то плохое :)

hobbit ★★★★★
()

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

Ну ещё наблюдается совершенно дикий отход плюсовиков на голанг, если в плюсах со стороны питона были, а не сишки.

mv ★★★★★
()

Вангую заголовок на ЛОРе в 2025 г.: Как читать?

anonymous
()

хочу выкинуть на свалку мои единоличные двадцатилетние бодания с языком C++.

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

Матерые плюсисты мне говорят: ты тупой, ты не наш

Ладно они выбрали страдать всю жизнь, но то тебе то это зачем?)

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

Ну ещё наблюдается совершенно дикий отход плюсовиков на голанг

Шта? Это же насколько нужно упороться, чтобы свалить на сишку с GC.

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

У товарища лишп головного мозга, он смотрит на мир по-своему. Там в первой же строке прекрасно:

Грамотный плюсовик пишет на Си

Очевидно, что с точки зрения mv такие вещи, как RapidJSON или nlohmann/json писали неграмотные плюсовики, поскольку там в потрохах сплошные шаблоны на шаблонах, а вовсе не Си.

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

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

Пока разве что то, что вы звиздите о том, в чем не разбираетесь.

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

Ну парсерами-то точно не горжусь. Написал, и написал. На лиспе ещё и писать нечего, пустой разговор.

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

Легко. На Go щас пишут весь прикладной софт, что раньше писали на Си++, где не нужен UI, или проще UI через 80 порт.

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

На Go щас пишут весь прикладной софт, что раньше писали на Си++, где не нужен UI

Это что за софт такой?

Прикладной софт на C++, в котором не нужен GUI, перестали писать лет эдак надцать назад. Возможно, еще до вашего рождения.

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

На Go щас пишут весь прикладной софт

В чём профит от Go? Я не ковырял его основательно, всё времени нет. Может, я ошибаюсь в своих суждениях. Но поверхностно ознакомившись, он мне показался откровенным Goвном. После одного того, что в нём нет реализации обобщённого программирования, - можно смело на него забивать болт, как мне кажется.

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

А как дышал-то. Как дышал...

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

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

можно смело на него забивать болт, как мне кажется

Это всё равно, что забивать болт на будущее. Если Россия окончательно в чебурнет не уйдёт, то худо-белно аутсорсом и до неё голанг дойдёт.

Мне голанг тоже не нравится, я на нём не пишу, но вижу, что вокруг происходит.

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

как RapidJSON или nlohmann/json писали неграмотные плюсовики, поскольку там в потрохах сплошные шаблоны на шаблонах, а вовсе не Си.

Там всё на си, никаких шаблонов нет - только для интерфейсов. Да даже интерфейсы не на шаблонах. Писать какую-то логику на С++ вообще невозможно - нет такого языка. Есть си, и вся логика написана на си.

https://github.com/nlohmann/json/blob/develop/include/nlohmann/json.hpp#L7774 - там шаблоны используются только для типов, которых там 3 штуки и даже диспатч насран на сишке на свиче, а не на шаблоных.

Это типичная сишаня логика с классами.

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

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

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

что в нём нет реализации обобщённого программирования

Авторы воздержались от включения обощенного программирования в первую версию языка, поскольку, по их словам, предоставляемые им возможности не окупают требуемого усложнения компилятора и runtime-библиотек, а уже имеющиеся в языке средства (пустые интерфейсы, «утиная типизация» и рефлексия) позволяют создавать обобщённый код без специальных синтаксических механизмов.

Тем не менее, обсуждается вопрос о включении таких средств в проектируемую вторую версию языка, выход которой запланирован на 2019 год.

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

Это всё равно, что забивать болт на будущее.

Тут я согласен, конечно. Как бы мне не нравились Go, JS, Python - приходится их изучать и даже немного любить, потому что хочется, во-первых, кушать, во-вторых, быть на гребне волны, хоть она, кмк куда-то не туда идёт.

Если Россия окончательно в чебурнет не уйдёт, то худо-белно аутсорсом и до неё голанг дойдёт.

Ну тебя ж никто в РФ не держит вроде))

Мне голанг тоже не нравится, я на нём не пишу, но вижу, что вокруг происходит.

Да я вот у человека и интересуюсь, зачем на нём пишут. Может я чего-то не понимаю. Хотя, вот на js и питоне у меня опыт работы есть, но я так и не понял, почему вокруг них такой хайп. Если историю с js ещё можно списать на «так исторически сложилось», то питон - откровенно не понимаю. То же самое и с Go. Кто заставляет людей и конторы писать на этом, когда есть нормальные языки...

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

Я пока вижу только то что студентота и нубы на него дрочат как ненормальные на всех углах.

Все на всех углах это делают.

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

Да, вроде, с FFI нету проблем. Или про звать голанг из сишки? У них вся интеграция окончательно и бесповоротно через gRPC, который на сишке и сваян. Половина типичного кода - контроллеры и обвязка вокруг gRPC.

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

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

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

Тем не менее, обсуждается вопрос о включении таких средств в проектируемую вторую версию языка, выход которой запланирован на 2019 год.

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

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

Хватит сливаться. Что показательно, что продвинутые библиотеки для работы с JSON написаны с широким применением шаблонов?

eao197 ★★★★★
()

Easy

declare bazz as array of array 7 of pointer to pointer to function returning pointer to array of pointer to unsigned short

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

Да я вот у человека и интересуюсь, зачем на нём пишут. Может я чего-то не понимаю.

Язык good enough, старт лёгкий, модные IDE есть.

Пошло, наверное, из-за Гугла, который плодит море вакансий, и знание голанга там плюсом будет. Типа C# у Микрософта.

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

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

Хватит сливаться. Что показательно, что продвинутые библиотеки для работы с JSON написаны с широким применением шаблонов?

Ты бы хоть пример подостойней привёл. Чтобы на плюсах - вот оно, идеально или около того! А на другом языке - фу, говно какое-то, не пойдёт! HFT тот же.

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

А на другом языке - фу, говно какое-то, не пойдёт!

Пилять, да вы поехавший. Язык — это просто инструмент. Который подбирают как под задачу, так и под радиус кривизны рук исполнителей. Кто-то на Java напишет некую задачу лучше, чем какой-нибудь дятел вроде здешнего Царя, на C++. И наоборот.

Ты бы хоть пример подостойней привёл.

Пример нормальный. Люди написали на шаблонах то, что на «Си с классами» пришлось бы оформлять в полотна кода в 3-5 раз длинее. А то и еще больше.

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

Так что показального? Или вы опять сольетесь?

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

Да я вот у человека и интересуюсь, зачем на нём пишут.

Как этого можно не понимать? В Go ты имеешь сразу готовую компиляцию в нативный код. Пусть там будет GC - плевать, все что ты напишешь будет работать быстро, если какого-нибудь сверхпроизводительного матана не потребуется. И память не потечет, и адовой смены парадигмы как у rust не требуется.

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

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

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

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

Или парсер был приведён как пример могущества плюсов? Ну ок...

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

Так что показального? Или вы опять сольетесь?

У меня всё хорошо. И я слюной не брызжу.

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

И, что показательно, для плюсов был выбран парсер json?

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

Ну так пример приведен: два продвинутых инструмента для работы с JSON в C++. Оба с широким применением шаблонов.

Их неграмотные плюсисты писали?

Если задача парсить json, то есть море других языков, где про парсер json даже думать не надо.

Мой ударенный лишпом собеседник, вы хоть понимаете, что при современном распространении JSON-а задача разобрать/собрать JSON в C++ приложении — это повседневная обыденность. И вы предлагатете делать это не на C++, а на каком-то другом языке?

Мозг изнутри точно не жмет?

У меня всё хорошо.

Да вообще красавчик, сморозил херню, потом в кусты.

Так что же все-таки показательно?

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

Так что же все-таки показательно?

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

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

Вы про меня можете сказать, все, что захотите. Как и я про вас.

Но проблема в том, что вы не можете ответить на простой вопрос: что же показательного в том, что библиотеки для работы с JSON в C++ пишут на шаблонах?

То, что вы принимаете за агрессивность — это всего лишь досада на то, что собеседник вместо того, чтобы говорить по делу, надувает щеки.

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

Посыл-то был простой: опытные инженеры отказываются от неоправданно сложных решений, потому что страдает конечный продукт. Растёт время разработки, увеличивается bug surface, уменьшается кол-во понимающих разработчиков.

Поэтому плюсы вымирают, как мамонты, а на голой сишке, как в топике, никто не пишет.

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

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

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

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

Поэтому плюсы вымирают, как мамонты

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

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

Rust - это человеческие плюсы с ФП.

Да ладно, ничего там из плюсов нет. А человеческое, разве что, только cargo.

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

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

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