Boost
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Boost
Про Boost уже был начат разговор в теме независимый от платформы код. Но вопросы переносимости - это только одна из сторон Boost, не касающаяся его применения (кому-то из использующих Boost его переносимость и вовсе может быть "до фени").
Кроме того, вопросы использования Boost были обстоятельно затронуты ещё в одной теме - исполнение промышленных проектов под Wine (там он использовался как инструмент для примеров кода): откуда взять?, как установить? (разные варианты), где документация?, как начать использовать?
Ещё Boost затрагивался в теме о языке Clang, потому как Boost и Clang очень ... соответствуют дуг другу.
Но Boost как инструмент вполне заслуживает своей отдельной темы для обсуждений и ссылок.
Кроме того, вопросы использования Boost были обстоятельно затронуты ещё в одной теме - исполнение промышленных проектов под Wine (там он использовался как инструмент для примеров кода): откуда взять?, как установить? (разные варианты), где документация?, как начать использовать?
Ещё Boost затрагивался в теме о языке Clang, потому как Boost и Clang очень ... соответствуют дуг другу.
Но Boost как инструмент вполне заслуживает своей отдельной темы для обсуждений и ссылок.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Boost
Повторю, чтоб всё в одно место:Olej писал(а):откуда взять?, как установить? (разные варианты), где документация?, как начать использовать?
1. сайт проекта Boost;
2. описания как скачать, установить и проверить: Getting Started on Windows и Getting Started on Unix Variants;
3. ... но пред.п.(№2) - это если а). вы обязательно хотите только самый последний Boost + б). вы хотите возиться со сборкой и компиляцией библиотек Boost (потому, что для большинства случаев нужны именно бинарные библиотеки Boost, а их нужно строить их исходников). Можно вполне установить Boost из пакетного репозитария вашего дистрибутива Linux (везде есть), например:
Код: Выделить всё
[root@notebook etc]# yum install boost*
...
Код: Выделить всё
#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
int main(int argc, char* argv[]) {
if (argc < 2) {
std::cout << "Usage: tut1 path\n";
return 1;
}
std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
return 0;
}
Код: Выделить всё
[root@notebook test]# c++ tut1.cpp -o tut1 -L /usr/lib -l boost_filesystem-mt -l boost_system-mt
Код: Выделить всё
[root@notebook lib]# ls libboost*
libboost_chrono.a libboost_math_c99.so libboost_regex.so
libboost_chrono-mt.a libboost_math_c99.so.1.48.0 libboost_regex.so.1.48.0
libboost_chrono-mt.so libboost_math_tr1.a libboost_serialization.a
libboost_chrono-mt.so.1.48.0 libboost_math_tr1f.a libboost_serialization-mt.a
libboost_chrono.so libboost_math_tr1f-mt.a libboost_serialization-mt.so
libboost_chrono.so.1.48.0 libboost_math_tr1f-mt.so libboost_serialization-mt.so.1.48.0
libboost_date_time.a libboost_math_tr1f-mt.so.1.48.0 libboost_serialization.so
libboost_date_time-mt.a libboost_math_tr1f.so libboost_serialization.so.1.48.0
libboost_date_time-mt.so libboost_math_tr1f.so.1.48.0 libboost_signals.a
libboost_date_time-mt.so.1.48.0 libboost_math_tr1l.a libboost_signals-mt.a
libboost_date_time.so libboost_math_tr1l-mt.a libboost_signals-mt.so
libboost_date_time.so.1.48.0 libboost_math_tr1l-mt.so libboost_signals-mt.so.1.48.0
libboost_filesystem.a libboost_math_tr1l-mt.so.1.48.0 libboost_signals.so
libboost_filesystem-mt.a libboost_math_tr1l.so libboost_signals.so.1.48.0
libboost_filesystem-mt.so libboost_math_tr1l.so.1.48.0 libboost_system.a
libboost_filesystem-mt.so.1.48.0 libboost_math_tr1-mt.a libboost_system-mt.a
libboost_filesystem.so libboost_math_tr1-mt.so libboost_system-mt.so
libboost_filesystem.so.1.48.0 libboost_math_tr1-mt.so.1.48.0 libboost_system-mt.so.1.48.0
libboost_graph-mt.so libboost_math_tr1.so libboost_system.so
libboost_graph-mt.so.1.48.0 libboost_math_tr1.so.1.48.0 libboost_system.so.1.48.0
libboost_graph.so libboost_prg_exec_monitor.a libboost_test_exec_monitor.a
libboost_graph.so.1.48.0 libboost_prg_exec_monitor-mt.a libboost_test_exec_monitor-mt.a
libboost_iostreams.a libboost_prg_exec_monitor-mt.so libboost_thread-mt.a
libboost_iostreams-mt.a libboost_prg_exec_monitor-mt.so.1.48.0 libboost_thread-mt.so
libboost_iostreams-mt.so libboost_prg_exec_monitor.so libboost_thread-mt.so.1.48.0
libboost_iostreams-mt.so.1.48.0 libboost_prg_exec_monitor.so.1.48.0 libboost_timer.a
libboost_iostreams.so libboost_program_options.a libboost_timer-mt.a
libboost_iostreams.so.1.48.0 libboost_program_options-mt.a libboost_timer-mt.so
libboost_locale-mt.so libboost_program_options-mt.so libboost_timer-mt.so.1.48.0
libboost_locale-mt.so.1.48.0 libboost_program_options-mt.so.1.48.0 libboost_timer.so
libboost_math_c99.a libboost_program_options.so libboost_timer.so.1.48.0
libboost_math_c99f.a libboost_program_options.so.1.48.0 libboost_unit_test_framework.a
libboost_math_c99f-mt.a libboost_python.a libboost_unit_test_framework-mt.a
libboost_math_c99f-mt.so libboost_python-mt.a libboost_unit_test_framework-mt.so
libboost_math_c99f-mt.so.1.48.0 libboost_python-mt.so libboost_unit_test_framework-mt.so.1.48.0
libboost_math_c99f.so libboost_python-mt.so.1.48.0 libboost_unit_test_framework.so
libboost_math_c99f.so.1.48.0 libboost_python.so libboost_unit_test_framework.so.1.48.0
libboost_math_c99l.a libboost_python.so.1.48.0 libboost_wave-mt.a
libboost_math_c99l-mt.a libboost_random.a libboost_wave-mt.so
libboost_math_c99l-mt.so libboost_random-mt.a libboost_wave-mt.so.1.48.0
libboost_math_c99l-mt.so.1.48.0 libboost_random-mt.so libboost_wserialization.a
libboost_math_c99l.so libboost_random-mt.so.1.48.0 libboost_wserialization-mt.a
libboost_math_c99l.so.1.48.0 libboost_random.so libboost_wserialization-mt.so
libboost_math_c99-mt.a libboost_random.so.1.48.0 libboost_wserialization-mt.so.1.48.0
libboost_math_c99-mt.so libboost_regex-mt.so libboost_wserialization.so
libboost_math_c99-mt.so.1.48.0 libboost_regex-mt.so.1.48.0 libboost_wserialization.so.1.48.0
5. Русскоязычные (это большая редкость) переводы и примеры по Boost: Библиотека BOOST C++ - список компонентов - это что-то из сообщества Sun Solaris.
6. Русскоязычная страница wiki по Boost - здесь есть короткие примеры кода по разным разделам Boost для самого начала.
7. Моё описание (впечатлений ) того, как я установил Boost ver.1.53 (самый свежий) в Windows XP под использование в Visual Studio 2010 - процесс отличается от того, как описывается инсталляция на сайте Boost (Windows - это для тех, кто хочет проверять переносимость своего ПО между системами - нужна такая эталонная установка).
- Виктория
- Писатель
- Сообщения: 113
- Зарегистрирован: 28 дек 2012, 14:05
- Откуда: Самара
- Контактная информация:
Re: Boost
Документация неполная, по нужным функциям лишь примеры5. Русскоязычные (это большая редкость) переводы и примеры по Boost: Библиотека BOOST C++ - список компонентов - это что-то из сообщества Sun Solaris.
А какие компоненты boost самые основные, если ориентироваться на критерий переносимости?
Asio можно отнести к минимальному набору? http://think-async.com/Asio/AsioAndBoostAsio
Таймеры высокого разрешения нужны?
Последний раз редактировалось Виктория 30 мар 2013, 18:10, всего редактировалось 1 раз.
- Виктория
- Писатель
- Сообщения: 113
- Зарегистрирован: 28 дек 2012, 14:05
- Откуда: Самара
- Контактная информация:
Re: Boost
Статья про Asio -
Boost.Asio, шаблон «Активный объект» и многопоточные приложения
Учебный курс ЮФУ http://bravit.rsu.ru/distrib/Asio_tutor ... to_sockets
З.Ы.: может быть немного не в тему, попалась старая статья с SoftCraft - SoftCraft: процессы вместо классов?
Boost.Asio, шаблон «Активный объект» и многопоточные приложения
Учебный курс ЮФУ http://bravit.rsu.ru/distrib/Asio_tutor ... to_sockets
З.Ы.: может быть немного не в тему, попалась старая статья с SoftCraft - SoftCraft: процессы вместо классов?
- Виктория
- Писатель
- Сообщения: 113
- Зарегистрирован: 28 дек 2012, 14:05
- Откуда: Самара
- Контактная информация:
Re: Boost
Ох уж этот Visual Studio 2010! Версия 1.52 тестировалась и для MinGW 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0 и для Visual C++!!!Olej писал(а):...Olej писал(а):откуда взять?, как установить? (разные варианты), где документация?, как начать использовать?
7. Моё описание (впечатлений ) того, как я установил Boost ver.1.53 (самый свежий) в Windows XP под использование в Visual Studio 2010 - процесс отличается от того, как описывается инсталляция на сайте Boost (Windows - это для тех, кто хочет проверять переносимость своего ПО между системами - нужна такая эталонная установка).
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Boost
А по этому п. примеры и есть самое интересное, что там есть.Виктория писал(а):Документация неполная, по нужным функциям лишь примеры5. Русскоязычные (это большая редкость) переводы и примеры по Boost: Библиотека BOOST C++ - список компонентов - это что-то из сообщества Sun Solaris.
А исчерпывающая документация (англоязычная) названа пред. п. №4
P.S. Где-то я читал мнение, что по Boost нет толком на русском языке ни переводов документации, ни описаний, ни книг.
Так что, как ни крути, - нужно пользоваться оригинальной документацией.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Boost
Это, как и во всём - кому что надо.Виктория писал(а): А какие компоненты boost самые основные, если ориентироваться на критерий переносимости?
- кому-то интереснее "функциональные теоретизирования" - Lambda
- кому-то математические разделы, например, специальные функции - Math/Special Functions (а в Boost на сегодня аж 5 математических разделов) ... а кому-то вся эта математика - до фени
А если говорить только о нуждах переносимости (но это не самая главная сторона Boost), то, я так думаю:
* 1-й эшелон необходимости (то, что в разных системах реализовано диаметрально по-разному - без этого переносимости просто не достичь):
- Thread - Portable C++ multi-threading
- Signals - Managed signals & slots callback implementation
- Timer - Event timer, progress timer, and progress display classes
- Locale - Provide localization and Unicode handling tools for C++
- Interprocess - Shared memory, memory mapped files, process-shared mutexes, condition variables, containers and allocators
* 2-й эшелон необходимости (то, что хотелось бы сделать единообразным):
- Pool - Memory pool management
- Program Options - The program_options library allows program developers to obtain program options, that is (name, value) pairs from the user, via conventional methods such as command line and config file.
- Chrono - Useful time utilities
* и только потом уже то, что есть только средством для удобства:
- Iostreams - Boost.IOStreams provides a framework for defining streams, stream buffers and i/o filters
- Asio - Portable networking, including sockets, timers, hostname resolution and socket iostreams
- Date Time - A set of date-time libraries based on generic programming concepts
- Filesystem - The Boost Filesystem Library provides portable facilities to query and manipulate paths, files, and directories
А вся остальная, наибольшая часть разделов Boost вообще к переносимости никакого отношения не имеет.
Я вам своё мнение на этот счёт написал выше, но это только исключительно IMHO.Виктория писал(а):Asio можно отнести к минимальному набору? http://think-async.com/Asio/AsioAndBoostAsio
P.S. Но именно в Asio есть компонент, незаменимый для переносимости, то, что делает UNIX системы именно UNIX - а именно fork().
Вот некоторые важнейшие примеры из документации по этой части:
Fork
daemon.cpp
process_per_connection.cpp
fork() - это именно то единственное, что позволило UNIX обставить Windows в многодесятилетней гонке
- Виктория
- Писатель
- Сообщения: 113
- Зарегистрирован: 28 дек 2012, 14:05
- Откуда: Самара
- Контактная информация:
Re: Boost
Лучше ориентироваться на минимум, если можно будет обойтись первым эшелоном, то зачем тащить лишнее...
И так уже очень много документации - для "воскресного чтения"
А все функции POSIX можно реализовать за счет первого эшелона?
И так уже очень много документации - для "воскресного чтения"
А все функции POSIX можно реализовать за счет первого эшелона?
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Boost
Нельзя так говорить "все функции POSIX" - это не функции POSIX, а эквивалентные им возможности, однородные для программы в любой ОС. Хотя в каждой из этих ОС возможности эти могут реализовываться совершенно разными механизмами - их собственным API (самый показательный здесь пример - fork() для Windows). Эти (посвящённые переносимости) разделы Boost - это обёртки, промежуточный слой над ОС.Виктория писал(а):А все функции POSIX можно реализовать за счет первого эшелона?
А для того, чтобы все возможности, описываемые POSIX, были доступны - к "первому эшелону" добавьте (обязательно!) fork() (из Asio). И на этом, похоже, всё...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Boost
Вообще то, программирование, особенно С++, во многом перешло в фазу "игры разума" - пустые формализмы на уровне головоломок ... для реальной дисциплины "программирование" абсолютно не нужные ... сродни тому, что описано в романе Германа Гессе "Игра в бисер" (нобелевская премия). Это не специально и по случаю сказано относительно Boost, а по отношению к С++ вообще ... Boost просто вобрал в себя худшее из C++Olej писал(а): - кому-то интереснее "функциональные теоретизирования" - Lambda
Смотрите, несколько сравнительных вариантов по мотивам lambda-функций:
- общий заголовочный файл lambda.h (чтоб не тащить между разными вариантами):
Код: Выделить всё
#include <cstdlib>
#undef _GLIBCXX_ATOMIC_BUILTINS
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> a( 13, 11 );
А теперь дальше смотрим 3 варианта реализации одного и того же действа:
- совершенно ординарная реализация средствами STL (чтоб было понятно о чём ведём речь), lambstl.cc :
Код: Выделить всё
#include "lambda.h"
void func( int parameter ) {
std::cout << parameter << ' ';
};
int main ( int argc, char **argv ) {
std::for_each( a.begin(), a.end(), func );
std::cout << std::endl;
exit( EXIT_SUCCESS );
}
Код: Выделить всё
#include "lambda.h"
int main ( int argc, char **argv ) {
auto const local = [&]( int parameter ) {
cout << parameter << ' ';
};
for_each( a.begin(), a.end(), local );
cout << endl;
exit( EXIT_SUCCESS );
}
Код: Выделить всё
#include "lambda.h"
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;
int main ( int argc, char **argv ) {
for_each( a.begin(), a.end(), cout << _1 << ' ' );
cout << endl;
exit( EXIT_SUCCESS );
}
А выполнение для всех вариантов идентичное:
Код: Выделить всё
bash-4.2$ make
c++ lambstl.cc -o lambstl
c++ -std=c++11 lambcpp11.cc -o lambcpp11
c++ lamboost.cc -o lamboost
bash-4.2$ ./lambstl
11 11 11 11 11 11 11 11 11 11 11 11 11
bash-4.2$ ./lambcpp11
11 11 11 11 11 11 11 11 11 11 11 11 11
bash-4.2$ ./lamboost
11 11 11 11 11 11 11 11 11 11 11 11 11
- Вложения
-
- lambda.tgz
- (13.91 КБ) 431 скачивание
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость