Вакансии C++ и знания «STL»

Добрый день!

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

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

В общем, довольно часто работодатели, которые ищут программиста C++, рядом со «strong C++» пишут отдельным пунктом: «experience with STL». Как это понимать? Они действительно имеют в виду STL (библиотеку, созданную Александром Степановым, которая позже повлияла на формирование нынешней стандартной библиотеки языка C++), или всё же имеются в виду те компонены, которые пришли из STL в std?

Если первое, то разве сейчас оригинальная STL так популярна, что её указывают в каждой второй вакансии? Я думал, все основные компоненты уже давно есть в стандартной библиотеке C++, а сама STL давно перестала поддерживаться.

Если второе, то разве это не безграмотно со стороны работодателя, писать такие формулировки в вакансии? Ведь стандартная библиотека C++ не включает в себя STL. Я специально просматривал черновик стандарта языка C++ — там нигде, абсолютно нигде не встречается ни аббревиатура «STL», ни словосочетание «Template Library».

👍ПодобаєтьсяСподобалось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

Ты главное выучи и смоги обьяснить на собеседовании что такое виртуальный конструктор, и почему крышка колодца круглая

под требованием знания STL не всегда имеется в виду сам STL. например у одной конторы на букву Х... STL и Буст запрещен, но есть своя поделка сделанная на похожих принципах

Спасибо за информацию!

Ох уж это название, «виртуальный конструктор». Термин, отсутствующий в C++, который каждый интерпретирует, как хочет. Но я читал об этом в нескольких разных источниках, так что, думаю, что-то смогу объяснить, если спросят.

А вот крышки колодца и прочее меня завалят определённо. Никогда не понимал смысла таких вопросов, и что на них нужно отвечать. Видимо, не судьба мне работать в гугле :( Да и туда я в любом случае метить не буду, по крайней мере в ближайшие несколько лет :)

Насчёт поделок я понял, ниже писали об этом. Не думаю, что у меня возникнут проблемы с чужими поделками, если они будут сделаны на похожих принципах.

После крышек колодцев спросят кем себя через 5 лет видишь)

декілька теплих слів про хрести:
п. 11. С++
dou.ua/...ty-in-embedded-solutions
п.с.
хороша годна стаття, автору — респект

Всі срачі в моїх топіках утихли пару тижнів назад, а тобі все ще чешеться пообсирати плюси. Весела ти людина. І, схоже, не надто зайнята, якщо вважаєш за потрібне нав’язувати якомусь незнайомому «джуну» свою точку зору.
Подібні «теплі слова» можна знайти практично про будь-яку більш-менш розповсюджену мову. Ще Страуструп казав: «There are only two kinds of languages: the ones people complain about and the ones nobody uses.»

Єдиний висновок, який я міг би зробити з твоїх постів (якби ти викликав хоч трохи більше довіри) — це те, що C++ не дуже добре підходить для Embedded. Можливо, це і правда, тут не буду сперечатися. Хоча також я і не буду поспішати з висновками на цей рахунок — краще поспілкуюся ще з іншими людьми в інших місцях.

Якщо написане у цьому пункті — правда, то я чудово розумію проблему з використанням C++ в Embedded:

average Embedded-programmer knows about 20% C++ but at this time everybody knows his own 20% which most likely will be inaccessible for somebody other
Але це не проблема плюсів — це проблема девелоперів, які намагаються застосовувати інструмент, яким вони не навчилися користуватися.
А от вже чи варто вивчення C++ того, якщо можна взяти щось простіше і більш доступне для «average Embedded-programmer», — це вже зовсім інше питання. Я ніколи й не казав, що в Embedded (чи ще десь) повинна використовуватися саме мова C++ і ніяка інша. Грамотний розробник буде обирати той інструмент, який найкраще підходить для розв’язання конкретної задачі, а не стане ліпити плюси/джаву/сі/брейнфак лише тому, що йому до вподоби саме ця мова.

читаєм анотацію:

I want to share experience achieved in electronic gaming of chance. This article may be important for all interested in quality.

Disclaimer: This article has as main goals to turn attention onto unclear things and underwater rocks. So many clear things are skipped ever there where they need for some reason. Also almost all statements are based on long, extensive and meticulous researches and investigations.

Але ж у ТС власне бачення.

У мене власне бачення нуба, у тебе власне бачення троля. І це нітрохи не краще. Тому нема чого засирати коменти, бо ніякого конструктиву в нашому з тобою діалозі вже не зв’явиться.

це не тільки моя думка, от ще:
dou.ua/...rom=similar_topics#590897
“там тишина и мертвые с косами”

Не тільки, звісно. Є люди, які розділяють цю думку, і їх немало. Як і є ті, хто її не розділяє. Так, в деяких сферах діяльності з плюсами не складається («тишина и мертвые с косами»), а в деяких їх продовжують успішно застосовувати. Це залежить від купи різних факторів.

А от в холіварах я нічого хорошого не бачу, нехай навіть

это доу, тут холииварить почти правило хорошего тона

це не холівар, це поради старших і більше досвіченіших персонажів

Значна частина того, що ти пишеш, на зразок «Плюси лайно, вчи джаву», «Страус труп, джава рулз» і т.д. — це не поради, це товсті вброси, характерні для тупих холіварів, і не більше. Решта твоєї писанини, будучи змішаною з цим брєдом, також втрачає свою цінність, навіть якщо у «відфільтрованому» вигляді її можна було б назвати конструктивною.

Тому вибач, але особисто від тебе я не сприйматиму жодних порад.

На всякий случай: вне Embedded у C++ есть довольно узкая ниша где он себя оправдывает.

так є, але в плюсів сумні перспективи, а «нішевість» мови передбачає спеціалізацію і малий ринок

О чем мы тут говорим...если 50% «программистов» (хотя, каюсь, погорячился, пожалуй скорее 80%) НЕ УМЕЮТ МОДЕЛИРОВАТЬ НА ЧЕЛОВЕЧЕСКОМ языке. А мы тут о С++ c Java’вами. Мне представить себе страшно если этим «зверям» еще и дать в руки всякие фреймворки/библиотеки да приправить все это паттернами (про templates с Александреску я лучше просто промолчу).

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

PS. Сорри, старался помягче. Матерные слова в процессе редактирования пострадали не сильно))

Разве это не безграмотно со стороны программистов на C++ называть функтором не морфизм категории малых категорий, а вектором — не элемент векторного пространства?

Терминология формируется исторически. Так уж вышло, что функтор в контексте C++ - это объект функции, вектор — структура данных, а STL — часть стандартной библиотеки (структуры данных, итераторы, алгоритмы, адаптеры, и, кстати, функторы).

С точки зрения математики, наверное, таки безграмотно. Но со стороны программистов C++, что касается вектора, — однозначно не безграмотно, потому что этот термин определяется в стандарте языка C++. В данном случае просто математическому термину дали новое значение в новой для него предметной области.
А вот с функтором действительно хорошая параллель. И согласен с Вами, что

Терминология формируется исторически
вектором — не элемент векторного пространства
matrix — двумерный массив
vector — одномерный массив.

Вполне себе математические термины и отношение к С++ не имеют никакого.

Математические термины редко выражаются через неформальные определения. Что такое массив в математике?

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

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

A vector of dimension n is an ordered collection of n elements, which are called components.
Alternately, an «unordered» collection of n elements {A1, A2, ..., An} is called a «set.» Это определения второго уровня математики в secondary school североамериканского образца.

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

Во-первых, я не обвинял разработчиков STL в неграмотности. Степанова, в частности, я более чем уважаю.

Во-вторых, внезапный переход на оскорбления, мягко говоря, неуместен. Ещё раз — как только в рамках этого (или любого другого) курса будет введено понятие базиса, общего у вектора и массива останется не так уж и много. И будет определение первого курса. Для undergraduate студентов.

Если вы так уж любите ссылаться на англоязычные тексты для студентов, рекомендую почитать Ленга, страница 139 (Vector Spaces), или Виницкого (он определение даёт в самом начале). Ну или Розенфельда, но он даёт векторы, ковекторы и тензоры одним определением (что, в общем-то, правильно, но уж очень по-бурбаксистски).

И ещё раз, постараюсь объяснить другим языком: множество значений «вектор» != множеству значений «vector», хотя пересечение довольно большое.

en.wikipedia.org/wiki/Row_vector, перевод на украинский и русский этой статьи нет. Угадайте почему? Потому что она имеет совершенно другой перевод.

Вы с таким остервенением пытаетесь доказать, что это из СS сферы, что-то ещё, но только не принять реальность. Упоротость — очень плохая черта для программера, это не оскорбление, если что.

Упоротость — очень плохая черта для программера, это не оскорбление, если что.
Золотые слова!
Кстати, может тогда Вы всё-таки поделитесь, почему Вы считаете, что нововведения C++11 (move semantics, auto type deduction, range-based for loops, etc.) следует «держать в глубоком бане», если такие Ваши убеждения не являются, как Вы выразились, «упоротостью», а действительно чем-то подкреплены?

Oleg Tarkanii хоть и грубо, но довольно точно передал смысл происходящего процесса. Что писать будем на с++11? Это язык, его плюшки не хороши и не плохи, они есть как часть языка, к чему мы будем применять язык? То, что я сказал про домашнее задание, вы восприняли неадекватно, хотя могли бы и подумать об удельном весе rocket science в строчке с++ кода фейсбука и гугля. Что пишет фейсбук и что гугль, но на сколько я вижу, вы не видите разницы ни в предметной области, ни в области применения. Поэтому я и сказал, что доказывать вам что-либо просто рано, вы всё равно не воспримите эту информацию.

Я восприму — мне всего лишь надо объяснять несколько подробнее, нежели другим более опытным товарищам. Хотя если Вам не хочется тратить на это время — я не обижусь.
А так, вообще, я прекрасно понимаю, что внешний вид кода и сам процесс его написания будут существенно отличаться в разных предметных областях; и я понимаю, что где-то плюшки C++11 могут оказаться не особо нужными. Но всё же я в упор не представляю, как может хоть где-нибудь сложиться такая ситуация, что будет лучше работать без C++11, чем с наличием его поддержки. Был бы благодарен хотя бы за один пример.

В automative C++11 долгое время не принимали из-за отсутствия production grade поддержки компиляторами.

В каком-нибудь Android только на поддержке порта на одну платформу только в TI работало ~1k человек. Переводить их на другой язык — пусть даже и близкий — дело неблагодарное.

Вот два типичных примера.

А так, вообще, я прекрасно понимаю, что внешний вид кода и сам процесс его написания будут существенно отличаться в разных предметных областях; и я понимаю, что где-то плюшки C++11 могут оказаться не особо нужными.
Я вас вижу на большом багфикс проекте, где тонны кардинально отличающегося С++ кода. Это единственная сфера, где сферический С++ программер может выстрелить и набраться опыта.
Но всё же я в упор не представляю, как может хоть где-нибудь сложиться такая ситуация, что будет лучше работать без C++11, чем с наличием его поддержки. Был бы благодарен хотя бы за один пример.
Portability.
Я вас вижу на большом багфикс проекте, где тонны кардинально отличающегося С++ кода. Это единственная сфера, где сферический С++ программер может выстрелить и набраться опыта.
Это вариант. Хотя я не думаю, что прям единственный.
Но если попаду на такой проект с более-менее человеческой з/п и там будут какие-то перспективы дальнейшего профессионального роста, i’m not above this.

Я сказал только то, что, собственно, сказал — что одни и те же термины в разных областях означают разные вещи. Исторически так сложилось. Это достаточно хорошая реальность, чтобы её принять?

Мне после столь внезапного спора о терминах в основном пива принять хочется, впрочем :)

наскільки я пам«ятаю, то «вектор» — направлений відрізок прямої, але ніяк не масив, і не контейнер.

Вот ещё, как пример, университетская методичка с более подробным разжёвыванием:
www.cs.cornell.edu/...1part3/creatingArrays.pdf

Это методичка по языку MATLAB. С таким же исторически устоявшимся в программировании термином, имеющим крайне опосредованное отношение к математике. Что вы мне пытаетесь доказать? Что Уиллард Гиббс подразумевал под вектором последовательность чисел, определённым образом расположенных в памяти? Не думаю. Думаю, он всё-таки обобщал геометрические алгебры на произвольное количество базисных элементов, отказываясь от операции деления и линейности произведения.

Seriously, это очень глупый спор.

Учите матчасть.
STL включен в стандартную библиотеку. И имеет достачно много _различных_ реализаций.

То, что включено в стандартную библиотеку, сейчас и принято неформально называть «STL». Официально она «STL» не называется, просто везде так принято говорить. С этим мы разобрались ниже в комментариях, мой вопрос уже снят.
Но всё-таки это не та STL, которая была изначально (которая формально называлась STL). В стандартную библиотеку C++ не вошли некоторые вещи из оригинальной STL. Но это всё история. Я уже понял, что сейчас это мало кого волнует, и, когда говорят «STL», практически всегда имеют в виду именно ту её часть, которая вошла в std.

Между прочим, если говорить о оригинальности STL с точки зрения стандартизации, то еще можно поспорить какой STL «оригинальней» SGI или Dinkum.

Послушай, чувак, а если посмотреть на язык программирования как на умение, банально разговаривать, вот скажи-ка нам всем плиз....что ты на нем «разговаривать» будешь? Вот, что ты реально умеешь? Ты ведь что-то на С++ запрограммровать хочешь, не так ли? Do not hesitate to explain us ЧТО????

(Сорри, достали все эти «чистые программисты». Теологи-ортодоксы, млядь)

Мне задавать подобные вопросы пока рано, чувак. Если говорить на твоём языке, то я, вот, только научился «разговаривать» — и сейчас ищу (хотя пока что из-за диплома временно приостановил эти поиски) отрасль, где я бы мог применить эти умения наилучшим образом. Где моё «умение разговаривать» будет приносить наибольшую пользу работодателю — а, следовательно, и моему кошельку. Так что посмотрим, куда меня жизнь занесёт.
Да, я не из тех, кто сразу выбрал себе геймдев/эмбеддед/графику/формошлёпство/etc., deal with it. Если у кого-то от этого пригорает — что ж, всем не угодишь.

Прошу прощения за излишнюю резкость, мэн. Просто keep it in mind. Уверен, что эра чистых программистов, тестеров, менеджеров уходит, увы .... А в остальном — удачи)
Ну, да и собственно по теме — не парься. Ну ’такое’ этот STL/STD ... баловство для начинающих и иллюстрация базовых вещей. В общем, такая себе хорошая добротная обучалка на примерах (тут я исключительно в хорошем смысле этого слова).

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

Ну а если всё будет совсем плохо — тогда уже выберу методом научного тыка одну из конкретных сфер деятельности (эмбеддед, геймдев, ...) и начну изучать, что нужно для работы конкретно там.
якось дивно,
“я вибираю молоток, а де його примінити, я ще подумаю”

если пойдешь в типичный бодишоп работающий под заказчика (не коробочные продукты) — забудь про чистое программирование. программирование это 20: процентов работы, остальное — нудные митинги, подготовки к релизам, общение с продакт овнерами и BA, написание юнит и аксептанс тестов, код ревью, планирование итераций и прочий аджайл. этого в сумме столько набирается что програмить будет некогда

Автора ждет много дивных открытий :) Все кричат у нас ептить скрам. Но регулярно надо за пару дней запилить кучу всего + спускаются новые либы с глюками. И иногда перед этим приходит в команду эстет. Весь день эстет что-то делает задрачиая вопросами всех, даже ходит в народ. Рабочий день сопровождается крики заказника : ну когда же будет, меня сверху дрючат... Вечером выясняется, что эстет накропал лишь интерфейс и только начал что-то делать. Все в акуе. Утром когда эстет приходит, его часть уже написана. Сонный заказчик пишет — кюеи сказали гуд. Руки проч от этого куска кода. Куда отправляется эстет ? Правильно — писать юнитесты :)
Хотя можно попасть на проект , где все по феншую — 3 строчки в неделю. Раз в месяц обсуждения рефакторина. В ревью пяток человек. Возможен митинг вплоть до того как назвать метод. Ясное дело все по букварю и 100500 юнитестов. Но эти проекты в основном ждет могильник :) Ну или если повезет, у вас тут все ок, но надо переделать , это это и от это в режиме вышеописанного, а еще это это и вот это. Нет вот это не надо , а нет надо только так.

ти якось побачив що хотів побачити, а про 3 строки естетичного коду ніби і забув

Это называется куяк, куяк и в продакшен.
На самом деле стоит различать выдать наверх работающий код в виде «something to try» и продакшен. В больших компаниях часто непозволительно сидеть и пилить до победного конца, а как известно последние 5% проекта занимают 95% времени. В цепочке могут быть несколько отделов, несколько заказчиков, субподрядчиков, работа которых просто тормозится от того, что не с чем работать, кода нет. Часто не нужен идеальный код на данном этапе, нужно просто что-то работающее. Естественно, что разработка на этом не останавливается. Перфекционисты не могут работать в таких условиях, как правило. И в конечном итоге на выходе ожидается не идеальный код, а код, который удовлетворяет поставленным требованиям.

Например, у меня была цепочка заказчиков США (хард)->Канада (софт)->Япония (софт и хард)->Япония (софт) ->Италия (дизайн и прототипирование). Кто работал с Японией, то может и сразу поймёт, это тяжело на пальцах объяснять. У каждого в цепочки есть свои сроки и дедлайны. Дизайнеры HMI должны делать свою работу используя уже «работающий» софт, потому что они связывают все разрозненные компоненты (и программные и аппаратные) в единое целое. Так вот дизайнерам (их называют дизайнеры, хотя на русском это звучит слегка двусмысленно) не нужен идеальный код, им нужен код, который что-то делает и не падает каждые 20 минут, а хотя бы раз в день. Обновление кода они получат нескоро, первыми обновления получит следующий клиент в цепочке, он же и будет принимать работу предыдущего. Последний в цепочке обновление будет получать крайне редко, ибо его работа заключается немного в другом.

Но это, как я понимаю не идет потом в продакшен?
Разное может быть, например, один из цепочки начнёт сокращать издержки, посчитает, что и так сойдёт и он пойдёт в продакшен, может быть придётся написать всё заново, а может просто и доработать. Я к чему веду, эстетизм — главный источник издержек. Как правило, специалист, взрощенный на аутсорсе о многом этом даже не задумывается.
— интерфейсы модулей должны быть серьезно продуманы
Я очень скептически к этому отношусь. Да, уделять должное внимание нужно, но вот как пример, продумываются интерфейсы к компонентам ОС и тем не менее они всё меняются и меняются. Т.е. важнее сделать не так, чтобы всё было изначально супер правильно и идеально, а чтобы впоследствии не нужно было переписывать кишки, а только лишь рихтовать интерфейс по большей части.
— код не должен течь и падать
Не должен. Поэтому мой любимый вопрос плюсатикам на собеседовании «как поменяется ваш подход в разработке ПО, если будет стоять требование, что ваш код должен работать, допустим, 1000 дней без перезагрузки». Мало писать код, который не течёт и не падает...

А какой правильный ответ? Повысить удвоить внимание к выделению памяти? Или ничего дополнительно не выделять, после старта и подготовительных операций?

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

Или ничего дополнительно не выделять, после старта и подготовительных операций?
Как один из вариантов вполне сойдет, глупо ведь упасть приложению только потому что оно попыталось выделить 4096 байт памяти и не смогло через год своей работы. Различные подходы к уменьшению фрагментации памяти, такие как не выделять в хипе память для временных объектов, а выделять на стеке, где это возможно, placement new для больших объектов (возможной свой memory manager для таких объектов), большие куски памяти выделять напрямую через ОС, а не в хипе. Свои аллокаторы. Если человек знает Intel TBB, то вообще ему огромный плюс. И т.д.

Но в отличие от хипа он не фрагментируется так.

Ну, ещё как вариант можно написать свою простенькую RAII-обёртку над маллоком, которая будет в деструкторе вызывать free(), чтоб чуток меньше париться с ручным управлением памятью, но при этом не подключать STL.

Ну, есть люди, которые по разным причинам отказываются от использования STL. Лучше спросить у них.
Лично я вижу один недостаток: вектор позволяет на уровне интерфейса изменять его размер, и при работе в команде, когда кода становится действительно много, кто-то из членов команды может случайно завтыкать и что-то нахимичить с изменением размера (особенно если плевать на const-корректность, как это делают некоторые).
Обёртку над маллоком же можно будет настроить так, чтобы размер был один раз задан в конструкторе и больше не менялся.
А буст иногда не хотят подключать из-за увеличения времени компиляции.

для задач, где фрагментация важна
Проблема в том, что зачастую заранее не угадаешь, где эти бока вылезут. И даже то, что STL проходит собственные regression-tests, еще не означает что на относительно медленной (ну там демоны сетевые), но очень долго продолжающейся регрессии, хип не помрет через полгодика.
C++ в этом смысле сильно удобнее
Удобнее, факт. Но до сих пор нет (лично у меня, просто исторически) уверенности, что где-то внутри STL какую-то такую бомбочку не забыли и оно не вылезет вдруг при редких условиях.
Может, это просто параноя, развившаяся во времена, когда чтобы STL прошел regression на FBSD, приходилось патчить и gcc и после кернел заодно.

знакомые слова — HMI, HUI (да, такое тоже есть!). Харман?

Car platform был задолго до Хармана, и, соответственно, остался после него тоже.

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

а не ради этого эта ветка ? :) Умрет срач .умрет и ДОУ.

Умрет срач .умрет и ДОУ.
Впервые я могу согласиться с Вами, Александр :)
Автора ждет много дивных открытий
не будем копати далеко, але на рахунок тих овн, які він почав ковиряти, (ось до одніє С++ бібліотеки TODO):

— Get rid of STL usage (Don’t really need STL, and it a lot of projects prefer not to use it)
— Compile option to use error codes instead of exceptions. Exception use is likely to be a real show-stopper

ну і саме цікаве:
— Convert to straight C instead of C++.
— Remove/reduce dynamic memory allocation (for platforms where fragmentation is a big issue).

Мне нравится, как «23-летние сеньоры» делают обо мне так много интересных выводов, подгоняя под свои стереотипы. Пешыте ысчо. Токо ща за попкорном сбегаю.
ЗЫ
А я-то думал, что такие вещи (нужно ли писать 100500 юнит-тестов, или писать только код абы поскорее сделать, или как-то балансировать между этими крайностями) обычно обсуждаются перед тем, как приступать к работе. И что с юными «адептами Александреску» (я ж такой, да), только взяв их на работу, сначала как-то беседуют, объясняют, как здесь принято работать а как нет, дают им в первое время не сильно критичные задания вместо того, чтобы сразу отправлять их на важный проект, по которому уже все сроки горят, а потом возмущаться при возникновении подобных конфузов. Что ж. Очевидно, я и правда наивный. А ещё я до сих пор считаю, что несоблюдение const-корректности в C++ ничем не лучше нарушения инкапсуляции и вываливания всех полей класса в паблик.

Нет, юмор в том, что Александр пишет геттеры и сеттеры, а поля класса запихивает в прайват (как «эстеты» делают) — я сам у него спрашивал об этом. Но при этом всём соблюдение const-корректности он называет «дрочерством». По-моему это забавно.

У всех фейспалм, только вот от разных личностей %)

Ну некоторые автомотив компании с констами тоже не замораживаются, причем даже на уровне либ и ниче. Все работает годно.

Они на плюсах прошивки ECU пишут? ))
Ну а серьезно — тот код так хорошо охраняется и настолько редко в паблик попадает, что мы их правил насчет констант никогда не узнаем скорее всего...

Они на плюсах прошивки ECU пишут? ))
ECU софт на много чём пишут, но ECU — совершенно отдельно, а телематика просто отдельно. Это две совершенно различные автомобильные системы. Без телематики будут просто жигули, а вот без ECU будет повозка на настоящей конной тяге :)

Телематика для меня вообще темный лес.
Однако там же тоже высокоскоростные обработчики датчиков наличествовать должны?

en.wikipedia.org/wiki/Telematics

И да и нет. В ECU 100% должны наличествовать, а вот в телематике — это больше информативная функция, чем ожидание от системы какой-то реакции. Хотя многие производители вешают на телематическое оборудование, например, функцию автоматической параллельной парковки, поэтому в таких системах датчики надо обрабатывать не только быстро, но ещё и надёжно. Хотя с «религиозной» точки зрения, то такими функциями должна заниматься вообще отдельная система, третья на борту.

Так я же поэтому и провёл параллель именно с геттерами/сеттерами и private-членами классов. Ибо всё можно делать без них, точно как без const, — и тоже будет работать годно.

Это стандартная практика бодишопов. Контор в которых не интересует результат.
В том же Samsung-е за такие скрам-аджайл псевдотехнологии больно били по рукам.

Если второе, то разве это не безграмотно со стороны работодателя, писать такие формулировки в вакансии? Ведь стандартная библиотека C++ не включает в себя STL. Я специально просматривал черновик стандарта языка C++ — там нигде, абсолютно нигде не встречается ни аббревиатура «STL», ни словосочетание «Template Library».
После подобного опуса большинство отсталых американских компаний закроют двери перед носом. Почему-то классическая проблема "программистов C++ с небольшим опытом" - это горе от ума. Особо умные это горе зашлифовывают Александреском и превращают его в настоящую беду. Вторая классическая проблема - они свято верят, что на новой работе им дадут сырую версию компилятора C++14 с неменее сырой std, чтобы они могли использовать все самые последние вкусности, иначе потом приходят со щенячими глазами полными слёз и начинают рассказывать про отсталую версию компилятора, которая не понимает апостроф в качестве цифрового разделителя и что так работать невозможно. А горькая правда жизни в том, что вполне могут дать g++ 2.95.4 и Dinkum STL, ибо оно сертифицировано для mission critical, а остальное нет.
После подобного опуса большинство отсталых американских компаний закроют двери перед носом. Почему-то классическая проблема "программистов C++ с небольшим опытом" - это горе от ума. Особо умные это горе зашлифовывают Александреском и превращают его в настоящую беду.
Эт про меня ;)
После подобного опуса большинство отсталых американских компаний закроют двери перед носом.
Знаете, я буду только рад. Если компания собирается «закрывать двери перед носом» за подобный вопрос от в целом неглупого человека, который просто слишком мало крутился в сообществе программистов и не имеет достаточно опыта чтобы на лету всё правильно понимать, — значит, мне там и правда не место.
Особо умные это горе зашлифовывают Александреском
Про джунов, перечитавших Александреску, я слышал немало (даже больше, чем про 23-летних сеньоров). И тем не менее, в самих методиках Александреску я ничего плохого не вижу. Другое дело, что они в продакшне нужны очень и очень редко. Плохо — это лепить его приёмы везде, даже где они не в тему; пытаться запихнуть в компайл-тайм то, что без ощутимых потерь можно было в разы проще сделать в рантайме через виртуальные функции и прочие всем хорошо известные вещи. Плохо — наплевательски относиться к интересам команды, у которой сейчас может и не оказаться времени на разбирательства во всякой темплейтной магии. Вот где настоящие проблемы. А в самих по себе техниках, описанных Александреску, нет ничего плохого: нужно просто уметь их применять вовремя, и — что более важно — знать, когда следует воздержаться от их применения.
Вторая классическая проблема — они свято верят, что на новой работе им дадут сырую версию компилятора C++14 с неменее сырой std
С++14 сейчас не полностью поддерживается даже в последних версиях g++. Я не особо опытный, но не идиот всё-таки.
Но вот C++11 уже давно не настолько сырой. Фейсбук давно юзает gcc 4.8.x, например (хотя из-за потерь в скорости на ~4% переход у них занял немало времени). Так что поддержка C++11 на рабочем месте меня бы действительно порадовала. Хотя если там и правда будут причины использовать более старый компилятор, а всё остальное в условиях работы меня будет устраивать, то почему бы и нет. «Вкусности» С++11 для меня действительно желательны, но не обязательны.
Знаете, я буду только рад. Если компания собирается «закрывать двери перед носом» за подобный вопрос
Обвинить всех работодателей в безграмонтности, а потом удивляться почему? :)

— Доктор, меня никто не любит, никто не хочет со мной общаться!.. Может,
хоть ты мне поможешь, мерзкий, злобный старикашка?! ©

А в самих по себе техниках, описанных Александреску, нет ничего плохого: нужно просто уметь их применять вовремя, и — что более важно — знать, когда следует воздержаться от их применения.
Плохо делать плохо, надо делать хорошо © универсальный совет.
Фейсбук давно юзает gcc 4.8.x
А гугл держит С++11 в глубоком бане и смотрит в сторону clang. И правильно делает.
Так что поддержка C++11 на рабочем месте меня бы действительно порадовала.
Формочки рисовать?
Хотя если там и правда будут причины использовать более старый компилятор
Вот взять Electronic Arts, вполне используют современные компиляторы, только не используют стандартную библиотеку, а используют свой EASTL ( github.com/...paulhodge/EASTL ). И я их прекрасно понимаю.
Обвинить всех работодателей в безграмонтности, а потом удивляться почему? :)

— Доктор, меня никто не любит, никто не хочет со мной общаться!.. Может,
хоть ты мне поможешь, мерзкий, злобный старикашка?! ©

И где я их обвинял? Я просто задал вопрос, не считается ли в C+±сообществе безграмотным так говорить. Если не считается, то ок, бога ради. Найдите мне, где я утверждал, что это безграмотно и называть стандартную библиотеку контейнеров/алгоритмов/итераторов «STL» категорически нельзя.
А гугл держит С++11 в глубоком бане и смотрит в сторону clang. И правильно делает.
Во-первых, почему Фейсбук неправильно делает? Хочу услышать аргументы, а не голословное «правильно/неправильно». И что, по-Вашему, «правильного» в бане move-семантик, дедукции типов с помощью auto, лямбд, или тех же range-based циклов, которые уже давно есть в каждом современном уважающем себя языке программирования?
Во-вторых, Ваша информация насчёт гугла и бана C++11 устарела:
google-styleguide.googlecode.com/...uide.html#C 11
google-styleguide.googlecode.com/...guide.html#auto
google-styleguide.googlecode.com/...alue_references
google-styleguide.googlecode.com/...nd_nullptr/NULL
google-styleguide.googlecode.com/...se_of_constexpr
google-styleguide.googlecode.com/...bda_expressions
google-styleguide.googlecode.com/..._Smart_Pointers
и т.д.
Формочки рисовать?
Если это была такая остроумная шутка, то она явно слишком тонкая и требует расшифровки кем-то из сеньоров для неопытного джуна.
Если Вы считаете, что C++11 делали для того, чтоб «формочки рисовать», лучше погуглите поподробнее, что же этот стандарт действительно предлагает. А то из Ваших ответов складывается впечатление, что Вы вообще не знаете, о чём говорите.
Вот взять Electronic Arts, вполне используют современные компиляторы, только не используют стандартную библиотеку, а используют свой EASTL ( github.com/...paulhodge/EASTL ). И я их прекрасно понимаю.
Я тоже понимаю. Я никогда и не говорил, что все обязаны использовать STL. Просто немного удивился, что многие его не знают. Для меня STL воспринимается как неотъемлемая часть языка C++ — пусть и во многих проектах вовсе не обязательная к использованию. Ведь наверняка те же самые EA, прежде чем сесть и написать свой EASTL, сели и изучили стандартную реализацию STL и нашли в ней недостатки, которые бы они хотели исправить.
Найдите мне, где я утверждал, что это безграмотно
Вот тут:
«разве это не безграмотно со стороны работодателя, писать такие формулировки в вакансии?»
Хочу услышать аргументы, а не голословное «правильно/неправильно».
Это будет вашим домашним заданием.
которые уже давно есть в каждом современном уважающем себя языке программирования?
Слишком запущенный случай.
Если Вы считаете, что C++11 делали для того, чтоб «формочки рисовать», лучше погуглите поподробнее, что же этот стандарт действительно предлагает. А то из Ваших ответов складывается впечатление, что Вы вообще не знаете, о чём говорите.
Ещё бы, только молодой и перспективный С++ программист знает о чём он говорит.
и изучили стандартную реализацию STL и нашли в ней недостатки, которые бы они хотели исправить.
Когда вы поймёте, что нет ничего более нестандартного, чем стандартная библиотека, тогда, пожалуй, можно продолжить беседу, но сейчас слишком рано ещё.

Как говорят в этих ваших интернетах, слив засчитан. По всем пунктам.

Почему-то сегодня вспомнил про этот древний топик.

Когда вы поймёте, что нет ничего более нестандартного, чем стандартная библиотека, тогда, пожалуй, можно продолжить беседу, но сейчас слишком рано ещё.

Больше пяти лет прошло, а я всё ещё не понял. И не пойму. Потому что это объективно неправда — как и большая часть того, что ты и другие уважаемые синьоры здесь писали.

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

До этого ещё два года работал в одной конторке со своей самописной «EASTL». Хоть это и не std, но принципы те же, всё знакомое — хоть с первого дня бери и пользуйся без вопросов, если в std разбираешься.
Я даже успел законтрибьютить туда пару покращень, ведь я адепт Александреску (не из тех, которые тебе лично встречались; я умею использовать подобную магию дозированно и с умом — а раз в год такие знания и действительно пригождаются).
Без знаний стандартной библиотеки новому программисту было бы в разы тяжелее разбираться с таким проектом, а работодателю — вводить нового сотрудника в курс дела. В любом случае её знания важны.

Так что для меня и многих других программистов стандартная библиотека вполне себе стандартна. Даже если проектов, использующих её непосредственно напрямую, не очень много — их всё ещё хватает. Библиотек гораздо более нестандартных и экзотических в мире явно куда больше.

Твой пример про «щенячьи глаза» тоже был мимо кассы. Тема используемого стека технологий действительно обсуждается на собеседованиях обеими сторонами: соискателя не устраивает предлагаемый стек технологий — он идёт искать дальше; устраивает — работает и не ноет. Я ещё тогда думал, что так должно быть, но подтверждений у меня не было. Сейчас они есть.
Я, конечно, без понятия, кто там к тебе приходил со «щенячьими глазами» и плакался про апострофы. Верю, что такие люди могут существовать в этом мире, хоть и лично пока не встречал. Но это явно исключение из правил, ко мне (и, уверен, большинству подобных джунов) никакого отношения не имеющее. Так что обобщать подобные случаи и выдавать их за правило тебе не стоило.

Что касается

Вот тут:
«разве это не безграмотно со стороны работодателя, писать такие формулировки в вакансии?»

— я действительно просто задавал вопрос (признаю: вопрос глупый, но тогда он мне казался нормальным, ведь я в то время находился преимущественно в академической среде, где к терминам и формулировкам придирались очень жёстко и за словосочетание «самый оптимальный» могли с пары выгнать). А не обвинял кого-то — такого у меня даже в мыслях не было.
Если человек видит в подобном вопросе обвинение, воспринимая всё на свой счёт и принимая так близко к сердцу, — это проблема исключительно его личной закомплексованности. С такими я бы дела не имел что тогда (потому что они бы «закрыли дверь перед носом»), что сейчас (потому что сам их пошлю куда подальше). Предпочту найти чуть менее истеричного работодателя.

А ещё гугл не держал в «глубоком бане» C++11 (видимо, ты тогда с эксепшенами попутал), а сам этот стандарт не предлагал абсолютно ничего для рисования формочек.

В общем, какой вывод можно сделать из этой истории...
Когда взрослеешь, понимаешь, что «взрослых» на самом деле не существует.
То же самое с синьорством: когда оглядываюсь, что здесь писали некоторые синьоры, — понимаю, что «синьоров» тоже не существует.
Существуют просто программисты с чуть большим опытом в какой-то специфической области — и чем больше этот опыт, тем более «biased» будет их мнение насчёт используемого языка программирования или даже индустрии в целом. Начинаются попытки натянуть сову на глобус, а ля «на моём опыте было вот так — значит так оно обычно и бывает»; упускается из виду тот факт, что даже если человек поработал в 50 конторах, а не 5, — в мире их десятки, а то и сотни тысяч, у каждой свои проекты со своей спецификой, на фоне чего даже опыт такого крутого синьора не репрезентативен.

tl;dr
Джуны, не слушайте синьоров с ДОУ! Во многих вопросах они такие же «джуны», как и вы :)

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

Нет ничего плохого в том, чтобы сначала «выбрать молоток», а потом найти ему применение,

If you start wielding a hammer, then all your problems look like nails. ©

Поговорка прикольная, да. Для кого-то это может и так. Но на всех проецировать — глупо.

на всех проецировать — глупо

до чого це сказано?

До того, що не всі, хто обрав молоток в якості основного інструменту, скрізь бачать лише цвяхи.

Когда вы поймёте, что нет ничего более нестандартного, чем стандартная библиотека, тогда, пожалуй, можно продолжить беседу, но сейчас слишком рано ещё.
Больше пяти лет прошло, а я всё ещё не понял. И не пойму. Потому что это объективно неправда — как и большая часть того, что ты и другие уважаемые синьоры здесь писали.

Ты только подтверждаешь написанное, потому что видать не используешь и 10% её. Из сегодняшнего LLVM’овская libstdc++ не поддерживает -frounding-math опцию в LLVM и GCC. Везде напихали constexpr и тут вдруг константы стали не совсем константы. Невозможно подключить многие стандартные хэдеры. Из вчерашнего, куча гнушного софта на С++ считают, что если подключить string хэдер, то vector подключится автоматически, в двух других С++ STD библиотеках — хрен там, полностью изолированы. Из позавчерашнего — aligned new в C++17, когда один проект собран с -std=c++14, а второй с -std=gnu++14, который подключает части C++17, выделение внутри библиотеки, а освобождение в хедерах, которую подключают в другом месте — Happy debugging, suckers!

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

Сейчас отвечу по пунктам и побуду в какой-то мере «адвокатом» C++, но сначала хочу внести ясность: я не являюсь каким-то ярым пропагандистом C++ и не призываю других людей на их проектах использовать этот язык или его стандартную библиотеку. Каждый работает с тем, что ему подходит с учётом всех обстоятельств.
Я охотно верю, что существует масса проектов (в твоей предметной области, как я понял, их подавляющее большинство), где использование стандартной библиотеки C++ не оправдано из-за обилия проблем вроде той с -frounding-math. И в таких случаях, конечно, даже я буду согласен с тем, что использовать стандартную библиотеку в частности или даже язык C++ в целом может быть плохой идеей. Но не потому, что они плохие, а потому, что их поддержка на этих конкретных целевых платформах пока ещё слишком несовершенна. Это ожидаемо, если уж в эмбеддеде C++ не так популярен и всем рулит по большей части чистый C — а поддержку плюсов реализуют уже вторым/третим/пятым приоритетом.
Мой месседж был в том, что не стоит подобный опыт слишком обобщать. Ибо мне, например, вне эмбеддеда со стандартной библиотекой плюсов работается в целом вполне комфортно. В моей практике проблемы с конкретными имплементациями тоже иногда возникают, но больших проблем не создают и быстро решаются или обходятся. У каждого здесь будет свой опыт в зависимости от массы факторов.

видать не используешь и 10% её

Если бы вместо 10% стояло 50%, я бы ещё кое-как мог согласиться. А так нет, использую явно больше.
Возможно (судя по твоим примерам проблем), ты вкладываешь несколько другой смысл в понятие «использовать стандартную библиотеку» — мол, не просто писать код с std под парочку ОС, а переносить его между кучей сильно отличающихся платформ, где на каждой что-то не до конца реализовано или работает криво, и ещё и собирать это, миксуя разные флаги. Если так, то да, не использую.

LLVM’овская libstdc++ не поддерживает -frounding-math опцию в LLVM и GCC

Это то, о чём я писал в здесь начале: плохая/отсутствующая поддержка какой-то опции (к тому же, о которой стандарт C++ ничего не знает) в конкретных компиляторах или конкретных реализациях стандартной библиотеки — вина соответствующих вендоров, а не C++.

Везде напихали constexpr и тут вдруг константы стали не совсем константы.

constexpr константы вполне себе остались константами. Даже больше: это константы + к тому же юзабельные в компайл-тайме.
Не константы, но похожее на constexpr — это constinit из C++20. Эти недоконстанты требуют только быть инициализированными во время компиляции, а в рантайме их, в отличие от constexpr, уже можно менять.
Если же ты имел в виду constexpr функции, то это такой себе inline + возможность вызова в компайл-тайме (при условии доступности всех аргументов в компайл-тайме).
Да, шаблонные функции в стандартной библиотеке по возможности делают constexpr там, где это возможно. Потому что почему бы и нет. Никаких минусов (кроме головной боли для разработчиков компиляторов), а преимущества это может дать, может не дать, в зависимости от юз кейсов.

Если что-то не понятно про constexpr или по другим темам C++, я могу попробовать объяснить детальнее. Мне, как и тебе, на всякие срачи тратить силы не особо охота (просто сегодня уж так вышло, что чёт вспомнилось это обсуждение и я решил сюда отписаться) — но вот на конструктивные разговоры о C++ я с удовольствием время найду. По знаниям конкретных платформ мне с тобой не тягаться (сам уже три года как кроме x64 под виндой/msvc и линуксом/gcc ничего в работе не использовал) — но объяснить, как язык себя должен вести при условии, что вендор не подкачал, я в большей части случаев могу доступно.

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

В смысле невозможно? Их же и не подключали ведь. Кто-то решил завязаться на то, что по чистой случайности конкретная имплементация стандартной библиотеки делает инклюд одного хедера внутри другого, чего стандарт никогда не требовал и не гарантировал. Сюрприз: на других имплементациях std это внезапно не работает. Сами виноваты.
Правильно использовать стандартную библиотеку подразумевает в том числе включать явно все необходимые хедеры, в которых определяются используемые фичи: заюзал std::unique_ptr — подключи memory, std::pair — utility, и т.д.

Из позавчерашнего — aligned new в C++17, когда один проект собран с -std=c++14, а второй с -std=gnu++14, который подключает части C++17, выделение внутри библиотеки, а освобождение в хедерах, которую подключают в другом месте — Happy debugging, suckers!

Жесть. У нас когда-то было нечто подобное, когда мы подключали либы, собранные древней версией msvc, к новому проекту.
Вообще C++ как язык ничего не говорит о том, насколько будут совместимы проекты, собранные с разными ключами. Он абсолютно никак не определяет такие моменты — всё остаётся на совести конкретных вендоров.
Так что миксовать подобные вещи без явной гарантии совместимости от разработчиков тулчейна — довольно таки стрёмно.

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

Ну вот. Теперь тебе, надеюсь, понятная эта фраза:

нет ничего более нестандартного, чем стандартная библиотека

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

А то из Ваших ответов складывается впечатление, что Вы вообще не знаете, о чём говорите.
ну це повнний ппц, якийсь с-раний джун самого МГ звинувачає, це явно перебір

Ну це повний ппц, якийсь с-раний троль («23-лєтній сєньйор») знов нічого по суті сказати не може і намагається неаргументовано траліровать. Йди вчи 1C, ембеддед лайно.

А гугл держит С++11 в глубоком бане
А еще Google держит в бане использование исключений, тоже правильно делает?

Использование исключений у гугла это отдельный разговор. Если внимательно почитать вот это
google-styleguide.googlecode.com/...html#Exceptions,
становится понятно, что сейчас они не слишком довольны таким решением. Просто им приходится продолжать ему следовать, поскольку перед этим у них была написана огромная база кода, которая бы при разрешённых исключениях могла вести себя некорректно. И переписывать её уже никто не будет. Посему им просто приходится следовать такой политике, и не то чтобы им это сильно нравилось. "Things would probably be different if we had to do it all over again from scratch."©

Да.

Насправді в гуглі (в тій частині, що займається самою платформою Андроід, її сишною-плюсовою частиною) сидять або приймають рішення ідіоти.

Спочатку вони заявили, що плюсів в них не буде, хай всі на джаві пишуть. Але (дивно, так?) ніхто не кинувся переписувати свої сішні-плюсові програми на їхню джаву.

Далі вони таки дозволили використовувати сі-плюси й зробили NDK. Але заявили, що STL дуже велика, її не буде щоб зекономити пам’ять (!), а ексепшени — тормознуті, тому не буде ані ексепшенів, ані STL. Народ почав компіляти свою STL та gcc з ексепшенами. По одному STL на кожну портовану плюсову програму — зекономили називається.

У тій частині що я бачив NDK, там найтивні чисто С бібліотеки, плюсами мало пахне.
Тобто той же С Лінукс, який з нелюбов"ю Торвальдса до хрестів.

Спочатку там не було плюсів взагалі, бо ці дебіли вирішили зекономити пам’ять і не стали вимагати від портів наявності плюсів, тільки libz, свого кастрованого та бажного libc — bionic (особливо, пам’ятаю, мене бісило що завдяки цім економістам пов’язані з локалями функції цієї недо-libc вертали нульовий вказівник замість строки «С» — тобто, стандартна сішна локаль; тому простий std::cout << 0.0f крашив програму) та ще декількох андроїд-специфічних ліб. Теж саме стосується і ексепшенів — мовляв, таблиці багато пам’яті жеруть. Це я не з голови взяв, це те, що їх розробники писали в гугл-групс в якості обґрунтування.

Але ця «економія» обернулась тим, що люди перекомпілювали gcc з NDK врубивши ексепшени і почали компіляти libstdc++. І кожна плюсова програма портована на Андроїд почала тягати з собою свій власний libstdc++. Іноді одразу під декілька архітектур, якщо перформанс був важливий. Бо дефолтна там була застарілою вже під час виходу перших моделей. Ото зекономили так зекономили.

Згодом ці дебіли додали таки libstdc++ в NDK, але тільки як статік лібу (і кому вона статік нафіг потрібна, якщо портуєш не-GPL’ну програму?), що не вирішило ані проблему з пам’яттю ані геморой з перезбіркою NDK, який перезбирали щоб отримати динамічну libstdc++.

Що там було далі не знаю, бо зав’язав з Андроїд, але судячи з того, що ту збірку, що я деякий час юзав, все ще розвивають www.crystax.net/ru/android/ndk до ума вони свій NDK так і не довели.

-----

В підсумку. Чуваки вирішили зекономити пам’ять вирубивши ексепшени і libstdc++, що призвело до зворотних наслідків — збільшило її використання, та додало купу геморою розробникам програм під їх платформу. Згодом вони потроху почали відмовлятися від своїх дебільних рішень, але проблему це не зняло (і вже не могло зняти).

Тому кожного разу, коли хтось посилається на гуглевих плюсовиків або пропонує щось там зекономити я насторожуюсь і очікую, що зараз запропонують якусь х*ню від якої буде самий лише геморой.

ще раз повторю, якщо не зрозуміло: або натив на С, або Жаба
СРР збоченці можуть або займатися збоченням, або назло кондуктору купити квиток та йти пішки.
підсумую:
Андроід = Лінупс ядро + ДалвікВМ,
і камасутра обмежується пуреС + мутована Жаба.
А впердолюватии хрести туда, ну це на любителя нетрадаційного секасу.

По-перше

кондуктору
Це називається вахтер.

По-друге

ще раз повторю, якщо не зрозуміло: або натив на С, або Жаба
Щось ніфіга не зрозуміло. Кому ти це повторюєш? Не пиши на плюсах, якщо не можеш, я тебе не заставляю.

Во мля, зі здорової голови на хвору.
ти ж плаченшся на їдійотів у Гуглі, які тобі банять хрести в Анроїді (імхо правильно роблять нема чого ацкий ад розводити в ОСі Добра).
Мені пох, могу на Ц, можу на Жабі, могу на хрестах, але якщо є можливість замість хрестів викорастати Жабу, буду бидлокодити на Жабі, хрести лишу для естетів.

Андроід = Лінупс ядро + ДалвікВМ

А нехилый кусок нативного ОО-фреймворка куда делся? Binder, Flinger’ы, MediaServer, вот это всё.

то є Сі з класами, а не Ъ хрести.

Ага, щаз. Там плюсы с CORBA-подобным ООП во все поля. C с классами начинается на уровне HAL’ов.

А горькая правда жизни в том, что вполне могут дать g++ 2.95.4
Горькая правда жизни в том, что это Вам дали g++ 2.95.4. Безусловно его могут дать и другим, но могут и не дать, и практика показывает, что чаще не дают.
иначе потом приходят со щенячими глазами полными слёз и начинают рассказывать про
О, да! Это ведь так надежно использовать стабильную версию компилятора, стабильную версию ОС, системы контроля версий и всего другого. Не удивлюсь, если ряд Ваших предпочтений продолжат умозаключения: никаких IDE, ассемблерные вставки и арифметика с фиксированной точкой на целочисленных переменных.
Горькая правда жизни в том, что это Вам дали g++ 2.95.4. Безусловно его могут дать и другим, но могут и не дать, и практика показывает, что чаще не дают.
Где писал, что мне дали?
Не удивлюсь, если ряд Ваших предпочтений продолжат умозаключения: никаких IDE,
Куда же ж формошлёпам без IDE? Основной инструмент шлёпства...
могут дать g++ 2.95.4 и Dinkum STL
Кожному своє. Дозволений інструментарій — це така ж важлива частина офера як зарплата чи предметна область.

О, g++ 2.95 — узнаю хармановские ембеддед проекты под QNX

Просто совпадение, в те далекие и мохнатые времена у QNX был 2.95.3 компилятор, но это уже давно не так.

Для многих mission/life critical applications это до сих пор является единственным доступным набором.

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

Обоснуйте

в плані НТП — так, в плані розвитку людини розумної — ні, досі вирішують питання методами варварів

пишут отдельным пунктом: «experience with STL». Как это понимать?
понимать как стандартную библиотеку плюсов
Если второе, то разве это не безграмотно со стороны работодателя, писать такие формулировки в вакансии?
можно крайнюю часть жизни педалить на плюсах неиспользуя ничего из std (например полностью на Qt).
пункт для тех кто в танке

Пардон, в каком месте она узкая? Да и при такой специализации куда легче работу найти.

Спасибо за ответ. В принципе, мне эти вещи уже объяснили ниже.
Хотя я всё равно пока не понимаю, как можно знать только Qt, не зная хотя бы контейнеров из стандартной библиотеки плюсов («STL»), если у них даже интерфейсы совместимы.

Хотя я всё равно пока не понимаю, как можно знать только Qt, не зная хотя бы контейнеров из стандартной библиотеки плюсов («STL»), если у них даже интерфейсы совместимы.
Как можно писать на плюсах не зная архитектуры ОС, под которой будет выполнятся программа. Да 90% таких.

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

Народ блаженно верует что библиотеки их достаточно абстрагируют от ОС :)))

ОС это тоже абстракция над железом, только я не совсем понял к чему вы это?

в том что это на самом деле недостаточная абстракция в 80% случаев. Майк ниже это отлично проиллюстрировал на примере std::thread.

Ну так с таким же рвением можно и до электронов докопаться.

std:thread

1-й пример. Какой приоритет будет у вновь созданного потока?
2-й пример. Какая гарантия того, что вновь созданный поток получит управление вообще?
3-й пример. По какому алгоритму будут переключаться созданные потоки в рамках одного приложения?

Т.е. я правильно понимаю, что на С++ можно написать такой код, который под одной ОС будет работать, а под другой — категорически нет?

Bingo!

Не верю! Приведите, пожалуйста, пример такого кода, и название операционных систем где он не работает игде работает.

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

Да ради бога, кокая для меня трогедия :) Процесс, написанный на С++ запускается не на абстрактной машине (которая даже не требует стека для своей работы согласно С++ стандарту), а на реальной под управлением операционной системы. Если запустить процесс с дефолтным приритетом, но при этом все другие процессы в системе будут с повышенным приоритетом, то при постоянной работе потоков с повышенным приоритетом потоки с пониженным приоритетом могут не получить управления вообще. Пример хотите?

void foo()
{
cout << «Invisible message»;
}

int main()
{
std::thread failure (foo);
return 0;
}

С каким приоритетом будет создан поток foo на вашей системе? Будет ли он наследован от приоритета создавшего его процесса? Будет ли он пониженным относительно материнского процесса?

С каким приоритетом будет создан поток foo на вашей системе?
А разница? С точки зрения std::thread, результат неопределённый. Да и с других точек зрения тоже.
потоки с пониженным приоритетом могут не получить управления вообще
Это указывает на ошибку в программе, и не более того. Слова «с пониженным приоритетом» можно убрать.
С точки зрения std::thread, результат неопределённый. Да и с других точек зрения тоже.
Напишите это в эпиграфе в документации для вашего продукта.

Нельзя полагаться на знание алгоритма работы планировщика, он может (и будет) по разному работать в зависимости от общей загрузки системы. Или вы хотите перед запуском поток измерять загрузку системы чтоб задействовать разные алгоритмы работы в вашей программе?

За код спасибо, проблему демонстрирует, но только я не совсем понял какой стандарт безопасности запрещает использовать join().

Нельзя полагаться на знание алгоритма работы планировщика, он может (и будет) по разному работать в зависимости от общей загрузки системы
Да ну? А как же предсказуемость?
Или вы хотите перед запуском поток измерять загрузку системы чтоб задействовать разные алгоритмы работы в вашей программе?
А может сделать их конфигурируемыми извне?
но только я не совсем понял какой стандарт безопасности запрещает использовать join().
Я тоже, ведь про join() речь вообще не шла, т.к. в данном примере он просто не случится при неудачно сложившихся обстоятельствах.
Я тоже, ведь про join() речь вообще не шла,
Тогда с точки зрения С++11 этот код некорректен. Так уж устроены std::thread’ы: либо поток джойнится, либо детачится, либо его деструктор убивает выполнение всего приложения.
Если эти требования не устраивают разработчика — ему не следует использовать std::thread.
Тогда с точки зрения С++11 этот код некорректен
Обоснуйте.
Нет, я в целом с вами согласен, но беглым поиском я не нашел что нужно обязательно использовать join().

Погуглите про деструктор std::thread, я тут где-то рядом давал ссылку уже.
Или, ещё лучше, почитайте книгу Скотта Мейерса «Effective Modern C++», Item 37 («Make std::threads unjoinable on all paths»).

Тогда с точки зрения С++11 этот код некорректен. Так уж устроены std::thread’ы: либо поток джойнится, либо детачится, либо его деструктор убивает выполнение всего приложения.
В данном случае не суть важно, ведь поток даже может не запуститься, я пытаюсь донести именно эту мысль.

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

Может не запуститься, пока мы не вызовем join(). Но когда мы его вызовем и создавший его поток будет ждать, созданный поток ведь должен будет запуститься, рано или поздно.

Может не запуститься, пока мы не вызовем join()
Нет такой взаимосвязи. Даже больше того, если поток ещё не запустился, а мы вызвали join(), то можно получить исключение т.к. поток ещё joinable().
Даже больше того, если поток ещё не запустился, а мы вызвали join(), то можно получить исключение т.к. поток ещё joinable().
Боюсь, Вы кое-что путаете. joinable — это атрибут не потока, который реально запущен в ОС; joinable — это атрибут объекта типа std::thread, который всего лишь связывает наш код с тем физически запущенным или не запущенным потоком.
Боюсь, Вы кое-что путаете. joinable — это атрибут не потока, который реально запущен в ОС
Боюсь, что не путаю. Стандарт говорит об явном сравнении идентификатора нового потока (tid) с tid материнского потока. Если мы получили tid, по поток как бы создался операционной системой. Как оно реализовано в std::thread — очень платформозависимо. Также нет явного требования является ли std::thread конструктор блокирующим или нет.

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

Стандарт не то что «запрещает» — он требует, чтобы поток был либо приджойнен, либо отдетачен, иначе деструктор std::thread’а убьёт всё приложение. Радикальное решение, но довольно обоснованное.

Код «корректен» — вылетает (или не вылетает) в зависимости от неопределённых обстоятельств.

Полагаться на какое-то определённое поведение этого кода (тред получит управление, тред не получит управления, тред завершится, тред не завершится) — некорректно.

Это называется race condition.

А можно всё же пример кода? Хоть самый маленький. Хочется взглянуть на реальный код, который не работает (вот вообще не работает) на какой-то конкретной ОС несмотря на то, что с точки зрения C++11 он должен работать.

То, что Вы перечислили в том посте, больше похоже на implementation-defined behavior. Стандарт ведь и не гарантирует ничего касательно приоритетов, алгоритма переключения между потоками и т.д. — для более тонкого управления подобными вещами в любом случае приходится пользоваться платформозависимыми средствами.

На какой ОС возможно, например, что код из вот этого примера не выполнится из-за того что треды никогда не получат управление?
en.cppreference.com/w/cpp/thread/thread/join

То, что Вы перечислили в том посте, больше похоже на implementation-defined behavior.
А запускать свою программы вы собираетесь на абстрактной сферической С++ машине? Или на реальной, если на реальной, то см.
dou.ua/...orums/topic/12773/#655653

Запускать буду на реальной, как ни странно. Любая реальная машина обязана выполнять то, что требует стандарт. И не обязана делать того, чего стандарт не требует. В этом и состоит сложность кросс-платформенной разработки на C++. Которая, вообще, не всегда возможна, если приходится к примеру зависеть от тех же приоритетов потоков или алгоритма их переключения.

Но писать код я буду либо так, чтобы он не зависел от таких вещей, либо, если это невозможно или если чётко было сказано, для какой платформы мы его пишем, буду разбираться с соответствующими платформозависимыми средствами и использовать их вместо тех же std::thread.

В этом и состоит сложность кросс-платформенной разработки на C++.
Даже не кросс-платформенной, а просто платформенной, а так всё верно.

Не буду категорически заявлять «не верю», но присоединяюсь к этой просьбе:

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

Конечно, я знаю, что std::thread обычно является всего лишь обёрткой над какой-то другой, зависимой от платформы библиотекой (pthread, windows threads, etc.), я понимаю, что какой-то код может вести себя по-разному в плане приоритетов и других вещей, которые Вы перечислили. Но чтобы код, считающийся standard-conforming с точки зрения C++11, вообще не работал на какой-то ОС — очень хотелось бы взглянуть на пример.

void foo()
{
char a[1024*1024];

memset(a, 0×00, 1024*1024);
}

int main()
{
std::thread failure (foo);

return 0;
}

run it on Linux, Windows, QNX, Mac OS X.

Подозреваю, что перед return 0; требуется failure.join();. Уничтожение std::thread’ов, которые были созданы, но к которым не применили ни join, ни detach, вызывает крах всего приложения. Так что .join() пришлось добавить.

Я запустил этот код на винде и линуксе (увы, QNX и Mac OS X сейчас в моём распоряжении нет) — проблем не возникло.

Можете объяснить на словах, какие проблемы с ним могут быть? На каких ОС созданный поток может никогда не получить управление, даже если главный поток наткнётся на failure.join() и остановится там? Или Вы имели в виду, что memset() может что-то поломать из-за каких-то проблем с выравниванием?

Подозреваю, что перед return 0; требуется failure.join();. Уничтожение std::thread’ов, которые были созданы, но к которым не применили ни join, ни detach, вызывает крах всего приложения. Так что .join() пришлось добавить.
It depends. См. orphaned threads.
Я запустил этот код на винде и линуксе (увы, QNX и Mac OS X сейчас в моём распоряжении нет) — проблем не возникло.
В MacOS X размер стека по дефолту был 512Kb для созданного потока. В QNX 128Kb.
На каких ОС созданный поток может никогда не получить управление
В любых, где есть приоритеты потоков.

Какие приоритеты, какие orphaned threads?

It depends
Да! зависит от шедулера ОС. Или другими словами: undefined behavior.
Да! зависит от шедулера ОС. Или другими словами: undefined behavior.
Это я и пытаюсь донести.

Уточняю: результат работы этого кода зависит от того, что для C++ есть undefined behavior. Независимо от ОС.

Любой результат работы (вылет, не-вылет, строка написана, строка не написана) будет правильным.

Я к чему:

на С++ можно написать такой код, который под одной ОС будет работать, а под другой — категорически нет?
конкретно этот код будет работать, правильно, под любой из перечисленных ОС. В смысле делать то, что ему стандартом предписывается: завершаться корректно *или* вылетать.
конкретно этот код будет работать, правильно, под любой из перечисленных ОС. В смысле делать то, что ему стандартом предписывается: завершаться корректно *или* вылетать.
Да, будет работать правильно, но совершенно по разному. Разве от этого становится легче?
It depends. См. orphaned threads
Спасибо, про orphaned threads обязательно почитаю. Но всё же конкретно в случае стандартной библиотеки C++11 и конкретно std::thread этот момент вполне определён:
en.cppreference.com/...cpp/thread/thread/~thread
Если тред в момент разрушения является joinable, как это может оказаться во время выполнения Вашего примера, обязательно вызовется std::terminate(). Это вводит дополнительные ограничения, но избавляет от некоторых неоднозначностей. Как раз то, что нужно для кроссплатформенной разработки (или когда попросту не приходится зависеть от подобных вещей); для остальных же случаев std::thread не является хорошим выбором.
В MacOS X размер стека по дефолту был 512Kb для созданного потока. В QNX 128Kb.
Не знал. Вообще, я редко выделяю на стеке такие большие массивы. Но спасибо, буду иметь в виду, если когда-нибудь столкнусь с этими платформами.
В любых, где есть приоритеты потоков.
Даже при наличии .join()? То есть, реально вот этот пример
en.cppreference.com/w/cpp/thread/thread/join
может зависнуть или вылететь на некоторых платформах?
Даже при наличии .join()? То есть, реально вот этот пример
en.cppreference.com/w/cpp/thread/thread/join
может зависнуть или вылететь на некоторых платформах?
Я говорю о том, что до join() может и не дойти.

Будь яку річ можна назвати трамваєм, якщо про це домовитися. Є окремо стандарт, який не читали 50% розробників C++. Є товариство розробників, де є свої усталені терміни. Кожен розробник С++ зрозуміє, про що йдеться мова, коли у вимогах стоїть «experience with STL». А якщо хто почне тролити на цю тему, то я буду думати, а чи потрібен цей спеціаліст?

Є таке поняття «ентимема». Це те, про що мають на увазі, але не висловлюють явно. Наприклад:
— Хочете кави?
— Дякую, але після кави я не зможу заснути.
Якщо формально перевести на мову логіки, то ще безглуздя. Але будь яка людина зможе відтворити пропущений крок: «мені треба заснути». Без ентимем наша мова була б суцільної тавтологією. Неможливо написати документ та врахувати всі розбіжності.

Так що спеціаліст з такими схильностями може й цінний, але якщо надумає саботувати роботу, пояснюючи тим, що завдання поставлено не зовсім чітко, то зробить пекло усій команді... Наприклад, запропонуєш використати STL, а він день потратить не те, щоб знайти оригінальну версію від Степанова, та ще тиждень буде адоптувати проект...

Так що порада, не загострювати увагу на таких дрібницях.

Ну, я не з тих, хто підриває роботу подібними приколами. Якщо мені буде щось незрозуміло — я скоріше перепитаю зразу, ніж буду

день потратить не те, щоб знайти оригінальну версію від Степанова

А загалом, дякую за розгорнуту і адекватну відповідь!

Автор, пиши еще! Давно на доу не было технических тем, одна политика занудная. Мне как разработчику на С++ без работы любопытны пути трудоустройства коллеги. Устроился уже куда?

хай пише, я багато чого новго взнаю, такий розумний джун

Та это не техническая тема даже. Так, провокация, чтоб потроллить сеньоров :) Как оказалось. Хотя изначально я её создавал не для этого. Но почему-то именно сеньоры бугуртят, в то время как простые смертные девелоперы спокойно отвечают. Любопытный социальный эксперимент.

Насчёт поиска работы. Я сейчас пишу диплом в универе (заканчиваю магистратуру в КПИ, защита в июне), так что работу так... потихоньку ищу, но не слишком интенсивно. Если до защиты не повезёт никуда такими темпами попасть с тем, что есть, то после неё уже буду более активно что-то предпринимать по этому поводу.
Пока что я постучался всего в три места. Недавно ответили из одного из них. Я получил от них тестовые задания. Выполнил, отправил решения, жду ответа. Больше пока ничего не было.

А автор-то с амбициями:) Ждем новый топик про то, какие глупые вопросы сеньоры на собеседованиях задают такому знающему джуну с претензиями)) Уже предвкушаю, как знатно Вы их валить будете, на ходу бросаясь точными пунктами стандарта)

можна я: «Зачем нужны frend классы/функции»?

Только после вопроса про виртуальные деструкторы))

Вирт. деструкторы — это боян и моветон, классика жанра.

Вот как пример сеньоры в Самсунге const до сих пор не научились применять, но сеньоры.
Значит їм воно не потрібно.
А що від цього виникають проблеми з Самсунговськими мобілками?

Ще є армія лемінгів. Піпл хаває.

Вот он — главный аргумент за const :)

Нахрена вам Самсунг и консты если у вас есть картоха :)

А если пожарить?)

Вот теперь мне окончательно захотелось есть!)

Их вообще кто-то использует?

Из того, что я слышал: некоторые используют для определения мелких внешних функций (не являющихся членами класса) внутри тела этого класса. В основном это касается swap() — чтобы ADL находил эту версию свапа, если она лучше подходит для данного класса, чем версия std::swap() по умолчанию.
Хотя с появлением move-семантик в C++11 это перестало быть актуальным.

хз, на днях запитував, і даже не сеньйор, а ТЛ!

А зачем про это новый топик создавать? Если меня что-то не устроит на собеседовании в какой-то компании, я просто не соглашусь работать у них. Ставить Вас в известность насчёт каждого такого случая я вряд ли стану, уж простите :) А очередной топик я создам, если захочу что-то спросить здесь у сообщества.
И Вы меня определённо переоцениваете, если считаете, что я буду

на ходу бросаясь точными пунктами стандарта)
Хоть сам язык я знаю в целом неплохо, но я не настолько крут :( И тем не менее, если я захочу узнать точный ответ на какой-то вопрос по языку C++, я сначала открою стандарт и попробуй найти ответ там. И, конечно, погуглю. Но если после этого у меня будут оставаться сомнения — не вижу ничего постыдного спросить, чтобы потом быть на 100% уверенным, что я правильно понял ту или иную вещь.
О том, что сейчас «STL» неформально называют именно ту часть стандартной библиотеки, а не оригинальную STL Степанова, я прекрасно знал. В гугле меня таки никто не банил. Но я также знал, что официально она так больше не называется. Вопрос был о том, насколько это корректно со стороны работодателя, писать «STL» в вакансии, имея в виду данную часть стандартной библиотеки C++. Считает ли сообщество это нормальным, или же кому-то это, возможно, режет слух. Ведь «одно кофе экспресо» тоже все прекрасно понимают, но ведь так говорить не корректно. Вот меня и интересовало, насколько нормально в C+±сообществе говорить «STL» в данном контексте. Относятся ли к этому, как к «одно кофе экспресо», или всё-таки считают нормой.

Як дитина.
Дєфачко-рекрутьор скомпілила опис вакансії, що далі?
Що з цього випливає?
Вас відшили на співбесіді і від цього какаєте цеглами.

Канєш відшили, екстрасенс Ви наш. Ще й сказали: «плюси лайно, вчи джаву». От, сиджу ща тут в сльозах, читаю «Філософію джави» Брюса Еккеля і пишу озлоблені каменти на ДОУ :(

Как зачем? Повыпендриваться, конечно. Извините, но по Вашим топикам сложилось впечатление, что Вы этим слегка грешите. Про

Если меня что-то не устроит на собеседовании в какой-то компании, я просто не соглашусь работать у них
слегка улыбнуло, обычно из джунов работодатели выбирают, а не наоборот, и когда нужен будет опыт реальный, согласитесь как миленький.
Как зачем? Повыпендриваться, конечно.
Не верите тому, что я написал раньше о причинах создания мною этого топика — Ваше дело. Можете думать обо мне, что хотите. Главное, что Вы и другие отписавшиеся здесь сеньоры ни разу не выпендриваются.
когда нужен будет опыт реальный, согласитесь как миленький.
Соглашусь, как миленький или как немиленький, если меня будут устраивать предложенные мне условия работы. А если нет — буду искать дальше. Дерзость какая, правда? Если отношение ко мне будет а ля «ты говно и мы будем об тебя вытирать ноги, как захотим» — я не соглашусь, даже если это будет Епам или киевский Самсунг (в котором можно не писать const).
Так что да, я тоже буду выбирать — нравится Вам это или нет. И здесь нет никакого противоречия с тем, что меня также должны будут выбрать из множества кандидатур.
Единственный уступок, на который я готов пойти ради реального опыта — это заниженная стартовая з/п. На моей прошлой работе у меня была ставка 1200$/мес., но профессионального роста там никакого не было (контора не программистская) — поэтому я ушёл оттуда. На новом месте я могу согласиться и на меньшую сумму, если там будет адекватный коллектив, в котором я смогу учиться чему-то новому и расти над собой.

А почему Вам можно выпендриваться, а нам нельзя? :)
И вдогонку — а как конкретно по интервью Вы хотите выяснить, будет ли «там» адекватный коллектив и что кто-то будет Вас учить чему-то новому?
И непонятно выглядит решение уйти с последней работы, не найдя заранее новой — может, дело было не только в отсутствии профессионального роста?

А почему Вам можно выпендриваться, а нам нельзя? :)
Ещё раз говорю: я не выпендривался. Если Вы это так воспринимаете — я не виноват.
а как конкретно по интервью Вы хотите выяснить, будет ли «там» адекватный коллектив и что кто-то будет Вас учить чему-то новому?
Буду задавать вопросы. Какие именно и в какой форме — это уже зависит от многих факторов. Конечно, стопроцентной гарантии чего-либо это не даст, но хотя бы в каком-то приближении я буду знать, чего ждать.
И непонятно выглядит решение уйти с последней работы, не найдя заранее новой — может, дело было не только в отсутствии профессионального роста?
Не только. Но был бы профессиональный рост — другие причины бы никогда не всплыли. Важно то, что я ушёл сам, при этом сохранив хорошие отношения с коллективом. Если я захочу вернуться — высока вероятность, что меня без проблем примут обратно. Так что разбазаривать все подробности моего ухода публично я не считаю правильным. Хотя если Вам так интересно — можете написать мне в личку.

Вы вообще-то сами тут подробностями раскидываетесь, про прошлую работу, зп и т.д. Мне просто стало любопытно.

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

Единственный уступок, на который я готов пойти ради реального опыта — это заниженная стартовая з/п. На моей прошлой работе у меня была ставка 1200$/мес., но профессионального роста там никакого не было (контора не программистская) — поэтому я ушёл оттуда.
а хто заважав дома пиляти “цікааві проекти”
професіонали тому професіонали, що отримують гроші за виконання роботи.
А тут: профріст подавай. От молодь пішла.
На новом месте я могу согласиться и на меньшую сумму
а що, півроку нікуди не беруть?
так за той час можна було вивчити Java або на худий кінець С-дієз.

Джава лайно, учи Turbo Pascal.

професіонали тому професіонали, що отримують гроші за виконання роботи.
Можно и весь профессионализм растерять если выполнять просто работу за деньги.
На новом месте я могу согласиться и на меньшую сумму, если там будет адекватный коллектив, в котором я смогу учиться чему-то новому и расти над собой.
альтруизм и самоотверженность это конечно клево, но с таким подходом ты легко найдешь только работодателя-жлоба, который мало платит и поэтому коллектив скорее всего технически очень слаб, а то давно бы уже свалил к другому работодателю => хочешь профессиональный рост? — ищи где больше платят

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

Забавно, что бугуртят с моего вопроса именно сеньоры :)
Дебил, который крутится в айтишном окружении (особенно если в крупной компании), понимает всё, даже если он дебил. А для меня, проработавшего программистом больше года в конторе, где на вопрос «можно ли использовать буст?» отвечали «а что такое буст?», а на попытки писать const-корректный код катили бочку «зачем ты столько констант подобавлял?!», подобные вопросы не кажутся такими тривиальными.

А по мойму Вы просто пытаетесь троллить . Т.к я не верю что у Вас забанен гугл. Первая же ссылка stackoverflow.com/...ok-to-learn-stl И кстати, некоторые крупные корпорации не прользуют STL и boost в продакшине, а прользуют своих подделки. Да и

const-корректный
дроч в реале актуален только для написания библиотек.

То, что задающий на stackoverflow вопрос использует некоторую терминологию, ещё не означает, что она правильная. Многие используют слово «нету», хотя в русском языке нет такого слова; многие на кофе говорят «оно» (особенно если оно — экспрессо). И все их прекрасно понимают. Даже такой зануда, как я. Но всё же я хочу знать, как правильно называть те или иные вещи.
Сложилось так у комьюнити, что называть эту часть стандартной библиотеки — норма, и ок. Если такой ответ даёт подавляющее большинство опытных программистов, у меня нет оснований им не верить. Поэтому мой изначальный вопрос уже снят.
P.S.:
Что касается книг: я даже читал «Effective STL» Мейерса. Если бы книга была опубликована недавно, я бы вопрос не задавал. Но в 2001 году к STL действительно ещё не было массового отношения как к чему-то стандартному: тогда её только успели стандартизировать (да, между 1998 и 2001 прошло время, но, извините, разве сейчас в 2015 году так уж много людей используют C++11 в продакшне?), многие компиляторы тогда её нормально не поддерживали и вообще, для многих её средства программирования были в новинку. Плюс, Мейерс упоминал в книге и не стандартизированные средства, такие как hash_set, hash_map, select1st, rope и т.д. — так что там шла речь действительно об STL в широком смысле, пусть и с большим акцентом на стандартизированную часть библиотеки.

Что STL и (тем более) буст не все юзают в продакшне я в курсе. И тем не менее обычно те, кто пишет свои поделки, превосходящие по каким-то параметрам аналоги из STL или boost, — это мозговитые люди, которые если не буст, то хотя бы STL знают достаточно хорошо.

Но вот это

Да и

const-корректный

дроч в реале актуален только для написания библиотек.

жесть какая-то. Или просто троллинг. Не хотел бы я разбираться в коде человека, который всерьёз разделяет эту точку зрения.

const-корректный
костиль, щоб не стати інвалідом.
А як Ви визначили, що пану 23 роки?

Почему бред.
Есть пословица «каждый дрочит так как хочет...»
В одних на проекте заведено const-correctness, в других нет.
В одних Qt, в других MFC, в третьих Си с классами, хотя вроде там всюду С++.

Да полная свобода, чем, как и что отрстрелить.
Хотя, команда может договириться, например, что стреляем, только с АК.

В одних на проекте заведено const-correctness, в других нет.
Вот где такие сеньйоры как раз и не заведено.

Хотите задротствовать — задротсвуйте . Чем больше Вы завалитье своим задротством проектов тем лучше нам :) Сколько проектов не встречал — const задротства небыло. Только в вещах которые может пользовать кто-то еще. Если надо — поправил за 3 минуты и все ОК. Есть конечно комады дрочеров, но у них либо все фейлилось по срокам или от невезения просто проекты тонули.

А как Вы относитесь к инкапсуляции? Внутренние данные классов в private тоже не прячете, чтобы геттеры не писать? Такое же «задротство» ведь.

это не задротство. гетеры и сетеры пишу естественно

Это «задротство» не в большей и не в меньшей мере, чем корректное использование const. Уже другое дело, как у Вас в проектах расставлены приоритеты. Можно писать вполне нормально работающий код без единого квалификатора const. Как и без единого private поля в каком-либо классе.
Касательно const-корректности всё же большинство C++ программистов разделяют мою точку зрения. После Вашего первого комментария мне стало любопытно мнение сообщества по этому поводу (что поделать, люблю я спрашивать мнение сообщества обо всяких очевидных вещах и затем наблюдать срачи в комментариях) и я создал топик на эту тему вот здесь: dou.ua/...ms/topic/12815

Вы в политику податься не хотите ? Там тоже все знают как правильно. Расскажут все шо пидец. А когда заходит речь о результатах становится печально. Но они точно знают что вот-вот получится. Давайте угадаю — Вы когда приходите на собеседование Вам дают задачу, но у вас нихрена не работает но везде расставлены рюшечки и Вы знаете как правильно и даже чего может не работать. Ежайте к товарищу в Беларусь. Там в перерывах между сезонами картохи рождается идеальный код. Весь по феншую :).

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

В мире С++ есть ужасные реализации и реализации которыми ни кто не пользуются.

Касательно const-корректности всё же большинство C++ программистов разделяют мою точку зрения.
Откуда же у Вас возникли такие умозаключения ? :) фигачить всякие мутаблы ради константности которая никогда не заюзается ...

Александр, садись, два!
const жизненно необходим. Как пример реализация того же std::string в gcc (например 4.9.2) и MSVC. Если в первом используется reference counter то во втором нет.
А теперь, внимание, вопрос. Какие side effects может дать отсутствие модификатора const в многопоточной программе?

пример можете привести? строчек на 80 не больше? Мол вот тут мы не поставили const и произошли _ужасные_вещи ?

Да очень просто:
void foo( const std::string &s )
{
std::cout << s << std::endl;
}

void bar( std::string s )
{
std::cout << s << std::endl;
}

int main()
{
std::string text = “text.”;

foo( text ); // doesn’t make a copy of “text”
bar( text ); // makes a copy of “text”

return 0;
}

Правда стоит отметить что в С++11 есть workaround для этого. Т.е. :
void thrdFunc ( std::string& a ) {};
....
std::thread thrd ( thrdFunc, somestring );

просто не скомпилируется.
Собственно потому что в этом месте как раз const необходим.

Собственно потому что в этом месте как раз const необходим.
Лукавите батенька, если в функции
foo
убрать const передача по ссылке все равно останется, и тоже копии делаться не будет. а функция bar это совсем другое, там передача по значению

Вы, батенька, ответили не прочитав и не подумав.

Почему код:

void thrdFunc ( std::string& a ) {};
....
std::thread thrd ( thrdFunc, somestring );
не корректен, а
void thrdFunc ( const std::string& a ) {};
....
std::thread thrd ( thrdFunc, somestring );
прекрасно скомпилится?

у меня сейчас нет под рукой компилятора 11. (((
Давайте без него, а?

Подотстал я от C++, но зашел вот по этой ссылочке — en.cppreference.com/.../cpp/thread/thread/thread
И там написано что вот такой вариант очень даже сработает.

void thrdFunc ( std::string& a ) {};
....
std::thread thrd ( thrdFunc, std:ref(somestring));

Ну и как бы про const и not const ref ничего не сказано. Написано следующее —

The arguments to the thread function are moved or copied by value. If a reference argument needs to be passed to the thread function, it has to be wrapped (e.g. with std::ref or std::cref).

То есть вариант — ( std::string& a ) вполне допустим, если мы используем специальные врапперы для передачи аргумента.

gcc 4.9.2 c -std=c++11 не пропускает.

PS Пичаль-тоска. До чего компиляторы дошли! Поломать ничего не дают!

Максим не совсем это хотел сказать, я думаю. )
Просто в случае, скажем:

void foo(std::string &s )
{
std::cout << s << std::endl;
s = «garbage»;
}
void bar( std::string s )
{
std::cout << s << std::endl;
}

Мы получим фигню в выводе bar().
А если зафиксируем это дело с помощью const, то компилятор нам отстрелить ногу не даст. И главное, что не даст потом тем джунам, которые будут этот класс пользовать.

void bar( std::string s )
вообще то тред про конст, т.е. там должно быть void bar(std::string &s)

но вот валидный пример:

#include <iostream>

using namespace std;

void foo(const std::string &s)
{
std::cout << s << std::endl;
}

void bar(std::string &s)
{
std::cout << s << std::endl;
}

int main()
{
foo("pew"); // OK
bar("pew"); // COMPILE ЕГГОГ

return 0;
}

Раскрутив обсуждения удивил, что кто-то обосрался с примером. АХ ..А так же хотелось подколоть. Долго готовились ? Заслуженная двойка :) Ну ниче в след раз у Вас все получится. В том что связано с плюсами просто кладезь заподла. ищите :) На каждый такой обсерон великого разработчика игр где-то фапит маленький джун :)

Кто обосрался с примером? Голову включи, код прочитай.

С чего ты взял что я разработчик игр? С того что я работаю в WG? Lol.

Передай Фисуненко что собеседование ты мне завалил.
Мда, совсем дно в Samsung понабирали. Правда, это еще при мне началось. Мистеру Киму нужно было штат набить... Вот и появились такие деятели как ты.

PS Блин, ты бы еще умение пользоваться printf в LinkedIn написал. boost::property_tree. Обосраться и не встать.

Я б ще згадав стандартну багофічу — оператор [].

Тихо-тихо! Картофан не трогай! ;o)

Может ты и статическим анализатором кода не пользуешся ?

Пользуюсь и правлю вартниги. К констрочерствм ни как не пересекается

просто пан С++ розробник або не навчився користуватися гуглом, або не розуміє тексту, або «не втемі»

Стандарт Сі++ на 1998 рік складається з двох основних частин: ядра мови і стандартної бібліотеки. Стандартна бібліотека Сі++ увібрала в себе бібліотеку шаблонів STL, що розроблялася одночасно із стандартом. Зараз назва STL офіційно не вживається, проте в колах програмістів на Сі++ ця назва використовується для позначення частини стандартної бібліотеки, що містить визначення шаблонів контейнерів, ітераторів, алгоритмів і функторів.

uk.wikipedia.org/wiki/C+

Та тролль это. Все знает но пока пользует только «Вильна касса» :)

Само по себе C++ Standard Library состоит из 2х основных частей (C Standard Library and STL), + еще всякие фичи типа (Input/output). То есть само понятие (C++ Standard Library) более широкое, чем STL.

Конечно. Да и кроме input/output, в стандартной библиотеке C++ есть масса вещей, не относящихся к оригинальной STL.

Майже нікого не хвилює історія, хто там що коли на честь кого (хоча те що ви про це читаєте — плюс, чим більше асоціацій в голові — тим легше засвоїти інформацію). Всіх цікавить більш-менш сучасний стан.
Тобто якщо пишуть «знання STL» мають на увазі, що ви повинні знати-розуміти:
1. контейнери та (вже забув як воно називається, темпліти над ними) — як побудовані, які в них O для головних операцій, вміти вибирати потрібний для задачі
2. ітератори, типи ітераторів
3. вимоги для типів над якими будуються контейнери
4. алгоритми
5. всякі окремі речі на кшталт auto_ptr в контейнері
6. вміти здійснювати операції на кшталт обходу, видалення елементів тощо.

Дякую, я так і зрозумів. Мені вчора вже пояснили, що просто у програмістів «старої закалки» залишилася звичка називати ці речі зі стандартної бібліотеки «STL».
А у перелічених Вами питаннях я розбираюся достатньо добре. Просто не вживаю термін «STL» для їх позначення.
std::shared_ptr, std::make_shared, random, chrono і інші відносно нові фічі стандартної бібліотеки, які прийшли в C++11 із boost, ніхто ж не називає, власне, «бустом»?

А чорт йо’ зна’. Це, насправді, дуже незначна частина мови. Окрім smart pointers — але вони й в Африці smart pointers, не залежно від того бустові чи C++11.

пишут отдельным пунктом

Мало че пишут, половина из них вооще не знают, шо это такое. У меня проект в основном на MFC с легким уклоном на STL — там где шибко быстро надо

Насколько я знаю, обычно имеется в виду просто знание стандартной библиотеки без придирок что есть что и задавать вопросы вроде «в каком году STL включили в стандартную библиотеку?» никто не будет.
С небольшим опытом проблема другая — кругом нужны разработчики на С++ только с опытом от 5 лет, эмбедеддом и линуксом. Наверное предполагается что эти 5 лет человек будет на мивине пилить опенсорс пока опыта не наберется.

Я понял. Просто мне казалось, что в таком случае скорее бы писали как-то вроде «знание стандартной библиотеки (контейнеры, алгоритмы, итераторы)», а не «STL». Но мне уже объяснили, что у комьюнити «так заведено». Очевидно, большинство людей не страдает таким занудством, как у меня :)
А насчёт опыта проблема известная. Но всё же вакансии иногда появляются. Другое дело, что пробиться туда сложновато. С этим уже что-то буду решать.

Люди «старой закалки» привыкли к STL, к тому же так меньше букв, чем

знание стандартной библиотеки (контейнеры, алгоритмы, итераторы)
Вообще это требование, наверное, сродни Java-core.

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

Насчёт «привыкли» и «меньше букв» я всё понимаю. Просто у меня ещё такой ход мыслей был, когда я писал этот пост: если людям нужен программист C++, который хорошо знает этот язык (они ведь так и пишут в вакансиях!), то как он может быть таковым и при этом НЕ знать стандартную библиотеку?! Это же нелогично совсем, по-моему. Поэтому упоминание о знании «STL» отдельным пунктом для меня смотрится как тавтология, если под «STL» подразумевается именно соответствующая часть стандартной(!) библиотеки C++. Вот если бы имелась в виду сторонняя библиотека — тогда да.

В геймдеве плюсы любят
Плюсы любят там, где важна производительность :)
Всякие физики-химики постоянно что-то моделируют на плюсах, си или фортране. Но, конечно, если не уезжать за границу, то в геймдеве зарплаты поприятнее будут :)
как он может быть таковым и при этом НЕ знать стандартную библиотеку?!
Элементарно — зная только синтаксис и базовый ввод-вывод можно вполне что-то писать.
Но, конечно, если не уезжать за границу, то в геймдеве зарплаты поприятнее будут :)
В нашем геймдеве зарплаты не такие уж приятные, по сравнению со всем остальным. Особенно если сравнить С++ программиста в геймдеве и С++ программиста в другой области. И опыт там естественно разный.
Элементарно — зная только синтаксис и базовый ввод-вывод можно вполне что-то писать.
Можно, конечно. Но разве этих знаний достаточно, чтобы говорить, что хорошо знаешь C++? Если так, то я, оказывается, хорошо знаю ещё пару-тройку языков... :)
В нашем геймдеве зарплаты не такие уж приятные, по сравнению со всем остальным. Особенно если сравнить С++ программиста в геймдеве и С++ программиста в другой области. И опыт там естественно разный.
Ну, я судил по кругу своих друзей и их знакомых, так что не буду спорить.

Так не интересно, давайте спорить!)

Вот у меня в блоке вакансий справа сейчас показываются:
Junior C++ developer (financial software) до 1000$
А в разделе вакансий находится, например:
Embedded developer в DevelopEx до 3000$

С первой вакансией довольно заманчиво для джена, даже если «до 1к» будет 0,5. По второму интереснее. И я понимаю, что зп 1к так же входит в интервал до 3к, но все же думаю что там можно реально рассчитывать на 2,5к(если опыт соответствует) с ростом до 3к.
На сколько я знаю в нашем геймдеве среди девелоперов таких цифр нет?

Знаю джуна, который получает 800 евро. Не исключено, что синиоры там и до таких сумм дотягивают.

Ну 800 евро это и есть та штука баксов из первой вакансии. Нормальная цена джуна вроде бы. Только как там с ростом дальше не понятно.Из реальных людей, которым могу доверять сумм больше 1,5к не слышал. А, нет, один раз слышал 1,8к. При этом всяких джава-сеньйор-23 с 2,5-3к пруд пруди.

Плюсы любят там, где важна производительность :)
молодому чоловіку рекомендую заглянути на гілку
dou.ua/...ums/topic/4766
і прочитати найкрайщий комент мого колишнього колеги Ярослава
Просто у меня ещё такой ход мыслей был, когда я писал этот пост: если людям нужен программист C++, который хорошо знает этот язык (они ведь так и пишут в вакансиях!), то как он может быть таковым и при этом НЕ знать стандартную библиотеку?!

Может не меньше букв, а наоборот больше? «С++ и СТЛ» существенно длиннее чем просто «С++», разве нет? Надо ж что-то в вакансиях и в резюмешках писать.

Некоторые люди пишут на mfc или qt много лет, и никогда стандартную библиотеку не юзают...

Хм. Об этом я как-то и не подумал даже. Принимается.

Цитируя Википедию:
«Стандарт языка не называет её „STL“, так как эта библиотека стала неотъемлемой частью языка, однако многие люди до сих пор используют это название, чтобы отличать её от остальной части стандартной библиотеки (потоки ввода-вывода (iostream), подраздел Си и др.).» ru.wikipedia.org/...иотека_шаблонов

Таким образом, «знание STL» — сейчас значит знание концепта, архитектуры контейнеров, алгоритмов и т.д., а также умение это все дело применять. Сам использую термин STL, и не вижу в этом ничего постыдного.

А еще:
«Стандартная библиотека шаблонов (STL) — подмножество стандартной библиотеки C++ и содержит контейнеры, алгоритмы, итераторы, объекты-функции и т. д.[источник не указан 1788 дней] Хотя некоторые программисты используют термин „STL“ вместо (или попеременно) с термином „Стандартная библиотека C++“.»

Вот Вам и ответы на все Ваши вопросы: у C++ комьюнити «так заведено»

«Лайно» — это твой комментарий. Лол: сеньор/лид, который ведёт себя как школьник. Иди холиварить в другое место, лурколюб.
Я знаю, что в Украине плюсы не популярны (в отличии от «отставших» США или Германии, где хороших плюсовиков ценят в разы больше). Но вакансии всё же у нас есть, язык я знаю неплохо, он мне нравится, и я ищу работу именно связанную с ним. А что мне учить помимо него — я уж как-нибудь без тебя разберусь.

это доу, тут холииварить почти правило хорошего тона)

язык я знаю неплохо
якщо так впевнений в собі і хрестах, чому задаєш питання?
вперед із піснею
Я знаю, что в Украине плюсы не популярны (в отличии от “отставших” США или Германии, где хороших плюсовиков ценят в разы больше).
міф
я ищу работу именно связанную с ним.
вибирай не мову, а індустрію:
— геймдейв
— мобайл
— ембеддед
— веб
.....

Тому що хочу отримати адекватну відповідь на нього. Кидатися вчити іншу мову тільки через те, що чогось не розумієш у термінології, яку вживає community... Звучить не дуже розумно.

адекватну відповідь
твоє запитання гідне адекватної відповіді від К.О.,якщо в гуглі забанили,
я ж дав більш ґрунтовну відповідь.

>

міф
Лол. Після цього не бачу змісту продовжувати наш діалог. Можеш вважати, що я затралірован і побіг за агнєтушитєлєм тушить пукан.

ок, тут вище писали

Из реальных людей, которым могу доверять сумм больше 1,5к не слышал. А, нет, один раз слышал 1,8к.
із них, $100...150 оренда квартири, за $200 можна спокійно жити в Києві, в результаті можна відкладати 1300 ...150 у.е. готівки щомісяця.
Будь-ласка, дай відповідь, яка буде з/пл там і скільки ти будеш відкладати (на житло, на чорний день чи на безбідну пенсію)?
p.s.
www.youtube.com/...h?v=lTuC5UxaOdY
47:00 і трохи далі, про з/пл для “гастарбайтерів”
з них, $100...150 оренда квартири, за $200 можна спокійно жити в Києві
Вы сразу пересчитали на новый курс, как оперативно. Это были данные за время, когда доллар был от 8 до 12.

а пан живе в минулому і може робити флешбеки?
по моєму, одна із особлистей гомосапіенс на відміну від інших видів — здібність моделюватии майбутнє і коректувати свою поведінку виходячи із передбачень.

Пан не збирає статистику щомісяця. Дещо самонадіяно вважати що ціни не піднімуться і ви так само зможете за 100-150 баксів орендувати квартиру. Ще у деяких людей є діти, а це також велика стаття розходів.
До речі, куди і як відкладати на безбідну пенсію не підкажете? Бо чорний день, здається, вже настав.

Дещо самонадіяно вважати що ціни не піднімуться і ви так само зможете за 100-150 баксів орендувати квартиру.
Як воно в"яжеться із наступним твердження про чорний день і що тре відкладати далі, в мене розрив шаблона?
Якщо пан пам"ятає 90-і роки, то теперішня дупа надовго, так як прийдеться перелаштовувати економіку від розірваних торговельно-економічних та технологічних зв"язків із РФ, Кримом та Донбасом. На це підуть роки (5-10 років). Тобто зараз, якщо твій
До речі, куди і як віядкладати на безбідну пенсію не підкажете? Бо чорний день, здається, вже настав.
dou.ua/...ms/topic/12778

Сходил по ссылке, подставил вместо C++ — Java и получилось не менее правдоподобно

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