Russian Qt Forum
Ноябрь 23, 2024, 07:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 ... 8   Вниз
  Печать  
Автор Тема: C++ vs D  (Прочитано 69337 раз)
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« : Октябрь 27, 2008, 17:41 »

В чем язык D лучше\хуже С++?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 27, 2008, 18:10 »

"Он является языком сверхвысокого уровня"
ИМХО, после этой фразы сравнивать C с D тоже, что сравнивать C с ASM.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Октябрь 27, 2008, 18:36 »

"Он является языком сверхвысокого уровня"

Где такое пишут?

Ну и всеже, что в нем такого "сверхвысокого"? В чем он "выше" С++?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
denka
Гость
« Ответ #3 : Октябрь 27, 2008, 19:13 »

Здесь можно почитать http://ru.wikibooks.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_D
Записан
SASA
Гость
« Ответ #4 : Октябрь 27, 2008, 20:16 »

А нет случайно для студи плагина c D?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Октябрь 27, 2008, 20:41 »

А нет случайно для студи плагина c D?

Помоему есть только GCC для D
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Октябрь 27, 2008, 20:55 »

Здесь можно почитать

Почитал.

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

Вобщем С++ наше всё )))

Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Detonator
Гость
« Ответ #7 : Октябрь 27, 2008, 21:24 »

Для C++ вроде тоже библиотеки сборщика мусора есть.
Остальные нововведения вообще не понял, просто немного другой синтаксис. С библиотекой тоже непонятки, неужели там статической линковки нет?
Записан
spirit
Гость
« Ответ #8 : Октябрь 27, 2008, 21:30 »

да уж, лучше питон начать изучать.  Смеющийся
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #9 : Октябрь 28, 2008, 01:55 »

Почитайте вот это

http://xen.rwx.ru/coding/42.1

(все три страницы).


Для особо ленивых основные моменты:

Цитировать
Нет препроцессора. Для расширения языка удобно использовать макросы. Компиляция с условиями (#if, #elif, #ifdef), включения кода (#include), макросы (#define), конкатенация строк по существу формируют дополнительный язык, не связанный синтаксисом с основным языком программирования.
Но есть механизм "условной компиляции", встроенный в язык.

Цитировать
Нет множественного наследования. Это запутанная возможность сомнительной полезности. Множественное наследование может быть заменено обычным наследованием с использованием интерфейсов и агрегированием;
Именно так и нужно делать.

Цитировать
Нет пространств имен (namespace). Пространства имен были попыткой решить проблему, возникающую при объединении разработанных независимо друг от друга кусков кода, когда пересекаются имена переменных, типов данных и так далее.
Вместо namespace используется модульный подход состыковки частей исходного кода. Модульный подход выглядит проще и удобнее для использования.

Цитировать
Нет предупреждений при компиляции. А есть только ошибки. Компиляторы языка D не генерируют предупреждений при встрече неоднозначного кода. Код может быть или понятным компилятору или непонятным, это избавляет от необходимости решать, какие предупреждения относятся к ошибкам программы, а какие - нет. Использование предупреждений компилятора является признаком плохого дизайна языка.
Кто бы с этим поспорил.

Цитировать
Нет различия между операторами . и ->
Теперь везде можно писать "." и не париться.

Цитировать
Ассоциативные массивы - часть языка
Это хорошо, как же без них. Теперь map структуры ненужны.

Цитировать
Жесткий синтаксис
Все чотко и понятно, не нужно выяснять "контекст использования". Лексические и синтаксические анализаторы выполняются в один линейный проход и работают с дикой скоростью.

Цитировать
Массивы знают свой размер
Наконец то.

Цитировать
В языке C, когда массив передается в функцию, на самом деле передается ссылка на него, даже когда прототип функции говорит, что должен быть передан массив. Когда происходит это преобразование, вся информация о типе массива теряется
А в D мы что видим в прототипе, то и получаем.

Цитировать
В языке C массивы объявляются с использованием оператора [] после имени массива. Это ведет к использованию очень неуклюжего синтаксиса при объявлении, скажем, ссылки на массив: int (*array)[3];
А в D мы видим тип переменной массива:
int[10] a; // а - это массив из десяти int чисел. Потому что a имеет тип int[10]. Логично, не так ли?
int[3]* b; // объявляется ссылка на массив из трех целых чисел

Цитировать
D компилируется в обычные объектники, которые можно линковать с объектниками, созданными с помощью C/C++
И это правильно.

UPD:

Цитировать
Присвоения не возвращают булевого значения;
А значит теперь невозможна ошибка использования "=" вместо "==" в условиях.
« Последнее редактирование: Октябрь 28, 2008, 02:01 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
Detonator
Гость
« Ответ #10 : Октябрь 28, 2008, 07:02 »

вот-вот, ничего особо значимого в язык не добавили.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Октябрь 28, 2008, 07:19 »

помоему, с Оберона содрали, только синтаксис Си, плюс засунули препроцессор в язык.
Записан

Юра.
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #12 : Октябрь 28, 2008, 11:32 »

Цитировать
помоему, с Оберона содрали, только синтаксис Си, плюс засунули препроцессор в язык.

Цитировать
вот-вот, ничего особо значимого в язык не добавили.

Для кого предназначен язык D

  • Для людей, которые компилируют код с максимальным количеством включенных уровней предупреждений (warning levels), что означает интерпретацию предупреждений как ошибок;
  • Для тех, кто решил, что обещание легкого объектно-ориентированный подхода к программированию в языке C++ не выполняется из-за его сложности и запутанности;
  • Для программистов, которых впечатляет мощь языка C++, но разочаровывает необходимость ручного управления памятью и ловля багов, связанных с указателями;
  • Для команд разработчиков, разрабатывающих приложения, исходные тексты которых содержат миллионы строк кода;
  • Для программистов, которые считают, что язык программирования должен поддерживать достаточное количество возможностей для абстрактной работы с указателями;


Для кого не предназначен язык D

  • Для маленьких программ, для которых больше подойдут языки скриптования или интерпретируемые языки, например Python или Perl;
  • Для борцов за чистоту языка. D является практичным языком и каждая его особенность реализуется таким образом, чтобы сохранить эту практичность. Например, в языке D нет необходимости использовать указатели в ординарных ситуациях, но работа с указателями поддерживается.


Для вас, уважаемые, язык D не предназначен.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Tonal
Гость
« Ответ #13 : Октябрь 28, 2008, 12:33 »

Цитировать
Нет множественного наследования. Это запутанная возможность сомнительной полезности. Множественное наследование может быть заменено обычным наследованием с использованием интерфейсов и агрегированием;
Именно так и нужно делать.
Множественное наследование, там где оно есть в полной мере используется в основном 3мя способами:
Наследование интерфейсов, миксины, интеграция нескольких разных библиотек в один проект.
В Java и C# два последних вида невозможны.

Миксины, например, используются в Qt, когда мы наследуем наш класс от QDialog и сгенерённого из ui-шки класса.
Вроде бы миксины в Д есть.

Цитировать
Нет пространств имен (namespace). Пространства имен были попыткой решить проблему, возникающую при объединении разработанных независимо друг от друга кусков кода, когда пересекаются имена переменных, типов данных и так далее.
Вместо namespace используется модульный подход состыковки частей исходного кода. Модульный подход выглядит проще и удобнее для использования.
В современных языках модули в пакеты объединяются. Просто модулей для больших проектов обычно не достаточно...

Цитировать
Нет предупреждений при компиляции. А есть только ошибки. Компиляторы языка D не генерируют предупреждений при встрече неоднозначного кода. Код может быть или понятным компилятору или непонятным, это избавляет от необходимости решать, какие предупреждения относятся к ошибкам программы, а какие - нет. Использование предупреждений компилятора является признаком плохого дизайна языка.
Кто бы с этим поспорил.
Предупреждение - это когда синтаксис корректен, но сама конструкция может иметь неожиданный для разработчика смысл.
Например, gcc выдаёт предупреждение, если в списке инициализации базовые классы и поля указаны в порядке отличном от порядка их объявления. Так же у него есть режим, когда предупреждения выдаются по советам Мейерса. Улыбающийся
Как-то довольно долго ловил ошибку из за неверного порядка - я то смотрел на порядок инициализаторов. Улыбающийся
Хотя конечно,

Цитировать
Ассоциативные массивы - часть языка
Это хорошо, как же без них. Теперь map структуры ненужны.
Чем плох std::map?

Цитировать
Массивы знают свой размер
Наконец то.
Цитировать
В языке C, когда массив передается в функцию, на самом деле передается ссылка на него, даже когда прототип функции говорит, что должен быть передан массив. Когда происходит это преобразование, вся информация о типе массива теряется
А в D мы что видим в прототипе, то и получаем.
Опять же чем плохи std::vector или boost::array?
Чистыми массивами пользуются обычно для буферов, для обмена с plain C, и студенты. Улыбающийся
Оно конечно [] написать быстрее чем array, но не критично.

Цитировать
Присвоения не возвращают булевого значения;
А значит теперь невозможна ошибка использования "=" вместо "==" в условиях.
Присвоение в С++ возвращают то, что описано в сигнатуре. По умолчанию объект, для которого выполнялось присвоение.
Так что если объект не приводится к bool или void* то и спутать невозможно.
Зато возможна конструкция a = b = c = 10;

Моё мнение: D нужно сравнивать с C# или Java, т.к. он ориентирован примерно туда же. А с С++ но несколько в разных плоскостях.
Кроме того, в D нет ничего принципиально нового или отличного от всех перечисленных,
По мне, если уж и переходить куда-то, то в скриптовые или функциональные. Оба направления дают изрядный выигрыш в скорости разработки, причём вторые ещё и скорость выполнения дают вполне на уровне. Улыбающийся
Ну и изучая кардинально другие направления ты изрядно расширяешь кругозор. Улыбающийся

П.С. Мне кажется, что D появился в большой степени потому, что в OpenSource долго не было языков класса C# или Java.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #14 : Октябрь 28, 2008, 13:02 »

Вместо namespace используется модульный подход состыковки частей исходного кода. Модульный подход выглядит проще и удобнее для использования.
В современных языках модули в пакеты объединяются. Просто модулей для больших проектов обычно не достаточно...
В D модули, конечно, можно объединять в пакеты.


Цитировать
Ассоциативные массивы - часть языка
Это хорошо, как же без них. Теперь map структуры ненужны.
Чем плох std::map?
Да впринципе ничем не плох. Но реализация сделана в отдельном namespace std, и об этом надо помнить при программинге. Просто неудобно. А тут часть языка.


Цитировать
В языке C, когда массив передается в функцию, на самом деле передается ссылка на него, даже когда прототип функции говорит, что должен быть передан массив. Когда происходит это преобразование, вся информация о типе массива теряется
А в D мы что видим в прототипе, то и получаем.
Опять же чем плохи std::vector или boost::array?
Да тоже хороши. Но std::vector - это всетаки не массив. А boost::array - вообще не часть стандарта языка.


Моё мнение: D нужно сравнивать с C# или Java, т.к. он ориентирован примерно туда же. А с С++ но несколько в разных плоскостях.
Никак нельзя их стравнивать. C# и Java ограничены своими виртуальными машинами. А для D без гемора доступен любой системный уровень. Хоть драйвера ядра на нем пиши. А вот то, что по удобству испоьлзования он приближается к C# или Java - это очень хорошо.


Кроме того, в D нет ничего принципиально нового или отличного от всех перечисленных.
Принципиально новое - это то, что низкоуровневый язык приближается по своему удобству к C# или Java. Это на самом деле много стоит, ведь программы пишут люди, а не только биороботы с красными фотоэлементами:).
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1] 2 3 ... 8   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.