Здравствуйте, Ikemefula, Вы писали:
EP>>>>Критично там где нужна производительность I>>>Назови такие приложения. EP>>CAD/CAE/CAM, web-браузеры, компиляторы, JIT, СУБД, обработка массивов данных(например c лидаров и т.п.), числодробилки, игры, low-latency processing, сервера, embedded, обработка видео/изображений/3D, распознавание образов, etc, etc, etc I>CAD/CAE/CAM это ты промахнулся, я таким больше 10 лет занимался, могу сам тебе рассказать чего к чему. С++ там в основном в силу исторических причин.
А я до сих пор занимаюсь — и как-то куда ни ткни везде лишняя производительность не помешает. Если выпускается какая-либо библиотека — то сначала API для C++, а остальное уже по мере расширения.
I>Игры — они разные, нынче все больше игр уходит в менеджед или подобные вещи. Скажем в ворлдофтанс вагоны питоновского кода в самом ядре.
Игры-то разные бывают, но там где зрелища производительность таки нужна, причём аппетит приходит во время еды.
Кстати, C++ для игр получается самым кроссплатформенным, ибо работает везде, даже в браузере, причём быстро: Unreal Engine 3 — Epic Citadel, using the full Unreal Engine 3 which was ported in 4 days..
I>embedded — здесь уже давно джава, дотнет и даже джаваскрипт I>Серверы — питон почему то используется в т.ч. Надо полагать просто так ?
А я где-то сказал что все серверы или всё embedded это C++?
I>Компиляторы — это мимо кассы, компилятор С# доказывает
M>>А подробнее? Что именно, "нормальный софтверный инженер", исключил бы из нововведений с++11?
MTD>Коллега, нашли кого спрашивать
Вот смотрите, коллега. Есть D. Mon, есть bazis1 со своими проектами и компаниями которые приносят им деньги. Еще есть ИТ со своим проектом (не знаю как там с монетизацией). Я понимаю как они мыслят (и с чем-то согласен, с чем-то нет) и для меня эти люди — профессионалы. А Вы чем можете похвастаться? Знанием стандарта С++ и никому ненужных фич? Ну что — поздравляю!
Здравствуйте, Олег К., Вы писали:
IT>>Не любят в основном те, кто в этом не смог разобраться. За это и не любят. ОК>Вар был введен для поддержки линка. Сейчас же вар лепят куда ни попадя что тоже не есть хорошо.
Что есть плохого в var?
... << RSDN@Home 1.2.0 alpha 5 rev. 69>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, gandjustas, Вы писали:
G>На C++ вообще-то да. Покажи как на C++ будет выглядеть программа, которая: по нажатию кнопки получает данные из сети, потом их обрабатывает, пишет в базу и отправляет в сеть. G>При этом обработка минимальная, а все остальное время программа должна спать. При этом надо отправку в сеть и запись в базу сделать параллельно. G>Ну и надо не забывать что пока эти пляски происходят пользователь может еще раз нажать кнопку отправки. G>Кстати желательно при всем этом не плодить сотни потоков.
Я заметил с этой недавней модой на асинхронность у многих программистов какую-то узость мышления. Почему-то всегда предполагается что возможны только две модели:
1. По потоку на запрос. И это вроде как не тянет серьёзные нагрузки.
2. Работаем в одном потоке асинхронно. Ну т.е. на практике то там на самом деле всё равно несколько потоков, просто оставшиеся не в нашем коде живут (или вообще системные).
А модель с несколькими своими потоками (с разным кодом каждый) почему-то все забыли. А ну да, при этом же потребуется продумать правильную стратегию доступа к памяти и прочие страаааашные вещи. ))) Так что лучше мы воспользуемся простеньким асинхронным способом, который худо-бедно даст средненькую производительность без напряга для мозгов. )))
I>Итого — функция которая асинхронно скачивает файлик, показывает его и дает возможность отменить скачивание. Всех библиотек можешь использовать только asio и мульку для скачивания.
Вообще не вижу в этом коде никаких завязок на язык. Такое можно сделать наверное в любом, с буквально таким же синтаксисом. Если говорить про C++, то для многопоточного варианта подобное вставили уже вообще в сам стандарт языка (async/future), если же хотим в одном потоке, то берём одну из множества библиотек реализующих сопроцедуры. Хотя слово "библиотека" тут даже слишком громкое — сопроцедуры можно реализовать в несколько сотен строк на большинстве языков программирования.
Здравствуйте, Олег К., Вы писали:
M>>Ты отстал от жизни. Почитай о rvalue references и move-семантике, прежде чем брызгнать слюной и показывать свою некомпетентность. ОК>Ну я же так и говорю! Кто-то читает книжки, а кто-то создает реальные проекты! Спрашивается, кто из них больший профессионал?
Ну о чем тут спорить что ты мне хочешь доказать, что на старом багаже можно далеко уехать? Увы, это миф. IT сфера развивается чрезвычайно интенсивно, хочешь быть востребованным разработчиком — учись, устал и нет запала — иди в менеджеры, управляй людьми.
офтопик:
Интересная статистика: из последних 10 с++ разработчиков, которых мне пришлось собеседовать, только 2 имели какие-то представления о новшествах с++11. С одной стороны Харьков все-таки переферия, с другой были среди них люди очень компетентные, с большим опытом и серьезными проектами за плечами. Вот мне непонятно откуда такая неосведомленность, что это: усталость от кодинга и нежелание делать что-то выходящее за рамки проектных задач или просто самоуверенность и убежденность, что лучшее решение уже найдено и ничего лучшего быть не может
IT>>>Не любят в основном те, кто в этом не смог разобраться. За это и не любят. ОК>>Вар был введен для поддержки линка. Сейчас же вар лепят куда ни попадя что тоже не есть хорошо.
IT>Что есть плохого в var?
Это дело вкуса, конечно же, но я не согласен с тем что его бездумно лепят где ни попадя и, надеюсь, ты не будешь отрицать для чего Майкрософт ввел вар в язык?
Вот нафига вар в таком коде?
var counter = 0;
// orfor (var i = 0; i < maxValue; i++)
Console.WriteLine(i);
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, MTD, Вы писали:
MTD>>Здравствуйте, gandjustas, Вы писали:
G>>>Я думаю что без потоков не как, а это жопа для масштабируемости.
MTD>>Во-первых, вариантов масса, например есть неблокируемый ввод-вывод, во-вторых потоки — жопа только для очень нагруженных приложений, уж чтение из COM-порта — эталон высокопроизводительных приложений на .Net (шучу, извини), в такие задачи точно не входит.
G>Так ты (или не только ты) же сам утверждаешь что C++ быстрее всего, а сам предлагаешь априори неэффективный по масштабируемости способ.
Почему потоки — это жопа для масштабируемости? Под масштабированием подразумевается запустить 1000000 копий одной программы на компьютере? ) Или же это у нас просто очередной пример мышления "если с потоками, то по одному на запрос"? )
M>>>Ты отстал от жизни. Почитай о rvalue references и move-семантике, прежде чем брызгнать слюной и показывать свою некомпетентность. ОК>>Ну я же так и говорю! Кто-то читает книжки, а кто-то создает реальные проекты! Спрашивается, кто из них больший профессионал?
А тебе сколько лет? Судя по технологиям в профиле ты должен понимать о чем я говорю.
M>Ну о чем тут спорить что ты мне хочешь доказать, что на старом багаже можно далеко уехать? Увы, это миф. IT сфера развивается чрезвычайно интенсивно, хочешь быть востребованным разработчиком — учись, устал и нет запала — иди в менеджеры, управляй людьми.
Я не отрицаю что развиваться всегда надо. У меня посыл в другом. Большинство программистов программируют ради программирования как такового а не для решения бизнес задач и я не считаю правильным когда программисты тащат в проект понравившиеся им технологии или фишки языка только для того чтобы их попробовать и/или поставить их на резюме.
Многие С++ программисты считают что пока они не прочтут всего Страуструпа, Саттера, Мейерса, Александреску, стандарт и что там еще — они не могут называть себя С++ программистами. Этого не нужно на самом деле и эти товарищи просто immature (о чем говорит тот же базис1) или то что нужно "вырастать из этой влюбленности в С++" и переходить на другой уровень, другие языки которые позволяют сконцентрироваться на насущих задачах а не бороться с самим языком, тратя годы на прочтение этой макулатуры (и ИТ и я говорим об этом). Ну и плюс заучить стандарт несложно, хотя затратно по времени. Гораздо сложнее создать работающий проект (да еще так, чтобы его потом покупали).
M>офтопик: M>Интересная статистика: из последних 10 с++ разработчиков, которых мне пришлось собеседовать, только 2 имели какие-то представления о новшествах с++11. С одной стороны Харьков все-таки переферия, с другой были среди них люди очень компетентные, с большим опытом и серьезными проектами за плечами. Вот мне непонятно откуда такая неосведомленность, что это: усталость от кодинга и нежелание делать что-то выходящее за рамки проектных задач или просто самоуверенность и убежденность, что лучшее решение уже найдено и ничего лучшего быть не может
Сколько им лет? Может быть люди просто выросли и пришло понимание что не все нужно для разработки? А кому-то это понимание может никогда и не прийти, что плохо конечно же. Я, вот, честно сказал что буду знакомиться с новым стандартом только по одной причине: потому что никак непозврослевшие "сеньйоры" будут спрашивать последние фишки на интервью.
ОК>>Вот нафига вар в таком коде?
IT>Так я не понял что в этом плохого? То, что тебе это может не нравится — это вопрос не более чем твоих предпочтений. А что в этом объективно плохого?
Оно там не нужно но я пойду твоим путем: что в этом [объективно] хорошего? Ясно ведь что там инт должен быть и, более того, ты знаешь что у вар есть свои ограничения. А теперь ты ответь еще на один вопрос. Для чего Майкрософт ввел вар в язык? И исходи из этого. Хотя я это уже и говорил тут. Итак, с тебя два ответа.
Здравствуйте, Олег К., Вы писали:
IT>>Так я не понял что в этом плохого? То, что тебе это может не нравится — это вопрос не более чем твоих предпочтений. А что в этом объективно плохого? ОК>Оно там не нужно
Это твои личные предпочтения.
ОК> но я пойду твоим путем: что в этом [объективно] хорошего? Ясно ведь что там инт должен быть
А может быть long или short, но это не важно. Объективно var это зачатки вывода типов со всеми вытекающими. Отсюда вытекает, например, повышение выразительности языка и устранение кучи мусора вроде:
MyObject obj = new MyObject();
ОК>и, более того, ты знаешь что у вар есть свои ограничения.
Не знаю. Какие?
ОК>А теперь ты ответь еще на один вопрос. Для чего Майкрософт ввел вар в язык? И исходи из этого. Хотя я это уже и говорил тут.
Я не знаю чем точно руководствовались в MS, но, во-первых, это придумали не они, во-вторых, без var нет возможности работать с анонимными типами.
ОК>Итак, с тебя два ответа.
С тебя всё ещё один — что объективно плохого в var?
... << RSDN@Home 1.2.0 alpha 5 rev. 69>>
Если нам не помогут, то мы тоже никого не пощадим.
IT>А может быть long или short, но это не важно. Объективно var это зачатки вывода типов со всеми вытекающими. Отсюда вытекает, например, повышение выразительности языка и устранение кучи мусора вроде: IT>
IT>MyObject obj = new MyObject();
IT>
ОК>>А теперь ты ответь еще на один вопрос. Для чего Майкрософт ввел вар в язык? И исходи из этого. Хотя я это уже и говорил тут. IT>Я не знаю чем точно руководствовались в MS, но, во-первых, это придумали не они, во-вторых, без var нет возможности работать с анонимными типами.
There are two reasons, one which exists today, one which will crop up in 3.0.
The first reason is that this code is incredibly ugly because of all the redundancy:
Dictionary<string, List<int>> mylists = new Dictionary<string, List<int>>();
And that's a simple example – I've written worse. Any time you're forced to type exactly the same thing twice, that's a redundancy that we can remove. Much nicer to write
var mylists = new Dictionary<string, List<int>>();
and let the compiler figure out what the type is based on the assignment.
Second, C# 3.0 introduces anonymous types. Since anonymous types by definition have no names, you need to be able to infer the type of the variable from the initializing expression if its type is anonymous.
Type inference вообще полезная штука — чего тут спорить.
В C++ ещё с ISO 98 в виде type deduction у шаблонов функций, в C++11 в виде auto (аналог var).
Здравствуйте, Олег К., Вы писали:
ОК>Я не отрицаю что развиваться всегда надо. У меня посыл в другом. Большинство программистов программируют ради программирования как такового а не для решения бизнес задач и я не считаю правильным когда программисты тащат в проект понравившиеся им технологии или фишки языка только для того чтобы их попробовать и/или поставить их на резюме.
ОК>Многие С++ программисты считают что пока они не прочтут всего Страуструпа, Саттера, Мейерса, Александреску, стандарт и что там еще — они не могут называть себя С++ программистами. Этого не нужно на самом деле и эти товарищи просто immature (о чем говорит тот же базис1) или то что нужно "вырастать из этой влюбленности в С++" и переходить на другой уровень, другие языки которые позволяют сконцентрироваться на насущих задачах а не бороться с самим языком, тратя годы на прочтение этой макулатуры (и ИТ и я говорим об этом). Ну и плюс заучить стандарт несложно, хотя затратно по времени. Гораздо сложнее создать работающий проект (да еще так, чтобы его потом покупали).
Ты смешиваешь интересы бизнеса, о которых мы вобщем-то сейчас не спорим, с вопросом, что должен знать и уметь квалифицированый разработчик. Я смотрю на проблему с точки зрения программиста — рабочей лошадки, в обязанности которого входит проектирование пусть и небольших, но независимых кусков проекта. Я убежден, что грамотное решение проблемы требует от человека хороших знаний инчтрумента, в нашем случае языка и стандартной библиотеки. Те нововведения, которые предлагает новый стандарт, исключают создание многих ненужных велосипедов, а значит экономит время и дает более надежное решение. Если человек не в курсе, он начнет "изобретать колесо". Нужно это? Конечно, нет.
ОК>Сколько им лет? Может быть люди просто выросли и пришло понимание что не все нужно для разработки? А кому-то это понимание может никогда и не прийти, что плохо конечно же. Я, вот, честно сказал что буду знакомиться с новым стандартом только по одной причине: потому что никак непозврослевшие "сеньйоры" будут спрашивать последние фишки на интервью.
Как я написал, выше, эти знания важны если человек позиционирует себя как квалифицированного разработчика, иначе как он может принимать правильные решения.
IT>>>Так я не понял что в этом плохого? То, что тебе это может не нравится — это вопрос не более чем твоих предпочтений. А что в этом объективно плохого? ОК>>Оно там не нужно
IT>Это твои личные предпочтения.
Я точно также могу сказать: это твои личные предпочтения!
ОК>> но я пойду твоим путем: что в этом [объективно] хорошего? Ясно ведь что там инт должен быть
IT>А может быть long или short, но это не важно. Объективно var это зачатки вывода типов со всеми вытекающими.
Конкретно там был инт потому что у лонговых литералов в конце суффик "Л." На счет шортов не помню но это очень даже хорошо что ты упомянул эти типы поскольку ты, человек, глядя на эту конструкцию не смог сказать истинный тип переменных. Мелочь? Возможно. Но я за то чтобы глядя на переменную сразу видеть ее тип.
Кстати, что там покажет Интеллисенс если навести мышку на переменную объявленную как вар?
IT>Отсюда вытекает, например, повышение выразительности языка и устранение кучи мусора вроде:
IT>
IT>MyObject obj = new MyObject();
IT>
По мне, так это не мусор а получше чем писать вар. Возможное исключение: всякие "вложенные" дженерики. Ну и для линка, конечно же.
ОК>>и, более того, ты знаешь что у вар есть свои ограничения.
IT>Не знаю. Какие?
Да они только для локальных переменных. Например их нельзя использовать в качестве параметров и return type-а у методов и нельзя использовать в качестве членов класса. Если первое объяснимо, то я не могу предположить ничего на счет второго. По крайней мере на ум ничего не приходит в данный момент. То есть получаются какие-то "кастраты."
ОК>>А теперь ты ответь еще на один вопрос. Для чего Майкрософт ввел вар в язык? И исходи из этого. Хотя я это уже и говорил тут.
IT>Я не знаю чем точно руководствовались в MS, но, во-первых, это придумали не они, во-вторых, без var нет возможности работать с анонимными типами.
Я не говорил "придумали." Я сказал "ввели в язык" но да, это все для линка было сделанно было в конечном итоге. Как побочный результат, можно использовать вар для "вложенных дженериков" но уж точно не считаю что вар стоит использовать для интов или простых классов как в твоем примере.
You may find that var can also be useful with query expressions in which the exact constructed type of the query variable is difficult to determine. This can occur with grouping and ordering operations.
The var keyword can also be useful when the specific type of the variable is tedious to type on the keyboard, or is obvious, or does not add to the readability of the code. One example where var is helpful in this manner is with nested generic types such as those used with group operations. In the following query, the type of the query variable is IEnumerable<IGrouping<string, Student>>. As long as you and others who must maintain your code understand this, there is no problem with using implicit typing for convenience and brevity.
и
However, the use of var does have at least the potential to make your code more difficult to understand for other developers. For that reason, the C# documentation generally uses var only when it is required.
Я согласен с этими утверждениями.
ОК>>Итак, с тебя два ответа.
IT>С тебя всё ещё один — что объективно плохого в var?
Объясняю это на протяжении нескольких постов. Плохого в них ничего нет но их не создавали чтобы девелоперы использовали их налево и направо. Теперь ты объясни мне что в них хорошего (кроме анонимных типов и вложенных дженериков). Я пока что не услышал ответа.
Ну и немного не по теме. var — contextual keyword. Могли бы уж и зарезервировать его полностью. А то коряво как-то. Ровно также как и с value в пропертях.
Здравствуйте, Олег К., Вы писали:
MTD>>>>Откуда такая уверенность?
ОК>В С++ 98-го более чем достаточно фич чтобы писать нормальный код. Лично я еще С++11 даже и не открывал но скоро открою и лишь только по одной причине; на интервью может попасться какой-нибудь очередной идиот который знает все новомодные фишки и считает что раз он пихает их все куда ни попадя, так и все остальные должны их также пихать. Вообще перечитай еще раз мой ответ выше, может дойдет.
Ну вот ты бы почитал сначала хотя бы обзор нового стандарта, а потом брызгал слюной
В языке появились новые концепции и сущности, которые радикально меняют подход к программированию, стандартная библиотека серьезно подросла — теперь не надо чуть что лезть в буст, куча "синтаксического сахара", который делает код читабельней и компактней.
Ну, а на счет "идиотов на собеседовании", тебе не приходила мысль, что в проекте может активно использоваться возможности с++11 и команде не нужен "идиот", которому лень учиться, зато нравиться всех поучать?
З.Ы. на msdn chanel9 есть немало видео обзоров: GoingNative2012 и блог STL посмотри что ли, это интересно.