Подтвердить что ты не робот

Стоит ли стараться узнать D?

Представьте, что у вас есть 3 проекта:

  • Текстовый редактор для программистов
  • компилятор
  • и библиотеки поисковых систем для не менее 3 типов файлов: html,.xls и pdf.

У вас есть 3 варианта:

  • С++
  • Java
  • и С#
  • или вы можете изучить альтернативу его выполнению с D.

Затем вы просите больше программистов: Может ли D дать мне существенные преимущества в этой задаче, в том числе: модульность, исправление ошибок, работа в команде и эффективность машины?

4b9b3361

Ответ 1

Как я вижу, D имеет следующие преимущества перед более "традиционными" статически типизированными языками:

  • Insanely мощное средство метапрограммирования времени компиляции. Например, проверьте std.algorithm или std.range в стандартной библиотеке D2. В скором времени будет включен модуль std.parallelism, и если/когда он будет, это будет еще один хороший пример. Эти средства достаточно мощные, что язык иногда чувствует себя почти утиным, но с исполнением статически типизированного языка. Также см. Вопрос SO о метапрограммировании D: Примеры того, какие шаблоны Ds можно использовать для

  • Модель по умолчанию D2 concurrency основана на передаче сообщений. Если вы не подрываете систему типов очевидными, greppable способами, не может быть неявного совместного использования данных между потоками в D2. Конечно, если вы действительно хотите неконтролируемый обмен данными, вы можете сломать это с помощью броска. Например, модуль std.parallelism, который в настоящее время просматривает, делает это, чтобы получить многоядерный parallelism с педалью-металлом.

  • D стремится к сделать простые вещи намного проще, чем С++ или Java. (Я не так уверен в С#.) Простыми вещами я имею в виду такие вещи, как базовый ввод/вывод файлов или шаблон стратегии, не требующий почти такого же шаблона. Фактически, я чувствую, что одна из основных целей проекта D заключалась в том, чтобы изгнать код шаблона с лица Земли, так как избежать необходимости в нем в значительной степени подчеркивается дизайн как языка, так и стандартной библиотеки.

    /li >

Относительно динамических языков D имеет:

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

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

  • Возможность выполнять низкоуровневую работу. Например, за исключением нескольких небольших кусков встроенного ассемблера, сборщик мусора D записывается целиком в D.

Ответ 2

Если вы хотите "власть" С++ без громоздкого синтаксиса или "власть" C с полезными функциями, такими как правильные строки и классы, я бы сказал, что это того стоит. Если вам нравится иметь гигантский API, на котором можно опираться (С#/Java), D, вероятно, не будет поражать ваше воображение. Также убедитесь, что вы используете D 1.0, поскольку поддержка библиотеки (wxD и других GUI-библиотек) и компилятора (GCD, LDC, ничего, кроме DMD) является ужасающей для D 2.0, хотя эта версия языка является явным улучшением.забастовкa >

Ответ 3

Я сам участвую в процессе обучения D, исходя из фона C/С++. D привлек меня из-за его элегантности, он продуманный дизайн. Это выглядит как небо после интенсивных, глубоких и темных углов С++.

Для меня одним большим недостатком D является отсутствие библиотек. Даже стандартную библиотеку я не нахожу очень хорошо. Язык велик, библиотеки пока (пока). Вы можете использовать C libs, хотя это большой палец вверх.

Хотя D, похоже, обладает многими ноу-хау и многими языковыми аспектами, это не половина того, что имеет С++. Поэтому я бы сказал, что гораздо быстрее научиться (определенно потому, что 90% - это языки С++ или родственные языки). Поэтому изучение языка должно быть вопросом недель/месяцев.

Так как пока еще нет отличных инструментов для GUI, вам может понадобиться разработать редактор в чем-то другом. Два других проекта идеально подходят для D.

Ответ 4

Я хотел бы сказать, что вчера я стал энтузиастом D, когда узнал, насколько это лучше, чем С++, и я изучал D в течение двух дней прямо из чистой любви. О, это не идеально, но по сравнению с С++? Нет конкурса. То же самое для Java. С# был моим языком выбора по состоянию на 3 дня назад, но сегодня я думаю, что он перешел на ранг.

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

  • Говорят, что один из самых быстрых компиляторов мира
  • Вы можете использовать try/catch/finally и RAII, но scope(exit) упрощает чтение и запись кода, отличного от кода,
  • Вы можете определить замыкания, которые компилятор может встроить (какие-либо компиляторы С++ 11 делают это? Я не уверен, я застрял на Visual С++ 2008 из-за необходимости поддерживать Windows CE)
  • Сбор мусора является стандартным, но необязательным, поэтому вы можете писать программы с гарантиями с низкой задержкой, избегая выделения GC (но как управлять памятью?) Я подозреваю, что можно использовать alias this, чтобы сделать умные указатели a la С++?)
  • Slices - механизм доступа к коллекции, который намного безопаснее, чем итераторы С++, а также гораздо удобнее, не нужно повторять себя, как в lower_bound(blobCollection.begin(), blobCollection.end(), blob)
  • Дженерики более гибкие, чем на С++, и не создают страницы сообщений об ошибках.
  • Метапрограммирование времени компиляции, которое значительно превосходит С++ (и, очевидно, С# тоже)
  • отражение времени компиляции, которое (надеюсь, но не могу подтвердить) можно использовать для построения системы отражения во время выполнения, если один хотел
  • Хорошо разработанный подход с несколькими парадигмами к concurrency с интересными функциями как для общей памяти, так и для архитектуры передачи сообщений
  • Встроенная поддержка модульных тестов
  • Массивные выражения, например. a [] = (b [] + c [])/2 (MATLAB делает это более тесно, но среди языков общего назначения эта особенность встречается редко)
  • Превосходные функции с плавающей запятой (например, nextUp()/nextDown()/ulp(), шестнадцатеричные поплавки, контроль аппаратных исключений)

Для библиотеки компилятора или поисковой системы D явно превосходит. И так как D настолько похож на С++, вам не придется тратить много времени на его изучение, так почему бы и нет? Кроме того, не должно быть трудно переносить небольшие программы и библиотеки из С++. У меня есть впечатление, что привязки GUI также улучшаются, поэтому, возможно, D будет хорошо работать для текстового редактора в наши дни.

По общему признанию, я не доволен всем. Они по-прежнему обслуживают толпу C, поэтому вам все равно нужно заполнить свои switch с помощью breaks, ключевое слово static сбивает с толку чрезмерное использование, lambdas требует скобки и оператор "return" (в отличие от С# quicker < синтаксис t26 > ), все функции и попытки/уловы требуют скобок, pass-by-reference неявна на сайте вызова... но то, что предлагает D, слишком хорошо, чтобы уйти.

Но, конечно, хотя D язык явно потрясающий, и стандартная библиотека, по-видимому, созрела, окружающие инструменты могут быть не такими уж хорошими: IDE, поддержка платформ для смартфонов и т.д. Единственное IDE, которую я пробовал, Visual D (плагин IDE для Visual Studio) работает очень хорошо, включая отладку, которая, похоже, работает так же, как и отладчик Visual С++, и которая может войти в стандартную библиотеку (весело!). Однако Code Completion работает не очень хорошо.

По сравнению с С#, D лучше в большинстве областей, но кажется слабым, когда дело доходит до динамической привязки и отражения. Например, ваш текстовый редактор может легко иметь подключаемую систему под .NET, но я не уверен в том, что D..NET также предлагает создание кода времени исполнения, а D - нет. Однако для компиляции кода D в .NET существует компилятор исследований. Учитывая, что С++/CLI уже компилируется в .NET(С++/CLI), возможно, когда-нибудь один сможет использовать D одинаково хорошо для управляемого и собственного кода (с небольшим успехом в управляемой земле, конечно.)

Взаимодействие с C/С++ и .NET довольно приличное. D должен взаимодействовать с функциями С++ и однонаправленными классами с помощью extern (C++) и сглаживания имени С++ (но какое имя компилятора называют?), В то время как вы можете легко создавать COM-интерфейсы, вызываемые из .NET и других языков.

Ответ 5

Я бы дал +1 для эффективности, 0 (без pro или con) для модульности, 0 для командной работы и огромного -1 для исправления ошибок.

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

Обычно - как программист Эйфеля - я бы дал D +1 для разработки по контракту, но это не используется постоянно по стандартной библиотеке и абсолютно не используется 95% дополнительных библиотек. Таким образом, вы не получите от этого много преимуществ.

Ответ 6

Я думаю, что D определенно лучше всего подходит для компилятора и менее подходит для двух других задач.