Каковы основные отличия между С++, D и С++ 0x?

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

Ответ 1

Мой опыт в основном заключается в том, что С++ 0x настраивает некоторые аспекты С++, но по сути, он один и тот же язык, просто более чистый и несколько более гибкий. Тем не менее, в С++ 0x есть много основных проблем, таких как #include, и код автоматического вычитания типа для регулярных функций не слишком далеко продвигается. Мне нравится С++ 0x, это отличное улучшение, но это небольшой шаг в правильном направлении.

D, я нашел, хорошо. Не знаю. Мне не понравилось D. Я чувствовал, что он не исправил проблемы, которые нуждались в исправлении на С++, и в значительной степени пошел своим путем. Я имею в виду, что нет ничего плохого в том, что язык является тем, кем он хочет быть, но он не чувствовал к мне, как D, подлинно развитый на С++, это просто гибрид С++/С# и является лишь такой эволюцией, как С#. Например, он имеет одну и ту же иерархию объектов с одним корнем, принудительный GC и т.д. Мне казалось, что D может быть С# с некоторыми функциями, такими как generics, и RTCG просто перешел на компиляцию, а не во время выполнения.

С++ 0x не идет достаточно далеко, и D бродил в сторону в поле, где С# и Java уже существуют. Я определенно остаюсь на рынке для чего-то еще как преемника С++.

Ответ 2

С++ 0x определенно больше похож на D, чем на С++ 98 или 03, но они все еще определенно разные языки. Стереотипно, D рассматривается как лучший С++, и он больше похож на С++, чем на любой другой язык, но он по-прежнему очень свой собственный зверь. В этом случае единственная функция, с которой я могу думать, что С++ имеет то, что D определенно отсутствует, - это множественное наследование, но учитывая все проблемы с множественным наследованием, почти каждый язык после того, как С++ решил против него, Вместо этого D вводит ряд других функций, таких как alias this и mixins, которые позволяют реализовать наследование (помимо таких интерфейсов, как С# и Java), поэтому вы, как правило, можете получить преимущества множественного наследования без всех головных болей. Вероятно, есть некоторые другие вещи, которые С++ имеет, что D не делает, но вам, вероятно, придется искать их трудно.

D обычно может делать все, что может сделать С++, но он может делать больше, чем С++, и он может часто делать это лучше. D слабости лежат в основном в относительно молодой реализации компилятора (что может означать ошибки в компиляторе при работе с новыми функциями) и тот факт, что его стандартная библиотека - это очень большая работа (хотя большая часть того, что есть фантастика, и она продолжается для улучшения и роста). Однако, учитывая время, эти проблемы, очевидно, исчезнут. Во всяком случае, я бы сказал, что D немного более мощный, чем С++. Я нахожу это разочаровывающим, когда приходится программировать на С++ после того, как сделал кучу программирования в D. Это особенно верно, когда дело доходит до шаблонов (шаблоны D выталкивают шаблоны С++ из воды с точки зрения мощности и удобства использования). Вообще говоря, D просто более мощный и менее подверженный ошибкам. Проблемы, с которыми он сталкивается, - это проблемы реализации, которые являются полностью временными и которые постоянно фиксируются.

Теперь, что касается С++ 0x, он добавляет в С++ ряд новых функций, которые, безусловно, будут его улучшать. Некоторые из этих функций уже существуют в D. Некоторые примеры этого были бы lambdas, foreach loops и auto (я особенно с нетерпением жду auto. Я был очень удивлен тому, насколько велика игра смены в D). Итак, некоторые вещи, которые D улучшило по сравнению с С++ 98/03, будут в С++ 0x. Но, очевидно, не все из них будут, а С++ определенно отличается от языка D. Это не D. Это не может быть D. И это не должно быть D. Хотя они очень похожи в основном, они определенно разные языки.

Если вы действительно хотите узнать больше о D, вы должны проверить Andrei Alexandrescu "Язык программирования D" , который является окончательной книгой по D и одна из лучших книг по программированию, которые я когда-либо читал. Кроме того, как указано в другом ответе, существует довольно хорошая сетка сравнения различных языков здесь. И, конечно, официальный официальный сайт.

Ответ 3

Я был программистом на С# (я тоже знаю С++ и Java), но после изучения D я бы сказал, что это был бы лучший язык, если бы его компилятор был без ошибок. Просто посмотрите на эти страницы:

Языки в сравнении с D

D Особенности языка

Там две основные причины D не поймали:

  • Компилятор не работает без ошибок (например, ошибки с прямой ссылкой очень раздражают и решают проблемы) (Edit: это улучшилось много!).

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

  • В то время как использование GC не является обязательным, стандартная библиотека использует его широко, поэтому вы сильно вынуждены использовать его, если используете Phobos. Думаю, есть планы исправить это, но пока это так, люди, которым требуется ручное управление памятью, вероятно, избегают D.

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

Ответ 4

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

С++ 0x - новый стандарт для С++, который добавляет много необходимых функций (не все мы надеялись, к сожалению, хотя). Чтобы увидеть, что добавляет С++ 0x, просмотрите запись wiki на нем:

http://en.wikipedia.org/wiki/C%2B%2B0x

Ответ 5

С++ 0x - следующий стандарт С++ (предыдущий из которых был установлен в 2003 году). Эти два являются одним единственным языком.

D - это целый другой язык. Вы можете лучше спросить, каковы общие черты между С++ и D. У меня почти нулевой опыт работы с D, поэтому я не могу рассказать вам о своем взгляде на него, но у меня довольно много опыта работы с С++. Я слышал, что одна из наиболее значимых (предполагаемых) проблем с С++, которую D решает, - сбор мусора: у С++ нет сборщика мусора, в то время как D имеет его.

Мне лично нравится С++ намного лучше. Я мало знаю об сборщиках мусора, но в прошлый раз, когда я проверил, не существовало эффективного сборщика мусора, который гарантирует правильную и детерминированную очистку памяти в отношении того, когда GC врывается и делает свои вещи. Разумеется, динамическое распределение на С++ может завершиться неудачно, но есть способы сгруппировать все сбои распределения памяти программ в одну точку (пул памяти), которые вы можете сказать во время компиляции, что, как только вы пройдете эту точку, не будет неудачи на operator new. Этот метод также дает вам практически мгновенные динамические распределения: распределения затем являются внутренними для программы и являются простой игрой указателей.

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

Ответ 6

Просто попробуйте дать простой сводный ответ:

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

С++ 0x С момента написания (2 января 2011 г.) С++ 0x - это последний проект стандарта С++. Он добавляет много новых функций, которые помогают привести его в соответствие с другими современными языками. Некоторые из наиболее примечательных функций включают в себя: concurrency и функции потоковой передачи, лямбда-выражения и расширения существующей поддержки метапрограмм.

D - это отдельный язык, на который сильно влияет С++. Он заимствует концепции Java и Eiffel. D осуществляет сбор мусора. D заменил множественное наследование С++ интерфейсами и поддержкой смешанных приложений.

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