Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Насколько С++11 ускорил разработку ПО


Автор: zzkoderzzzx 16.10.2013, 16:50
Есть ли статистика по указанному вопросу? А раз ее нет, может и не стоит переходить на С++11?

Например если дать одно и то же задание программистам на С++ и программистам на С++11, насколько быстрее оно будет выполнено на С++11? 
Мне кажется, что его выполнят на С++11 менее быстро, т.к. вместо решения задачи будут думать где применить сомнительные фичи, введенные в С++11.

Является ли неиспользование фич С++11 (программирование как на обычном С++) признаком плохого программиста?

Автор: bsa 16.10.2013, 16:58
Не удивлюсь, если статистики нет. Так как еще не везде С++11 поддерживается.
Зависит от задания. В принципе, С++11 просто вводит новые плюшки в язык, которые позволяют или отказаться от внешних библиотек (std::thread, std::bind...) или немного оптимизировать код (rvalue-reference). В итоге, результат может быть непредсказуем. Так как в одном случае одни инструменты используются, в другом - другие. Одно можно сказать, что итоговый исходный код в случае С++11 будет несколько проще в дальнейшем развитии (при условии, что программисты нормальные).
Неиспользование С++11 не является признаком плохого программиста. Так как существует куча независящих от него причин, почему он им может не пользоваться (например, компилятор целевой платформы не поддерживает С++11).

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Насколько-С11-ускорил-разработку-ПО-id525e99c7ae20154579000000#findElement_E7045_525e9b7fae2015dd6d0005ea_0

Автор: NoviceF 16.10.2013, 17:07
Цитата(bsa @  16.10.2013,  17:58 Найти цитируемый пост)
например, компилятор целевой платформы не поддерживает С++11

например, gcc 2.95.3 smile 

Автор: vinter 16.10.2013, 17:17
Нет и никогда не будет т.к. никто подобного не собирает. Переходить или нет - решать каждому индивидуально или по-проектно. Скажу за себя, я без C++11 уже не могу писать на C++.
Цитата

Является ли неиспользование фич С++11 (программирование как на обычном С++) признаком плохого программиста?

За отсутствием внешних препонов - да, является.

Автор: kemiisto 16.10.2013, 17:55
Цитата(zzkoderzzzx @  16.10.2013,  15:50 Найти цитируемый пост)
Например если дать одно и то же задание программистам на С++ и программистам на С++11, насколько быстрее оно будет выполнено на С++11? 
Мне кажется, что его выполнят на С++11 менее быстро, т.к. вместо решения задачи будут думать где применить сомнительные фичи, введенные в С++11.

Менее быстро это медленнее что-ли? smile Впрочем, не суть.
По логике, наоборот, быстрее. Или более быстро, если Вам угодно. smile 

Например, в С++11 нет нужды наступать на грабли ручного управления памятью. Это может сэкономить уйму времени даже на небольшом проекте.

А что конкретно за "сомнительные фичи"? 

Цитата(zzkoderzzzx @  16.10.2013,  15:50 Найти цитируемый пост)
Является ли неиспользование фич С++11 (программирование как на обычном С++) признаком плохого программиста?

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


Автор: akizelokro 16.10.2013, 18:01
Замедлил несколько. Потому что пришлось опять что-то учить и осваивать. А потом на форуме стали появляться вопросы по С++11, на которые даже я знаю ответы.  smile  ( минус время на написание ответов )

Автор: baldina 16.10.2013, 18:52
Цитата(kemiisto @  16.10.2013,  17:55 Найти цитируемый пост)
Например, в С++11 нет нужды наступать на грабли ручного управления памятью.

кто не хотел наступать, и раньше не наступал. в С++11 некоторые вещи стало делать проще, а значит - быстрее/безопасней. но функционально мало что изменилось, т.к. синтаксические улучшения кардинально скорость не повысят, а функционал std перетек из boost, который и раньше был доступен.
т.к. проекты не существуют в воздухе и обязательно используют библиотеки (в которых для многих проектов больше половины функционала), С++11 не сделает революции

Добавлено через 4 минуты и 21 секунду
Цитата(zzkoderzzzx @  16.10.2013,  16:50 Найти цитируемый пост)
Является ли неиспользование фич С++11 (программирование как на обычном С++) признаком плохого программиста

вряд ли. короткая дорога - известная. хотя... хороший программист - ленивый программист, и писать for(begin,end) вместо for (x:y) должно уже утомлять

Автор: kemiisto 16.10.2013, 19:04
Цитата(baldina @  16.10.2013,  17:52 Найти цитируемый пост)
кто не хотел наступать, и раньше не наступал.

Сказки старого леса. smile 

Цитата(baldina @  16.10.2013,  17:52 Найти цитируемый пост)
т.к. синтаксические улучшения кардинально скорость не повысят

Речь шла о скорости разработки, а не исполнения.

Цитата(baldina @  16.10.2013,  17:52 Найти цитируемый пост)
а функционал std перетек из boost

Да ладно? smile А мужики то и не знали.
Или тоже самое и в первом пункте, про тех, кто не наступал?
Если речь об этом, то да, согласен.

Но это несколько некорректное сравнение, согласитесь. Уж если сравнивать два стандарта, то в чистом виде.
И опять же, Boost - оно, может, и хорошо, но когда вещи попадают в стандарт, это способствует их популяризации.
Больше разработчиков знает - больше применяет.

И да, не всё там в этом вашем Boost было. std::unique_ptr, вроде, аналогов не имеет, например.

Цитата(baldina @  16.10.2013,  17:52 Найти цитируемый пост)
т.к. проекты не существуют в воздухе и обязательно используют библиотеки (в которых для многих проектов больше половины функционала), С++11 не сделает революции 

Ошибаетесь. Код любой крупной библиотеки переписывается с нуля один раз минимум в 5-10 лет. Или просто уходит в мир иной и замешается более современными аналогами.
Так что революция, не революция, а лет через 5 все крупные библиотеки будут написаны уже на С++11 (или 14 smile ). Или смерть. Это лишь вопрос времени.

Нет, есть, конечно, исключения. Но это в основном адовое фотрашно-сишечное наследие, например, которое никто желанием переписывать не горит. smile  К С++, впрочем, это отношения не имеет.

Автор: zzkoderzzzx 16.10.2013, 19:57
Цитата(kemiisto @ 16.10.2013,  17:55)
Например, в С++11 нет нужды наступать на грабли ручного управления памятью. 

В С++ тоже есть auto_ptr.

Цитата(kemiisto @ 16.10.2013,  17:55)

А что конкретно за "сомнительные фичи"?

Например constexpr. Не совсем понятно куда приткнуть rvalue references. 
Код

constexpr int GiveFive() {return 5;} //ну и зачем такая функция???

Автор: borisbn 16.10.2013, 20:05
Цитата(zzkoderzzzx @  16.10.2013,  16:50 Найти цитируемый пост)
Насколько С++11 ускорил разработку ПО

Лично я под разработкой ПО понимаю проектирование, разработку структуры данных и алгоритмов обработки этих данных. И делаю это я на русском, а не на Си++ или на его 11-м развитии. Кодирование на конкретном языке у меня занимает процентов 15-20 от общего времени, поэтому если 11-й стандарт и ускорит кодирование, допустим на 10%, то общая экономия составит сущие копейки. Это совершенно не значит, что его не нужно использовать... Просто не нужно ожидать, что если раньше проект делался за месяц, то с использованием C++11 он будет делаться 2 недели. Не будет. Выйдет тот же месяц. Ну... м.б. за минусом одного дня.
Цитата(zzkoderzzzx @  16.10.2013,  16:50 Найти цитируемый пост)
Мне кажется, что его выполнят на С++11 менее быстро, т.к. вместо решения задачи будут думать где применить сомнительные фичи, введенные в С++11.

Какие фичи ты считаешь сомнительными ? Для меня лично сомнительная фича только одна - строковые литералы.
А по поводу скорости... Ну... во-первых см. первый абзац, а во-вторых, если уж говорить о скорости кодирования, то сравни это:
Код
struct StrIsEq {
    StrIsEq( const std::string & str ) : m_str( str ){}
    bool operator()( const std::pair< std::string, std::vector< std::string > > & p ) const {
        return p.first == m_str;
    }
private:
    std::string m_str;
};
std::string hello = "Hello";
std::vector< std::pair< std::string, std::vector< std::string > > >::const_iterator found = std::find_if( v.begin(), v.end(), StrIsEq( hello ) );

и это:
Код
std::string hello = "Hello";
auto found = std::find_if( v.begin(), v.end(),
    [hello]( const std::pair< std::string, std::vector< std::string > > & p ) {
        return p.first == hello;
    }
);

Автор: vinter 16.10.2013, 20:07
Цитата

Например constexpr

На данный момент дали возможность улучшить код, который раньше требовал нагромождения шаблонов. Код стал проще. Добавились пользовательские литералы. Да и вообще это одна из фич, чьё применения будет раскрываться со временем, как это уже было раньше. Тем более, что constexpr является отличным подспорьем в concepts lite и, я полагаю, в полновесных concepts в будущем.
Цитата

Не совсем понятно куда приткнуть rvalue references. 

Если Вам, что-то не понятно это не делает фичу "сомнительной". Посмотрите мою http://scrutator.me/post/2011/08/02/rvalue-refs.aspx по теме, может прояснит чего.

Автор: zzkoderzzzx 16.10.2013, 20:13
borisbn,  это поиск подстроки Hello в векторе пар "строка, строка"?

Автор: borisbn 16.10.2013, 20:16
zzkoderzzzx, нет. И то и то - это поиск в векторе пар "строка, вектор строк" на предмет совпадения строки (первой части пары) со строкой Hello.

Автор: zzkoderzzzx 16.10.2013, 20:31
borisbn, а обязательно ли вводить дополнительный класс StrIsEq и использовать std::find_if при реализации на чистом С++?
Можно же сделать и в лоб - пройтись в цикле по вектору...
В конце концов сделать typedef на страшную конструкцию 
Код

std::vector< std::pair< std::string, std::vector< std::string > > >

И код получится ненамного длиннее второй реализации.

Автор: baldina 16.10.2013, 22:17
Цитата(kemiisto @  16.10.2013,  19:04 Найти цитируемый пост)
Речь шла о скорости разработки, а не исполнения.

и я про скорость разработки

Цитата(kemiisto @  16.10.2013,  19:04 Найти цитируемый пост)
Или тоже самое и в первом пункте, про тех, кто не наступал?

то самое

Цитата(kemiisto @  16.10.2013,  19:04 Найти цитируемый пост)
Уж если сравнивать два стандарта, то в чистом виде.

вопрос был не о сравнении стандартов, а изменении скорости разработки

Цитата(kemiisto @  16.10.2013,  19:04 Найти цитируемый пост)
Код любой крупной библиотеки переписывается с нуля один раз минимум в 5-10 лет

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

Цитата(kemiisto @  16.10.2013,  19:04 Найти цитируемый пост)
лет через 5 все крупные библиотеки будут написаны уже на С++11

имею отношение к паре проектов, в которых используется код (в виде библиотек), которому более 30 лет. 
Цитата(kemiisto @  16.10.2013,  19:04 Найти цитируемый пост)
фотрашно-сишечное наследие

оно самое
и пока необходимости нет (а её нет и не предвидится) трогать его никто не станет. опять же, к новому коду на С++11 и скорости его разработки это не имеет отношения

Автор: bsa 16.10.2013, 23:16
Цитата(zzkoderzzzx @  16.10.2013,  21:31 Найти цитируемый пост)
И код получится ненамного длиннее второй реализации.
Но и не намного короче первой. smile 

Автор: o2n3e 17.10.2013, 00:19
Модератор: Сообщение скрыто.

Автор: o2n3e 17.10.2013, 00:23
Модератор: Сообщение скрыто.

Автор: o2n3e 17.10.2013, 00:26
Модератор: Сообщение скрыто.

Автор: o2n3e 17.10.2013, 00:36
Модератор: Сообщение скрыто.

Автор: akizelokro 17.10.2013, 07:46
Цитата(o2n3e @  17.10.2013,  00:23 Найти цитируемый пост)
Тут ты под платформой и конпелятором о5 имеешь ввиду маздайское ###? И да, является.


Ну ты и фуфла нанёс.
Чтобы ты не впадал в очередную ересь, обратись к первоисточникам. Принципиально язык программирования высокого уровня от программирования на калькуляторе или работы с математическими формулами ничем не отличается. И вот там основной упор. Дальше уже дополнительные накрутки, вызываемые элементарным усложнением процесса

Автор: vinter 17.10.2013, 08:09
Цитата(baldina @  16.10.2013,  23:17 Найти цитируемый пост)
но все же приведи мне примерчик такой большой библиотеки которая регулярно с 0 переписывается 

Qt; нельзя сказать, что с нуля, но между мажорными версиями отличия значительные.

Автор: kemiisto 17.10.2013, 09:02
Цитата(o2n3e @  16.10.2013,  23:26 Найти цитируемый пост)
Ты пишешь под доисторическое ### на котором нужно ручное управление памятью? 

Полудурок, ты внимательно прочитал, что цитируешь? smile

Цитата(o2n3e @  16.10.2013,  23:36 Найти цитируемый пост)
Ты упоролся ставить в один ряд фортран и сишку? Фортран ущербанское ###, на котором ничего, кроме числодробильного бесполезного говна не писали.

 smile  smile  smile 
Ахахаха, пиши есчо! Я где-то говорил, что Fortran - конкурент С? Я их сравнил только в том плане, что есть куча библиотек на этих языках, которые никто переписывать в ближайшее время не будет. Ибо ain't broke.

Цитата
Регистрация: 19.8.2011

Ей богу, лучше бы ты продолжал молчать. smile 

Автор: bsa 17.10.2013, 10:17
Граждане, игнорируйте высказывания o2n3e, не кормите троля. Почти все его посты скрываются модераторами при первой возможности.

Автор: o2n3e 17.10.2013, 11:05
Модератор: Сообщение скрыто.

Автор: borisbn 17.10.2013, 11:06
Цитата(zzkoderzzzx @  16.10.2013,  20:31 Найти цитируемый пост)
В конце концов сделать typedef на страшную конструкцию 

Согласен. Я специально оставил без него, чтобы показать удобство auto. Даже по сравнению с typedef'ом.
Цитата(zzkoderzzzx @  16.10.2013,  20:31 Найти цитируемый пост)
Можно же сделать и в лоб - пройтись в цикле по вектору...

find_if - это первое, что пришло в голову. Сравни, например, это без 11-го:
Код
typedef std::pair< std::string, std::vector< std::string > > str_vect_t;
v.erase( std::remove_if( v.begin(), v.end(), []( const str_vect_t & p ) { p.first == hello; } ), v.end() );

Или это:
Код
for ( auto p : v ) {
    for ( auto s : p.second ) {
        std::cout << s << " ";
    }
}


Автор: o2n3e 17.10.2013, 11:15
Модератор: Сообщение скрыто.

Автор: o2n3e 17.10.2013, 11:17
Модератор: Сообщение скрыто.

Автор: o2n3e 17.10.2013, 11:27
Модератор: Сообщение скрыто.

Автор: akizelokro 17.10.2013, 11:59
Цитата(o2n3e @  17.10.2013,  11:05 Найти цитируемый пост)
дёшь в гугл, ищешь там гцц С++11 прогресс и смотришь когда появились основные фичи, а когда вышел С++11. Проблемы с С++11 только у маздайки и её гнилого конпелятора, да и на ином проигриетарном говне, которое даже конпелятором назвать трудно. Что сказать-то хотел?


Если смотреть философски на всю твою писанину, то надо вспомнить, что С/C++ пока ещё живой (изменяющийся) язык. А это означает, что возможны ошибочные или малополезные изменения ( как-то один вид пойнтеров, экспорт шаблонов и будет ещё что-то новое).

И <tuple> тебе в помощь!
("Эксперт - любой человек не из нашего города" (следствие из закона Мэрфи))
Код плохой или хороший - уж всяко не соответствием какому-то стандарту определяется

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

Автор: codemonkeys 17.10.2013, 12:05
В С++11 до сих пор не догадались включить в стандарт pragma once. 
А в принципе ведь можно и автоматически отслеживать повторное включение вообще без лишних слов!
Но все продвинутые кодеры вынуждены продолжать как обезьяны писать ifndef/define, и отслеживать, чтобы этот макрос не совпал с другим из какой нибудь далекой жо*ы. 

Автор: o2n3e 17.10.2013, 12:32
Модератор: Сообщение скрыто.

Автор: o2n3e 17.10.2013, 12:39
Модератор: Сообщение скрыто.

Автор: o2n3e 17.10.2013, 12:55
Модератор: Сообщение скрыто.

Автор: xvr 17.10.2013, 14:18
С++11 является всего лишь следующим стандартом С++, а никак не отдельным языком. Поэтому выбор между С++11 и С++ (именно как языками) бессмысленен - это одно и то же smile

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

Автор: o2n3e 17.10.2013, 15:30
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)