Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Применение С++ 11

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Добрый день всем.

Вопрос адресован С++ программистам.
Год назад на DOU был топик
«C++ 11. Ваши впечатления» dou.ua/forums/topic/5393
Хотелось бы узнать, насколько широко сейчас используется в Украине 11-й стандарт. У меня нет возможности растягивать по времени свои курсы, чтобы охватить все интересные темы
программирования, по простой причине — у студентов нет столько денег, да и я готовлю их к тому, что нужно уметь кучу тем поднимать самому. Но, чтобы мои студенты были максимально готовы к работе, и знали в каком направлении двигаться (имели навыки работы в той IDE, или системой контроля версий, которые в ходу и не тратили время на изучение тем, которые встречаются раз в год или реже) я пытаюсь успеть дать востребованные темы за время учебы. DOU, habr, stackoverflow, codeproject помогают быть в курсе общих тенденций, но хотелось бы услышать, как обстоят дела в Украине, поскольку на свою первую работу мои студенты устраиваются здесь.

Итак, вот перечень вопросов:
1) Хотелось бы узнать, насколько широко сейчас применяется в Украине 11-й стандарт (в каком объеме его сейчас давать студентам)?
2) В какой IDE Вы работаете (если VS то какая — 10, 12)?
3) Какая у Вас система контроля версий?
4) Как часто Вы используете STL и boost и что именно из
boost-а? (я понимаю, что инструмент выбирается в зависимости от задачи, поэтому просто, с чем предпочитаете работать и что оправдывает себя по эффективности)
5) Используете ли Вы STL и boost для кроссплатформенной разработки? С какими с++ компиляторами, кроме майкрософтовского, приходилось работать на Windows и почему?
6) Как часто приходилось писать свой allocator или перегружать new?
7) 24-го марта На хабре habrahabr.ru/post/172091 была
тема — «90 рекомендаций по стилю написания программ на C++». Какой стиль написания (именования, комментов и т.д.) у Вас на фирме?
8) Какой софт применяете для написания unit-тестов?

Заранее спасибо за ответы. (Кстати, они же к Вам вернутся в
виде моих выпускников :-)

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

1 — полный
2 — VS2012, CodeBlocks & MinGW & gcc
3 -SVN
4- STL
5 — нет, gcc — есть куча библиотек (ffmpeg, librtmp....), собранные на нем. Переводить их на ms это мазохизм, проще собрать длл-ку на gcc и юзать ее под vS
6 — ни разу
7 — не читал. Венгерская нотация
8 — не применяю

1) В полном — lambdas, variadic templates, rvalues, constexpr. Есть личности, которые призывают использовать вещи из 14 стандарта.
2) QtCreator
3) Mercurial
4) STL — часто, буст отдельные вещи, сходу даже не скажу что именно.
5) Да, кланг, gcc.
6) Почти никогда.
7) Долго перечислять. Но не думаю, что это принципиально для студентов, во всех фирмах где я работал были разные правила наименования.
8) GTest

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

Спасибо за поддержку и попытку напомнить любителям потроллить, что тема топика вовсе не о том, что лучше — горячее, или сладкое (этого «добра» уже на DOU выше крыши). Я и сам хотел еще на 20-х комментах, предложить, что если нечего сказать по заданным вопросам, то лучше и не говорить ничего. Но сработал простой рассчет: те, у кого аллергия на плюсы, дают количество комментов для топика, и в результате он висит на главной странице. То есть больше народу обратят на него внимание и возможно среди них найдутся те, кто поможет мне собрать статистику по интересующим вопросам.
Кстати еще раз хочу поблагодарить всех, кто мне ответил — я уже начал на парах прорабатывать с моими слушателями указанные вами классы boost-a.

1) Хотелось бы узнать, насколько широко сейчас применяется в Украине 11-й стандарт (в каком объеме его сейчас давать студентам)?
В качестве не продакшен экспериментов — lambda, variadic templates, thread. Большая часть в той или иной мере давно уже есть в boost, так что задействовать весь новый стандарт пока не планируется
2) В какой IDE Вы работаете (если VS то какая — 10, 12)?
VS, Far+MSBuild
3) Какая у Вас система контроля версий?
Git, Svn
4) Как часто Вы используете STL и boost и что именно из
boost-а? (я понимаю, что инструмент выбирается в зависимости от задачи, поэтому просто, с чем предпочитаете работать и что оправдывает себя по эффективности)
smart_ptr, program_options, mpl, asio
5) Используете ли Вы STL и boost для кроссплатформенной разработки? С какими с++ компиляторами, кроме майкрософтовского, приходилось работать на Windows и почему?
И STL и boost.
msvc8, msvc9, msvc10, gcc-4.5.3(cygwin)
6) Как часто приходилось писать свой allocator или перегружать new?
Писал один раз, для игрового проекта (тонкий враппер над VirtualAlloc и HeapAlloc)
7) 24-го марта На хабре habrahabr.ru/post/172091 была
тема — «90 рекомендаций по стилю написания программ на C++». Какой стиль написания (именования, комментов и т.д.) у Вас на фирме?
boost
8) Какой софт применяете для написания unit-тестов?
boost.test

юзаю gcc 4.7.x. с сабжем. Практически доволен, разве что нехватает нереализованой поддержки делегированных конструкторов.
1) в полном
2) eclipse
3) svn
4) stl, no boost (подсматриваю у него реализацию)
5) mingw копилил под x86_64
6) часто
7) стиль что в посте бесит, используется свой, наработанный годами помогающий быстрому чтению кода
8) не пишу тесты

отвечу я тоже (по прошлым проектам) :)

2. VisualStudio/DevStudio
3. SourceSafe, CVS, subversion
4. STL много, boost не пользовал
5. да, только майкросовтовский, борландовский когда-то очень давно (начилал с TurboC++ 1.0 или типа того и до Borland C++ 4.0 кажись, в 90-х)
6. в кажом проекте, как правило
7. лениво всё читать. упрощённая «венгерская нотация», как правило
8. юнит-тесты не пользовали, либо писали лишь для тех частей, которым предстоял рефакторинг

2) Какую IDE Вы используете?
vim, до него был NetBeans
3) Какую систему контроля версий?
git. А какое это имеет значение?
4) Как часто Вы используете STL и boost и что именно из
boost-а
каждый день.
boost.asio, shared pointers, boost.bind (куда удобней стандартного), boost.lambda, boost.filesystem, + lexical_cast, regexp, config,
5) Используете ли Вы STL и boost для кроссплатформенной разработки?
ну... идея вообще не плохая, не занимаюсь коросплатформенной разработкой.
С какими с++ компиляторами, кроме майкрософтовского, приходилось работать на Windows и почему?
вообще под линукс пишу, но когда-то давно использовали intel C++ compiler, vtunes его требовал
6) Как часто приходилось писать свой allocator или перегружать new?
однажды искали мемори-лик.
Какой стиль написания (именования, комментов и т.д.) используется у Вас на фирме?
Люблю, и очень долго использовал c-case style, сейчас используем дикий кемел стайл.
8) Какой софт применяете для написания unit-тестов?
сейчас — свой самописный, когда-то понравился boost.test + quick build в качестве CI

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

1) Зависит от проекта. Если что-то старое и большое или старое и железное, то могут быть проблемы с переходом и обоснованностью оного. Новое обычно стараются писать на новом, но, конечно, не у всех разработчиков есть желание разбираться с 11-м. И это печально, т. к. стандарт действительно вышел хорошим.
Если проект кросс-платформенный, то используют те фичи, что сапортятся компиляторами на всех платформах.
Самое юзабельное из нового: auto и лямбды, т. к. локальны, везде работают и очевидно удобны.

2) На винде VS, на Линуксе Eclipse, на Маке XCode. Бывает, народ предпочитает Qt Designer.

3) В основном SVN. Иногда другое попадалось (Perforce).

4) Зависит от проекта. Там где выбирал я, использовались широко. Можно разбить по группам:
a) обеспечение кроссплатформенности: Boost.Thread, Boost.Asio, Boost.Filesystem, Boost.DateTime
b) удобные шаблонные плюшки, без которых в принципе можно обойтись, но не хочется: Boost.Bind, Boost.Lambda, Boost.Assign, Boost.Array, Boost.TypeTraits
c) остальное: умные указатели, Boost.LexicalCast и еще всякое по мелочам.
Многое из этого теряет актуальность в виду выхода нового стандарта.

5)
a) Да, использовал.
b) На винде только майкрософтовский. Но кое-что для винды проще было собрать из под Линукса с помощью кросс-компилятора мингв.

6) Один раз в жизни, когда стояла задача оптимизировать потребление памяти в поднятом после 10-летней консервации проекте.

7)
a) Статья на Хабре — отстой. Нет, там есть правильные рекомендации, но они плотненько перемешаны с бредовыми, устаревшими и чисто стилистическими.
b) По разному.

8) Дома — Boost.Tests, на работе как-то был google-test.

учитывая, что в язык добавлены лямбда и они даже в VC++ есть с 2010 версии, использование

Boost.Lambda
кажется не оправданным.

C++ умер. Есть ещё некоторые маргинальные ниши для него — но в прикладной/промышленной разработке его уже нет.

по моему, живее всех живых. и по зарплатам наконец то подтянулся к конкурентам.

По зарплатам он всегда конкурентов опережал — т.к. на нём ногое писалось, а язык сложный (в сравнении с Джава).

Но сейчас разработка на C++ очень сильно сократилась (в пользу Java/C# и веба), да и зарплаты/рейты стали меньше, т.к. за всякого рода «эмбед» платят меньше, чем за «энтерпрайз».

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

Зарплата 3к = детский сад, который не имеет смысла обсуждать. Я всё больше пишу о западе и рейтах — рейты в «эмбеде» ниже, чем в «энтерпртайзе», а рабочих мест в «эмбеде» гораздо меньше.

Раньше «энтерпрайз» писался на C++ - но эти времена закончились.

п.с. Насчёт флешек не в курсе — но из свого опыта посещения всяких-разных сайтов, флешки уже умерли тоже. В вебе сплошной джава-скрипт и основанные на нём фреймворки.

С чего вы взяли, что рейты С++ программистов на Западе ниже рейтов Java программистов? И с чего вы взяли, что С++ нет в энтерпрайзе? С++ используется повсеместно в финансах и трейдинге, в моделировании и CAD системах, в обработке видео потоков и телекоммуникациях, в конце концов он даже в вебе используется (Google и Yandex, например).
FYI, сравнение зарплат С++ и Java программистов в США:
С++: www.payscale.com/...ears_Experience
Java: www.payscale.com/...ears_Experience

С того, что зайдите в амерский монстp и поищите по «C++» и по «Java» — сами всё поймёте...

И что же я должен понять? Я только вижу, что вакансий на Java больше, ну так с этим никто не спорит. Кстати, на монстер почему-то триста с чем-то С++ вакансий, а на том же карьербилдере — 2600. Вы обоснуйте ваши слова: «в прикладной/промышленной разработке его уже нет».

Вы обоснуйте ваши слова: «в прикладной/промышленной разработке его уже нет».

Концерны сейчас активно переписывают остатки своих C++ cных решений на Java и C#. Включая даже очень вычислительно-ёмкие вещи, связанные с 3д визуализацией (например, в биотехе клинические платформы и софт для ультразвуковых/томографических аппаратов и исследований). Лишь малая часть софта (отвечающая за всякие высокопроизводительные и низкоуровневые штуки, типа непосредственного управления аппаратом или volume-rendering) остаются на C++ - всё остальное уже нет. Но ещё 5 лет назад это писалось и дописывалось на C++ тоже.

А это очень большое количество разработческих человеко-часов (навскидку, миллионы человеко-часов, в одном концерне/направлении).

p.s. Банки/телекомы, к слову, перешли на Джава уже давным-давно.

ну может где-то в ваших мечтах. на практике продолжают пилить на С++. тот же HFT поголовно С++ный. и на него переходят все больше контор

ХФТ это мелковатая ниша что бы судить о рыночных трендах. К тому же сейчас конкуренция усилилась и народ вообще на хардварные решения все больше смотрит.

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

Что заставляет людей в наше время писать на С++ ? Деньги, власть, чувство превосходства, любовь к данному инструменту ? ...
PS: — Можно не отвечать, меня просто сегодня понесло ... извините
PSS: — Блин ну реально же язык корявый и через меру сложный какого х .. на него кидаться !

Язык хороший. Но с нынешней скоростью роста мощности вычтехники, да распространением куч операционок на кучe устройств — язык, компилирующийся в бинарный код на хардовый процессор, уходит туда же, где уже давно ассемблер.

Геймдев? Там каждый процент важен.

при этом если нужно писать код один раз под все платформы у С++ и конкурентов то оказывается не так уж и много, верней ни одного.

вы на пальцах можете перечислить платформы которые это поддерживают. С++ сейчас поддерживают все.

С C++ проблема — 1) необходимость рекомпиляции под платформу (бинарники непереносимы) и 2) сложность обучения спецов (большая проблема, т.к. люди с универов начинают писать на Java/C#, а на C++ забивают за ненадобностью и сложностью). Для современных студентов, C++ рассматривается, как ассемблер.

К тому же, непригодность для мобильной (не только под телефоны, но и под планшеты) разработки — т.к. там весь прикладной слой крутится на всяких «далвиках» и прочих интерпретирующих приблудах.

Потому, даже платформенно-зависимые вещи (типа, корпоративных систем с кучей клиентскиех мест) пишутся/переписываются на Java/C#, а независимые пишутся для веб-броузеров (джава скрипт, джава, пхп).

ну для формошлепстав да, согласен, С++ пригоден слабо.
но с другй стороны, С++ нативно поддерживается всеми мобильными платформами, то есть писать бизнеслогику можно ровно 1 раз, а UI он все равно от платформы к платформе будет меняться.
но первое сейчас решается через LLVM (допустим flashcc).
не знаю как сейчас, но я в универе учил и яву и С++ по полгода. но на С++ были почти все курсовые и большая часть лабораторок. думаю что сейчас ситуация та же. то есть практики на С++ в вузах намного больше.

Украинские универы ещё долго будут всё требовать на C++ (как совковые до конца 90-х всё требовали на Паскале). Не потому что рынку нужен C++ (или Паскаль), а потому что преподавательский состав другого не знает и учить не хочет. Откуда в постсовке такое распространение получил Дельфи (хотя в странах запада его никогда не пользовали широко)? Всё оттуда же — из совковых универов, где большинство студентов останавливались в развитии на «первом языке» (паскале) и Дельфи был их очевидным следующим выбором.

В западных же универах, C++ уже давно маргинал, типа ассемблера. Народ обучают Java и C#.

пруфы будут? так как на западе С++ более популярен чем в странах дальнего аутсорса...

Народ и С/С++ прекрасно обучается было бы желание, а на счет запада. Вы посмотрите на чем пишутся крупные проекты, к которым наш аутсорс и близко не подпускается ...

преподавательский состав другого не знает и учить не хочет
Я могу только посочувствовать преподавателям государственных вузов, у которых есть спущенный сверху список тем, за который даже при желании не выпрыгнеш. А насчет «учить не хочет», это Вы зря. Я кроме плюсов пишу на шарпе, а сейчас с удовольствием ковыряю джаву и андроида.

Про стремительный рост вычислительных ресурсов, который похоронит компилируемые языки, мы слышим вот уже 15 лет, однако воз и ныне там. К примеру, браузер работающий с приемлемой скоростью, на Java или C# не напишешь, как и любую другую сложную программу. Суть в том, что с ростом вычислительных мощностей растут и потребности: сравните, к примеру, веб-страницу 90х годов и современную. Поэтому компилируемые языки никогда не уйдут в прошлое — они всегда будут актуальны.

Просто их ниши схлопываются в 10 раз, раньше всякий банковский софт на ц++ писали, теперь им там и не пахнет. Раньше дешевые микроконтроллеры это тока си, счас можно за 25$ купить на которых питон и джава себя Ок чувствуют.

Та ладно не нужно гнать на С++, с таким же успехом можно гнать на любые другие ЯП, я скажу лишь одно , С++ хоронят еще с конца 90х, а он и по ныне активно развивается и входит в 5ку самых востребованных.

Только ANSI C,только хардкор, а С++ от лукавого

1. Не знаю насколько широко используется в Украине, но потихоньку применяем на уровне того, что реализовано в Visual Studio 2010. Лямбды, function, rvalue refs, ну и по мелочам — auto, nullptr, decltype, static_assert. Может еще чего-то.
Когда MS зарелизят апдейт с С++11 фичами из последних CTP, будем переходить на VS 2012.
2. MS Visual Studio.
3. subversion, perforce
4. STL — повсеместно, boost — не везде, но используем: thread, asio, regex, test. Ну и по мелочам всякое. Использовали смарт поинтеры, пока они не появились в стандарте. Кстати, выше я их не упомянул — shared_ptr, weak_ptr, unique_ptr.
5. Почти нет, в основном все под винду.
6. Крайне редко, и достаточно простенькие — набор преаллоцированных буферов, в которых объекты размещаются с помощью placement new. Оператор new не перегружаю никогда. ИМХО, лучше добавить фабричную функцию Create, чтобы для тех, кто будет поддерживать код, было меньше сюрпризов.
7. Именование используем схожее с принятым в C#.
8. CppUnit и boost.Test.

1 Частично пользуем
2 Студию + я пользую QtCreator Дома QtCreator иногда Eclipse
3 git
4 пользуем STL . Boost, к сожалению, нельзя
5 gcc

Как раз , выше указанный пост от меня и был.

Теперь по порядку —

Итак, вот перечень вопросов:
1) Не знаю как в Украине, но у нас в комманде для новых версий мы его(С++11) уже активно юзаем, не во всех компонентах (например до лямбд пока не добрались), но вообщем — юзаем
2) Преимущественно это на плечах каждого разработчика (Эклипс, Kdev)
3) svn
4) boost не прижился, В проекте юзаем Poco. STL, как часть стантадрта юзаем повсеместно.
5) Пока наш проект не крос-платформенный, так что говорить о использовании кросс-платформенных либ зарано, но в проекте такое предусмотренно, поэтому и выбрали Poco.
6) Испоьзуем сторонний bsd-allocator для некоторых приложений, активно долбящих память, перегрузка операторов new/delete используется редко и в основном для отладочных целей.
7) Пока , все разработчики в комманде пишут в разброд (на счет стиля) и упорно каждый за свой держатся,,, в общем будет манагер-диктатор — будем писать в одном стиле, пока разброд.
8) 2 Основных приблуды для u-test это cpp-unit и gtest, опять таки не можем достичь компромиса , что бы остался только один...

Вообщем вот такая картина С++11 и не только.

2) Какую IDE Вы используете?
NetBeans, иногда QtCreator.
3) Какую систему контроля версий?
Git (gitlab), реже subversion
4) Как часто Вы используете STL и boost и что именно из
boost-а? (я понимаю, что используемый инструмент зависит от задачи, поэтому просто, с чем предпочитаете работать и что оправдывает себя по эффективности)
Почти постоянно (т.к. пишутся бэкенды игровых логик). boost.smart_ptr, boost.asio, boost.string_algo, boost.property_tree, да много чего. Иногда замыкает на выборе что лучше — STL-ный вариант, или бустовский (который, скорее всего, и перешёл в STL).
5) Используете ли Вы STL и boost для кроссплатформенной разработки? С какими с++ компиляторами, кроме майкрософтовского, приходилось работать на Windows и почему?
Исключительно кроссплатформа (да — stl, boost).
6) Как часто приходилось писать свой allocator или перегружать new?
В продакшене не приходилось, но allocator пробовал.
8) Какой софт применяете для написания unit-тестов?
Да никакой, пишу свои классы тестов. Хотя есть ещё boost.test =)

Підписатись на коментарі