Подтвердить что ты не робот

Boost считается вредным?

В ответах на вопросы С++ содержится ответ:

"Вы должны использовать boost::( insert ваш любимый умный указатель здесь) или еще лучше::( любимый мега-сложный тип повышения здесь)"

Я вовсе не убежден, что это делает какие-то одобрения тем, кто в целом является очевидным новичком С++. Мои причины таковы:

  • Использование интеллектуальных указателей без понимая, что происходит капот приведет к поколения программистов на C++, которые отсутствуют некоторые базовые навыки программист. В значительной степени это кажется произошли в поле Java уже.

  • Определение типа интеллектуального указателя использование сильно зависит от проблемный домен. Эта почти всегда отсутствует в вопросы, размещенные здесь, так что просто "использование общего указателя" вероятно, будет по меньшей мере бесполезным и, возможно, совершенно неправильно.

  • Boost еще не является частью С++ стандартными и могут быть недоступны в конкретная платформа - вопросник использует. Установка немного (я просто сделал это с помощью Jam) и если все, что вы хотите, несколько интеллектуальных указателей.

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

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

4b9b3361

Ответ 1

Несколько точек:

  • Использование чего-либо без понимания считается вредным. Но в конце концов сгорел только невежественный пользователь технологии (и его менеджер).
  • Вам не нужно устанавливать boost для получения интеллектуальных указателей - они только для заголовков. И сама установка довольно проста, в простейшем подходе просто набирают одну или две команды.
  • Многие библиотеки и решения Boost присутствуют в TR1 или будут присутствовать в С++ 0x
  • Вы всегда будете зависеть от внешних библиотек... Попытайтесь выбрать тот, у которого есть светлое будущее с точки зрения обслуживания и поддержки.
  • Если вы не хотите развертывать свое собственное решение, которое будет иметь некоторые преимущества и недостатки.

Ответ 2

С++ не является удобным для начинающих языком. С извинениями Скотту Мейерсу, новичок не изучает только один язык с С++, но четыре:

  • Части C
  • Объектно-ориентированные части: классы, наследование, полиморфизм и т.д.
  • STL: контейнеры, итераторы, алгоритмы
  • Шаблоны и метапрограммирование

Я бы сказал, что если начинающий уже поднимается на эту гору, с самого начала они должны указывать на более "современные" аспекты С++. В противном случае начинающий узнает C-ish С++ с регулярными указателями, утечками ресурсов и т.д. Находят себя в мире боли, а затем обнаруживают Boost и другие библиотеки как способ остановить боль.

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

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

Ответ 3

Вы знаете, как работает компилятор? Вы знаете, как работает ОС? Вы знаете, как работает процессор? Вы знаете, как работает электроника? Вы знаете, как работает электричество?

В какой-то момент вы используете черный ящик, вопрос в том, "является ли мое незнание проблематичным для того, что я сейчас делаю?".

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

Ответ 4

Я не согласен. Никто не предложил бы вам погрузиться в умные указатели, не имея полного понимания того, что происходит за кулисами, но разумно использовал их, чтобы удалить целый ряд распространенных ошибок. Более того, Boost - это высококачественный код производства, из которого новичок С++ может многому научиться с точки зрения дизайна и реализации. Это тоже не очень сложно, и вы можете выбрать нужные вам биты.

Ответ 5

  • Невозможно все время все понять. Поэтому возьмите слово многих профессиональных разработчиков С++ за то, что многие части повышения действительно полезны в вашей повседневной разработке.
  • Включение довольно большого повышения в С++ 0X является свидетельством того, что даже команда, которая управляет эволюцией языка, считает, что повышение - это хорошая вещь (tm)
  • С++ - странный, жесткий язык. Это относительно легко учиться по сравнению с тем, насколько невероятно сложно освоить. Там есть некоторые действительно тайные вещи, с которыми вы можете справиться. Boost:: mpl строит некоторые из этих загадочных вещей. Мне нравится повышение, но каждый раз, когда я вижу, что кто-то из моей организации использует boost:: mpl. Причина: даже вполне опытные разработчики на С++ не могут обернуть голову вокруг того, как она работает, а используемый ею код часто отражает это (он заканчивается тем, что кто-то ударил код до тех пор, пока он не сработает). Это нехорошо, поэтому я частично согласен с тем, что некоторые части boost не должны использоваться без осторожности (boost:: spirit - еще один пример).
  • Стандарт С++ тоже странный. Наиболее распространенные компиляторы не реализуют весь существующий стандарт (например, экспорт шаблонов). Это только руководство того, чего ожидать.
  • Если у вашего разработчика нет разумного решения, какой умный указатель использовать в конкретной ситуации, возможно, они не должны возиться в этой части кода без руководства.
  • Всегда есть внешние библиотеки, начиная с времени выполнения. Большое повышение - только заголовок, поэтому он не вводит новые внешние зависимости.

Ответ 6

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

Ответ 7

Я полностью согласен с тобой. Именно поэтому я сначала объясню им, как это должно быть сделано (то есть, когда вы рекомендуете boost:: variant, я объясню, что они должны в целом использовать дискриминационный союз. И я стараюсь не говорить об этом просто "магическое повышение", но показывать как они в принципе реализовали его. Когда я рекомендую boost:: shared_ptr, я объясню, что им нужно будет использовать указатель, но лучше использовать интеллектуальный указатель, который имеет общую семантику собственности.). Я стараюсь не говорить просто "использовать boost::xxx", когда вижу, что вопросник является новичком. Это язык, который не так просто использовать, как некоторый язык сценариев. Нужно понимать материал, который использует, потому что язык не защищает программиста от плохих вещей.

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

Вы не можете сравнить это с обучением процессоров или языка ассемблера. Аналогично, не важно знать, как выглядит бит-шаблон нулевого указателя. Знание этих проблем не имеет отношения к программированию на С++. Но указатели, массив или любые другие основные вещи на С++ - нет. Не изучать их, прежде чем использовать [boost|std]::shared_ptr или [boost|std]::array успешно. Это то, что нужно понять сначала, чтобы использовать ускоренные утилиты, на мой взгляд. Это не о деталях, как о том, как вручную реализовать pimpl-идиому с использованием исходных указателей - это не то, что я делаю. Но дело в том, что сначала нужно знать основные вещи о указателях или других частях, с которыми помогает библиотека ускорения (например, для указателей, для чего они предназначены и для чего они хороши). Просто взгляните на руководство shared_ptr и попробуйте получить его, не зная о указателях. Это невозможно.

И важно всегда указывать на соответствующее руководство по ускорению. Руководства по ускорению высокого качества.

Ответ 8

Я думаю, что boost - отличная библиотека. Я люблю это. Моя любимая библиотека - это boost:: bind и boost:: function, которые делают указатели функций более гибкими и простыми в использовании. Он отлично вписывается в разные рамки и сохраняет код в порядке.

Я также использую разные классы Boost. Например, я использую boost:: graph для создания классов графов, и я использую boost:: filesystem для работы с файлами внутри каталогов.

Однако усиление очень сложное. Вы должны быть опытным программистом, чтобы знать его ценность. Кроме того, вам нужно иметь по крайней мере некоторый опыт работы на С++, чтобы понять, как работает Boost и последствия использования Boost здесь или там.

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

Однако, если вы чувствуете, что человек, задающий вопрос, является новичком и пытается понять (например) распределение памяти, говоря ему, чтобы попытаться повысить интеллектуальные указатели, это очень плохая идея. Это совсем не полезно. Преимущества интеллектуальных классов указателей и т.д. Могут быть поняты только тогда, когда человек испытал, как работают стандартные методы выделения памяти.

Чтобы завершить, Boost не, как обучение вождению автомобиля с автоматической коробкой передач. Ему нравится учиться ездить на гоночном автомобиле Формулы-1.

Ответ 9

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

Я также думаю, что повышение может быть очень ценным для новичков. Разве не проще использовать lexical_cast, чем использовать ostringstream? Или использовать BOOST_FOREACH вместо синтаксиса итератора? Большая проблема заключается в отсутствии хорошей документации для повышения, особенно для начинающих. Нужна книга, в которой рассказывается, как начать с boost, какие библиотеки - это простые библиотеки, которые упрощают задачи и какие библиотеки более сложны. Используя эти библиотеки вместе с хорошей документацией, IMO упростит обучение С++.

Ответ 10

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

Ответ 11

Я думаю, что вы смешиваете множество разных проблем, не все из них связаны с Boost:

Во-первых, следует ли поощрять программистов (или новичков С++) использовать библиотеки, идиомы, парадигмы, языки или языковые функции, которые они не понимают?

  • Нет, конечно нет. Каждый программист должен понимать инструменты, которые они используют, особенно на языке С++. Тем не менее, я не вижу здесь много вопросов о том, где людям предлагается не понимать код, который они используют. Когда люди говорят, что хотят делать X на С++, я считаю, что он говорит, что "Boost имеет реализацию X, которая работает, что больше, чем решение для доморощенного, и используйте это".

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

Я также не вижу, как можно использовать Boost без понимания того, что происходит под капотом. С++, с Boost или без Boost, не является Java. Использование Boost никоим образом не защищает вас от сложностей языка. Вам все равно придется беспокоиться о конструкторах копий, арифметике указателей, шаблонах и обо всем остальном, что может взорваться в вашем лице.

Это не похоже на то, что произошло на Java. Они разработали язык, который удалил все тонкости. Boost этого не делает. Напротив, он разработал новые идиомы и методы в общем программировании. Использование Boost не всегда просто.

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

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

О FOSS, у вас есть точка в некоторых случаях. Но я бы сказал, что это проблема для менее универсальных библиотек, которых нет у пользователей. Но Boost чрезвычайно распространен, и если у людей его нет, они должны получить его, поскольку он применим практически ко всем проблемным доменам. И, конечно же, лицензия совместима с любым проектом FOSS, о котором вы хотели бы упомянуть. Я предпочел бы работать над проектом OSS, который использовал Boost для тяжелого подъема, чем тот, который изобрел собственные (багги и проприетарные) колеса с крутыми кривыми обучения, которых можно было бы избежать.

Так что да, в некоторых случаях рекомендация Boost бесполезна. Но я не вижу, как это может быть вредно.

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

Ответ 12

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

Некоторые люди, похоже, думают, что новичкам следует сначала обучить C-стороне С++, а затем ввести в материал более высокого уровня позже. Тем не менее, люди, как правило, работают так, как они обучены, поэтому мы увидим много производственного кода, написанного с плохо управляемыми исходными указателями (хорошо управляемые исходные указатели иногда ужасно трудны), массивы (и неизбежная путаница между удалением и удалить []), и так далее. Я работал с таким кодом. Я не хочу делать это снова, чем должен.

Начните начинающих с того, как вы хотите, чтобы они писали код. Это означает, что сначала они изучают контейнеры и алгоритмы STL и некоторые библиотеки Boost, поэтому первое, что они думают о том, когда требуется группа вещей, - это вектор < > . Затем научите их конструкциям нижнего уровня, чтобы они знали о них (или где их искать), когда они сталкиваются с ними, или в очень редких случаях, когда они нуждаются в микро-оптимизации.

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

Ответ 13

Я вовсе не убежден, что это делает какие-то одобрения тем, кто в целом является очевидным новичком С++....

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

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

Должен ли "Hello World" включить реализацию подсистемы ввода-вывода?

Лично я узнал, как создавать объекты, прежде чем научиться писать классы. Я думаю, что я узнал, как использовать векторы STL, прежде чем я узнал массивы C-стиля. Я думаю, что это правильный подход: "здесь, как ссылаться на несколько почти одинаковых переменных с помощью std::vector, позже я покажу вам, что подмечено под ковриком через массивы C-стиля и new[] и delete[]."

Ответ 14

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

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

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

Ответ 15

Я бы согласился с точкой зрения умных указателей. Я начинаю С++, и, задавая простой вопрос о синтаксисе указателя, один из ответов предложил умные указатели. Я знаю, что я не готов к повышению (я тоже не очень готов к STL), поэтому в большинстве случаев я убегаю от этого предложения.

Ответ 16

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

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

Новичкам СЛЕДУЕТСЬ бороться с переводом собственных низкоуровневых решений проблем. И тогда, когда они лучше понимают, как работает их собственное решение, они могут использовать стороннее решение, уверенные, что у них есть представление о том, что происходит под капотом. Они будут использовать эту библиотеку лучше!

Я думаю, что это более широкий вопрос, чем просто о Boost. Я полностью сожалею о том, что собираю VB в качестве своего первого языка. Если бы я только начинал с уродливым, трудно учиться c, я был бы намного опережен там, где я сейчас.

Ответ 17

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

Ответ 18

Boost - отличная библиотека. Я очень надеюсь, что он будет расширяться в широте и принятии. Используйте его, расширьте и продвиньте.

Одна из замечательных особенностей сообщества .NET заключается в том, что у нее отличная библиотека базового класса. Я считаю, что одной из фундаментальных проблем с С++ является минималистическая стандартная библиотека С++. В любом месте, где вы собираетесь разрабатывать код, FOSS или корпоративный, существует некоторый набор библиотек, которые используются, поскольку нет широкой стандартной библиотеки. Таким образом, вы в конечном итоге являетесь программистом на С++ INSERT_YOUR_COMPANY_HERE и не обязательно слишком переносимы. Да, вы переводите навыки проектирования/архитектуры, но есть кривая обучения с пониманием любого набора библиотек, которые использует следующее место. Где, как разработчик .NET, будет в основном использовать одну и ту же библиотеку классов и может ударить по земле. Кроме того, библиотеки, которые построены (и повторно используются), имеют более широкую базу для построения.

Так же, как и в стороне, вы можете использовать http://codepad.org для вставки кода и поддерживать boost!

Ответ 19

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

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