The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"В ядре Linux выявлена ошибка, приводящая к нарушению работы ..."
Отправлено Ordu, 27-Ноя-19 21:13 
> Ты это серьёзно, насчёт инфы?

Да.

> Книги Саттера, C++ Core Guidelines и https://isocpp.org/faq
> покрывают фактически всё.

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

> Насчёт "раст освоить проще" я, кстати, категорически не согласен - он хочет,
> чтобы разработчик как-то очень специфически свернул мозги,

TL;DR Самый простой способ освоить C++, это освоить раст, а потом потратить пару вечеров на то, чтобы пролистать Страуструпа.

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

А, я чуть не забыл про реддит. Там офигенное сообщество растоманов, туда можно придти с куском кода, на который ругается борроучекер, и тебе объяснят почему он прав, что именно ты сделал не так, уточнят у тебя, что ты хочешь сделать, и предложат способы как это можно сделать. В этих условиях, надо быть либо слабоумным, либо элементарно не хотеть осваивать раст, для того, чтобы не освоить его за 3 месяца, до уровня пониманя того, зачем и когда нужен unsafe и как его использовать, чтобы не обжечься.

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

> в то время как
> плюсы совершенно спокойно ложатся на существующие привычки почти из любого распространённого
> языка.

В том-то и проблема. Каждый приходит со своими идиотскими привычками, и начинает рассказывать что его привычки лучше всего, что именно так и надо писать на C++. И среди всех этих рассказов практически невозможно найти те, чьи авторы реально попытались сломать свои старые привычки, заточенные под C/asm/Lisp/..., и выработать новые, которые лучше подходят для С++. То есть, если ты заранее знаешь, какие привычки лучше подходят, то найти изложение этих привычек несложно. Но если ты не знаешь, то ты не можешь отличить хорошие привычки от плохих. Единственный способ -- это несколько лет практики, когда ты перелопатишь всю ту бочку дерьма, которое предлагают доморощенные C++-гуру, и выберешь оттуда искомую каплю мёда.

Блин, глянь на Common Lisp. Пятая ссылка в ddg по запросу "Common Lisp" -- это "Practical Common Lisp", книга которая разбирает CL на примерах, решая вполне практичные задачи лисповым способом. Достаточно прочитать эту книгу за пару вечеров, и ты уже понимаешь как надо писать на CL. Да, ты не знаешь что такое meta-object protocol, и не можешь ещё запиливать свои ООП системы поверх CLOS. Ну и чё? Это уже технические детали которые ты освоишь тогда, когда тебе приспичит написать бинды к qt, которые позволят жонглировать кутишными классами как first-class объектами языка, не создавая ненужных прослоек между lisp'ом и C++. Это дело техники, а философию программирования на lisp'е ты уже освоил за два дня.

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

> Единственное, что надо - понять, что есть данные (и у
> них есть владелец), а есть указатели и ссылки на них, и
> что это разные вещи.

Ой, это вообще не проблема. Эти вещи осваиваются максимум за неделю чтения любой книжки по C или C++. Глянь, я C осваивал полгода в школе, у нас парень читал курс сетевых технологий, и полгода он посвятил С. А года через два я купил какую-то книжку по С++, и освоил весь синтаксис и все абстракции C++ за пару недель. Ни в синтаксисе ни в семантике C++ нет ничего сложного, книжки C++ за 21 день для чайников не врут: всё это реально можно освоить за 21 день, даже если две недели прокрастинировать.

Но здесь обратная ситуация с CL. В CL можно философию lisp'а за два дня усвоить, и потратить потом пару лет на то, чтобы освоить всё остальное, читая документацию. С С++ ты освоишь неважные технические детали за неделю, но философию будешь осваивать потом по кусочкам годами. Я в течение 15 лет знал, что такое наследование в C++, что такое темплит, и как написать иерархию из всяких там Person и Employee да ещё и параметризовать её. И все эти 15 лет я не мог понять, что мне с этим знанием делать и как их применять для решения реальных проблем, все эти возможности были полезны как третья нога, без них на С было проще и понятнее. Попытки писать что-то на C++ упирались в то, что я по тысяче раз менял одни и те же куски кода, потому что так как я задумал их было невозможным дописать. То что-то критичное вдруг отказывалось инлайниться, из-за того что приходилось отказаться от const в заголовке функции, то ещё какая хрень. Попытки задавать вопросы в интернетах разбивались об умников, которые больше стремились объяснить мне, что я ничего не понимаю в C++, чем объяснить мне что мне делать в моей ситуации. А если они и объясняли, то всенепременно скатываясь в какой-нибудь холивар-междусобойчик, типа C с классами -- это сакс, или что Александреску надо распять на одном из крестов С++. И пойди потом разберись, кого из этих отморозков слушать, а кого игнорить.

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

Когда же я увидел rust, его borrow-checker за три месяца объяснил мне как надо, посредством битья по рукам за каждую попытку сделать так, как не надо. Да, технически это выглядело примерно так же: я писал кусок кода, и потом многократно вносил в него изменения, чтобы посмотреть что получится. Но с borrow-checker'ом каждая итерация занимала существенно меньше времени, потому что borrow-checker, как правило, на ранних этапах сообщает что я спорол чушь. Он не дожидается, когда я напишу полтысячи строк кода, чтобы потом я вдруг выяснил, что какой-то код, на инлайн которого я надеялся, не инлайнится, и задним числом очевидно почему, и очевидно что ничего с этим не сделать, но поскольку я в этот код передаю огромную структуру по значению, то без инлайна тут плохо. И уйти от передачи по значению не удастся, потому что там какие-нибудь требования стандарта к декларации операторов мешают. Через месяц возни с rust'ом я рылся не только в коде std, но и в коде gfx-rs, и это не представляло никаких особенных неудобств, особенно если сравнить с моими давнишними попытками порыться в libstdc++ -- там такой взрыв синтаксиса, размазанный далеко за края экрана, утонувший в темплитах, с минимумом документации, с совершенно идиотским делением на заголовки и сорцы: в заголовках декларации, в сорцах всё остальное, но есть нюанс: однострочники и некоторые другие inline функции/методы живут в заголовках. То есть это даже читать последовательно невозможно, приходится переключатся между файлами туда сюда, и между разными местами одного файла.


Итого самый простой способ освоить C++, это освоить раст, а потом потратить несколько вечеров на то, чтобы полистать Страуструпа. После этого для того, чтобы кодить на С++ на хорошем профессиональном уровне будет не хватать лишь технических деталей, которые на 95% можно извлечь из документации, а остальное задавая вопросы гуглу.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру