LINUX.ORG.RU

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

 ,


0

6

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

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

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

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

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

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

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

Предлагаю

Простите, не заметил, вы уже привели примеры «прикладного софта на C++», который полным ходом переписывают на Go?

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

Где он говорил про го? У тебя голоса.

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

Его не переписывают, а пишут с нуля. Простите, вас на гитхабе забанили? Всё в открытом доступе, на гитхабе сейчас расцвет Go, на крестах уже полгода ничего «не выстреливает», не популярен он уже, си плюс плюс этот.

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

Его не переписывают, а пишут с нуля.

Ok, пусть будет так.

Расскажите словами, что сейчас на Go пишут такого прикладного, что раньше писали на C++. Выделю специально для вас: ПРИКЛАДНОГО.

не популярен он уже, си плюс плюс этот

Он уже лет 15, минимум, не популярен. Но вас почему-то все равно беспокоит, хоть вы про него ничего не знаете.

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

Предлагаю хотя бы бегло изучить конкуренты C++ такие как Objective-C, Swift, Rust.

Objective-C - это боль. Как он может быть конкурентом C++?

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

Почему -сразу - боль? Он как раз был создан для того, чтобы сильно облегчить программисту задачу. С++ он много чего умеет. но 60 процентов его возможностей посвящено борьбе с особенностями самого языка. Да, синтаксис непривычный поначалу. Но потом инфиксная запись функций оказывается очень даже удобной.

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

Невозможно понять, как вы умудрились приравнять это все к прикладному (ПРИКЛАДНОМУ, Карл!) софту. Но может вы хоть в чем-то окажитесь последовательным и покажете, что в свое время подобные вещи писались на C++? Например, укажете на аналог https://github.com/ovh/cds на плюсах?

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

CMake и врапперы написаны на плюсах. Знаю парочку американских компаний, которые только на этих врапперах держат свой бизнес, например, AppVeyor Systems.

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

CMake и врапперы написаны на плюсах.

1C на плюсах написан. Значит ли это, что львиная доля автоматизации бизнеса в СНГ написана на плюсах?

Впрочем, в вашем случае это вопрос риторический.

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

Почему -сразу - боль?

Нелепое, несистемное нагромождение рандомных символов?

С++ он много чего умеет. но 60 процентов его возможностей посвящено борьбе с особенностями самого языка.

Это какие, например?

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

Предлагаю

не я сказал, что «C++ местами говно ещё то», потому доказать это придется тебе

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

они намного лучше 1с?

Честно, немного видел SAP изнутри и снаружи. И совершенно не понимаю как люди с ним живут. Это закостенелое, убогое, кривое, нелогичное, несопровождаемое поделие, единственная заслуга которого в том, что исторически в SAP первыми реализовали более-менее развернутую абстракцию «бизнес-процесс», вокруг которой все и крутится.

Более угрёбищной реализации, в обязательном порядке по самые яйца завязаной на все какие только есть в мире проприетарные решения компаний Oracle и Microsoft невозможно себе представить. Даже такая простая вещь как закачка файла реализована в стандартных компонентах через ActiveX, которому нужна обязательна Винда и обязательно InternetExplorer, обязательно определенных версий, а в других операционках и браузерах это дело просто не будет работать.

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

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea
Процедура ОбработкаВнешнегоСобытия(Кто,Что,Зачем)
    Если Кто="LRC_Modem" Тогда
        Если Что="LRC_Modem" Тогда
            Сообщить(Зачем);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
beaver
()
Ответ на: комментарий от Xintrea

Прекрасно читается!

Я сблеванул и вам принёс покушать. Читается оно ещё хуже, чем паскаль. И, почему-то, на родном и могучем ЯП выглядит ещё более отвратительно, чем на латинице, как по мне. А так то - жить, конечно, можно.

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

Кушайте свою блевоту сами.

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

Единственная претензия у меня к языку 1С - это обязательная зеркальность имени открытия и закрытия блока. Но я думаю, что рано или поздно они переделают синтаксический анализатор на что-то стандартное типа «КонецБлока», или вообще сделают обязательные отступы как в Python.

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

Если перейдут на стиль Python, то вообще идеал:

Процедура ОбработкаВнешнегоСобытия(Кто,Что,Зачем)
    Если Кто="LRC_Modem" Тогда
        Если Что="LRC_Modem" Тогда
            Сообщить(Зачем);

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

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

А учитывая, что в 1С сделали уже компонентную среду разработки, можно для компиляции прикрутить и транслятор нового синтаксиса в стандартный. И получится как TypeScript для JavaScript. Просто прелестно.

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

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

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

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

А учитывая, что в 1С сделали уже компонентную среду разработки, можно для компиляции прикрутить и транслятор нового синтаксиса в стандартный. И получится как TypeScript для JavaScript. Просто прелестно.

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

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

Обучаются они все в стране янков.

Кстати, или вот Ruby сделал японец на английском языке... Почему не на японском? ))

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

Нелепое, несистемное нагромождение рандомных символов

Там вполне всё логично. Я уже упоминал инфиксную запись методов. Это очень неплохо.

Это какие, например?

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

solom
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.