Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 421 422 [423] 424 425 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#6331
,
|
|
|
|
Ложная посылка - неверные выводы. Delphi я просто использую больше и знаю лучше Свои велосипеды - штука весьма сомнительная, т.к. как правило кроме их автора никто ими не пользуется |
|
Сообщ.
#6332
,
|
|
|
|
Цитата --Ins-- @ Ложная посылка - неверные выводы. Delphi я просто использую больше и знаю лучше Так расскажите, что вы ещё используете в работе, что изучали. |
|
Сообщ.
#6333
,
|
|
|
|
Цитата --Ins-- @ Ложная посылка - неверные выводы. Delphi я просто использую больше и знаю лучше Но создается именно такое впечатление Цитата Свои велосипеды - штука весьма сомнительная, т.к. как правило кроме их автора никто ими не пользуется Используй Qt, у него очень распространенные велосипеды Но для некоторых проектов и фирм свои разработки(да, которыми больше никто не пользуется) вполне приемлемы. Например, софт для каких-нибудь железок часто пишется полностью самостоятельно, включая даже контейнеры, алгоритмы и пр. Ибо в такого рода проектах зачастую приходится учитывать конкретную специфику, потому проще делать свое. |
|
Сообщ.
#6334
,
|
|
|
|
Цитата D_KEY @ Например, софт для каких-нибудь железок часто пишется полностью самостоятельно, включая даже контейнеры, алгоритмы и пр. Ибо в такого рода проектах зачастую приходится учитывать конкретную специфику, потому проще делать свое. Более того, на собеседовании в одной фирме, занимающаяся написание прошивок для железок, меня по полной пытали списками типов и работы с ними во время компиляции. В ответ на моё удивление, что злоупотребление подобными фишками чревато, мне объяснили, что run-time работа с типами - слишком медленно для них, потому тьма всего делается compile-time. |
|
Сообщ.
#6335
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Например, софт для каких-нибудь железок часто пишется полностью самостоятельно, включая даже контейнеры, алгоритмы и пр. Ибо в такого рода проектах зачастую приходится учитывать конкретную специфику, потому проще делать свое. Более того, на собеседовании в одной фирме, занимающаяся написание прошивок для железок, меня по полной пытали списками типов и работы с ними во время компиляции. В ответ на моё удивление, что злоупотребление подобными фишками чревато, мне объяснили, что run-time работа с типами - слишком медленно для них, потому тьма всего делается compile-time. Ага. Хотя даже для статики проводятся потом исследования на тему разбухания объектного кода |
|
Сообщ.
#6336
,
|
|
|
|
ОК, другой пример: C++/CLI . Это C++ ? |
|
Сообщ.
#6337
,
|
|
|
|
Цитата jack128 @ ОК, другой пример: C++/CLI . Это C++ ? Уже ближе. Только, например, ref class это не C++ class, в отличие от класса, унаследованного от QObject. Но Qt это все-таки фреймворк, содержащий макросы и стадию предкомпиляции для С++ программ, а C++/CLI - отдельный язык, являющийся расширением C++. |
|
Сообщ.
#6338
,
|
|
|
|
Цитата D_KEY @ Только, например, ref class это не C++ class, в отличие от класса, унаследованного от QObject. почему это?? Ни тот ни другой не скомпилятся ни одним с++утым компилятором. QObject из-за слотов, ref class - собственно из "ref". В чем разница? |
|
Сообщ.
#6339
,
|
|
|
|
Цитата jack128 @ Цитата D_KEY @ Только, например, ref class это не C++ class, в отличие от класса, унаследованного от QObject. почему это?? Ни тот ни другой не скомпилятся ни одним с++утым компилятором. QObject из-за слотов, ref class - собственно из "ref". В чем разница? Во-первых, в том, что moc всего-лишь генерирует обычный плюсовый код, причем просто дополняя описанный тобой класс. Компилирует же обычный С++ компилятор. Во-вторых, Qt класс - это обычный С++ класс, а ref class, value class, interface class и, собственно, class - разные сущности, равно как, например, generic и template |
|
Сообщ.
#6340
,
|
|
|
|
Цитата MyNameIsIgor @ Так расскажите, что вы ещё используете в работе, что изучали. Был период в жизни, когда работаь приходилось на чистом C - для микроконтроллеров семейства 51-х писать Слава богу он уже позади. Да вроде уже упоминал и об этом, и о том, что и шарп и джаву иногда использую. Хотя эти языки скорее ближе к Delphi, чем к c++Цитата D_KEY @ Но для некоторых проектов и фирм свои разработки(да, которыми больше никто не пользуется) вполне приемлемы. Например, софт для каких-нибудь железок часто пишется полностью самостоятельно, включая даже контейнеры, алгоритмы и пр. Ибо в такого рода проектах зачастую приходится учитывать конкретную специфику, потому проще делать свое. Может и приемлимы, но от этого языковые инструменты не перестают быть примитивными - что приходится изобретать собственные велосипеды, которые частенько с квадратными колесами |
|
Сообщ.
#6341
,
|
|
|
|
Цитата --Ins-- @ Да вроде уже упоминал и об этом, и о том, что и шарп и джаву иногда использую. Хотя эти языки скорее ближе к Delphi, чем к c++ Ну, а теперь только осталось объяснить, на каком основании вы других Blub'ами называете... |
|
Сообщ.
#6342
,
|
|
|
|
Цитата --Ins-- @ Может и приемлимы, но от этого языковые инструменты не перестают быть примитивными - что приходится изобретать собственные велосипеды, которые частенько с квадратными колесами Угу, вот интересно, какие велосипеды нужно изобрести в Делфи, если вообще возможно, чтобы создать тип списка, для которого можно на этапе компиляции доказать, что два таких списка имеют одинаковую длину (при этом, конечно, сами списки создаются в рантайме). Например, это позволяет на этапе компиляции доказать, что в программе нет вызова функции head ![]() ![]() head : List of a -> a с пустым списком в качестве аргумента и тем самым избежать необходимости рантайм-проверок. Или наоборот, на этапе компиляции, выявить места, где обязательно нужны проверки. Для C++ я приблизительно знаю как это делается, можно ли это сделать в Делфи? |
|
Сообщ.
#6343
,
|
|
|
|
Цитата --Ins-- @ от этого языковые инструменты не перестают быть примитивными Я тебе уже многократно писал, что они таковы, каковы могут быть в соответствии с лежащими в основе языка принципами(вытекающими из ниши), в частности, с принципами нулевой стоимости. Среды разработки, фреймворки, библиотеки успешно компенсируют отсутствие данных механизмов. Ты так и не понял, что в Delphi у вас все это вместе, а в Java/C# это так же обеспечивается единой исполняемой средой? А что, если нужна "эффективная" кроссплатформенность(не виртуальная платформа, вроде JVM или .NET, а честная)? Какой нструмент ты выберешь? Что-то ни D, ни Go, ни другие "новые С++" не приживаются и с задачами пока не справляются... Цитата что приходится изобретать собственные велосипеды Используй фреймворки, такие как Qt. Цитата которые частенько с квадратными колесами Это зависит исключительно от твоих рук И еще раз напомню, что в С++ есть другие средства, которые помогут тебе упростить код и без классов-объектов и метаклассов. |
|
Сообщ.
#6344
,
|
|
|
|
Цитата korvin @ Для C++ я приблизительно знаю как это делается, можно ли это сделать в Делфи? На сколько я помню лоровскую тему, на плюсах это не получилось сделать, в отличие от Java и Haskell ![]() Хотя я могу и ошибаться, ибо не совсем понял задание... Возможно, на плюсах просто сделали иначе. |
|
Сообщ.
#6345
,
|
|
|
|
Цитата korvin @ Для C++ я приблизительно знаю как это делается, можно ли это сделать в Делфи? Что-то вроде такого(код толком не проверял, так что сильно не пинайте - работа)? ![]() ![]() template<typename T, int N> class List { public: List(const T &d, const List<T, N-1> &tail) : data(d), next(new List<T, N-1>(tail)) { } const T &head() const { return data; } const List<T, N-1> &tail() const { return *next; } private: T data; std::shared_ptr<List<T, N-1>> next; }; template<typename T> class List<T, 0> { public: List() {} }; template<typename T> List<T, 0> make_list() { return List<T, 0>(); } template<typename T, typename... Args> List<T, sizeof...(Args) + 1> make_list(T first, const Args &...args) { return List<T, sizeof...(Args) + 1>(first, make_list<T>(args...)); } int main() { auto my_list = make_list(1,2,3); my_list.head(); // ok my_list.tail().head(); // ok my_list.tail().tail().head(); // ok my_list.tail().tail().tail().head(); // compile_error: 'const class List<int, 0>' has no member named 'head' } Но тут слишком сильные ограничения на работу во время выполнения... Как мне в новом С++ сделать функцию с переменным числом аргументов одного и того же типа, но чтобы работал "sizeof..."? Добавлено Цитата MyNameIsIgor @ Цитата korvin @ Для C++ я приблизительно знаю как это делается, можно ли это сделать в Делфи? На сколько я помню лоровскую тему, на плюсах это не получилось сделать, в отличие от Java и Haskell ![]() Хотя я могу и ошибаться, ибо не совсем понял задание... Возможно, на плюсах просто сделали иначе. А можно код на Java(к теме близко)? |