Роб Пайк подверг критике C++ и Java

    На конференции OSCON Роб Пайк заявил, что промышленные языки программирования, в частности С++ и Java, слишком сложны и не соответствуют современным вычислительным стандартам.
    — Они слишком многословны и их запутанность, сложность и многословность только растет со временем.
    В качестве иллюстрации запутанности этих языков, Пайк показал нексолько примеров кода на С++.



    — Такое программирование слишком бюрократично. Каждый шаг должен быть приведен в соответствие с используемым компилятором.

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

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

    JavaScript — один из тех языков (включая Ruby и Python), которые были созданы в последние десять лет в ответ на растущую сложность С++ и Java. Но несмотря на простоту синтаксиса, эти языки имеют свои слабые стороны: низкая производительность, плохая масштабируемость, большее содержание ошибок. Также из-за того, что эти языки интерпретируемые, приложения, написанные на этих языках, не компилируются перед запуском, что отрицательно сказывается на скорости их работы. А динамическая типизация, используемая в них, может привести к появлению во время выполнения статических ошибок, которые можно было бы обнаружить еще на этапе компиляции.

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

    Напомню, что Роб Пайк стоял у истоков Unix, Plan 9, Inferno и UTF-8. Сейчас работает в Google.
    via
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 297
    • –14
      Кто первый скажет, что ему заплатила МС? :D
      • +24
        Ему заплатил Гугл.
        • НЛО прилетело и опубликовало эту надпись здесь
      • НЛО прилетело и опубликовало эту надпись здесь
        • +2
          Это в большей степени реклама гугл: он по сути говорит «Go должен заменить плохие языки». Если бы его волновала первая часть проблемы, он стимулировал бы всех не переходить на Go, а работать над новыми языками: ведь как известно, именно конкуренция двигатель прогресса
        • +23
          Можно и в английском языке поискать недостатки и заменить его на эсперанто, например
          • 0
            но народ все равно продолжает использовать английский… просто тут так принято.
            • +1
              >просто тут так принято

              Собственно, это и есть ответ Робу Пайку по поводу использования C++ и Java :)
            • +9
              Это было бы здорово. У английского, всё-таки, довольно много недочётов. С русским, не сравнить, конечно, но всё же.

              Для патриотов, которые сейчас кинутся меня минусовать: я очень люблю родной язык, я его даже довольно неплохо знаю. Поэтому я хорошо осознаю его недостатки: он плохо структурирован, в нём масса нелогичных правил, исключений и т.д. Например, с точки зрения логики какое-нибудь «жи/ши» не несёт абсолютно никакой пользы.
              • 0
                Поэтому как интернациональный язык русский не подходит совершенно. А вот эсперанто — вполне, насколько я знаю.
                • 0
                  Не стоит забывать о таких вещах как литература, поэзия. И опять же эсперанто непригоден, например, для медицины или техники — в нём мало терминов.
                  • 0
                    Термины прекрасно заимствуются из того же английского. А для литературы и поэзии эсперанто использовать я и не призываю. Это именно синтетический язык, задуманный как средство интернационального общения.
                    • 0
                      Совершенно верно, не стоит забывать о существовании эсперантистской прозы и поэзии.

                      В русском, кстати, тоже мало терминов. Куда не ткнёшь — заимствование в лучшем случае из латыни и греческого, в худшем — из английского. ;)
                      • +2
                        Да есть в нём много терминов, мощная система словообразования позволит создать новые…
                        А вы знаете, что в нём ВСЕ существительные оканчиваются на О? И их не очень то просто отличить от прилагательных, оканчивающихся на А?
                        И вообще, фонетика — это слабое место эсперанто.
                        Слова вроде altaukvajo и прочее :)

                        P.S. Вот уж лингвосрача тут не ожидал :)
                        • 0
                          У токипона чудесная фонетика (содранная с японского) https://ru.wikipedia.org/wiki/%D0%A2%D0%BE%D0%BA%D0%B8%D0%BF%D0%BE%D0%BD%D0%B0
                        • 0
                          Большинство медицинских терминов было заимствовано с латыни. Технические термины можно внедрить. Так что препон никаких нет, кроме как целесообразности…
                        • НЛО прилетело и опубликовало эту надпись здесь
                          • 0
                            В обычной жизни вам не так часто приходится общаться с людьми других национальностей. В основном, общение происходит через интернет и в текстовом виде (чаты, форумы).
                        • +6
                          Если вспомнить про английскую орфографию, то русский по логичности ему фору дать может. Потому что, отдельные правила можно исправить, а орфографию целиком — нет.
                          • 0
                            Имхо, в естественных языках общения немало должно быть уделено эстетике и чувству прекрасного. Чтобы было приятно общаться.

                            Насчет «жи/ши»: так как на слух и через «и», и через «ы» всё слышится одинаково, то легче запомнить одно правило написания, чем для каждого слова вспоминать, как оно пишется. По-моему, всё логично.
                            • 0
                              «Например, с точки зрения логики какое-нибудь «жи/ши» не несёт абсолютно никакой пользы.»
                              Просто ни один натуральный язык не устроен «с точки зрения логики».
                            • +1
                              Тогда лучше всего Ithkuil. Хоть это и конлэнг, он совершенно не содержит двумсмысленностей и скорость мышления на нем самая большая. По крайней мере так говорят — нет ни одного человека который его выучил :)
                              • 0
                                скорость мышления на языке

                                лан
                            • +9
                              Полностью поддерживаю Роба.

                              В современном Си++ количество ключевых слов приближается к сотне.
                              Десятки синонимов не делают язык лучше.
                              Язык чрезвычайно сложен. Взять хотя бы те-же функторы со списками типов из всем известной книге.
                              Вы думаете такой код будет легко понять множеству программистов различной квалификации.
                              Непродуманность многих частей языка ведет к невозможности их комбинации. Это недопустимо для хорошего языка.

                              В общем в области системного программирования есть Си. Изумительный и чудесный язык. Краткий и емкий.

                              Человечеству нужен такой-же немногословный высокоуровневый язык. Краткий, продуманный, понятный каждому на 100%.
                              • +12
                                Тут не язык надо придумывать а человека, который поймет все на 100%.
                                COBOL тоже хотели сделать понятным, а сделали COBOL.
                              • +14
                                C++ сложен совсем не из-за того, что там много ключевых слов.
                                • +5
                                  немногословный, высокоуровневый, универсальный

                                  Выберете два.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                    • +2
                                      Python?
                                      • 0
                                        Вы много написали драйверов на питоне?
                                        • 0
                                          Я не писал, но это ещё не значит, что это невозможно. Есть проект, позволяющий транслировать текст Python на C (или C++, не помню), а потом уже компилировать.
                                          • +6
                                            а много ли вообще пишут драйверов?
                                            • +3
                                              Тогда D, почти без вариантов, насколько я знаю :)
                                              На нем не пишут драйвера, но язык работает с указателями и прочим, поэтому в этой области вполне сгодился бы.
                                              • 0
                                                Да он не особо лучше плюсов :) А вот с поддержкой библиотек и компиляторами бида.
                                                • 0
                                                  Если отбросить проблемы с библиотеками. То как язык (отвлекаясь от реализации) — он МНОГО лучше плюсов. У него нет многих проблем, свойственных C++. По синтаксису ближе к Java и C#.
                                            • –1
                                              Питон можно не любить уже за отсутствие инкапсуляции:)
                                              • +2
                                                Конечно, в «серьёзных» языках для изучения объектов делаются специальные модули, а Python просто использует соглашения. Это недостаток, по-вашем?
                                                • 0
                                                  Собственно это была одна из причин просить питон у меня.
                                                  • 0
                                                    Ну, если вы легко можете из объекта получить данные, которые вам не следует получать, то… да!
                                                    • +2
                                                      В других языках всего лишь нужно использовать какой-нибудь модуль «Reflection». Так стоит ли вообще заниматься защитой? Python предлагает разумный компромисс.
                                                      • –3
                                                        Я не согласен с вами. Да, я не сторонник скриптовых языков, но все свои слова я могу обосновать.
                                                        Например в джаве можно запретить рефлексию просто используя необходимые нстройки секьюрити менеджера. При этом jar-файл можно подписать и это будет гарантировать, что его не изменят… Но это я так, к слову. Были бы средства…
                                                        С другой стороны в питоне уровень доступа регулируется лишь соглашением. Окей. Питон с момента появления сменил уже немало версий. Тогда почему до сих пор в нем не ввели инкапсуляцию, если язык претендует на ооп? Это же один из столпов, ничего волшебного. У меня на эту тему лишь одно соображение (да простят меня минусующие питонофилы) — соглашение это не всегда соблюдается и введение инкапсуляции может положить немало кода. Вот такой вот компромисс.
                                                        • 0
                                                          Python просто пошёл по другому пути, только и всего. Вам этот путь чужд, только и всего.
                                                          • +1
                                                            А соображение, что инкапсуляцию на уровне языка не ввели потому, что она там не нужна, вам в голову не приходило? Что иметь ее на уровне соглашений — решение более гибкое? Убрать, например, ее всегда можно (think java→groovy), а добавить так легко нельзя, потому что ее отсутствие дает программисту больше возможностей, чем наличие?
                                                            • –1
                                                              По соглашениям вообще много чего положено: форматировать код, давать грамотные имена переменным, разделять M, V и С, ходить в душ хотя бы раз в пару дней, чтобы коллегам было с вами комфортно работать… Не все правда следуют.
                                                              Выходит, смерть инкапсуляции — новый виток в эре ООП?
                                                              • +1
                                                                Так с ней ничего не случилось, есть она, инкапсуляция, просто ее с одного уровня на другой перенесли. Или вы думаете, что вот есть инкапсуляция, и все сразу поумнели и начали ее по делу использовать? О том, какой вред она может наносить в кривых руках, не задумывались?

                                                                У меня вот, из наболевшего, Wicket Web Framework — все внутренности закрыты железобетонно, и что, думаете, хорошо это? А я вот постоянно плачу, что-то в принципе не расширяется, у чего-то, чтобы расширить, приходится тупо реализацию из исходников копировать и менять, потому что нихрена в классе поменять не могу — инкапсуляция. Это ваше светлое будущее, за которое стоит бороться?

                                                                Все рассуждения про инкапсуляцию хороши, пока дело не доходит до реальных ситуаций. Из двух зол — похакать исходник библиотеки либо вообще не реализовать функциональность вы предлагаете выбрать второе решение как более «правильное»? Не кажется ли вам, что стоит оставить этот выбор все-таки программисту и дать ему решать в каждом конкретном случае?
                                                                • 0
                                                                  Простите, но у меня не было ситуаций, когда надо было бы лезть в исходники либ и их править. Расширять можно грамотным использованием наследования и проектирования.
                                                                  Расширяемость приложения — это прерогатива архитектуры, а не языка.
                                                                  • 0
                                                                    Как давно вы в профессии?
                                                                    • 0
                                                                      Ну, не очень давно. Лет 5. Давайте, спишите все на мой юношеский максимализм:)
                                                                      • 0
                                                                        Без паники, максимализм ни при чем, дело в не очень большом опыте просто.
                                                                  • 0
                                                                    Я сам работаю с Wicket и ниразу не хотелось лезть внутрь. Есть высокоуровневые компоненты, типа меню, диалогового окна и пр., которые приходится затачивать под себя, но они не входят в ядро. Хотя может у Вас свои задачи.

                                                                    Вообще защита внутренностей позволяет разработчикам фреймворка не боятся, что они нарушат совместимость со старыми версиями и если они что-то не сделали частью публичного api, то на то были причины.
                                                                    • 0
                                                                      Да, они этим оправдываются, но на деле даже внутри багфикс-релизов ее умудряются ломать, я уж не говорю про минор (одно переименование getModel → getDefaultModel чего стоило). Видимо, для них совместимость все-таки несущественна.

                                                                      если они что-то не сделали частью публичного api, то на то были причины.
                                                                      Как раз наоборот, им нужны причины, чтобы что-то сделать частью публичного апи. На деле же оказывается, что они совсем не так дальновидны, как им кажется. И вот тут я бы с удовольствием сам решал проблемы с совместимостью (натурально, правил бы свой код, реши мы проапгрейдить версию), чем имел бы возможность безболезненно переходить на новую версию. Как-то новые версии меня не очень греют, а вот задачи, которые я не могу решить сейчас, все-таки напрягают.
                                                                      • 0
                                                                        Переход с 1.3 на 1.4 трудно назвать минорным. Даже сейчас в вики у них можно нйти упоминание о версии 2.0, которая превратилась в итоге в 1.4 Трудно сказать зачем они так поступили. Наверно, чтобы переманить побольше разработчиков с 1.3 на 1.4 А в версии 1.5 они уже обещают нарушить обратную совместимость. В багфикс-релизах ошибки встречал, но в последующих версиях они как-то сами исчезали. Можно пример поломки? Просто интересно.

                                                                        Заменой getModel → getDefaultModel они хотели показать, что элементы типа Panel не дожны иметь встроеную модель, т.к. они не знают сколько их вообще нужно: одна, две, три или вообще ни одной. getDefaultModel осталось только для поддержки элементов без явного указания модели, типа new Label(«name»); В рассылке писали, что было очень много споров о том как вводить параметризацию. Остается только верить, что сделали правильно. Если не веришь, то надо менять фреймворк :)

                                                                        Если бы сам писал библиотеку, то тоже закрыл бы все что мог, кроме специально подготовленных частей. Я не верю в самоорганизующися хаос в разработке.
                                                                        • 0
                                                                          В 1.4.2, что ли, у них тег wicket:enclosure тупо не работал. То есть вообще. Минорный, потому что вторая цифра называется минорным номером версии.

                                                                          Я о том и говорю, если совместимости все равно нифига нет, ради чего внутренности-то прятать? Получается, только ради того, чтобы жизнь усложнить.

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

                                                                          В случае с Викетом, например, получается, что их цель — обеспечить пользователям плавный переход между релизами (у них не получается, но в идеале). Но нет такого пользователя, которому был бы интересен плавный переход на новую версию. Есть пользователи, которым интересно, позволяет библиотека сейчас решить их проблему или нет. Если ответ «почти», то лучше пусть они ее доточат, чем выкинут, не?
                                                                          • 0
                                                                            Это все-таки баг. Они же не сознательно его убрали. В следующей версии надо полагать исправили, т.к. у меня все работает. ИМХО, их номерация вводит в заблуждения. Я бы сменил с 1.3.х и 1.4.х на 3.х.х и 4.х.х. Тогда все было бы понятней. Внутри версий 1.3 и 1.4 у меня все переносилось отлично. Были ошибки с ajax и формами под оперой и ie, но в следующих версиях они исправлялись. Вот переход с 1.3 на 1.4 был жестоким. Получил 3000 предупреждений, некоторые дожили до сих пор.

                                                                            Дело в том, что веб-фреймворки это сверх конкурентная сфера. Если просто двигаться вперед, то вскоре обнаружишь, что кроме своих старых пользователей, ты уже никому не нужен. В какой-то другой области можно сделать библиотеку решающую 80% фич, а оставшиеся отдать на откуп программистам. Тут так никогда не получится.
                                                                    • +1
                                                                      Описанная проблема проистекает не из инкапсуляции, а из low cohesion. В фреймворке есть что-то, что решает несколько задач сразу и поэтому изменение решения одной задачи тащит за собой другие.
                                                                      Инкапсуляция — это сокрытие того как объект делает свою работу, а не того что он делает.

                                                                      По сути вопроса: использование Python в масштабах более нескольких тысяч строк требует высокой дисциплины. Перед началом програмимрования на нём стоит подумать обладаете-ли вы ей, и если нет взять что-нибудь менее опасное в неумелых руках.
                                                                • +2
                                                                  Он не претендует на ООП, он претендует на то, что в нём можно программировать в оо-стиле. Почувствуйте тонкую разницу.
                                                                • –2
                                                                  Умиляют плюсующие под фразой «Так стоит ли вообще заниматься защитой?» :)) Вы что, серьезно так думаете?:)
                                                                • +3
                                                                  It would prefer that you stayed out of its living room because you weren't invited, not because it has a shotgun (Larry Wall).
                                                                  • 0
                                                                    Шикарная цитата, спасибо!
                                                          • 0
                                                            Шкалы к счастью аналоговые и можно двигать ползунки :)
                                                          • 0
                                                            Даёшь компилятор для javascript-а!
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                          • +1
                                                            Ну очень спорное выступление. Пример с foo:: вообще странный. Что мешает предыдущей строчкой написать using namespace foo;? Это с одной стороны.

                                                            С другой, я сильно сомневаюсь, что есть хоть что-то что может вытеснить С и С++ из области сис.по, потому что здесь их преимущества (а именно, скорость в сочетании с гибкостью) неоспоримы.
                                                            • 0
                                                              Роб Пайк стоял у истоков Unix, Plan 9, Inferno и UTF-8. Сейчас работает в Google.
                                                              действительно, вам лучше знать :)
                                                              • +5
                                                                А то что он стоял у истоков что-то меняет?
                                                                • +4
                                                                  Ага, давайте еще вспомним советских профессоров, стоявших у истоков ламповых компьютеров :) Многие из которых давно уже ничего не учат, а впаривают студентам знания их далеких 70-х, потому что ничего другого не знают. Как раз в данном вопросе, нужен эксперт со свежей головой, а не забитой предвзятостями из предыдущих (и текущих в особенности!) мест работы
                                                                • +17
                                                                  Как известно, Аристотель, стоявший у истоков всей современной науки, написал однажды, что у мухи 8 ног. Так все и думали, пока несколько столетий спустя не пересчитали.

                                                                  Доказательство истинности методом сравнения авторитетности (сейчас это называется «пиписьками меряться») — самый худший способ доказательства.
                                                                  • 0
                                                                    ну в данном случае это говорит о его профессионализме и глубоком знании предмета
                                                                    • +2
                                                                      Верно. У Вас есть основания считать, что его профессионализм и знание предмета уступают таковым Роба Пайка? :)
                                                                    • 0
                                                                      … но в отсутствии других возможностей, вполне себе ничего способ… Так что, кто не способен судить самостоятельно, слушает Пайка.
                                                                    • 0
                                                                      Я системный программист, что вы предлагаете мне вместо С и С++?
                                                                    • 0
                                                                      Cython допилят и будет няшно :)
                                                                      • –1
                                                                        Мне страшно за пользователей той компании, которая будет писать сис.по для своих устройств на этом чуде. В продакшн пускать нельзя.
                                                                      • +2
                                                                        Do not use a using-directive.
                                                                        Google C++ style guide

                                                                        Что-то мешает, и не ему одному.
                                                                        • +2
                                                                          Там еще есть
                                                                          We do not use C++ exceptions.

                                                                          We do not use Run Time Type Information (RTTI).

                                                                          We do not allow default function parameters, except in a few uncommon situations explained below.

                                                                          All parameters passed by reference must be labeled const.

                                                                          И много других спорных моментов. Не нужно слепо следовать гайдлайнам гугла просто потому, что они Гугл.
                                                                          • –1
                                                                            хм. и что тут спорного?
                                                                            • +1
                                                                              Абсолютно всё.
                                                                              • –1
                                                                                а по пунктам?

                                                                                Для людей, заинтересованных в эффективности своих программ, отключение exceptions/rtti это естественно. За легкость написания хелло-вордов расплачиваются производительностью и обьемом кода/занимаемой памяти в «больших» программах. Обе этих вещи отвечают за те самые легендарные тормоза и bloat C++. И использовать их попросту нельзя если у софтины есть мало-мальские требования по перформансу. Сразу видно — если человек использует эти вещи в C++, значит, либо джавист, либо академик непуганый, который и ассемблера-то ни разу не видывал, что впринципе одно и тоже =)

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

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

                                                                                Дефолтные параметры затрудняют читабельность кода.
                                                                                test(foo, bar)
                                                                                test(foo)
                                                                                совершенно не ясно, не посмотрев, что там ставится в bar по дефолту

                                                                                «Референснутые» параметры, которые не изменяются, должны быть обьявлены константными, чтобы помочь оптимизатору. Да и GCC часто ругается в некоторых случаях употребления неконстантных параметров.
                                                                                const — очень полезная штука, НЕиспользование которой ведёт опять же к тормознутости кода
                                                                                • +1
                                                                                  По пунктам:

                                                                                  RTTI/Exceptions: если вы заинтересованы в эффективности кода, это не значит, что исключения ВЕЗДЕ неприемлемы. Работает старый принцип 80-20: 80% тормозов находится в 20% кода. Соответственно, 80% всего кода, связанного с исключениями, вряд ли тормозит программу. Можно привести кучу примеров отлично работающего кода, в котором исключения без проблем уживаются. Вообще, с чего ВЫ решаете, какие фичи «правильные», а какие нет? В С++ есть механизм RTTI и исключений — и он ничуть не менее «родной» для этого языка, чем битовые поля или арифметика указателей. Нравится ассемблер — да флаг в руки.

                                                                                  Зачем нужны не-const references? 1) а как вы напишете без этого функцию swap()? 2) а как вы опишете operator<< для ostream? (да и любая аналогичная перегруженная операция)?

                                                                                  Дефолтные параметры тоже иногда полезны. Посмотрите примеры из Boost/STL — их просто надо использовать с умом.
                                                                                  Например, есть такая функция boost::to_lower() — приводит строку к нижнему регистру. В 99.9% случаев вы просто приводите. Однако иногда надо указать другую языковую среду (локаль) — для этого предусмотрен дефолтный аргумент, равный текущей локали. Если бы он не был дефолтным, код бы разросся…
                                                                                  • 0
                                                                                    RTTI это бинарный свитч. либо будет, увеличивая стоимость обьектов либо нет. Вы не можете выключить его для 20% кода.
                                                                                    Лично меня бесит когда простейшие программы занимает мегабайты. Потому что пишут её такие люди, которым посрать на какие-то там 20%.
                                                                                    Может потому что я привык бороться за миллисекунды и килобайты…

                                                                                    >>Вообще, с чего ВЫ решаете, какие фичи «правильные», а какие нет?
                                                                                    Для своей программы я волен выбирать сам. Разве нет?
                                                                                    Google, как заказчик, тоже вправе выбирать каким образом будет написана та или иная ИХ программа.
                                                                                    Посему сам вопрос обсуждения их конвеншенов является неправомерным.
                                                                                    • 0
                                                                                      Причём тут бинарный свитч? Если объект не содержит виртуальных функций, для него RTTI в принципе не работает. Если же содержит, вы уже имеете данные накладные расходы.

                                                                                      По поводу — кто решает, тут вы правы, решает заказчик. Мне действительно плевать, занимает программа «Hello, world» пять килобайт или пять мегабайт — это не техническое, а бизнес-решение. Если заказчик хочет пять килобайт и готов потратить на разработку два месяца работы — да не проблема, он за это и платит. Если другой заказчик хочет решение за неделю и готов смириться с раздутой и менее быстрой программой — это тоже его право. Я всего лишь следую его пожеланиям :)
                                                                                  • 0
                                                                                    Ваши +-20% могут быть важны для «фиксированной железки», но ведь не весь же мир вокруг вашей задачи крутится. Преимущества от RTTI вполне могут перевешивать 20% проседание производительности.

                                                                            • 0
                                                                              Как вариант, оттуда же — You may use a using-declaration anywhere in a .cc file, and in functions, methods or classes in .h files.
                                                                              • 0
                                                                                Лучший способ испортить себе репутацию — это написать гайдлайн для С++. Это такой волшебный язык, где любое средство рано или поздно «выстреливает» так, что все гайдлайны надо переписывать.

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

                                                                                А теперь вышел Boost.Preprocessor, и люди начинают понимать, что использовать его с умом для метапрограммирования очень здорово и замечательно.
                                                                              • +1
                                                                                «using namespace» действительно помогает упростить код.

                                                                                Но есть один минус — эту конструкцию ни в коем случае нельзя использовать в заголовочных файлах! Только в .cpp. Иначе незаметно сложится ситуация, когда порядок включения заголовочных файлов будет влиять на работу программы.
                                                                                • +1
                                                                                  Да, не спорю. Я вообще его стараюсь избегать даже в .cpp в global scope. А вот в block scope эта конструкция весьма к месту, особенно для имплементации шаблонных методов / функций — там без этого (и без typedef) черт ногу сломит.
                                                                                  • 0
                                                                                    Именно поэтому в хидерах всегда будет куча гуано, подобного тому, что в примере.
                                                                                  • +1
                                                                                    меня смущает другое. При написанни программы длинней сотни строк время потраченное на выписывание foo:: стремится к нулю. Куда больше усилий требуется на создание абстракций, структур классов, на отладку наконец.
                                                                                    • +2
                                                                                      Вопрос не в написании, а в чтении.
                                                                                      Все эти «foo» нужны компилятору, а не программисту.
                                                                                      • 0
                                                                                        Часто «foo::» очень помогает разобраться в чужом коде. А то видишь вызов метода, и хрен поймёшь, из какого он класса. На DE положиться в этом вопросе тоже не всегда получается.
                                                                                        • +2
                                                                                          Нет я не о нейспейсах. Для человека

                                                                                          foo::Foo* myFoo = new foo::Foo(bla, bla);

                                                                                          Означает то же что и

                                                                                          myFoo = new foo::Foo(bla, bla);

                                                                                          Тип переменной выводится из конструктора. То же касается указания типа параметров.

                                                                                          Самая жесть — отдельные секции описания и реализации. Это никак не DRY со всеми вытекающими.

                                                                                          Хуже может быть только C++ с венгерской нотацией. Бессмысленно и беспощадно.

                                                                                          HRESULT hResult = someCall();
                                                                                  • +7
                                                                                    вот как Гугл напишет что-нибудь существенное на Go, например кодер/декодер их WebM, тогда и посмотрим. А пока Go – прикольный язык на посмотреть
                                                                                    • 0
                                                                                      Я бы предложил дяденьке попробовать автоматизировать производство (в смысле производственное предприятие, где нужно работать с большим кол-вом различных датчиков, приводов и т.д.) на его любимом языке пусть то Javascript, Python, Ruby и т.д., да хоть .NET. Пусть на них попишет для микроконтроллеров, через которые пролетает гигантские потоки данных и им надо успевать обрабатывать и т.д.

                                                                                      Может быть и сложно писать, но сложным это делается в кривых руках, а если язык знаешь, то проблем и не ощущаешь.
                                                                                      • +3
                                                                                        Вот статья про завод Foxconn, статья в общем то не в тему, но оттуда цитата:
                                                                                        Не могу не отметить для здешних пуристов и интеллектуалов: софт, который управлял линией стоимостью в 140 миллионов долларов был написан… [барабанная дробь] на С# (ну это так, лирика).
                                                                                        Цитата как раз про производство с большим кол-вом различных датчиков, приводов и т.д. Там дальше в комментариях подробнее, если интересно.
                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                          • –1
                                                                                            А где это программируются микроконтроллеры на UML? Про C слышал, на asm программил, про C# читал, что программируется. А картинками где? :)
                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                            • 0
                                                                                              Понятно, что там на шарпе не микроконтроллеры программируются, а что-то, что ими управляет.
                                                                                              • +2
                                                                                                Нет на шарпе можно именно для микроконтроллеров писать(http://en.wikipedia.org/wiki/.NET_Micro_Framework)
                                                                                                • –2
                                                                                                  Не знал, спасибо.
                                                                                          • +2
                                                                                            «сложным это делается в кривых руках» — так считают те, кто не работал с другими языками. Это по собственному опыту :) Когда я изучал C#, я плевался на него. Когда я изучил его, я стал плеваться на C++. Когда изучил AS3, иногда стал плеваться даже на C# :)

                                                                                            «а если язык знаешь, то проблем и не ощущаешь» — если не пишешь на нем, то да. А когда приходится писать на C++ кучу кода для того, что на других языках гораздо компактнее, когда паришься с системой глобальных инклюдов (все нормальные языки используют только локальные)… Когда нужно в хидер добавлять то, что написал а cpp-шнике… Когда много чего еще… То думаешь, что тратишь силы и жизнь на рутину, которую должен выполнять компьютер, но не человек :)
                                                                                          • +1
                                                                                            Во многом согласен с тем что растёт количество «шума» в коде.

                                                                                            Как бы то ни было, не во всём остальном я согласен…
                                                                                            • +78
                                                                                              Стоит ли в вопросах языков программирования доверять человеку без бороды? ;)
                                                                                            • +1
                                                                                              Нужно было добавить во фразу — «Роб Пайк стоял у истоков Unix, Plan 9, Inferno и UTF-8.», что он ещё стоял и у истоков Go. :)
                                                                                              • 0
                                                                                                Ждемс ide для go.
                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                  • –7
                                                                                                    интересное название
                                                                                                    Go (ogle)?
                                                                                                    • +1
                                                                                                      Ага, у фирмы «Гоу Огле» появился реальный шанс: переключиться на язык Go и взять в зиц-председатели кого-то с фамилией Огле :)
                                                                                                    • +1
                                                                                                      Интересно как язык C получил свою популярность. Просто взяли и написали Unix и сказали, что если хотите что-то поменять — изучайте сей язык? Интересно что в современном мире можно написать на Go или каком-либо другом языке чтобы он пошел в массы? И что интересно из него выйдет через 20 лет… Язык довольно интересный, я его попробовал использовать, только под мои задачи он не подошел.
                                                                                                      • 0
                                                                                                        Просто С — это высокоуровневый ассемблер. Т.е. писать на нем быстрее, но код при этом получается такой же быстрый как и на ассемблере. А так как в то время альтернативы не было, то он стал очень популярным.
                                                                                                        • 0
                                                                                                          Си и сейчас популярен, в особенности при программировании микроконтроллеров, тк код на нем максимально компактен и синтаксис очень хороший.
                                                                                                          • 0
                                                                                                            Сейчас просто полно альтернатив.
                                                                                                      • –2
                                                                                                        А мнее С++ всегда нравился свой так называемой сложностью.
                                                                                                        Лучше разгребать переплетения меташаблонов чем косить мобов в подземельях.
                                                                                                        Лучше следить за разворачиваниваем циклов и красотой сцепки динамески загружаемых классов.
                                                                                                        Лучше биться башкой об эти переменые, которые почему-то не меняют свой тип по моему хотению, и насладаться когда они всетаки начинают это делать магией буста.
                                                                                                        Вот такое у меня извращеное чувство прекрастного
                                                                                                        • +9
                                                                                                          мсье знает толк в извращениях
                                                                                                          • –6
                                                                                                            Полностью согласен. Плюсы не прощают ошибок в дизайне, поэтому некоторым кажутся сложными.
                                                                                                            • +11
                                                                                                              Плюсы де-факто сложные. А сложные из-за просчетов в дизайне языка.
                                                                                                              • –2
                                                                                                                Сложные? Врядли. Зависит от подмножества, которое вы используете. В системном программировании — используется лишь мелкая часть и тут все просто. Но если же вы хотите джедайствовать в стиле Александреску…
                                                                                                                • +2
                                                                                                                  У C++ нет подмножества. Это цельный ЯП. STL является неотъемлемой частью языка, как и шаблоны. Если нет STL или шаблонов, то это уже «недоC++».
                                                                                                                  • –2
                                                                                                                    В вас заговорил адепт языка. Вы уж извините, но иначе как подмножеством С++ Embedded C++ не называют. Не надо цепляться к словам :)
                                                                                                                    • 0
                                                                                                                      Мы про C++ или про Embedded C++?
                                                                                                                      Тема была про C++. НедоС++ не рассматривали. Хотя даже там все очень плохо в плане дизайна языка.
                                                                                                                      Есть две вещи, которые больше всего не нравятся в плюсах:
                                                                                                                      1) глобальные инклюды
                                                                                                                      2) необходимость заголовочных файлов

                                                                                                                      Если от этих вещей избавиться, то можно было бы более-менее нормально пользоваться языком.
                                                                                                                      • 0
                                                                                                                        Мы говорим о C++ как о языке, безотносительно стандартов и придирки к словам. Embedded C++ тут как пример.

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

                                                                                                                        С++ сложен в общем, но совершенно прост если вы не используете все его возможности.
                                                                                                                        • 0
                                                                                                                          Я использую его в игрострое, там невозможно не пользоваться шаблонами, по крайней мере по той причине, что замены для STL нет.
                                                                                                                          А вы пользуетесь именно недоC++, и дело не в придирках. C++ без шаблонов — это уже не C++, это lightC++, notC++ или что-то еще.
                                                                                                                          Скажем так, несмотря на ужасность шаблонов, без них в текущем виде от С++ вообще нет толку.
                                                                                                                          • 0
                                                                                                                            Вы преувеличиваете всю глубину проблемы. В подавляющем большинстве проектов шаблоны используются только в рамках STL и сопутствующих библиотек, ни о каком дизайне и речи не идет.

                                                                                                                            Касательно меня — я использую С в WDK, Embedded C++ в IOKit на OS X и VxWorks, и самый обычный C++ в пользовательских утилитах. И да, мы проектируем приложения по принципу KISS.
                                                                                                                            • 0
                                                                                                                              Я не преувеличиваю. Без шаблонов нет STL, без STL нет даже встроенного строкового типа, не говоря уже о контейнерах.

                                                                                                                              Вашими утверждениями можно дойти до того, что Java — это тоже C++, только упрощенный/улучшенный.
                                                                                                                              • 0
                                                                                                                                И когда вы начинаете использовать контейнеры STL, вы автоматически начинаете использовать шаблоны C++.
                                                                                                              • –3
                                                                                                                О, не вы один такой. В это есть какая-то особая прелесть. А уж когда отправляешь вижак в internal compiler error испытываешь ни с чем не сравниемое чувство собственного могущества :)
                                                                                                                • 0
                                                                                                                  Для минусующих — речь идет разумеется о программироовании в свое удовольствие. На работе я бы быстро получил люлей за такие извращения.
                                                                                                                • +3
                                                                                                                  Расскажите это своему менеджеру, а лучше сразу заказчикам :)
                                                                                                                  • –1
                                                                                                                    Имхо, как бы не было противно, но часто стоит делать работу и добиваться результата, а не разбираться в красоте (часто, чужого) кода.
                                                                                                                    Хотя красоту плюсов тоже понимаю.
                                                                                                                  • –5
                                                                                                                    Эритик!
                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                      • 0
                                                                                                                        Метапрограммирование тоже разным бывает — взляните на nemerle с его макросами.
                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                            • 0
                                                                                                                              Макросы C еще в пеленки мочились, когда уже много лет как существовали мощные и страшные макросы в Лиспе. И именно из Лиспа в Немерле макросы и позаимствованы, к Си они никакого отношения не имеют, да и к C++ тоже.
                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                • 0
                                                                                                                                  Много даже не мусора, а просто нелогичных, исторически сложившихся решений. Типичная проблема любого языка, который жил слишком долго. Если все то же самое причасать, то получается очень даже неплохо — D впечатления замусоренности не оставляет.
                                                                                                                          • +4
                                                                                                                            Периодически то в C++, то в C#.

                                                                                                                            Кратко это выглядит так:
                                                                                                                            C# — если вам нужно сделать действие, то вы его делаете.
                                                                                                                            C++ — если вам нужно сделать действие, то вы: подготавливаетесь к действию, делаете действие, убираете за собой. Компилите, не компилится. Вспоминаете, что забыли что-то изменить в заголовочном файле, меняете это. После этого изменения время компиляции вырастает в два раза. Вы разбираетесь с этим, выносите некоторые определения в отдельный класс (на который нужно создать файл и поставить его под контроль), после этого время компиляции возвращается к прежнему значению. Теперь вы наслаждаетесь красотой своего кода :)))

                                                                                                                            Конечно это пример «худшего случая», но на C# такой случай практически невозможен.
                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              • +1
                                                                                                                                Ох… Рендеринг от C++ уже слабо зависит.
                                                                                                                                Да и скорости не хватает только в определенном типе приложений. Многим приложениям современных скоростей, даже на C#, за глаза хватает.
                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                  • 0
                                                                                                                                    Еще раз напоминаю про «определенный тип приложений»: это игры, сильно завязанные на графику (для них часто и программная часть сложная, приходится выжимать максимум). И казуальные игры. Последние давно бы уже писали на C#, если бы не нужно было тянуть .NET Framework. Но и их уже пишут и на C#, Java, Python.

                                                                                                                                    «И почему же тогда 90% DirectX приложений написаны на С++, ума не приложу»
                                                                                                                                    Статистику в студию пожалуйста.
                                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                      • 0
                                                                                                                                        Из D тоже можно было бы выжать «максимум», будь он популярен.

                                                                                                                                        «Да, статистики я привести не могу. Кроме как взять список популярных 2D и 3D движков (как коммерческих, так и не) и посмотреть, на каких языках они написаны.»

                                                                                                                                        И это ни о чем не скажет. Не всякий движок часто используется, и многие движки имеют «обертки» для Java, Python и C#.
                                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                    • 0
                                                                                                                                      Что то вы в первом предложение не то сказали.
                                                                                                                                      Да, Графика делается видеокартой на 99%, от програмиста надо только подготовить сырые данные и скормить ей.
                                                                                                                                      Подготовить и скормить — не сложно.
                                                                                                                                      В отведеное время посчитать физику( ой, забыл она же опять на видео карте), направить толпу монстров в нужную строну…
                                                                                                                                      Ой, я еще забыл уточнить что данные видеокарте надо кормить в «сыром виде» битиков и байтиков с правильным выраниванием
                                                                                                                                      Те в том виде что из java и С# не доступен «просто так»( и именно это убирает весь гемор на задние планы )

                                                                                                                                      Эх, никогда не забуду как одна маленькая конкатенация строя убила FPS на треть…

                                                                                                                                      Да и самое главное не надо забывать — графика это МЕНЬШАЯ часть приложения
                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                        • 0
                                                                                                                                          99% начинающих геймдевелоперов согласятся с вами.
                                                                                                                                          99% продвинутых геймдевелоперов скажут что они вообще-то делают игры а не демосцены( хотя вот в них програминга больше чем графики, особенно если 64к)
                                                                                                                                          Да почти год делались тени для Дальнобойшиков, хрен знает сколько альбедо для халфы, но ИМХО потому что придумать технологию на было — сейчас все это так… банальность…
                                                                                                                                          А 99% игроков которым хотя бы за 25( те 10-15-20 лет стажа играния) скажут что, вообще-то, не в графике дело.

                                                                                                                                          А в кризисе да — графика конечно самая ресурсоемкая часть, а вот по коду, я так думаю 10-15% от всего.
                                                                                                                                          Расчет скелетов, оклюжена и других интерсекшенов и проверок видимости — не графика.
                                                                                                                                          (пс: я не гейм девелопер, но я наступал на грабли в пункте 1)
                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                    • 0
                                                                                                                                      Таких приложений очень много. Приведу пару примеров из моего опыта работы — распознавание образов для промышленных роботов, и энтерпрайз бэкап. Что тут, что там даже выигрыш в некоторых операциях в пару десятков миллисекунд является существенным достижением. При этом изза объемов кода С там использовать уже неуместно.

                                                                                                                                      Также сюда можно отнести субд, серверные приложения рассчитанные на огромное количество транзакций и т.д. и т.п.
                                                                                                                                      • 0
                                                                                                                                        «При этом изза объемов кода С там использовать уже неуместно.» А можно про это по подробнее?

                                                                                                                                        Вот в ядре ликуса кода тоже много, но им уместно использовать чистый Си.
                                                                                                                                        • +1
                                                                                                                                          Вот поэтому там сейчас черт ногу сломит. Если бы в то время когда появился юникс существовал С++ думаю на нем бы и писали. А сейчас уже никуда не денешься (ну и не стоит забывать странную неприязнь к нему Торвальдса).

                                                                                                                                          К примеру, в последнем проекте где я работал, над энтерпрайз бэкапом, любой бранч занимал порядка 5 гигабайт, чистых исходников. И это только для одного продукта. Если бы это все было на С… я даже не представляю как можно было бы в этом разобраться, и сколько бы времени занимала разработка. Там же немерено всего — поддержка всех файловых систем, централизованное хранилище, дедупликация, несколько баз данных, десятки потоков, черт знает что еще.
                                                                                                                                          • 0
                                                                                                                                            Да, интерфейс тоже был сделан на С++ :)
                                                                                                                                        • 0
                                                                                                                                          Много, но меньшинтво, улавливаете разницу?
                                                                                                                                          Но как для таких «ресурсоемких» приложений на подходе есть новые языки, которые удобнее С++ и такие же мощные. Это упоминавшийся D (если бы его взял гугл под крыло...), и, возможно в будущем, Go.
                                                                                                                                      • 0
                                                                                                                                        www.ffconsultancy.com/languages/ray_tracer/comparison.html

                                                                                                                                        не для холивара и подпитки спора, просто дополнение
                                                                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                        • +1
                                                                                                                                          «Я говорю о том, что во многих случаях это плохо».

                                                                                                                                          В большинстве случаев — это ХОРОШО!

                                                                                                                                          Кстати игры на C# пишут, особенно для XBOX360. Если бы не необходимость тащить за собой фреймворк, то игр на C# было бы гораздо больше.
                                                                                                                                          Драйвера не пишут, потому что C# для этого не предназначен (он работает в вирутальной машине и не имеет прямого доступа к железу).
                                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                            • 0
                                                                                                                                              На XNA не крупные тайтлы пишут, а инди-игры. Не путайте. На любой приставке топовые тайтлы будут писать на С++, потому что железо у них довольно ограниченное и особенное, приходится часто извращаться (особенно на PS3).

                                                                                                                                              «Уж поверьте, если бы для игры, занимающей DVD-диск, требовался бы .net, то проблемой бы это не стало.»

                                                                                                                                              Есть какие-то игры, которые его с собой так и тащат. Но сколько их — who knows.
                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                              • 0
                                                                                                                                                >> Драйвера не пишут, потому что C# для этого не предназначен (он работает в вирутальной машине и не имеет прямого доступа к железу).

                                                                                                                                                Смотря где. Вот, например, в Singularity, на c# написана практически вся ОС за вычетом кусков на асме. ru.wikipedia.org/wiki/Microsoft_Singularity
                                                                                                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                • 0
                                                                                                                                                  Пардон, но кесарю — кесарево. Давайте еще обсудим тут, что верстальщики — это не программисты. Программисты же. Я бы посмотрел, как бы работала какая-нибудь сетевая игра на С#, если бы разработчик драйвера сетевой карты не знал бы таких мелочей, как calling convention и т.д.
                                                                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                  • 0
                                                                                                                                                    >> А действительно интересные для программиста задачи
                                                                                                                                                    Есть мнение, что ДЕЙСТВИТЕЛЬНО интересные для программиста задачи, это использовать возможности железа на полную катушку.

                                                                                                                                                    • 0
                                                                                                                                                      Это ваше исключительно частное мнение. Не стоит считать, что хоть немного заметное в общей массе количество программистов его разделяет.
                                                                                                                                                      • 0
                                                                                                                                                        Поэтому то все те программы, подобные тем, что летали 10 лет назад, сейчас умудряются тормозить имея в 100 раз больше ресурсов.
                                                                                                                                                        • 0
                                                                                                                                                          Глупости говорите.

                                                                                                                                                          Тормозят програмы вовсе не от того, что программисты не озабочены поголовно выдавливанием всего что можно из железа. Любит народ примитивизировать всё.
                                                                                                                                                          • 0
                                                                                                                                                            И, кстати, 10 лет назад озабоченных выжиманием производительности было ничуть не больше чем сейчас. Так что ваши выводы просто смешны.
                                                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                          • 0
                                                                                                                                                            Нет, не более оптимальный, а тот, который хорошо ложится на железо.
                                                                                                                                                            Например какая-нибудь сортировка на GPU будет менее оптимальной с точки зрения затраченных ресурсов, но лучше подходит к архитектуре чипа, достигая большего быстродействия.
                                                                                                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                              • 0
                                                                                                                                                                Да пожалуйста. Если напишете транслятор =)
                                                                                                                                                                Просто GPU очень чувствительны к низкоуровневым вещам, таким как распределение данных по банкам памяти. И производительность тут отличается в разы и десятки раз.
                                                                                                                                                                А что за более сложные вещи? Любой «сложный» алгоритм состоит из элементарных операций. Если они медленно выполняются, то ваш «оптимальный» алгоритм гроша ломаного не стоит.
                                                                                                                                                    • 0
                                                                                                                                                      Нет, вы не правы. C++ дает полную свободу действий, C# — предлагает удобные инструменты для реализации данной свободы.
                                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                    • 0
                                                                                                                                                      >Но такое очищение убивает замечательные вещи вроде метапрограммирования.

                                                                                                                                                      в С++ метапрограммирование настолько через жопу сделано, что аж страшно становится. Посмотрите хотя-бы на Руби.
                                                                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                                                    • +1
                                                                                                                                                      «Я скажу всем, до чего довел планету этот фигляр БГ! Сишники паскалистам на голову сели...»
                                                                                                                                                      • +3
                                                                                                                                                        Как-то странно, что до сих пор нет ни одного комментария про PHP.
                                                                                                                                                        • 0
                                                                                                                                                          дык еще и perl не вспомнили
                                                                                                                                                          • 0
                                                                                                                                                            Ну вот выше Ларри вспоминали :)
                                                                                                                                                        • +1