Почему не выбирается язык программирования D?

Любой, кто использует язык программирования D?

Почему он не популярен?

Ответ 1

Моя дикая догадка - это корпоративные деньги.

Создатели D, DigitalMars, на самом деле не очень большие игроки в корпоративном мире в наши дни.

Его целевой аудиторией были первоначально программисты на Java или С++.

Но, с одной стороны, проблема в том, что большинство из 8 - 5 Java-программистов не будут инвестировать в нечто вроде D, если только это не порядок сверху, а люди сверху, не знают о D, потому что это не упоминается в корпоративных кругах. Вместо этого Microsoft подталкивает С#, который нацелен на одну и ту же аудиторию, но имеет большое корпоративное название.

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

Ответ 2

Существуют две стандартные библиотеки: < устаревший с D2 > и 3 или 4 разломанных компилятора < качество реализации значительно улучшилось > но другие уже упомянули об этом.

После того, как вы выбрали библиотеку < Phobos - единственная стандартная библиотека D2 для фактических данных > (phobos для меня) и получила в основном рабочий компилятор, вы обнаружите, что D (язык) имеет много маленьких проблем. Они сами по себе небольшие, но вместе они делают процесс программирования D несколько болезненным.

  • Unicode рассматривается несколько странным образом: существует три разных типа строк в Юникоде: char [], wchar [] и dchar [] < для UTF-8, UTF-16 и UTF-32 соответственно > - стандарт char [], в котором юникод хранится в виде utf-8, а преобразования между utf-8 и кодовыми точками (dchar) требуются в разных местах < where? > (и иногда неявные) < кодовые точки во время итерации - нет неявного распределения памяти > . char [i], тем не менее, выдаст i-й байт, а не i-й кодовый номер а в противном случае будет иметь скрытые эксплуатационные затраты > ... Строки также изменяемы < D2 строки являются неизменяемыми > вы должны сами реализовать copy-on-write.

  • Массивы странные. Некоторые из них являются статическими, некоторые из них являются динамическими. int [] x = null; делает x пустым массивом. Литеральные ассоциативные массивы (которые являются отличной функцией) со строками в виде ключей должны иметь все ключи одинаковой длины или использовать синтаксический хак для работы над проблемой вывода типа < fixed в D2 > - он работает, но его вид уродливый.

  • Массивы не являются обычными объектами и не имеют методов экземпляра как таковых (например, indexOf), но существуют странные правила < это функция D - методы расширения /UFCS > относительно функций, которые находятся в области видимости, и принимают массив в качестве своего первого аргумента для создания иллюзии методов экземпляра...

  • Иногда вы можете вызывать методы без парнеров. < feature (@property methods) >

  • Функции, которые образуют замыкания или привязаны к объектам (т.е. методы), не совпадают с регулярными функциями, вместо этого они называются делегатами, и вы должны знать о различиях. < Указатели функций похожи на C, делегаты имеют дополнительный указатель контекста >

  • Литеральные строки (char []) могут быть определены с помощью x "40fe", чтобы указать байты в шестнадцатеричном виде, которые составляют массив utf-8. Сайт D говорит, что указание запрещенной последовательности utf-8 разрешено, но мой компилятор не согласен. < Не воспроизводимо с DMD 2.031 или 1.046, вероятно, PEBKAC >

  • Стандартные библиотечные модули (phobos) часто принимают семантически неправильные аргументы в качестве аргументов функции (например, принимают char [], где он должен принимать ubyte []) вероятный Фобос1-специфический или силу вы должны использовать странные соглашения (ubyte b; inputStream.read(b); вместо ubyte b = inputStream.readUByte();. < std.stream устарел, используйте диапазоны /std.stdio >

  • Существует цикл for-each, но синтаксис кажется icky по сравнению с Python или даже Java: foreach(ubyte b, char c; "abcdef"){ ... }. for(ubyte b, char c in "abdef"){ ... } будет приятнее (хотя и не много...). Он имеет необязательный тип вывода для b и c, хотя.

  • Вы не можете сделать класс только для чтения const class X {}, потому что "методы can not be const". < Работает в последнем DMD2 >

  • Синтаксис cast: ubyte u = cast(ubyte) 300; слишком многословный. < По дизайну, чтобы помочь просмотру кода >

  • Вы можете ввести недопустимые значения в тип перечисления: enum X : ubyte {a=0, b=1}; X z = cast(X) 10; не выдаст ошибки - z теперь 10. < So будет записывать на литой указатель. По дизайну cast переопределяет проверки компилятора >

  • Чувство, которое я получаю, состоит в том, что если я буду продолжать оценивать DI, вы найдете больше небольших проблем, которые не имеют большого значения, пока вы делаете X и Y, но я просто не хочу делать X и Y...

  • Это очень сложно для google для вещей, относящихся к языку под названием "D": http://www.google.com/search?q=d+modules <Solution>

Ответ 3

В первую очередь: большинство разработчиков программного обеспечения, о которых я говорю, по крайней мере, слышали о D и мысленно связывали их с теми свойствами, которые вы упомянули в своем вопросе (обычно это быстро + способ, которым С++ должен был быть реализован в первую очередь). Это само по себе является уровнем успеха, которого 99 процентов всех созданных языков программирования никогда не достигнут.

Есть некоторые причины, хотя почему это не в той же лиге с Java/Python/С#/Ruby/etc.

  • Сам язык является красиво выполненным - и нормальным - преемником С++. Но он не отличается от других языков статического типа, чтобы действительно привлечь внимание. Это достаточно для дружественного "ах, это действительно приятно", но не для "gee! Я должен использовать это".
  • Нет приложения-убийцы, которое требует, чтобы вы изучили D. Что-то, что средний программист Джо хочет работать так плохо, что он переживает хлопот по сбору нового языка.
  • Динамические языки программирования, такие как JavaScript, Ruby и Python, взяли на себя некоторые большие куски языкового рынка, что затрудняет поиск аудиторией языков времени компиляции.
  • Корпоративный мир в значительной степени является JVM-миром. Java может быть заменена в качестве языка разработки приложений в ближайшее время, но его преемник, скорее всего, будет работать на JVM, потому что это довольно зрелая и стабильная часть программного обеспечения с большим сообществом и огромными библиотечными ресурсами. Большинство новых JVM-языков, таких как Scala, совместимы с уже написанным Java-кодом.

И последний, но очень субъективный момент: У меня создалось впечатление, что классические языки C/С++/Java-стиля немного вышли из моды в части сообщества разработчиков, которая любит проверять новые языки.

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

Ответ 4

Для меня основной упор на более широкое внедрение заключается в том, что язык все еще так быстро развивается. D1 является/была относительно консервативной попыткой создать лучший С++, добавив некоторые уроки, извлеченные за последние 20 лет из таких языков, как Java и Python. Это хороший язык, но у него нет каких-либо огромных возможностей для убийцы, поэтому понятно, что затрат на коммутацию было бы достаточно, чтобы препятствовать людям.

D2, с другой стороны, все еще находится в альфа, но представляет собой гораздо более значительную инновацию. Он пытается преодолеть разрыв между функциональным и императивным программированием с такими функциями, как:

  • Transitive const (все, что доступно для объекта const/immutable, само является константным/неизменным).
  • Чистые функции. Вы отмечаете функцию как чистую, и компилятор обеспечивает, чтобы она не имела внешне видимых побочных эффектов. Однако он может использовать изменчивое состояние свободно, если оно не видно за пределами чистой функции.
  • Общий. Это еще не реализовано, но идея состоит в том, чтобы по умолчанию все данные не разделялись между потоками, чтобы компилятор автоматически вставлял забор памяти и т.д., Когда это необходимо, если данные являются общими, и система типов предотвращает случайный обмен.

D2 также добавляет некоторые функции, чтобы сделать D более дружественным к библиотечным писателям, таким как возврат по ссылке, псевдоним этого (в основном, неявный оператор трансляции), аргументы шаблона шаблона (в основном передавая любой символ времени компиляции в качестве аргумента шаблону), ограничения шаблонов (аналогичные понятиям С++ 0x) и реальные замыкания.

Сообщение о возврате домой, дайте D время. D1 - хороший, но относительно консервативный язык. Большинство действительно впечатляющих функций убийцы находятся в D2, но он все еще находится в альфа.

Ответ 5

Нет зрелых библиотек и документации поддержки в целом (большая часть работы выполняется добровольцами, которые немного что-то делают, а затем уходят)

Кроме того, я думаю, что недавний раскол, созданный Tango, вообще не помогает D.

Ответ 6

Для меня это недостаток высококачественной IDE. Если бы среда IDE, например Visual Studio или даже Code:: Blocks, полностью поддерживала D, я бы начала использовать ее в одно мгновение.

Ответ 7

Когда у вас установлены языки, такие как С++ и Java, почему бы вам не перейти на новый язык? Более того, С++ и Java развивались на протяжении многих лет, с бесчисленными библиотеками, чтобы идти с ними. Не так много было бы готово инвестировать время, чтобы воссоздать эти библиотеки для нового языка, поскольку это будет своего рода дублирование усилий.

Ответ 8

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

Ответ 9

Я могу думать о нескольких причинах:

  • База пользователей небольшая. Для новых языков трудно добиться достаточного количества импульсов, чтобы позволить им конкурировать со старыми игроками, потому что меньше стимулов для программистов переключиться на них.
  • Меньший объем знаний (см. предыдущий). Труднее найти библиотеки, примеры кода, опытных разработчиков и т.д. Это компенсирует любые преимущества, которые сам язык может предложить во многих случаях.
  • Возможно, язык не проблема, и (пока) другой язык не то, что нам нужно. Большая часть того, что D стремится достичь посредством языковых функций, может быть достигнута на других языках в библиотечной форме.

Ответ 10

Мне нравится D в том, что он является языком более низкого уровня (C/С++), который имеет множество соглашений и функций, которые мне нравятся на С#. Это хорошая смесь. Сейчас у него много недостатков:

1) Стандартная библиотека Split - Phobos vs Tangos разбивает весь код, сделанный в D. Это может исправить в D 2.0 с улучшениями Phobos, но я вижу, что это продолжается до тех пор, пока Digital Mars не примет официальный Tango сообщества в качестве официального стандарта.

2) Версия Split - D 1.0 - довольно стабильная и надежная платформа для написания кода, но D 2.0 promises множество новых функций, некоторые из которых ломаются. Это также явно нестабильная платформа для развития. Пока D 2.0 не стабилизируется и не отпускается, язык не идет туда.

3) Никакая хорошая IDE - Там просто ничего отличного. Плагины Eclipse и несколько полубеленых редакторов существуют, но нет истинной среды кодирования. Я думаю, что это всего лишь вопрос времени, так как здесь есть много хороших стартов, над которыми работают.

4) Отсутствие библиотек/приложений-убийц. Это что-то вроде ситуации с курицей/яйцом. Для D есть несколько больших библиотек, особенно потому, что вы можете легко скрыть любую библиотеку, написанную на C. На самом деле есть много хороших библиотек для D и некоторые интересные приложения. Я думаю, что когда будут решены вышеупомянутые проблемы, больше программистов прибудет к D, а затем у него будут интересные приложения, которые ему нужны, чтобы привлечь более широкую базу.

Ответ 11

Для меня самой интересной особенностью D является возможность кодирования в UTF-8. Как это замечательно!

Могут быть и другие языки, которые допускают международные символы (а не С++!), но я был в мире C и С++, а D - единственное, что я знаю об этом, поддерживая UTF-8.

Очень утомительно найти имена символов, которые недвусмысленны при снятии акцентов: döndür() и dondur() имеют совершенно разные значения на турецком языке: "return" vs. "freeze".

Рассмотрим sıkıcı() vs sikici(); что означает "скучный" против [ругательного слова].

Я думаю, D может быть очень популярен, если международная поддержка характера будет продвигаться вперед, что я буду делать на моем турецком сайте D.

Али

Ответ 12

Я предполагаю, что D позиционируется как "лучший С++", но С++ достаточно хорош и имеет огромную инерцию, поэтому D не будет большой.

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

Ответ 13

Я использую D. То, что мне нравится, - это быстрая скорость компиляции. У меня была идея, и я мог бы реализовать очень быстро. Представьте себе, когда скорость компиляции составляет около 1 секунды. (Аналогичная программа скомпилируется за 8 секунд на С++.) Если кто-то знает, что делать, можно летать. Гибкость языка много раз исполняет пожелания. Случилось так, что я подумал о функции, я попробовал, и она была реализована. Полезные языковые конструкции: foreach, шаблоны, списки могут быть указаны/инициализированы, чем в С++, структуры могут быть инициализированы в их определении, автоматическом выводе типа, легко инициализируются структуры, вычисление функции времени компиляции, ассоциативные массивы и динамические массивы встроены как а также сбор мусора, который можно отключить.

Я мог бы добавить, что есть проблемы (как уже упоминалось другими):  buggy linker, отсутствующий высококачественный IDE, не лучший отладчик (ddbg) (лучше отладчики С++), меньше библиотек, чем для С++, перегрузка оператора более ограничительна (меньше операторов можно перегрузить), множественное наследование не поддерживается (есть Примеси). Обратите внимание, что библиотеки C могут использоваться, С++ тоже может использоваться с ограничениями (я этого не пробовал).

Я использую D для консольных программ.

Ответ 14

Ответ на этот вопрос всегда сводится к двум вещам

  • Цепочка инструментов, документация, стандартная библиотека, сторонние библиотеки находятся в стадии разработки.
  • Уже существуют языки, такие как C и С++, которые, хотя, возможно, менее удобны и легки, могут выполнять работу адекватно.

Оба они, возможно, верны.

Я прихожу из Java, и для меня язык D очень привлекателен. Мне нравится современность D и относительная простота и сила.

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

По этой причине небольшое поощрение снова и снова не может повредить:)

Ответ 15

Я думаю, что есть несколько проблем:

  • Tango/Phobos split - авторы компилятора используют Phobos, но почти все остальные любят Танго лучше и заканчивают тем, что использовали.
  • Отсутствие отличного компилятора - DMD довольно глючит, и все остальные компиляторы используют один и тот же интерфейс. Это очень легко сбой. Мне бы очень хотелось увидеть, как работает d (D-компилятор, написанный в D), но у них есть много работы, прежде чем он станет хорошим конкурентом.
  • Конкурс - Java и С# очень похожи, и у них гораздо больше поддержки, поэтому каждый использует их.

Ответ 16

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

В прошлом языки имели книги, которые приходили вместе с ними (в то время, когда вам понадобилось около 80 гибких дисков для установки языка), затем появились интерпретируемые языки, java и С#. Все они имели хорошие веб-руководства, четкую легкодоступную документацию или среду IDE с некоторой формой intellisense. Все эти ресурсы (или даже только 1 из них) могут указывать вам в нужном вам направлении для любых простых вопросов, которые у вас есть (и это всегда самые простые вещи, которые вас трогают).

Нет никакого справочника, на который ссылается язык D. Как упоминалось в одном из других сообщений, вы не можете легко его настроить (хотя иногда работает "D-программирование" или "d-язык" ).

Примером, который я имел, было то, как вырезать пунктуацию из строки, какие методы выставлены для объекта "string" (нет ресурса, такого как javadocs для D, поэтому ему нужно его google). Оказалось, что мне нужно было импортировать и использовать std.regex и было довольно просто, но у меня все еще нет каких-либо документов, которые рассказывают мне, что именно "строка" предоставляет (или любой другой объект, если на то пошло).

В соответствующей заметке, а не только о D, хотя (BTW, это может быть только я). Вначале я полагался на фактическое знание синтаксиса и библиотек, которые я использовал наизнанку, теперь я обнаружил, что, как правило, просто знаю сводки библиотек, которые я использую, и использую intellisense или javadocs (или что-то еще для других языков) для Детали. Любой язык без простой справочной системы документации будет в невыгодном положении.

Ответ 17

Другая причина может заключаться в том, что, в отличие от С++, для языка нет международного стандарта. Это эффективно предотвращает использование сторонними языковыми системами третьих сторон.

Ответ 18

Я просмотрел D, и мне понравилось то, что я видел, особенно выпуск 2. К сожалению, до сих пор кажется, что только разумная поддержка Linux и Windows, но не для Mac OS X. В Mac OS X это далеко не готовый к производству, который для меня является убийцей. Слишком плохо, потому что он действительно выглядит разумной альтернативой для разработки собственных приложений и даже интеграцией библиотек C было удивительно просто для того, что я использовал до сих пор.

Ответ 19

Я всегда ищу что-то такое же, как D. C, у которого некоторые из грубых краев сняты и модернизированы. Много раз я устанавливал и пытался заставить D работать. D не работает нормально, и это движущаяся цель. Однако настоящая проблема заключается в том, что она несовместима с устаревшим кодом C. О, ты так говоришь? Нет, нет. Вы все еще говорите, что это так? Нет, нет. Проблема в том, что, хотя он будет связываться с C.o файлами, файлы .H НЕ совместимы. Это означает, что я должен переписать все заголовки для чего-то, к чему я хочу привязать, а затем при обновлении файла .h навсегда в будущем преобразовать его в формат D снова. Этот процесс не может быть автоматизирован, и он отстой. Это главное, что меня отключает. Можно также назвать его Q или Frak или что бы то ни было, поскольку это не связано с C, поскольку оно рекламируется.

Ответ 20

Я думаю, что это вопрос времени. Это день интерпретируемых и байт-кодовых языков для тех, кто собирает новые языки. Python, JavaScript, Ruby, С#, Java, Scala, Groovy, PHP, ActionScript - многому научиться без погружения в нового конкурента на С++.

Любой, кто использует C или С++, вероятно, очень доволен C или С++. Какой убедительный аргумент убрать их из их знакомых и продуктивных сред и заставить их изучать язык, который звучит как удар по C?

Ответ 21

Для меня язык недостаточно рефлексивен. У него нет отражения, поэтому программист не проявляет интереса. Он не поддерживает отражение, возможно, из-за его машинных зависимостей.

Если вы видите последнюю структуру, разработанную с использованием С# или Java, они, как правило, поддерживают динамику с помощью функции инверсии управления. IOC позволяет настроить систему в формате XML/другой и создать объекты во время выполнения. Большая часть инноваций возможна, если она поддерживает отражение. DLL и исполняемый файл должны предоставлять метаинформацию о себе.

Классы, функции, атрибуты должны быть подключены. В противном случае я теряю интерес, взламывающий язык.

Я не знаю, кто продавал Perl или Python или Ruby. Если язык привлекает хакеров, они, как правило, создают структуру или приложение дома, в конечном итоге оно привлечет других программистов.

Ответ 22

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

Лично я скрещиваю пальцы, чтобы интерфейс LLVM созрел в более полезное существо, чем застойный GNU gdc, и громоздкие компиляторы Digital Mars dmd.

Чтение вокруг D2, это должен быть действительно хороший язык, если он хорошо реализован, и если он имеет смутно разумный уровень поддержки инструментов.

Ответ 23

Отказ от ответственности: мой опыт работы с D ограничивается просмотром нескольких примеров, чтением страницы википедии и бесед в коридоре.

Как я уже сказал в предыдущем комментарии, D, похоже, царапает зуд, который никто не имеет. Но помимо этого, дерьмо вот так:

Примечание: все пользователи D соглашаются, что загрузка и использование D или чтение D, они будут явно идентифицировать любые претензии к интеллектуальным права собственности с авторским правом или патентное уведомление в любом опубликованном или отправленном по электронной почте обратная связь, отправленная на Digital Mars.

Гарантирует, что я не буду читать спецификацию или сделать что-либо, чтобы способствовать ее использованию. Приятно начинать с легализации сразу, а??

Ответ 24

Я не вижу в примере, иллюстрирующем сайт, какую-либо реальную заметную разницу между ним и С#.  Я думаю, что С# более ясный и чистый.

Я не понимаю, почему я должен использовать его вместо этого, и я не понимаю, какую пользу он предлагает...