powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничный бунт
73 сообщений из 73, показаны все 3 страниц
Пятничный бунт
    #39270993
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегрируя набежавшее в разных темах, призываю - сжечь еретиков!

Если ты пишешь на ассемблере - ты видишь прямой результат твоего кода,

Если ты пишешь на Си, С-- ты представляешь в уме прямой результат твоего кода.

Если ты пишешь на С с классами, Obj Pascal, Oberon - ты представляешь в уме прямой результат твоего кода с поправкой на косвенные вызовы.

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

// Навеяно Майерсом.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39270998
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl// Навеяно Майерсом.
Не могу всерьез воспринимать советы по программированию от человека с прической солиста диско-группы 70-х
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271000
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Советы надо рассматривать критически.

Одним из ярких примеров сокрытия сложности является "легкость" алгоритма сортировки на функциональном языке. Где накладные расходы превышали выгоду алгоритма
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФП не очень пригодны для написания утилитарных вещей. А я сортировку
считаю больше утилитой чем алгоритмом.

Согласно классификации Душкина само ФП предназначено для синтаксических
трансляторов, эквивалентных преобразований программ, различного рода DSL и
описателей, и для доказательств существования какого-то свойства программы.

Тоесть сортировка в ФП - (как впрочем и расчет факториала и "Ханойские башни") это просто
неудачный наглядный пример.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271535
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЕсли ты используешь STL, boost итп - ты уже вторичен, - ты можешь только гадать, что получится в итоге.Ну, как бы, что-то получаем взамен чего-то.
Пользуясь пультом дистанционного управления, мы можем только гадать, что там происходит в итоге внутри телевизора.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271634
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЕсли ты используешь STL, boost итп - ты уже вторичен, - ты можешь только гадать, что получится в итоге.так не используйте!
мне это кажестя глупым. ведь именно в этом суть абстракции - черный ящик. тут нужно выбрать - либо ты пишешь на машинных кодах и знаешь все, либо ты используешь абстракцию и намеренно скрываешь от себя какие-то знания, чтоб сосредоточится на чем-нибудь другом. намеренно - если ты хочешь скрыть от себя детали, нужна абстракция, если хочешь углубится в детали - абстракция не нужна, лезь в детали. она так работает.

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

например: type_traits в результируем файле нет, он просто определяет когда какую специализацию использовать. а вот std::basic_string будет там, код будет одинаков, только за разницей используемого типа, вот и все.

у вас так часто возникает ситуация когда нужно лезть в ассемблер чтобы понять что не так? или просто интересно знать что сделал компилятор?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271674
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbSiemarglЕсли ты используешь STL, boost итп - ты уже вторичен, - ты можешь только гадать, что получится в итоге.Ну, как бы, что-то получаем взамен чего-то.
Пользуясь пультом дистанционного управления, мы можем только гадать, что там происходит в итоге внутри телевизора.
Вот я воспользовался другими методами и выяснил, что у меня в телевизоре - Андроид. И стало понятно, чего он так тормозит на определенных операциях. Я недоволен результатом такого "абстрагирования" производителя.

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

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

например: type_traits в результируем файле нет, он просто определяет когда какую специализацию использовать. а вот std::basic_string будет там, код будет одинаков, только за разницей используемого типа, вот и все.

у вас так часто возникает ситуация когда нужно лезть в ассемблер чтобы понять что не так? или просто интересно знать что сделал компилятор?
У шаблонов С++ другая проблема - это такой уровень абстракции, что ты как собака Павлова, должен запомнить команды - типы которые нужны передавать в библиотеки. Офигенное абстрагирование =)

Производительность шаблоны сами по себе практически не портят (так, 2% всего), но вот реализации с их помощью - запросто.
Для STL это и принуждение к счетчикам ссылок, и постоянное копирование туда-сюда и неявное преобразование типов (конструктора копирования итп).
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271688
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglCEMbпропущено...
Ну, как бы, что-то получаем взамен чего-то.
Пользуясь пультом дистанционного управления, мы можем только гадать, что там происходит в итоге внутри телевизора.
Вот я воспользовался другими методами и выяснил, что у меня в телевизоре - Андроид. И стало понятно, чего он так тормозит на определенных операциях. Я недоволен результатом такого "абстрагирования" производителя.
подразумевалось, что, например, при переключении программ, не надо вручную менять частоту принимаемого сигнала, и вообще ничего про частоту и внутренности знать не надо. На выходе нам важно получить изображение текущего канала и знать какие кнопки нажимать. Всё, чистый ООП.SiemarglУ шаблонов С++ другая проблема - это такой уровень абстракции, что ты как собака Павлова, должен запомнить команды - типы которые нужны передавать в библиотеки. Офигенное абстрагирование =)typedef?SiemarglПроизводительность шаблоны сами по себе практически не портят (так, 2% всего), но вот реализации с их помощью - запросто.
Для STL это и принуждение к счетчикам ссылок, и постоянное копирование туда-сюда и неявное преобразование типов (конструктора копирования итп).1. не использовать смартпоинтеры
2. move
3. explicit, delete(оператора и конструктора)
?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271701
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbSiemarglпропущено...

Вот я воспользовался другими методами и выяснил, что у меня в телевизоре - Андроид. И стало понятно, чего он так тормозит на определенных операциях. Я недоволен результатом такого "абстрагирования" производителя.
подразумевалось, что, например, при переключении программ, не надо вручную менять частоту принимаемого сигнала, и вообще ничего про частоту и внутренности знать не надо. На выходе нам важно получить изображение текущего канала и знать какие кнопки нажимать. Всё, чистый ООП.SiemarglУ шаблонов С++ другая проблема - это такой уровень абстракции, что ты как собака Павлова, должен запомнить команды - типы которые нужны передавать в библиотеки. Офигенное абстрагирование =)typedef?SiemarglПроизводительность шаблоны сами по себе практически не портят (так, 2% всего), но вот реализации с их помощью - запросто.
Для STL это и принуждение к счетчикам ссылок, и постоянное копирование туда-сюда и неявное преобразование типов (конструктора копирования итп).1. не использовать смартпоинтеры
2. move
3. explicit, delete(оператора и конструктора)
?
Не так просто. Телевизор у меня еще ютуб и торренты умеет.

typedef'у нужно выучить написать те же самые требуемые типы.

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

Ок, давай попробуем засунуть более-менее сложный класс с запрещенными конструктором и деструктором куда нибудь, например в set и пробежаться меняющим алгоритмом.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglВот я воспользовался другими методами и выяснил, что у меня в телевизоре - Андроид. И стало понятно, чего он так тормозит на определенных операциях. Я недоволен результатом такого "абстрагирования" производителя.

Я подозреваю что у тебя современная плазма типа Smart-TV. Если ты подключен на цифру - то тормоз
при переключении каналов никак не связан с Андроидом. Это лаг передающего оборудования. Я могу
предположить что оно в 1 момент времени транслирует тебе всего 1 канал и чтобы переключить на другой
его надо скоммутировать на другой источник и в соотв с "их" протоколами подождать "наполнения буфера".
0.5 - 2 сек в зависимости от качеста ИМХО. Я подчеркну что я на самом деле не знаю как работают
современные провайдеры цифрового ТВ. И это есть моё предположение. Но если-бы ты требовал гарантий
быстрого переключения между Fox и Sport к примеру (ну пока идёт реклама на матче - ты быринько смотришь
новую серию "Наруто") то в таком случае ТВ-провайдер должен транслировать тебе СРАЗУ 2 сетевых потока.
Думаю это технически реализуемо но ИХ сетевое слегка ОФИГЕЕТ и просядет от такой услуги. Ну да бох с ним.

А если ты счастливый обладатель старого доброго аналогового ТВ (антена на балконе) то фактически все OVER
100 каналов принимаешь одновременно и лаг между переключениями связан просто с "гашением экрана"
в современных ТВ тюнерах я думаю это для предотрващения неприятного эффекта "дёргания" кадровой
развертки и вообще для кошерности и красивости. Данный артефакт почти незаметен. Ну я по крайней
мере его вообще не замечаю.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271707
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для проверки насколько Андроид вреден - можно ради прикола найти еще более старый цифровик
где всместо андроида "фирменная прошивка" от производителя - жлобский интерфейс который
показывает "вырвиглазную табличку" и список каналов и попробовать попереключать.

Я думаю лаг будет точно такой-же.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271711
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

полминуты на запуск апплета "yuotube"
и еще секунд 15 до этого на загрузку панельки апплетов
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271714
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglmayton,

полминуты на запуск апплета "yuotube"
и еще секунд 15 до этого на загрузку панельки апплетов
Это хреново чел. А кликни версию Андроида.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271717
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargltypedef'у нужно выучить написать те же самые требуемые типы.
непонимание. Там ты один раз тип определяешь как шаблон, потом ты забываешь про тип, который в шаблоне использовал. Хотя я что-то не догоняю точно, у меня не было проблем с "запоминанием" типа шаблона, так как он получается из головы по контексту. о__о
Смартпойнтеры приходится использовать из-за неконтролируемого процесса копирования внутрях. Без них будет копироваться по значению - еще "лучше". Вместе с move() это как раз костыли, подпирающие абстракцию, просто не чугунные а алюминиевые.
можно же определить конструктор копирования и оператор присваивания.
Ок, давай попробуем засунуть более-менее сложный класс с запрещенными конструктором и деструктором куда нибудь, например в set и пробежаться меняющим алгоритмом.ну если не присваивать прям экземпляры класса, то всё ок должно быть?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271925
teo609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЕсли ты используешь STL, boost итп - ты уже вторичен, - ты можешь только гадать, что получится в итоге.

STL не проблема, да и boost наверное тоже (он слишком большой чтобы я говорил за него весь)

Но в целом, тенденция развития языка мне совершенно не нравится. Слишком редко применяемые фичи добавляются. Но это не boost и STL, это абстранирование большее. Вот например недавно на хабре статья про DI: https://habrahabr.ru/company/infopulse/blog/248879/.

Там, в частности, приводится код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
auto my_int = []{};                   
       
struct c {                            
    BOOST_DI_INJECT(c                 
        , (named = my_int) int i)     
        : i(i)                        
    { }                               
       
    int i = 0;                        
};     
       
int main() {                          
  auto injector = di::make_injector(  
    di::bind<int>.named(my_int).to(42)
  );   
       
  return injector.create<c>().i;      
}     


и тут же говорится что это аналог
Код: plaintext
1.
return 42;



Но ведь можно же просто написать return 42; !

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

Хотел написать об этом раньше, но подумал, что может быть это мало кому проблема. Мне все-таки уже 40, нередко говорят, что возраст для профессии непригоден. Думаю, что преодолевать нагромождения на пустом месте да, уже не интересно, нет былого задора. Я не представляю себе увеличения объема исходного кода вдвое, причем кода логики, не вижу оправданий. Впрочем, может быть это опять же мое личное, еще в студенчестве отказался изучать Паскаль после Си сразу после знакомства с begin и end - зачем язык, который тратит 8 символов на то, что можно сделать в 2.
Мой первый код на С++ был на Borland 3.1. В начале 2000х столкнулся с ATL и лично наткнулся на то, что быстро исправить код на ней не могу, мне надо понимать все, что скрыто за шаблонами, а это долго.

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

Мне кажется, возможности шаблонов используются идеологически не для того что было задумано изначально. И что это нехорошо не только для меня, но и для языка в целом. Неправильный это путь. Огромная мощь была в небольшом количестве фич, каждую из которых можно было многократно повторить и программно решить любую задачу, оставаясь с логически краткой и понятной программой и высокой производительностью. А сейчас создается много фичек, каждая из которых служит весьма узкой цели, но значительно раздувают и язык и исходный код. И было бы идеологически неправильно массово применять такие фичи в разработке.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271980
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609Но в целом, тенденция развития языка мне совершенно не нравится. Слишком редко применяемые фичи добавляются. Но это не boost и STL, это абстранирование большее. Вот например недавно на хабре статья про DI: https://habrahabr.ru/company/infopulse/blog/248879/.
Причем здесь левая статья на хабре к развитию языка в целом?

teo609Мой первый код на С++ был на Borland 3.1. В начале 2000х столкнулся с ATL и лично наткнулся на то, что быстро исправить код на ней не могу, мне надо понимать все, что скрыто за шаблонами, а это долго.
Если человека в молодости били и насиловали, то у него тоже будет некоторое мнение об окружающих, но несколько скажем так далекое от действительности.

teo609И на этой статье, впервые за 20 лет, я ощутил, что С++ становится настолько не моим, что это уже не интересно разгрызать.
А мне, к 40 годам наоборот, все больше нравится.
Вывод: дело не в возрасте, а в том что наверно не тем занимаетесь ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39271989
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне с самого начала не нравится что плавает сам предмет спора. Оба полюса мнений
касаются С++ и С++. Хотя по сути спор идёт в разрезе С++ и Процессор шаблонов в С++.
По сути все нарекания касаются не самого С++ а его ПРОЦЕССОРА ШАБЛОНОВ
и ЮЗКЕЙСОВ которые были созданы на его базе за всю историю существования языка.

Хочется спросить. Ну если не процессор шаблонов то ЧТО ?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272012
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonМне с самого начала не нравится что плавает сам предмет спора. Оба полюса мнений
касаются С++ и С++. Хотя по сути спор идёт в разрезе С++ и Процессор шаблонов в С++.
По сути все нарекания касаются не самого С++ а его ПРОЦЕССОРА ШАБЛОНОВ
и ЮЗКЕЙСОВ которые были созданы на его базе за всю историю существования языка.

Хочется спросить. Ну если не процессор шаблонов то ЧТО ?

А мне кажется что коллеги Siemargl и
Anatoly Moskovsky и тд по топику берут формулы
вычисления площади абстрактной дыры абстракции из разных справочников и доказывают друг другу
чья формула круче...

)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272028
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0k,

Все в рамках темы ))

Но вообще конечно реальных альтернатив С++ не существует.
Иначе бы при таком количестве ворчунов все они на эти альтернативы уже бы перешли.
Но вместо этого они ходят по С++ форумам и плачутся, как им трудно с С++
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272029
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teo609То что предлагается сейчас, это еще больший масштаб раздувания кода. И на этой статье, впервые за 20 лет, я ощутил, что С++ становится настолько не моим, что это уже не интересно разгрызать. Все эти годы я был уверен, что С++ это круто, и я бы знакомил с ним детей как с передовым. А после этой статьи возникло ощущение, что я не хочу этим грузить сына. Потому что не хочу грузить его фигней.
Не хочешь - не грузи. Загрузи чем считаешь нужным, с остальным сам разберется. Лично я недавно узнал что то что я называл С++ оказывается называется С с классами, а С++ целиком мне просто не надо. Вместо плюсов есть куча других высокоуровневых ЯП, куда можно сделать вставки на голом С, если надо производительность или низкий уровень (WinAPI и т.д.).
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272052
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglполминуты на запуск апплета "yuotube"
и еще секунд 15 до этого на загрузку панельки апплетов
Андроид тут не причем.
У тебя просто слабая аппаратная начинка для используемого апплета YouTube.
У меня на телефоне когда-то давно YT запускался почти мгновенно. А теперь запускается секунд 10, а потом еще минуту видео идет с лагами. Телефон один и тот же, просто сам YouTube обновился и для комфортной работы требует более мощное железо.
Так что проблема с долгим запуском YouTube решается (на пару лет) заменой телевизора на современный.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272061
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня где-то валяется Minix Android Box. Это внешняя smart-tv приставка.

Похожа на эту. Щас не помню точно модель но вроде X7.
MINIX NEO X7
Процессор:
Rockchip RK3188, ARM Cortex-A9 Quad core, 1.6-1.8GHZ;
GPU: Quad Core Mali 400 (Open GL ES2.0/1.1, Open VG1.1, Flash 11.1)
Операционная система:
Google Android 4.2.2
Оперативная память (ОЗУ):
2 GB, DDR3
Встроенная память:
16 GB


Я к чему это. Во первых давайте сравним ARM Cortex-A9 с вашими бортовыми Intel. Я не спец
по процессорам но КМК архитектура и тактовая частота будет существенно отставать.

Видео H264 воспроизводится? Ну дай бох. А что вам еще надо от эконом-проца? Или вы
хотите толкать Intel в каждый утюг?

И вообще разумны ли обвинения которые Зямя предъявляет в адрес Андроид? Я не знаю.
По мне так это обычный себе Линукс.

А видео-кодеки все равно пишут на сях и портируют с изменниями в 1% в части разрядности
там или вызовов OS API.

Что мы ругаем? Что ругаем-то?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272067
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА видео-кодеки все равно пишут на сях и портируют с изменниями в 1% в части разрядности
там или вызовов OS API.
Если не путаю: видеокодеки вообще воплощают в железе. Я к тому что это не то пример чтобы сравнивать ОСы и ЯП.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272076
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tвидеокодеки вообще воплощают в железе.
а топологию и микропрограммы - дух святой приносит
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272079
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonА видео-кодеки все равно пишут на сях и портируют с изменниями в 1% в части разрядности
там или вызовов OS API.
Если не путаю: видеокодеки вообще воплощают в железе. Я к тому что это не то пример чтобы сравнивать ОСы и ЯП.
Ну а если завтра будет устаканен H266 то нам придется выкинуть на свалку наши Смарт-Телевизоры.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272088
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

Если не путаю: видеокодеки вообще воплощают в железе. Я к тому что это не то пример чтобы сравнивать ОСы и ЯП.
Ну а если завтра будет устаканен H266 то нам придется выкинуть на свалку наши Смарт-Телевизоры.
И выкинем. Сомневаешься? У отца в саду приставка для приема цифрового ТВ. Буквально сегодня разбирался почему не показывает, олимпиада на носу, смотреть надо, отказалось стандарт DVB-T умер, DVB-T2 прошивками не лечится, надо железо менять.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дай бох. Главное чтоб мы не спутали в одну кучу дедлайн техподдержки и техническую
возможность обновить firmware.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272101
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kmaytonМне с самого начала не нравится что плавает сам предмет спора. Оба полюса мнений
касаются С++ и С++. Хотя по сути спор идёт в разрезе С++ и Процессор шаблонов в С++.
По сути все нарекания касаются не самого С++ а его ПРОЦЕССОРА ШАБЛОНОВ
и ЮЗКЕЙСОВ которые были созданы на его базе за всю историю существования языка.

Хочется спросить. Ну если не процессор шаблонов то ЧТО ?

А мне кажется что коллеги Siemargl и
Anatoly Moskovsky и тд по топику берут формулы
вычисления площади абстрактной дыры абстракции из разных справочников и доказывают друг другу
чья формула круче...
Скорее вопрос в другом - чем каждый из нас готов пожертвовать во имя абстракции.
С Джоелем я согласен.
Anatoly Moskovskyд0k,
Все в рамках темы ))

Но вообще конечно реальных альтернатив С++ не существует.
Иначе бы при таком количестве ворчунов все они на эти альтернативы уже бы перешли.
Но вместо этого они ходят по С++ форумам и плачутся, как им трудно с С++
А они и перешли.
Объемы софта выросли, требуется более высокий уровень абстракции.
Сервер-сайд теперь Ява, клиент - дНет (или Ява или Веб), вебсервисы на всяком скриптовом говне.

Но в определенной области С++ можно заменить только на С++ без STL, или просто С или на С--.
Alibek B.Siemarglполминуты на запуск апплета "yuotube"
и еще секунд 15 до этого на загрузку панельки апплетов
Андроид тут не причем.
У тебя просто слабая аппаратная начинка для используемого апплета YouTube.
У меня на телефоне когда-то давно YT запускался почти мгновенно. А теперь запускается секунд 10, а потом еще минуту видео идет с лагами. Телефон один и тот же, просто сам YouTube обновился и для комфортной работы требует более мощное железо.
Так что проблема с долгим запуском YouTube решается (на пару лет) заменой телевизора на современный.
Просто я не куплю себе ни телевизор этого же производителя ни андроид-телефон (еще и с огромной дырой в безопасности).
Не собираюсь платить за некачественный (тормозной) код.

Андроид у меня в ТВ скорее всего 4.х, т.к модель 2014г
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272116
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tотказалось стандарт DVB-T умер
а мужики то и не знают
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272117
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglА они и перешли.
Объемы софта выросли, требуется более высокий уровень абстракции.
Сервер-сайд теперь Ява, клиент - дНет (или Ява или Веб), вебсервисы на всяком скриптовом говне.
Это все изначально на этом ширпотребе было ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272124
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbSiemargltypedef'у нужно выучить написать те же самые требуемые типы.
непонимание. Там ты один раз тип определяешь как шаблон, потом ты забываешь про тип, который в шаблоне использовал. Хотя я что-то не догоняю точно, у меня не было проблем с "запоминанием" типа шаблона, так как он получается из головы по контексту. о__о
Смартпойнтеры приходится использовать из-за неконтролируемого процесса копирования внутрях. Без них будет копироваться по значению - еще "лучше". Вместе с move() это как раз костыли, подпирающие абстракцию, просто не чугунные а алюминиевые.
можно же определить конструктор копирования и оператор присваивания.
Ок, давай попробуем засунуть более-менее сложный класс с запрещенными конструктором и деструктором куда нибудь, например в set и пробежаться меняющим алгоритмом.ну если не присваивать прям экземпляры класса, то всё ок должно быть?
Собрал простенький примерчик, да - move помогает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
using namespace std;
#include <list>
#include <algorithm>
#include <iostream>
#include <string>
#include <sstream>
#include <utility>

class noCopyable
{
	string value;
public:
//	noCopyable(const noCopyable&) = delete; // Part1 works with this
	noCopyable(const noCopyable &b)
		{ 
			value = b.value;
			cout << "Called noCopyable copiin" << endl; 
		};  // shows calls, needed for copy list

	noCopyable(noCopyable&& b) : value(std::move(b.value)) 
	{ cout << "Moved noCopyable.. " << endl; }  // move constructor

//	noCopyable& operator = (const noCopyable&) = delete; // // Part1 works with this
	noCopyable& operator = (const noCopyable &b) 
	{ 
		value = b.value; 
		cout << "Called noCopyable assign" << endl; 
	} // needed for copinn list contens


	noCopyable(int x) { stringstream out; out << x; value = out.str(); }
	
	string getS() const {return value; }
	string& setS(string s) {return value = s; }

};

class Usual
{
	string value;
public:
	Usual(int x) { stringstream out; out << x; value = out.str(); }

	string getS() const {return value; }
};

int main()
{
	// Part1. create, iterate, modify
	// this works fine
	list<Usual> usuals;
	typedef list<Usual>::const_reference Uiter;
	usuals.push_front(1);
	usuals.push_front(2);
	usuals.push_front(3);

	for_each(usuals.begin(), usuals.end(), [](Uiter i){cout << i.getS() << ", "; } );
	cout << endl;
		
	// non copiable object wont work
    noCopyable canCreate(7); // <--- OK

	list<noCopyable> nocopies;
	typedef list<noCopyable>::reference Niter;

// no one push below works without copy __or move__ constructor
	nocopies.push_front(std::move(canCreate));
	nocopies.push_front(8);
	nocopies.push_front(9);
	cout << "nocopies formed." << endl;

	// print list
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){cout << i.getS() << ", "; } );
	cout << endl;

	// modify list
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){ i.setS(i.getS() + "+1"); } );

	// print list
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){cout << i.getS() << ", ";});
	cout << endl;

	// Part2. Copy list. need copy constructor && assignment op
	list<noCopyable> nc2;
	nc2.assign(nocopies.begin(), nocopies.end());
	// print list1
	for_each(nocopies.begin(), nocopies.end(), [](Niter i){cout << i.getS() << ", ";});
	cout << endl;
	// print list2
	for_each(nc2.begin(), nc2.end(), [](Niter i){cout << i.getS() << ", ";});
	cout << endl;
		
	return 0;
}


вывод
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
>gcc -std=c++11 nocopySTL.cpp -lstdc++
>a.exe
3, 2, 1,
Moved noCopyable..
Moved noCopyable..
Moved noCopyable..
nocopies formed.
9, 8, 7,
9+1, 8+1, 7+1,
Called noCopyable copiin
Called noCopyable copiin
Called noCopyable copiin
9+1, 8+1, 7+1,
9+1, 8+1, 7+1,

...
Рейтинг: 0 / 0
Пятничный бунт
    #39272195
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока из недовольных новыми фичами, а так понимаю, только те, кто не до конца разобрался в них.

std::move не костыль, а нормальное решение. я так понимаю, если точно знаешь, что есть такой конструктор, то можно написать вместо std::move(some) static_cast<some_type&&>(some). с помощью этой фукции ты обозначаешь место ,в котором ты хочешь переместить объект, что дальне ты его не будешь использовать, только уничтожишь. без этого по умолнчанию ты копируешь (и это логично). то есть это место все равно как-то нужно обозначить. конечно, компилятор может и сам догадаться иногда, но лучше если ты имеешь способ явно это обозначить.

можно пример когда применение шаблона замедляет рантайм.

на счет примера с return 42, то всегда, и без шаблонов, можно нагородить кучу кода, чтобы сделать что-нибудь простое. это как бы... шаблоны тут не причем.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272227
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ого, пока писал перевалило на следующюю страницу:)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272242
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexy_blackпока из недовольных новыми фичами, а так понимаю, только те, кто не до конца разобрался в них.

std::move не костыль, а нормальное решение. я так понимаю, если точно знаешь, что есть такой конструктор, то можно написать вместо std::move(some) static_cast<some_type&&>(some). с помощью этой фукции ты обозначаешь место , в котором ты хочешь переместить объект ,


Зачем ?

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


Тем более зачем кудато перемещать обьект перед удалением?

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


Я вобще не понимаю,
вы говорите о менеджере витуальной памяти
и перетягиваете на себя одеяло у расработчиков ОС,
или о жонглировании сылками и указателями...
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272437
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kЗачем ?
Тем более зачем кудато перемещать обьект перед удалением?

Затем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.

Но можешь этого и не делать, а копировать, как и раньше, никто не запрещает. Просто если хочется сделать move, теперь это возможно.

д0kЯ вобще не понимаю,
вы говорите о менеджере витуальной памяти
и перетягиваете на себя одеяло у расработчиков ОС,
или о жонглировании сылками и указателями...
Мы говорим о более широких возможностях работы с объектами, виртуальная память тут ни при чём.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272469
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMbд0kЗачем ?
Тем более зачем кудато перемещать обьект перед удалением?

Затем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.

Но можешь этого и не делать, а копировать, как и раньше, никто не запрещает. Просто если хочется сделать move, теперь это возможно.

д0kЯ вобще не понимаю,
вы говорите о менеджере витуальной памяти
и перетягиваете на себя одеяло у расработчиков ОС,
или о жонглировании сылками и указателями...
Мы говорим о более широких возможностях работы с объектами, виртуальная память тут ни при чём.


Я не понимаю вашей парадигмы написания кода на С++.

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

вот что в моей парадигме значит мувить.....

Парадигма std::move еще больше повышает планку на старт вхождения в ЯП,
что снижает количество его носителей и ареал комерческого применения.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272489
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kВ моей парадигме мувить обьекты значит дефрагментировать память,
это системная операция по оптимизации использваония ресурсов.
Я также понял как CEMb:
CEMbЗатем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.
Суть в том чтобы оптимизировать код когда создается объект, тут же копируется (например при помещении его в STL контейнер) и оригинал более не используется, т.е. объект сразу создается в контейнере и мы избавляемся от этого лишнего копирования.

Я тут прочитал
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272499
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tд0kВ моей парадигме мувить обьекты значит дефрагментировать память,
это системная операция по оптимизации использваония ресурсов.
Я также понял как CEMb:
CEMbЗатем, что если ты не хочешь копировать, а переместить объект. И не удалять его после копирования переноса. Т.о. не перед удалением, а вместо удаления.
Суть в том чтобы оптимизировать код когда создается объект, тут же копируется (например при помещении его в STL контейнер) и оригинал более не используется, т.е. объект сразу создается в контейнере и мы избавляемся от этого лишнего копирования.

Я тут прочитал

Вариантов то всего 2.100500

1. передача через стек в алокатор контейнера . (Описанный вами случай)
2. Хранение в контейнере сслыки обьекта находящегося на куче.
2.100500. Велосипеды с меморимапед файлами и разделяемой памятью.


Какой % случаев гарантированно покрывает std::move ?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272509
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
19396698

Джоэл СполскиВсе нетривиальные абстракции дырявы


поведения std::move нельзя назвать тривильаным...
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272510
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kКакой % случаев гарантированно покрывает std::move ?
"перемещение" не очень удачный термин, вводит в заблуждение, память ведь не ящики на складе, где можно ящик на другую полку переместить.
http://www.ozon.ru/context/detail/id/34747131/ 5.1. Азы std::move и std::forward

Полезно подойти к std::move и std::forward с точки зрения того, чего они не делают. std::move ничего не перемещает. std::forward ничего не передает. Во время выполнения они не делают вообще ничего. Они не генерируют выполнимый код - ни одного байта. std::move и std::forward являются всего лишь функциями (на самом деле - шаблонами функций), которые выполняют приведения. std::move выполняет безусловное приведение своего аргумента к rvalue, в то время как std::forward выполняет приведение только при соблюдении определенных условий. Это все. Пояснения приводят к новому множеству вопросов, но, по сути, история на этом завершена.
...
Т.е. суть в том что по возможности объект сразу создается там где будет жить, по невозможности - создание на стэке и копирование.
Почитай книжку, хорошо написано, я не настолько силен в плюсах чтобы связно повторить.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272525
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kКакой % случаев гарантированно покрывает std::move ?
std::move разрешает компилятору считать явно объявленную переменную временной (чье значение программисту не интересно больше).
Это компайл-тайм директива, позволяющая компилятору проводить более глубокую оптимизацию, за счет замены копирования на перемещение, там где это копирование было бы без этой директивы, потому что компилятор не всегда может отследить что переменная больше не используется в коде.
Что тут не понятно-то?
Причем тут эти ваши аллокаторы и прочая виртуальная память?

Если такие элементарные вещи по-вашему поднимают порог вхождения в С++, то может не мучаться и заняться чем-то другим, ну там на бейсике что-ли писать?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272536
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, всё Димыч. Пора нам с тобой на пенсию.

Или в дев-опсы. А?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272578
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovskyд0kКакой % случаев гарантированно покрывает std::move ?
std::move разрешает компилятору считать явно объявленную переменную временной (чье значение программисту не интересно больше).
Это компайл-тайм директива, позволяющая компилятору проводить более глубокую оптимизацию, за счет замены копирования на перемещение, там где это копирование было бы без этой директивы, потому что компилятор не всегда может отследить что переменная больше не используется в коде.
Что тут не понятно-то?
Причем тут эти ваши аллокаторы и прочая виртуальная память?

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

Для меня элементарными вещами есть чистоплотность работы
и областями видимости.
Основопологающий принципы языка С++

обьявление - есть инициализация, выход из области видимости - деинициализация.

При соблюдиии этого фундаментального правила
я не вижу надобности std::move и прочих
абстрактных фильтраторах мусора.
Чисто не там где убирают , а там где не сорят.

Сваливание в кучу всего с перекладыванием отвественности
на компилятор , типа пусть от области видимости отслеживает
ничем хорошим для проекта на С++ не закончится , инфа сотка... :)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272597
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kПри соблюдиии этого фундаментального правила
я не вижу надобности std::move и прочих
Если нет надобности в оптимизациях, то зачем вам вообще С++?

д0kЧисто не там где убирают , а там где не сорят.
Нет. Чисто там где убирают.
Но к std::move мусор не имеет отношения.
Когда вы вводите переменную - это не бросание мусора, а наоборот повышение читаемости кода.
В хорошем коде очень часто промежуточные значения записываются в переменные, вместо того чтобы нагромождать все в одно гигантское выражение. А часто алгоритм явно предусматривает цепочку действий над переменной, тогда отказаться от переменной нельзя без усложнения алгоритма.
Для тех кто не хочет жертвовать производительностью ради читаемости и простоты алгоритма, и предназначен std::move.

Но вы судя по всему пока так и не поняли что он делает, так что думаю обсуждать нужен ли он пока нет смысла ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272610
д0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyНо вы судя по всему пока так и не поняли что он делает, так что думаю обсуждать нужен ли он пока нет смысла ))

Я не понял или пропустил , когда в С++ было введено
использованное Вами выше понятие временной переменной...

Это шо за термин такой, кто определяет время ее жизни ?
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272617
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
д0kЯ не понял или пропустил , когда в С++ было введено
использованное Вами выше понятие временной переменной...

Это шо за термин такой, кто определяет время ее жизни ?
Этот термин я использовал чтобы не повышать порог вхождения в этот топик )))
Впрочем сам термин "temporary object" естественно описан в стандарте С++ с незапамятных времен. См. п.12.2 стандарта С++ (любого).
А вы если действительно хотите разобраться, то читайте про rvalue (с практической точки зрения это почти аналог temporary)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272686
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima T, всё Димыч. Пора нам с тобой на пенсию.
Не, мне не пора. Хотя денег больше чем достаточно и был жизненный план в 40 уйти на пенсию, уже почти 40, но пока морально не готов. Дети вырастут (это еще 10-15 лет) и тогда брошу все нах и займусь садоводством где-нибудь в южной части страны (КавМинВоды очень нравятся). Жена уже занялась садоводством, не успеваем съедать урожаи гороха
Так что пока изучаю всякую хрень неизученную ранее от C# до генерации primes такая вот развлекуха
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272718
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyд0kКакой % случаев гарантированно покрывает std::move ?
std::move разрешает компилятору считать явно объявленную переменную временной (чье значение программисту не интересно больше).
Это компайл-тайм директива, позволяющая компилятору проводить более глубокую оптимизацию, за счет замены копирования на перемещение, там где это копирование было бы без этой директивы, потому что компилятор не всегда может отследить что переменная больше не используется в коде.
Что тут не понятно-то?
...Ну не совсем так просто. Заглянем в душу

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include <utility>
#include <string>
using namespace std;

class A {
	string member;
public:
	A(): member("Dory"){};
	A(A&& arg); 	// Simple move assignment operator
	A(A& arg); 	// copy
	A& operator=(A&& other);
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
{} 

A::A(A& arg): member(arg.member) // cpy
{} 

A& A::operator=(A&& other) 
{
   	member = std::move(other.member);
   	return *this;
}

void fingingDory()
{
	A dory; 
	A copydory(dory);
}



Результат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
std_move.o:     file format pe-i386


Disassembly of section .text:

00000000 <__ZN1AC1EOS_>:
	A(A&& arg); 	// Simple move assignment operator
	A(A& arg); 	// copy
	A& operator=(A&& other);
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
   3:	83 ec 28             	sub    esp,0x28
   6:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
   9:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
   c:	89 04 24             	mov    DWORD PTR [esp],eax
   f:	e8 00 00 00 00       	call   14 <__ZN1AC1EOS_+0x14>
  14:	89 c2                	mov    edx,eax
  16:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  19:	89 14 24             	mov    DWORD PTR [esp],edx
  1c:	89 c1                	mov    ecx,eax
  1e:	e8 00 00 00 00       	call   23 <__ZN1AC1EOS_+0x23>
  23:	83 ec 04             	sub    esp,0x4
{} 
  26:	c9                   	leave  
  27:	c2 04 00             	ret    0x4

0000002a <__ZN1AC1ERS_>:

A::A(A& arg): member(arg.member) // cpy
  2a:	55                   	push   ebp
  2b:	89 e5                	mov    ebp,esp
  2d:	83 ec 28             	sub    esp,0x28
  30:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
  33:	8b 55 08             	mov    edx,DWORD PTR [ebp+0x8]
  36:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  39:	89 14 24             	mov    DWORD PTR [esp],edx
  3c:	89 c1                	mov    ecx,eax
  3e:	e8 00 00 00 00       	call   43 <__ZN1AC1ERS_+0x19>
  43:	83 ec 04             	sub    esp,0x4
{} 
  46:	c9                   	leave  
  47:	c2 04 00             	ret    0x4

0000004a <__ZN1AaSEOS_>:

A& A::operator=(A&& other) 
{
  4a:	55                   	push   ebp
  4b:	89 e5                	mov    ebp,esp
  4d:	83 ec 28             	sub    esp,0x28
  50:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
   	member = std::move(other.member);
  53:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
  56:	89 04 24             	mov    DWORD PTR [esp],eax
  59:	e8 00 00 00 00       	call   5e <__ZN1AaSEOS_+0x14>
  5e:	89 c2                	mov    edx,eax
  60:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
  63:	89 14 24             	mov    DWORD PTR [esp],edx
  66:	89 c1                	mov    ecx,eax
  68:	e8 00 00 00 00       	call   6d <__ZN1AaSEOS_+0x23>
  6d:	83 ec 04             	sub    esp,0x4
   	return *this;
  70:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
}
  73:	c9                   	leave  
  74:	c2 04 00             	ret    0x4

00000077 <__Z11fingingDoryv>:

void fingingDory()
{
  77:	55                   	push   ebp
  78:	89 e5                	mov    ebp,esp
  7a:	57                   	push   edi
  7b:	56                   	push   esi
  7c:	53                   	push   ebx
  7d:	83 ec 6c             	sub    esp,0x6c
  80:	c7 45 bc 00 00 00 00 	mov    DWORD PTR [ebp-0x44],0x0
  87:	c7 45 c0 06 00 00 00 	mov    DWORD PTR [ebp-0x40],0x6
  8e:	8d 45 c4             	lea    eax,[ebp-0x3c]
  91:	8d 5d e8             	lea    ebx,[ebp-0x18]
  94:	89 18                	mov    DWORD PTR [eax],ebx
  96:	ba ed 00 00 00       	mov    edx,0xed
  9b:	89 50 04             	mov    DWORD PTR [eax+0x4],edx
  9e:	89 60 08             	mov    DWORD PTR [eax+0x8],esp
  a1:	8d 45 a4             	lea    eax,[ebp-0x5c]
  a4:	89 04 24             	mov    DWORD PTR [esp],eax
  a7:	e8 00 00 00 00       	call   ac <__Z11fingingDoryv+0x35>
	A dory; 
  ac:	8d 45 e4             	lea    eax,[ebp-0x1c]
  af:	c7 45 a8 ff ff ff ff 	mov    DWORD PTR [ebp-0x58],0xffffffff
  b6:	89 c1                	mov    ecx,eax
  b8:	e8 00 00 00 00       	call   bd <__Z11fingingDoryv+0x46>
	A copydory(dory);
  bd:	8d 45 e0             	lea    eax,[ebp-0x20]
  c0:	8d 55 e4             	lea    edx,[ebp-0x1c]
  c3:	89 14 24             	mov    DWORD PTR [esp],edx
  c6:	c7 45 a8 01 00 00 00 	mov    DWORD PTR [ebp-0x58],0x1
  cd:	89 c1                	mov    ecx,eax
  cf:	e8 56 ff ff ff       	call   2a <__ZN1AC1ERS_>
  d4:	83 ec 04             	sub    esp,0x4
  d7:	8d 45 e0             	lea    eax,[ebp-0x20]
  da:	89 c1                	mov    ecx,eax
  dc:	e8 00 00 00 00       	call   e1 <__Z11fingingDoryv+0x6a>
  e1:	8d 45 e4             	lea    eax,[ebp-0x1c]
  e4:	89 c1                	mov    ecx,eax
  e6:	e8 00 00 00 00       	call   eb <__Z11fingingDoryv+0x74>
  eb:	eb 25                	jmp    112 <__Z11fingingDoryv+0x9b>
  ed:	8d 6d 18             	lea    ebp,[ebp+0x18]
  f0:	8b 45 ac             	mov    eax,DWORD PTR [ebp-0x54]
  f3:	89 45 a0             	mov    DWORD PTR [ebp-0x60],eax
  f6:	8d 45 e4             	lea    eax,[ebp-0x1c]
  f9:	89 c1                	mov    ecx,eax
  fb:	e8 00 00 00 00       	call   100 <__Z11fingingDoryv+0x89>
 100:	8b 45 a0             	mov    eax,DWORD PTR [ebp-0x60]
 103:	89 04 24             	mov    DWORD PTR [esp],eax
 106:	c7 45 a8 ff ff ff ff 	mov    DWORD PTR [ebp-0x58],0xffffffff
 10d:	e8 00 00 00 00       	call   112 <__Z11fingingDoryv+0x9b>
 112:	8d 45 a4             	lea    eax,[ebp-0x5c]
 115:	89 04 24             	mov    DWORD PTR [esp],eax
 118:	e8 00 00 00 00       	call   11d <__Z11fingingDoryv+0xa6>
 11d:	8d 65 f4             	lea    esp,[ebp-0xc]
 120:	5b                   	pop    ebx
 121:	5e                   	pop    esi
 122:	5f                   	pop    edi
 123:	5d                   	pop    ebp
 124:	c3                   	ret    
 125:	90                   	nop
 126:	90                   	nop
 127:	90                   	nop

Disassembly of section .text$_ZN1AC1Ev:

00000000 <__ZN1AC1Ev>:
using namespace std;

class A {
	string member;
public:
	A(): member("Dory"){};
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
   3:	57                   	push   edi
   4:	56                   	push   esi
   5:	53                   	push   ebx
   6:	83 ec 6c             	sub    esp,0x6c
   9:	89 4d d4             	mov    DWORD PTR [ebp-0x2c],ecx
   c:	c7 45 b8 00 00 00 00 	mov    DWORD PTR [ebp-0x48],0x0
  13:	c7 45 bc 00 00 00 00 	mov    DWORD PTR [ebp-0x44],0x0
  1a:	8d 45 c0             	lea    eax,[ebp-0x40]
  1d:	8d 5d e8             	lea    ebx,[ebp-0x18]
  20:	89 18                	mov    DWORD PTR [eax],ebx
  22:	ba 70 00 00 00       	mov    edx,0x70
  27:	89 50 04             	mov    DWORD PTR [eax+0x4],edx
  2a:	89 60 08             	mov    DWORD PTR [eax+0x8],esp
  2d:	8d 45 a0             	lea    eax,[ebp-0x60]
  30:	89 04 24             	mov    DWORD PTR [esp],eax
  33:	e8 00 00 00 00       	call   38 <__ZN1AC1Ev+0x38>
  38:	8d 45 e7             	lea    eax,[ebp-0x19]
  3b:	89 c1                	mov    ecx,eax
  3d:	e8 00 00 00 00       	call   42 <__ZN1AC1Ev+0x42>
  42:	8b 45 d4             	mov    eax,DWORD PTR [ebp-0x2c]
  45:	8d 55 e7             	lea    edx,[ebp-0x19]
  48:	89 54 24 04          	mov    DWORD PTR [esp+0x4],edx
  4c:	c7 04 24 01 00 00 00 	mov    DWORD PTR [esp],0x1
  53:	c7 45 a4 01 00 00 00 	mov    DWORD PTR [ebp-0x5c],0x1
  5a:	89 c1                	mov    ecx,eax
  5c:	e8 00 00 00 00       	call   61 <__ZN1AC1Ev+0x61>
  61:	83 ec 08             	sub    esp,0x8
  64:	8d 45 e7             	lea    eax,[ebp-0x19]
  67:	89 c1                	mov    ecx,eax
  69:	e8 00 00 00 00       	call   6e <__ZN1AC1Ev+0x6e>
  6e:	eb 25                	jmp    95 <__ZN1AC1Ev+0x95>
  70:	8d 6d 18             	lea    ebp,[ebp+0x18]
  73:	8b 45 a8             	mov    eax,DWORD PTR [ebp-0x58]
  76:	89 45 9c             	mov    DWORD PTR [ebp-0x64],eax
  79:	8d 45 e7             	lea    eax,[ebp-0x19]
  7c:	89 c1                	mov    ecx,eax
  7e:	e8 00 00 00 00       	call   83 <__ZN1AC1Ev+0x83>
  83:	8b 45 9c             	mov    eax,DWORD PTR [ebp-0x64]
  86:	89 04 24             	mov    DWORD PTR [esp],eax
  89:	c7 45 a4 ff ff ff ff 	mov    DWORD PTR [ebp-0x5c],0xffffffff
  90:	e8 00 00 00 00       	call   95 <__ZN1AC1Ev+0x95>
  95:	8d 45 a0             	lea    eax,[ebp-0x60]
  98:	89 04 24             	mov    DWORD PTR [esp],eax
  9b:	e8 00 00 00 00       	call   a0 <__ZN1AC1Ev+0xa0>
  a0:	8d 65 f4             	lea    esp,[ebp-0xc]
  a3:	5b                   	pop    ebx
  a4:	5e                   	pop    esi
  a5:	5f                   	pop    edi
  a6:	5d                   	pop    ebp
  a7:	c3                   	ret    

Disassembly of section .text$_ZSt4moveIRSsEONSt16remove_referenceIT_E4typeEOS2_:

00000000 <__ZSt4moveIRSsEONSt16remove_referenceIT_E4typeEOS2_>:
   *  @param  __t  A thing of arbitrary type.
   *  @return The parameter cast to an rvalue-reference to allow moving it.
  */
  template<typename _Tp>
    constexpr typename std::remove_reference<_Tp>::type&&
    move(_Tp&& __t) noexcept
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
    { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
   3:	8b 45 08             	mov    eax,DWORD PTR [ebp+0x8]
   6:	5d                   	pop    ebp
   7:	c3                   	ret    

Disassembly of section .text$_ZN1AD1Ev:

00000000 <__ZN1AD1Ev>:
#include <utility>
#include <string>
using namespace std;

class A {
   0:	55                   	push   ebp
   1:	89 e5                	mov    ebp,esp
   3:	83 ec 18             	sub    esp,0x18
   6:	89 4d f4             	mov    DWORD PTR [ebp-0xc],ecx
   9:	8b 45 f4             	mov    eax,DWORD PTR [ebp-0xc]
   c:	89 c1                	mov    ecx,eax
   e:	e8 00 00 00 00       	call   13 <__ZN1AD1Ev+0x13>
  13:	c9                   	leave  
  14:	c3                   	ret    
  15:	90                   	nop
  16:	90                   	nop
  17:	90                   	nop



Что показывает, что конструктор копирования и конструктор перемещения не особо то отличаются. И в целом, шаблонная математика suxx
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272720
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не желая пугать неокрепшие умы, я не буду выкладывать оптимизированный код.

Поверьте мне на слово, на чистом С этот пример в десяток раз будет короче.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272723
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТак что пока изучаю всякую хрень неизученную ранее от C# до генерации primes такая вот развлекуха
Давай курить архитектуры HighLoad MMORPG игрух в вебе. Там есть весь спектр задач.

Мне вот щас нужен мультиплексированный I/O. Без него сервер невзлетит.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272726
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЧто показывает, что конструктор копирования и конструктор перемещения не особо то отличаются. И в целом, шаблонная математика suxx
Это скомпилировано надеюсь с -O3 ? )))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272727
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglПоверьте мне на слово, на чистом С этот пример в десяток раз будет короче.
Особенно хочу посмотреть, как будет короче работа с динамическими строками в С, и надежнее еще наверно
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272745
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySiemarglЧто показывает, что конструктор копирования и конструктор перемещения не особо то отличаются. И в целом, шаблонная математика suxx
Это скомпилировано надеюсь с -O3 ? )))


Особенно хочу посмотреть, как будет короче работа с динамическими строками в С, и надежнее еще наверно
Нет, это плейн компиляция.

С -О3 gcc все еще не умеет компилировать (уже лет 8 как).

Короче будет, надежней не будет.

Хочешь повозмущаться - делай конрпримеры.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272748
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglХочешь повозмущаться - делай конрпримеры.
Не вижу ни единой причины тратить время на обсуждение машинного кода сгенеренного без оптимизации.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39272759
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПора нам с тобой на пенсию.

Человек, написавший over 30000 постов, должен был уже успеть сходить на пенсию 3-4 раза
"вот и старость прошла" (с)

SiemarglПоверьте мне на слово, на чистом С этот пример в десяток раз будет короче.
Не хочу верить на слово, хочу посмотреть код. Ведь было время я писал, программы в машинных кодах на сях, сехх тогда ещё не было.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39273284
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySiemarglХочешь повозмущаться - делай конрпримеры.
Не вижу ни единой причины тратить время на обсуждение машинного кода сгенеренного без оптимизации.Изначальный пойнт топика был в том, что неочевиден результат кода.
Оптимизатор это только костыль, и после него вообще хрен пойми что получается
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
00401340 <__ZN1AC1EOS_>:
	A(A& arg); 	// copy
	A& operator=(A&& other);
	void modify();
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
  401340:	53                   	push   ebx
  401341:	83 ec 28             	sub    esp,0x28
  401344:	8b 5c 24 30          	mov    ebx,DWORD PTR [esp+0x30]
	_CharT*
	_M_clone(const _Alloc&, size_type __res = 0);
      };

      // Use empty-base optimization: http://www.cantrip.org/emptyopt.html
      struct _Alloc_hider : _Alloc
  401348:	8b 03                	mov    eax,DWORD PTR [ebx]
      : _M_dataplus(__str._M_dataplus)
      {
#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
	__str._M_data(_S_empty_rep()._M_refdata());
#else
	__str._M_data(_S_construct(size_type(), _CharT(), get_allocator()));
  40134a:	c7 44 24 04 00 00 00 	mov    DWORD PTR [esp+0x4],0x0
  401351:	00 
  401352:	c7 04 24 00 00 00 00 	mov    DWORD PTR [esp],0x0
	_CharT*
	_M_clone(const _Alloc&, size_type __res = 0);
      };

      // Use empty-base optimization: http://www.cantrip.org/emptyopt.html
      struct _Alloc_hider : _Alloc
  401359:	89 01                	mov    DWORD PTR [ecx],eax
      : _M_dataplus(__str._M_dataplus)
      {
#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0
	__str._M_data(_S_empty_rep()._M_refdata());
#else
	__str._M_data(_S_construct(size_type(), _CharT(), get_allocator()));
  40135b:	8d 44 24 1f          	lea    eax,[esp+0x1f]
  40135f:	89 44 24 08          	mov    DWORD PTR [esp+0x8],eax
  401363:	e8 a0 01 00 00       	call   401508 <__ZNSs12_S_constructEjcRKSaIcE>
      _M_data() const _GLIBCXX_NOEXCEPT
      { return  _M_dataplus._M_p; }

      _CharT*
      _M_data(_CharT* __p) _GLIBCXX_NOEXCEPT
      { return (_M_dataplus._M_p = __p); }
  401368:	89 03                	mov    DWORD PTR [ebx],eax
{} 
  40136a:	83 c4 28             	add    esp,0x28
  40136d:	5b                   	pop    ebx
  40136e:	c2 04 00             	ret    0x4
  401371:	90                   	nop
  401372:	8d b4 26 00 00 00 00 	lea    esi,[esi+eiz*1+0x0]
  401379:	8d bc 27 00 00 00 00 	lea    edi,[edi+eiz*1+0x0]

00401380 <__ZN1AC1ERS_>:

A::A(A& arg): member(arg.member) // cpy
  401380:	55                   	push   ebp
  401381:	89 e5                	mov    ebp,esp
{} 
  401383:	c9                   	leave  
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
{} 

A::A(A& arg): member(arg.member) // cpy
  401384:	e9 87 01 00 00       	jmp    401510 <__ZNSsC1ERKSs>
  401389:	90                   	nop
  40138a:	8d b6 00 00 00 00    	lea    esi,[esi+0x0]

00401390 <__ZN1AaSEOS_>:
{} 

A& A::operator=(A&& other) 
{
  401390:	53                   	push   ebx
  401391:	89 cb                	mov    ebx,ecx
  401393:	83 ec 18             	sub    esp,0x18
      // PR 58265, this should be noexcept.
      basic_string&
      operator=(basic_string&& __str)
      {
	// NB: DR 1204.
	this->swap(__str);
  401396:	8b 44 24 20          	mov    eax,DWORD PTR [esp+0x20]
  40139a:	89 04 24             	mov    DWORD PTR [esp],eax
  40139d:	e8 76 01 00 00       	call   401518 <__ZNSs4swapERSs>
  4013a2:	83 ec 04             	sub    esp,0x4
   	member = std::move(other.member);
   	return *this;
}
  4013a5:	89 d8                	mov    eax,ebx
  4013a7:	83 c4 18             	add    esp,0x18
  4013aa:	5b                   	pop    ebx
  4013ab:	c2 04 00             	ret    0x4
  4013ae:	66 90                	xchg   ax,ax

004013b0 <__ZN1A6modifyEv>:

void A::modify()
{
  4013b0:	83 ec 1c             	sub    esp,0x1c
       */
      basic_string&
      append(const _CharT* __s)
      {
	__glibcxx_requires_string(__s);
	return this->append(__s, traits_type::length(__s));
  4013b3:	c7 44 24 04 01 00 00 	mov    DWORD PTR [esp+0x4],0x1
  4013ba:	00 
  4013bb:	c7 04 24 24 c0 40 00 	mov    DWORD PTR [esp],0x40c024
  4013c2:	e8 59 01 00 00       	call   401520 <__ZNSs6appendEPKcj>
  4013c7:	83 ec 08             	sub    esp,0x8
	member += "1";
}
  4013ca:	83 c4 1c             	add    esp,0x1c
  4013cd:	c3                   	ret    
  4013ce:	66 90                	xchg   ax,ax

004013d0 <__Z11fingingDoryv>:

A* fingingDory()
{
  4013d0:	55                   	push   ebp
  4013d1:	89 e5                	mov    ebp,esp
  4013d3:	83 ec 68             	sub    esp,0x68
  4013d6:	8d 45 f8             	lea    eax,[ebp-0x8]
  4013d9:	89 65 dc             	mov    DWORD PTR [ebp-0x24],esp
  4013dc:	c7 45 cc 00 15 40 00 	mov    DWORD PTR [ebp-0x34],0x401500
  4013e3:	c7 45 d0 14 aa 40 00 	mov    DWORD PTR [ebp-0x30],0x40aa14
  4013ea:	c7 45 d8 b1 14 40 00 	mov    DWORD PTR [ebp-0x28],0x4014b1
  4013f1:	89 45 d4             	mov    DWORD PTR [ebp-0x2c],eax
  4013f4:	8d 45 b4             	lea    eax,[ebp-0x4c]
  4013f7:	89 04 24             	mov    DWORD PTR [esp],eax
  4013fa:	e8 71 0f 00 00       	call   402370 <__Unwind_SjLj_Register>
using namespace std;

class A {
	string member;
public:
	A(): member("Dory"){};
  4013ff:	8d 45 f3             	lea    eax,[ebp-0xd]
  401402:	8d 4d f4             	lea    ecx,[ebp-0xc]
  401405:	c7 04 24 26 c0 40 00 	mov    DWORD PTR [esp],0x40c026
  40140c:	89 44 24 04          	mov    DWORD PTR [esp+0x4],eax
  401410:	c7 45 b8 ff ff ff ff 	mov    DWORD PTR [ebp-0x48],0xffffffff
  401417:	e8 0c 01 00 00       	call   401528 <__ZNSsC1EPKcRKSaIcE>
  40141c:	8d 4d f4             	lea    ecx,[ebp-0xc]
  40141f:	83 ec 08             	sub    esp,0x8
  401422:	c7 44 24 04 01 00 00 	mov    DWORD PTR [esp+0x4],0x1
  401429:	00 
  40142a:	c7 04 24 24 c0 40 00 	mov    DWORD PTR [esp],0x40c024
  401431:	c7 45 b8 01 00 00 00 	mov    DWORD PTR [ebp-0x48],0x1
  401438:	e8 e3 00 00 00       	call   401520 <__ZNSs6appendEPKcj>
  40143d:	83 ec 08             	sub    esp,0x8

A* fingingDory()
{
	A dory; 
	dory.modify();
	A *copydory = new A(dory);
  401440:	c7 04 24 04 00 00 00 	mov    DWORD PTR [esp],0x4
  401447:	e8 e4 00 00 00       	call   401530 <__Znwj>
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
{} 

A::A(A& arg): member(arg.member) // cpy
  40144c:	8d 55 f4             	lea    edx,[ebp-0xc]

A* fingingDory()
{
	A dory; 
	dory.modify();
	A *copydory = new A(dory);
  40144f:	89 45 b0             	mov    DWORD PTR [ebp-0x50],eax
};

A::A(A&& arg): member(std::move(arg.member)) // the expression "arg.member" is lvalue
{} 

A::A(A& arg): member(arg.member) // cpy
  401452:	89 c1                	mov    ecx,eax
  401454:	89 14 24             	mov    DWORD PTR [esp],edx
  401457:	c7 45 b8 02 00 00 00 	mov    DWORD PTR [ebp-0x48],0x2
  40145e:	e8 ad 00 00 00       	call   401510 <__ZNSsC1ERKSs>
      // Data Members (private):
      mutable _Alloc_hider	_M_dataplus;

      _CharT*
      _M_data() const _GLIBCXX_NOEXCEPT
      { return  _M_dataplus._M_p; }
  401463:	8b 4d f4             	mov    ecx,DWORD PTR [ebp-0xc]
  401466:	83 ec 04             	sub    esp,0x4
  // __exchange_and_add_dispatch
  // __atomic_add_dispatch
#ifdef _GLIBCXX_ATOMIC_BUILTINS
  static inline _Atomic_word 
  __exchange_and_add(volatile _Atomic_word* __mem, int __val)
  { return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
  401469:	b8 ff ff ff ff       	mov    eax,0xffffffff
  40146e:	f0 0f c1 41 fc       	lock xadd DWORD PTR [ecx-0x4],eax
	  if (__builtin_expect(this != &_S_empty_rep(), false))
#endif
	    {
	      // Be race-detector-friendly.  For more info see bits/c++config.
	      _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
	      if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount,
  401473:	85 c0                	test   eax,eax
  401475:	7e 19                	jle    401490 <__Z11fingingDoryv+0xc0>
  401477:	8d 45 b4             	lea    eax,[ebp-0x4c]
  40147a:	89 04 24             	mov    DWORD PTR [esp],eax
  40147d:	e8 5e 10 00 00       	call   4024e0 <__Unwind_SjLj_Unregister>
{
	A dory; 
	dory.modify();
	A *copydory = new A(dory);
	return 	copydory;
}
  401482:	8b 45 b0             	mov    eax,DWORD PTR [ebp-0x50]
  401485:	c9                   	leave  
  401486:	c3                   	ret    

...
Рейтинг: 0 / 0
Пятничный бунт
    #39273326
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglИзначальный пойнт топика был в том, что неочевиден результат кода.
Оптимизатор это только костыль, и после него вообще хрен пойми что получается
А нечего лезть в машинный код, не проведя профилирование.
Считаете себя умнее компилятора? Ну может в таком тривиально примере как вы выше привели вы и сможете на пару процентов более быстрый код написать, но в реально сложных задачах, где имеет смысл применять С++ - никогда.

Кроме того большинство проблем производительности вызваны не качеством генерации кода, а медленным алгоритмом.

Поэтому нечего на С++ кивать коли руки кривые )))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39273450
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySiemarglИзначальный пойнт топика был в том, что неочевиден результат кода.
Оптимизатор это только костыль, и после него вообще хрен пойми что получается
....
Кроме того большинство проблем производительности вызваны не качеством генерации кода, а медленным алгоритмом.
...
Еще есть и третий фактор - скрытые накладные расходы библиотек, в т.ч. шаблонных
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274625
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyд0k,

Все в рамках темы ))

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

в смысле не существует? во всех областях всегда есть куча очень реальных альтернатив.
даже в области кодирования аппаратного обеспечения - есть куда более надежные и предсказуемые Erlang, ADA, да тот-же ANSI C, урезанный через MISRA.

зато есть куча областей, где C++ в принципе неадекватен - начиная от веб сайтов, заканчивая геймдевом в части написания скриптов поведения персонажей (там где "нормальная" практика линковки по 15 минут в принципе не приемлема для процесса разработки).
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274658
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyИначе бы при таком количестве ворчунов все они на эти альтернативы уже бы перешли.
Но вместо этого они ходят по С++ форумам и плачутся, как им трудно с С++

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

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

хотя тут-же понабегут тысячи чуваков, которые вложили многие годы в изучение вот этих самых хреней (stl, boost, jquery, список можно продолжить), и которых сама мысль о том, что их знания неактуальны и их нужно выбросить на помойку - повергает
в неосознанный панический ужас, потому они будут дежаться за свои заучивамые годами, но тормозные в рантайме и
максимально отдаленные от реальных задач бизнеса нагромождения до последнего, пока "the vast majority" не сделает их
маргиналами (возможно не при этой жизни).

что, впрочем, не отменяет монструозность и неадекватность этих самых хреней.
просто ты их выучил, и они у тебя не вызвали вопрос "а нафига так сложно?". ну так это просто ограничения твоего сознания, на самом деле - ты просто не можешь ответить на вопрос "а как можно сделать еще проще?"
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274755
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaпросто ты их выучил, и они у тебя не вызвали вопрос "а нафига так сложно?
Говоря про отсутствие альтернатив я как раз это и имел в виду.
Нет ничего проще. Все что предлагается - либо сложнее либо не все умеет.
Вот например С как альтернатива С++ меня вообще не устраивает, т.к. там нет деструкторов, методов, исключений (не только это конечно), и все попытки фанатиков С объяснить мне что я должен обходиться без этого вызывают у меня лишь желание вызвать им санитаров ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274769
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskynojavaпросто ты их выучил, и они у тебя не вызвали вопрос "а нафига так сложно?
Говоря про отсутствие альтернатив я как раз это и имел в виду.
Нет ничего проще. Все что предлагается - либо сложнее либо не все умеет.
Что именно подразумевается под всё? Всё что есть в природе и всё, что тебе нужно - это разные вещи.

Конкретика где?



Anatoly MoskovskyВот например С как альтернатива С++ меня вообще не устраивает, т.к. там нет деструкторов, методов, исключений (не только это конечно),
Опять юношеский максимализм. Иногда таки стоит детям почитать MISRA и подобное, чтоб осознать, что

а) динамическое управление памятью не нужно (а вот так - существуют только или вечноживущие объекты, или короткоживущие на стеке)
б) деструкторы не нужны в виду а)
в) исключения тоже не нужны, ибо это очердная форма goto, а так в мире есть process monitor и let it die модели, ничего лучше для надежности не придумано
г) ну и отсутствие методов порадовало, да. неимоверно

скажешь, может быть, чем

a->my_method()

отличается от

my_method(a)?

Anatoly Moskovskyи все попытки фанатиков С объяснить мне что я должен обходиться без этого вызывают у меня лишь желание вызвать им санитаров ))
отлично, ты когда перейдешь в лигу mission critical fail tolerant code, ты обязательно санитаров заранее пригласи, когда тебя начнут колеги из проекта выносить, после попытки запихать туда boost или stl :)
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274888
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaдинамическое управление памятью не нужно
Да, есть такой класс задач, где динамическая память не нужна.
Их примерно 0.0001% от рынка софта.
И мне абсолютно наплевать на эту часть рынка.

Дальше не читал, ибо проекция вашего небольшого мирка на весь софт никому не интересна.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274907
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskynojavaдинамическое управление памятью не нужно
Да, есть такой класс задач, где динамическая память не нужна.
Их примерно 0.0001% от рынка софта.
В web приложении не нужна динамическая память (оопс, да да - там нужен лишь аппендируемый контекст mmap()-еd ara, сделанный как стек).
В любом парсере не нужна динамическая память.
В библиотеке nosql баз данных - оопс, тоже не нужны malloc()/free()

забавно, да?

Anatoly MoskovskyИ мне абсолютно наплевать на эту часть рынка.
Ты серьезно думаешь, что кому-то не наплевать на то, на что там тебе плевать в силу ограниченности твоего мышления?

Anatoly MoskovskyДальше не читал, ибо проекция вашего небольшого мирка на весь софт никому не интересна.
У тебя кванторное размножение личности? Ну да, про санитаров же ты не зря упомянул...
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274909
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaТы серьезно думаешь, что кому-то не наплевать на то, на что там тебе плевать в силу ограниченности твоего мышления?
Разница в том, что это не я, а вы указываете другим на чем им писать программы ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274914
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskynojavaТы серьезно думаешь, что кому-то не наплевать на то, на что там тебе плевать в силу ограниченности твоего мышления?
Разница в том, что это не я, а вы указываете другим на чем им писать программы ))

я? вообще-то это ты задвигал, что дескать если тебе 40 лет и тебе трудно на C++, то ты занимаешься чем-то не тем.
19396461

бугага. продолжай в том-же духе, твое рефлективное мнение очень ценно для самодиагностики.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274922
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaя? вообще-то это ты задвигал, что дескать если тебе 40 лет и тебе трудно на C++, то ты занимаешься чем-то не тем.
19396461
И где здесь я говорю кому-то чем заниматься? Я там объясняю что причина трудностей с С++ не связана со старостью.
Но глядя на ваш случай, допускаю что был неправ ))
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274925
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskynojavaя? вообще-то это ты задвигал, что дескать если тебе 40 лет и тебе трудно на C++, то ты занимаешься чем-то не тем.
19396461
И где здесь я говорю кому-то чем заниматься? Я там объясняю что причина трудностей с С++ не связана со старостью.
Но глядя на ваш случай, допускаю что был неправ ))

ты там пытаешься объяснить человеку, чем ему не надо заниматься, этого вполне достаточно.

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

даже в Oracle такого нет - там можно стать продуктивным за примерно пару недель с нуля (прочитав листов 200), без риска разрушить цивилизацию, поставив не там запятую. и это - не смотря на 40 томов приложенной базовой документации.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274928
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bjarne Stroustrup C++11 feels like a new language
...
Рейтинг: 0 / 0
Пятничный бунт
    #39274952
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Прекращайте
...
Рейтинг: 0 / 0
Пятничный бунт
    #39275716
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskynojavaдинамическое управление памятью не нужно
Да, есть такой класс задач, где динамическая память не нужна.....
Она очень удобна, и многие вещи без нее просто не сделать.

Но неконтролируемое использование динамической памяти в STL - достаточно дорогое удовольствие.
Особенно если сравнивать со стеком.
Это немногим лучше того же GC.

Еще для меня было большим сюрпризом, что MSVC рантайм по умолчанию на _каждый_ malloc дергает системный вызов.
...
Рейтинг: 0 / 0
Пятничный бунт
    #39276238
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglAnatoly Moskovskyпропущено...

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


SiemarglНо неконтролируемое использование динамической памяти в STL - достаточно дорогое удовольствие.
А еще дорогим удовольствием являются exceptions, и .so/.dll с этими C++ ными mangling именами порой 1000 байт длиной, которые нужно связывать при старте.

SiemarglОсобенно если сравнивать со стеком.
Это немногим лучше того же GC.
в том-то и дело, что STL при ее архитектурных ограничениях не предполагает альтернативы.
если у тебя требование запрета на использование exceptions и dynamic heap (realtime системы, OpenCL, контроллеры и прочее) - то все это "богатство" просто летит в шредер, и "современный C++" превращается в C with objects, вся польза которого - это лишь namespace isolation.... который опять-же сделан предельно криво в случае .so/.dll - проблема строковых констант по 1000 байт длиной.

SiemarglЕще для меня было большим сюрпризом, что MSVC рантайм по умолчанию на _каждый_ malloc дергает системный вызов.
это известный баян, детей пугать разве. любой чуть более, чем на три файла проект довольно быстро приходит к замене не только стандартного malloc/free, но и new/delete
...
Рейтинг: 0 / 0
Пятничный бунт
    #39276303
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaапологетыапологет/аполосет
...
Рейтинг: 0 / 0
73 сообщений из 73, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничный бунт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]