Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.226.59] |
|
Страницы: (56) 1 [2] 3 4 ... 55 56 ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Ты в прошлом дельфист?
Это характерная кодовая фраза. |
Сообщ.
#17
,
|
|
|
Цитата applegame @ Кроме того, интерфейс - это еще и базовый тип с виртуальными функциями f() и g(). А не должен быть Иначе это не интерфейс, а обычный плюсовый абстрактный класс. Вот только множественного наследования в D нет |
Сообщ.
#18
,
|
|
|
IDE какие для D , кроме Code Blocks ?
|
Сообщ.
#19
,
|
|
|
Цитата D_KEY @ Да, такая модель поддерживается, но не обязательна и, реально имеет смысл, только для библиотек с закрытым исходным кодом.Кстати, я помню времена, когда в агитках по D писали, что модель с разделением файлов поддерживается тоже и можно писать в том стиле, в котором хочешь. Цитата D_KEY @ Препроцессор - кривой костыль. В D например для компиляции под разные ОС, не нужно никаких внешних инструментов, все встроено в язык:А при использовании препроцессора она не настоящая? А для D я смогу задать какие-то константы через систему сборки? version(Windows) { ... } version(linux) { ... } Цитата D_KEY @ Когда-то было худо. Сейчас есть небольшие проблемы с производительностью при очень больших объёмах CTFE-кода. В проекте над которым я тружусь вовсю используются compile-time веб-шаблоны написаные на Diet. Они компиляться прямо в D-код, из-за чего чрезвычайно быстры.Попадались мне разные тесты, которые показывали, что как-то не очень там все. Впрочем, не найду сейчас Цитата D_KEY @ Лямбдами в D просто удобней пользоваться. В D я знаю тип лямбды и могу его использовать, а в C++ у лямбды тип compiler specific, то бишь, фактически, неизвестен. std::function - имеет заметный оверхед по сравнению с лямбдами.Сейчас уже возможно особо ничем, так как вроде реализовали уже в GCC даже под вынь.Мы вроде даже на форуме выясняли, что преимуществ перед лямбдами и std::function нет. Единственная фича - сохранение захваченного контекста, а не как в C++, где захват по ссылке локальной переменной приведет к проблемам, если лямбда будет жить дольше локального фрейма. Цитата D_KEY @ Полностью согласен. Недостатком является его плохая степень опциональности. Сам по себе сборщик это хорошо, если он не вездесущий. Добавлено Цитата trainer @ Фу-фу. Я в прошлом плюсовик, как ни странно. Даже фанат можно сказать.Ты в прошлом дельфист? Это характерная кодовая фраза. Цитата D_KEY @ Дык, интерфейсы в D - это по сути и есть плюсовый абстрактный класс, в котором все виртуальные функции - чисто виртуальные. Я могу создать переменную с типом интерфейса и хранить в ней любой объект унаследовавший данный интерфейс. Если мне нужно просто проверить наличие функций, я это сделаю без всяких интерфейсов, причем compile-time, так-то. Множественное наследование - не нужно. А не должен быть Иначе это не интерфейс, а обычный плюсовый абстрактный класс. Вот только множественного наследования в D нет |
Сообщ.
#20
,
|
|
|
Цитата sergioK @ IDE какие для D , кроме Code Blocks ? А что, тот же NetBeans никак не прикрутить? Да и IDE по мойму самая последняя проблема. В блокноте пиши ну или Far юзай |
Сообщ.
#21
,
|
|
|
Цитата applegame @ Препроцессор - кривой костыль. Цитата В D например для компиляции под разные ОС, не нужно никаких внешних инструментов, все встроено в язык: version(Windows) { ... } version(linux) { ... } Если честно, это выглядит как детский сад. Какие-то зашитые названия ОС прямо в среду. С препроцессором все совсем иначе - это обычные define'ы в системных заголовочных файлах. Цитата Версию можно задать и кастомную через аргументы командной строки, Затем проверять ее. Так чем это отличается от того, что все делают в C и C++? Цитата Цитата D_KEY @ Лямбдами в D просто удобней пользоваться. В D я знаю тип лямбды и могу его использовать, а в C++ у лямбды тип compiler specific, то бишь, фактически, неизвестен. std::function - имеет заметный оверхед по сравнению с лямбдами.Мы вроде даже на форуме выясняли, что преимуществ перед лямбдами и std::function нет. Единственная фича - сохранение захваченного контекста, а не как в C++, где захват по ссылке локальной переменной приведет к проблемам, если лямбда будет жить дольше локального фрейма. Так вроде выясняли, что не имеет при нормальной оптимизации, особенно в сравнении с D. Или я что-то путаю? Цитата Сейчас уже возможно особо ничем, так как вроде реализовали уже в GCC даже под вынь. А раньше чем отличалось? Давно уже использовали tls на разных платформах. Да и boost::thread_specific_ptr появился очень давно. В Qt тоже есть что-нибудь на эту тему наверняка. Добавлено Цитата applegame @ Дык, интерфейсы в D - это по сути и есть плюсовый абстрактный класс Так в D же есть абстрактные классы Зачем им плюсовые? Что мешало сделать интерфейсы такими же, как в других языках, где они есть? Зачем людей путать? Ради NVI? |
Сообщ.
#22
,
|
|
|
Цитата sergioK @ Выбор негуст, но есть:IDE какие для D , кроме Code Blocks ? - плагин для MSVS - VisualD; - аддон к Monodevelop - Mono-D; - IDE на базе Eclipse - DDT Добавлено Цитата D_KEY @ Ага, а потом эти заголовочные файлы надо еще правильно подключить в зависимости от ОС. Привет системам сборки а-ля make, cmake, scons - тысячи их Скорей это выглядит как старперский пережиток прошлого. С препроцессором все совсем иначе - это обычные define'ы в системных заголовочных файлах. Цитата D_KEY @ Мы забросили тесты. Там был слишком простой код, который G++ оптимизировал просто в нуль. Он это умеет, да, также как и GDC. Так вроде выясняли, что не имеет при нормальной оптимизации, особенно в сравнении с D. Или я что-то путаю? Цитата D_KEY @ В том что это делает "умный" компилятор, а не "тупой" препроцессор. Что позволяет, например, намного лучше диагностировать ошибки.Так чем это отличается от того, что все делают в C и C++? Цитата D_KEY @ Раньше не было встроено в язык. В D, по умолчанию, все глобальные переменные - в TLS. А если рассуждать так как ты, то C++ ничем не лучше ассемблера. А что? Там тоже можно пользоваться TLS, через API OS.А раньше чем отличалось? Давно уже использовали tls на разных платформах. Да и boost::thread_specific_ptr появился очень давно. В Qt тоже есть что-нибудь на эту тему наверняка. Цитата D_KEY @ Они похожи, но таки разные вещи. В D можно наследоваться от нескольких интерфейсов, но нельзя от нескольких классов. Класс, в отличие от интерфейса, может содержать еще и данные. Так в D же есть абстрактные классы Зачем им плюсовые? Что мешало сделать интерфейсы такими же, как в других языках, где они есть? Зачем людей путать? Ради NVI? Добавлено D_KEY, ты задаешь слишком много вопросов , я не успеваю на них отвечать. Давай лучше разберем каждый аспект по очереди, не торопясь |
Сообщ.
#23
,
|
|
|
Цитата applegame @ Ага, а потом эти заголовочные файлы надо еще правильно подключить в зависимости от ОС. Привет системам сборки а-ля make, cmake, scons - тысячи их Так эти задачи и должна решать система сборки В языке это смотрится как излишек. Да и всех проблем не решить заранее в языке. По схожим причинам мне не нравится зашитая в D поддержка юнит-тестов. Цитата Цитата D_KEY @ Мы забросили тесты. Там был слишком простой код, который G++ оптимизировал просто в нуль. Он это умеет, да, также как и GDC. Так вроде выясняли, что не имеет при нормальной оптимизации, особенно в сравнении с D. Или я что-то путаю? Ну давай продолжим. Придумай тестик с демонстрацией преимуществ D. Цитата Цитата D_KEY @ В том что это делает "умный" компилятор, а не "тупой" препроцессор. Что позволяет, например, намного лучше диагностировать ошибки.Так чем это отличается от того, что все делают в C и C++? Пример? Цитата А если рассуждать так как ты, то C++ ничем не лучше ассемблера. А что? Там тоже можно пользоваться TLS, через API OS. Во-первых, API нормальных ОС описано на Си. Во-вторых, C++ высокоуровнее ассемблера а не хуже/лучше. Цитата В D можно наследоваться от нескольких интерфейсов, но нельзя от нескольких классов. Класс, в отличие от интерфейса, содержит еще и данные. Это все понятно. Не понятно, почему было не сделать интерфейсы такими, к каким привыкли люди. Цитата D_KEY, ты задаешь слишком много вопросов , я не успеваю на них отвечать. Давай более последовательно разберем каждый аспект по очереди Странно, у меня на подробных разбор одного аспекта будет времени больше уходить, чем вот так вот отвечать. "Письмо это вышло более длинным только потому, что мне некогда было написать его короче"(с) Блез Паскаль Добавлено applegame, ладно, выбирай аспект |
Сообщ.
#24
,
|
|
|
Давай про интерфейсы
Цитата D_KEY @ Какие люди? К чему привыкли? Я вообще ни к чему не привыкал. В C++ интерфейсов не было, вместо них юзались абстрактные классы, в похапе я даже не помню были ли интерфейсы. На форуме D кстати этот вопрос поднимался. Одна из причин - отсутствие множественного наследования. Интерфейсы могут помочь, когда такое наследование необходимо. Это все понятно. Не понятно, почему было не сделать интерфейсы такими, к каким привыкли люди. |
Сообщ.
#25
,
|
|
|
В плюсах-то как раз понятно - там в качестве интерфейсов используются абстрактные классы, не являющиеся интерфейсами. Поэтому плюсовое поведение в данном случае вполне логично. Реализация тоже есть же - в базовом классе. Цитата sergioK @ IDE какие для D , кроме Code Blocks ? Видел для студии соответствующий плагин Visual D называется. Цитата applegame @ Дык, интерфейсы в D - это по сути и есть плюсовый абстрактный класс, в котором все виртуальные функции - чисто виртуальные. Странное решение. Интерфейс показывает, грубо говоря - "что экземпляр класса умеет делать", а наследование - "кем является объект этого класса". Первое связано со вторым, но им, очевидно, не является. Добавлено Цитата applegame @ Какие люди? К чему привыкли? Люди, пишущие на языках, где есть интерфейсы, привыкли пользоваться ими как интерфейсами, а не как абстрактными классами Цитата applegame @ Интерфейсы могут помочь, когда такое наследование необходимо. Кстати, ЕМНИП, Qraizer как-то выкладывал код, где множественное наследование было в тему, и интерфейсами нельзя было обойтись |
Сообщ.
#26
,
|
|
|
Насчет плюсов встроенных ассоциативных массивов. Мне достаточно того, что вместо
std::unordered_map<int, std::string> var; string[int] var; |
Сообщ.
#27
,
|
|
|
Цитата applegame @ Какие люди? К чему привыкли? Программисты, использующие языки, в которых есть интерфейсы. Привыкли к тому, что описал OpenGL. Цитата На форуме D кстати этот вопрос поднимался. Одна из причин - отсутствие множественного наследования. Интерфейсы могут помочь, когда такое наследование необходимо. Это причина для добавления в язык интерфейсов, да. Так поступили в Java и в C#. Правда scala показала немного другой путь с trait'ами, но это к делу не относится. Но зачем же наделять интерфейсы свойствами абстрактных базовых классов? Так, пожалуй, их проще реализовать. Но это не аргумент. |
Сообщ.
#28
,
|
|
|
Цитата applegame @ Насчет плюсов встроенных ассоциативных массивов. Кстати, да - объявление массивов в D мне нравится Очень удобно и однотипно объявляются статические, динамические и ассоциативные массивы. |
Сообщ.
#29
,
|
|
|
Цитата applegame @ Насчет плюсов встроенных ассоциативных массивов. Мне достаточно того, что вместо std::unordered_map<int, std::string> var; string[int] var; А я typedef'ы использую. В D бы тоже использовал. Добавлено Кстати, мне попадался на глаза какой-то фичебаг с alias'ами в D... Вспомнить бы... |
Сообщ.
#30
,
|
|
|
Цитата OpenGL @ Интерфейс в D - в целом то же самое. Но со своими особенностями. Я не знаю, является ли в C# интерфейс отдельным типом? Можно ли там создать переменную с типом интерфейса? Странное решение. Интерфейс показывает, грубо говоря - "что экземпляр класса умеет делать", а наследование - "кем является объект этого класса". Первое связано со вторым, но им, очевидно, не является. Добавлено Цитата D_KEY @ Зачем? string[int] выглядит очень наглядно и понятно. А я typedef'ы использую. В D бы тоже использовал. |