Подтвердить что ты не робот

С++ как язык высокого уровня?

Я изучил С++ впервые несколько лет назад, дважды прочитав Stroustrup "Язык программирования С++" и участвуя в течение года в довольно большом проекте (хотя уровень команды С++ был довольно низким). С++ из книги "Основатель" действительно был огромным расширением старого старого C. Powerfull и объектно-ориентированного и даже родового, но все же расширения. И, да, было такое, что STL каким-то образом добавила к стандарту стандарт, который был там по каким-то скрытым причинам - независимо от того, собираетесь ли вы его использовать или нет. Итак, в те дни у меня не было хорошего впечатления от С++: помимо всех этих вечных проблем C с памятью, указателями и границами массивов было добавлено много новых: с классами и шаблонами и сложным синтаксисом и много мышления, чтобы разобраться.

Теперь, после нескольких лет удержания от С++, я недавно начал обновлять свой ноу-хау, но теперь я beagan с "Ускоренным С++" Эндрю Кенигом и Барбарой Э. Му. И то, что я вижу, есть абсолютно "другой С++"! Следуя этой книге, вы фактически можете использовать С++ почти без знания своего C-ядра: вы никогда не сможете использовать массивы, поскольку у вас есть векторы, вы можете забыть о char *, так как у вас есть строка и т.д. И т.д. Из этого точка зрения, STL на самом деле является сердцем языка, и сам язык представляется очень "высокоуровневым", но с производительностью и контролем над объектами, которые никогда не могли позволить себе ни Java, ни Python.

Итак, что С++ вы используете в своей практике? Смешаете ли вы стили, скажем, массивы и векторы? Существуют ли какие-либо правила или рекомендации?...

UPDATE:

Мне сказали в комментариях, что я говорю о том, что теперь называется "Modern С++". Поиск по этим словам выявляет следующие действительно интересные темы:

Является ли современный С++ более распространенным?

Что такое современный С++?

Примеры "современного С++" в действии?

4b9b3361

Ответ 1

Итак, что С++ вы используете в своей практике? Смешаете ли вы стили, скажем, массивы и векторы? Существуют ли какие-либо правила или рекомендации?...

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

Кстати, сам Бьярн Страуструп цитировался для описания С++ очень похожим на то, что описано самим собой:

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

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

Но я считаю, что современный С++ действительно может считаться красивым языком. И это определенно не так, как вы бы описали традиционный стиль С++ с С++.

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

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

Ответ 2

Поздравляем, вы обнаружили то, что мы называем "Modern С++". Я бы предпочел это в любое время по сравнению с стилями программирования "С с классами". Нет более сырых указателей, более явных удалений и т.д. Замечательный мир!

Ответ 3

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

И, кстати, библиотеки Boost являются огромным дополнением к STL.

Ответ 4

Koenig и Moo Accelerated С++ - очень хорошая книга, которую я рекомендую.

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

Важно понимать, что вы оба.

Ответ 5

Я использую универсальное программирование и RAII, когда это возможно. Я пропускаю их обоих в не-С++ - иш "современных" языках.

Ответ 6

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

Ответ 7

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

Если вы только Windows, а .Net не слишком велик, то С# - отличный выбор. В Unix Java отлично работает.

Конечно, С++ имеет свое место. Это просто меньшее место, чем когда-либо в моем мире.

Редактирование: у меня более тридцати лет опыта программирования. 5 лет Собрание, 17 лет в C, 5 лет на С++, 3 года на Java, а сейчас 2 года на С#. Я очень хорош в этом. Ассемблер замечательный. Я быстро программирую с ним. Но я предпочитаю C над ассемблером. Аналогично, я предпочитаю С# над С++. Мне гораздо проще делать большинство распространенных приложений в С#, чем в С++