Russian Qt Forum
Ноябрь 23, 2024, 07:14
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
C++ vs D
Страниц: [
1
]
2
3
...
8
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: C++ vs D (Прочитано 69338 раз)
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
C++ vs D
«
:
Октябрь 27, 2008, 17:41 »
В чем язык D лучше\хуже С++?
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: C++ vs D
«
Ответ #1 :
Октябрь 27, 2008, 18:10 »
"Он является языком сверхвысокого уровня"
ИМХО, после этой фразы сравнивать C с D тоже, что сравнивать C с ASM.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: C++ vs D
«
Ответ #2 :
Октябрь 27, 2008, 18:36 »
Цитата: panter_dsd от Октябрь 27, 2008, 18:10
"Он является языком сверхвысокого уровня"
Где такое пишут?
Ну и всеже, что в нем такого "сверхвысокого"? В чем он "выше" С++?
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
denka
Гость
Re: C++ vs D
«
Ответ #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
Гость
Re: C++ vs D
«
Ответ #4 :
Октябрь 27, 2008, 20:16 »
А нет случайно для студи плагина c D?
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: C++ vs D
«
Ответ #5 :
Октябрь 27, 2008, 20:41 »
Цитата: SASA от Октябрь 27, 2008, 20:16
А нет случайно для студи плагина c D?
Помоему есть только GCC для D
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: C++ vs D
«
Ответ #6 :
Октябрь 27, 2008, 20:55 »
Цитата: den'ka от Октябрь 27, 2008, 19:13
Здесь можно почитать
Почитал.
Взяли язык С++, проапгрейдили, получили D. Список нововведений особо невпечатлил, ничего особенного. Понравились лишь некоторые моменты. Настараживает добавление сборщика мусора.
Вобщем С++ наше всё )))
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Detonator
Гость
Re: C++ vs D
«
Ответ #7 :
Октябрь 27, 2008, 21:24 »
Для C++ вроде тоже библиотеки сборщика мусора есть.
Остальные нововведения вообще не понял, просто немного другой синтаксис. С библиотекой тоже непонятки, неужели там статической линковки нет?
Записан
spirit
Гость
Re: C++ vs D
«
Ответ #8 :
Октябрь 27, 2008, 21:30 »
да уж, лучше питон начать изучать.
Записан
xintrea
Супер активный житель
Offline
Сообщений: 754
Re: C++ vs D
«
Ответ #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
Гость
Re: C++ vs D
«
Ответ #10 :
Октябрь 28, 2008, 07:02 »
вот-вот, ничего особо значимого в язык не добавили.
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: C++ vs D
«
Ответ #11 :
Октябрь 28, 2008, 07:19 »
помоему, с Оберона содрали, только синтаксис Си, плюс засунули препроцессор в язык.
Записан
Юра.
xintrea
Супер активный житель
Offline
Сообщений: 754
Re: C++ vs D
«
Ответ #12 :
Октябрь 28, 2008, 11:32 »
Цитировать
помоему, с Оберона содрали, только синтаксис Си, плюс засунули препроцессор в язык.
Цитировать
вот-вот, ничего особо значимого в язык не добавили.
Для кого предназначен язык D
Для людей, которые компилируют код с максимальным количеством включенных уровней предупреждений (warning levels), что означает интерпретацию предупреждений как ошибок;
Для тех, кто решил, что обещание легкого объектно-ориентированный подхода к программированию в языке C++ не выполняется из-за его сложности и запутанности;
Для программистов, которых впечатляет мощь языка C++, но разочаровывает необходимость ручного управления памятью и ловля багов, связанных с указателями;
Для команд разработчиков, разрабатывающих приложения, исходные тексты которых содержат миллионы строк кода;
Для программистов, которые считают, что язык программирования должен поддерживать достаточное количество возможностей для абстрактной работы с указателями;
Для кого не предназначен язык D
Для маленьких программ, для которых больше подойдут языки скриптования или интерпретируемые языки, например Python или Perl;
Для борцов за чистоту языка. D является практичным языком и каждая его особенность реализуется таким образом, чтобы сохранить эту практичность. Например, в языке D нет необходимости использовать указатели в ординарных ситуациях, но работа с указателями поддерживается.
Для вас, уважаемые, язык D не предназначен.
Записан
Собираю информацию по крупицам
http://webhamster.ru
Tonal
Гость
Re: C++ vs D
«
Ответ #13 :
Октябрь 28, 2008, 12:33 »
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
Нет множественного наследования
. Это запутанная возможность сомнительной полезности. Множественное наследование может быть заменено обычным наследованием с использованием интерфейсов и агрегированием;
Именно так и нужно делать.
Множественное наследование, там где оно есть в полной мере используется в основном 3мя способами:
Наследование интерфейсов, миксины, интеграция нескольких разных библиотек в один проект.
В Java и C# два последних вида невозможны.
Миксины, например, используются в Qt, когда мы наследуем наш класс от QDialog и сгенерённого из ui-шки класса.
Вроде бы миксины в Д есть.
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
Нет пространств имен
(namespace). Пространства имен были попыткой решить проблему, возникающую при объединении разработанных независимо друг от друга кусков кода, когда пересекаются имена переменных, типов данных и так далее.
Вместо namespace используется модульный подход состыковки частей исходного кода. Модульный подход выглядит проще и удобнее для использования.
В современных языках модули в пакеты объединяются. Просто модулей для больших проектов обычно не достаточно...
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
Нет предупреждений при компиляции
. А есть только ошибки. Компиляторы языка D не генерируют предупреждений при встрече неоднозначного кода. Код может быть или понятным компилятору или непонятным, это избавляет от необходимости решать, какие предупреждения относятся к ошибкам программы, а какие - нет. Использование предупреждений компилятора является признаком плохого дизайна языка.
Кто бы с этим поспорил.
Предупреждение - это когда синтаксис корректен, но сама конструкция может иметь неожиданный для разработчика смысл.
Например, gcc выдаёт предупреждение, если в списке инициализации базовые классы и поля указаны в порядке отличном от порядка их объявления. Так же у него есть режим, когда предупреждения выдаются по советам Мейерса.
Как-то довольно долго ловил ошибку из за неверного порядка - я то смотрел на порядок инициализаторов.
Хотя конечно,
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
Ассоциативные массивы - часть языка
Это хорошо, как же без них. Теперь map структуры ненужны.
Чем плох std::map?
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
Массивы знают свой размер
Наконец то.
Цитировать
В языке C, когда массив передается в функцию, на самом деле передается ссылка на него, даже когда прототип функции говорит, что должен быть передан массив. Когда происходит это преобразование, вся информация о типе массива теряется
А в D мы что видим в прототипе, то и получаем.
Опять же чем плохи std::vector или boost::array?
Чистыми массивами пользуются обычно для буферов, для обмена с plain C, и студенты.
Оно конечно [] написать быстрее чем array, но не критично.
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
Присвоения не возвращают булевого значения;
А значит теперь невозможна ошибка использования "=" вместо "==" в условиях.
Присвоение в С++ возвращают то, что описано в сигнатуре. По умолчанию объект, для которого выполнялось присвоение.
Так что если объект не приводится к bool или void* то и спутать невозможно.
Зато возможна конструкция a = b = c = 10;
Моё мнение: D нужно сравнивать с C# или Java, т.к. он ориентирован примерно туда же. А с С++ но несколько в разных плоскостях.
Кроме того, в D нет ничего принципиально нового или отличного от всех перечисленных,
По мне, если уж и переходить куда-то, то в скриптовые или функциональные. Оба направления дают изрядный выигрыш в скорости разработки, причём вторые ещё и скорость выполнения дают вполне на уровне.
Ну и изучая кардинально другие направления ты изрядно расширяешь кругозор.
П.С. Мне кажется, что D появился в большой степени потому, что в OpenSource долго не было языков класса C# или Java.
Записан
xintrea
Супер активный житель
Offline
Сообщений: 754
Re: C++ vs D
«
Ответ #14 :
Октябрь 28, 2008, 13:02 »
Цитата: Tonal от Октябрь 28, 2008, 12:33
Цитата: xintrea от Октябрь 28, 2008, 01:55
Вместо namespace используется модульный подход состыковки частей исходного кода. Модульный подход выглядит проще и удобнее для использования.
В современных языках модули в пакеты объединяются. Просто модулей для больших проектов обычно не достаточно...
В D модули, конечно, можно объединять в пакеты.
Цитата: Tonal от Октябрь 28, 2008, 12:33
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
Ассоциативные массивы - часть языка
Это хорошо, как же без них. Теперь map структуры ненужны.
Чем плох std::map?
Да впринципе ничем не плох. Но реализация сделана в отдельном namespace std, и об этом надо помнить при программинге. Просто неудобно. А тут часть языка.
Цитата: Tonal от Октябрь 28, 2008, 12:33
Цитата: xintrea от Октябрь 28, 2008, 01:55
Цитировать
В языке C, когда массив передается в функцию, на самом деле передается ссылка на него, даже когда прототип функции говорит, что должен быть передан массив. Когда происходит это преобразование, вся информация о типе массива теряется
А в D мы что видим в прототипе, то и получаем.
Опять же чем плохи std::vector или boost::array?
Да тоже хороши. Но std::vector - это всетаки не массив. А boost::array - вообще не часть стандарта языка.
Цитата: Tonal от Октябрь 28, 2008, 12:33
Моё мнение: D нужно сравнивать с C# или Java, т.к. он ориентирован примерно туда же. А с С++ но несколько в разных плоскостях.
Никак нельзя их стравнивать. C# и Java ограничены своими виртуальными машинами. А для D без гемора доступен любой системный уровень. Хоть драйвера ядра на нем пиши. А вот то, что по удобству испоьлзования он приближается к C# или Java - это очень хорошо.
Цитата: Tonal от Октябрь 28, 2008, 12:33
Кроме того, в D нет ничего принципиально нового или отличного от всех перечисленных.
Принципиально новое - это то, что низкоуровневый язык приближается по своему удобству к C# или Java. Это на самом деле много стоит, ведь программы пишут люди, а не только биороботы с красными фотоэлементами:).
Записан
Собираю информацию по крупицам
http://webhamster.ru
Страниц: [
1
]
2
3
...
8
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...