Эквиваленты C/C++ стандартной библиотеки Python

Я сильно завишу от стандартной библиотеки Python, как для полезных структур данных, так и для манипуляторов (например, collections и itertools) и для утилит (например, optparse , json и logging), чтобы пропустить шаблон и просто выполнить задание. Просматривая документацию по стандартной библиотеке С++, кажется, что она полностью посвящена структурам данных, и мало что касается «батарей, включенных» в стандартную библиотеку Python.

Библиотека Boost — это единственная известная мне коллекция библиотек C++ с открытым исходным кодом, напоминающая стандартную библиотеку Python, однако, несмотря на то, что в ней есть служебные библиотеки, такие как поддержка регулярных выражений, большая часть ее также посвящена структурам данных. Я просто очень удивлен, что даже такая простая вещь, как гарантированный синтаксический анализ и запись файла CSV, стала восхитительно простой с помощью Модуль Python csv, судя по всему, требует самостоятельного развертывания на C++ (даже если вы используете какую-либо библиотеку синтаксического анализа от Boost).

Существуют ли другие библиотеки с открытым исходным кодом для С++, которые предоставляют «батареи»? Если нет, то что вы делаете как программист на C++: ищете отдельные служебные библиотеки (и если да, то как) или просто создаете свои собственные (что кажется раздражающим и расточительным)?


person gotgenes    schedule 16.12.2010    source источник
comment
Если вы не возражаете против небольших накладных расходов (и вы ЭТО сильно полагаетесь на Python), вы всегда МОЖЕТЕ встроить интерпретатор Python в свое приложение C :) docs.python.org/extending/embedding.html   -  person Demian Brecht    schedule 17.12.2010
comment
@Demian Это правда, однако я буду полностью озадачен, если не будет прямых эквивалентов C/C++ для многих из этих инструментов. Если судить по TIOBE, LangPop и количеству тегов Stack Overflow, C++ по-прежнему используется шире, чем Python, не говоря уже о том, что он на десять лет старше Python.   -  person gotgenes    schedule 17.12.2010
comment
@gotgenes: я буду совершенно озадачен, если не будет прямого эквивалента C/C++ для многих из этих инструментов. Нет, ты не будешь. Вы будете использовать Python. Никакого недоумения не будет. Встраивание Python в C означает, что вы все еще используете Python.   -  person S.Lott    schedule 17.12.2010
comment
@S.Lott: я не знаю, следую ли я. Вы подразумеваете, что такие утилиты разочаровывают в написании на C++, и поэтому их остается писать на Python и других языках очень высокого уровня?   -  person gotgenes    schedule 17.12.2010
comment
@gotgenes: вы всегда МОЖЕТЕ встроить интерпретатор Python в свое приложение C. Это означает, что ваше приложение C использует внутри себя Python. Вы бы просто использовали Python из своего приложения C. Ваше приложение C будет содержать внутри себя копию Python.   -  person S.Lott    schedule 17.12.2010
comment
@gotgenes: Причина того, что так много людей/компаний все еще используют C++, когда есть альтернативы, такие как Python, на 95% состоит в наследии. Люди всегда использовали C++, и поэтому они будут продолжать его использовать. Однако разумнее всего признать, в чем хорош каждый язык, и использовать умную комбинацию (C/C++ и Python прекрасно взаимодействуют).   -  person Björn Pollex    schedule 17.12.2010
comment
@ Space_C0wb0y: Я понимаю твою точку зрения. Я был мотивирован задать этот вопрос, потому что я написал научное приложение (используя метод MCMC) на Python. Это слишком медленно, несмотря на профилирование и оптимизацию в Python. Мой советник сказал просто переписать его на C++. Я хотел бы ускорить программу Python с помощью C или C++, но я не понимаю, как это сделать. (См. stackoverflow.com/questions/4189328/) Следовательно, я ищу эквиваленты С++ для известных инструментов.   -  person gotgenes    schedule 17.12.2010


Ответы (5)


библиотека Poco больше похожа на стандартные библиотеки других языков.

На самом деле логотип веб-сайта Poco гласит: «С++ теперь поставляется с включенными батареями!», что, похоже, именно то, о чем вы просите.

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

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

Кроме того, как уже упоминалось, для структур данных, синтаксических анализаторов и, конечно же, интерфейса для Python! ">Увеличить.

Ура и чт.,

person Cheers and hth. - Alf    schedule 16.12.2010
comment
Спасибо, я не слышал о Poco. Могу я спросить, что вы использовали вместо этого? - person gotgenes; 17.12.2010

Хотя C++ предлагает многие удобства, расширенные объектно-ориентированным программным обеспечением, он поддерживает очень простую стандартную библиотеку. C++ имеет STL и Boost. Они очень хороши и содержат больше, чем просто структуры данных.

Если вам нужны такие функции более высокого порядка для прототипирования или создания приложений без интенсивных (относительных) требований к скорости, тогда C/C++, вероятно, не является для вас правильным выбором. Я полагаю, вы обнаружите, что для большинства проектов языки высокого уровня будут достаточно быстрыми для ваших нужд. Если вы работаете над приложением, которое требует скорости C/C++ (и сопутствующих стандартных отклонений), вам, вероятно, следует тщательно выбирать каждую отдельную библиотеку, которую вы будете использовать.

person Alex    schedule 16.12.2010
comment
C++ не имеет STL. STL, как реальная сторонняя вещь, очень, очень старая (старше, чем стандартизация C++98), и почти вся она находится в Стандартная библиотека C++ (на момент этой стандартизации). C++ предлагает гораздо более обширную стандартную библиотеку, чем многие полагают. (Многие части Boost также можно найти в стандартной библиотеке C++0x.) - person Karl Knechtel; 17.12.2010

http://beta.boost.org/community/sandbox.html

http://www.boostpro.com/vault/

также вы можете поискать в Google «увеличение + бар», например

person Anycorn    schedule 16.12.2010

http://www.boost.org/doc/libs/1_45_0/?view=categorized

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

person Colin    schedule 16.12.2010
comment
На самом деле, как указал aaa, ведение журнала (пока) не является частью библиотек Boost. boost-log.sourceforge.net/libs/log/doc/html - person gotgenes; 17.12.2010

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

Boost и Qt - единственные, которые больше похожи на библиотеку типа "сделай все".

person jonescb    schedule 16.12.2010