LINUX.ORG.RU

История изменений

Исправление Vudod, (текущая версия) :

А доказать этот факт можно? Удобная система вкладываемых структур, нативная многопоточность, прекрасная система зависимостей со встроенным пакетным менеджером, куча синтаксического сахара, высокая производительность, очень лёгкий стартап. Что из перечисленного — «убогость это факт»? :)

Хорошо, давайте по порядку. Я буду на примере D излагать, потому что Rust и Vala мне плохо знакомы.

Итак, давайте посмотрим, что имеет D из крупных вещей и не имеет Go (если я не прав, вы меня поправите):

  • ООП: наследование, интерфейсы, множественное наследование интерфейсов.
  • Шаблоны.
  • Лямбды и всякие там мапы (функциональщина).

Стандартная библиотека D богаче, например, есть такие вещи, как std.algorithm, std.parallel, std.mathspecial, std.numeric, std.regexp, которыми в Go и не пахнет.

Стандартные типы: float, double, real в D с возможностью работы с 80-битною (а на некоторых архитектурах вскоре и 128-битною за счёт эмуляции средствами AVX) арифметикою против float32 и float64 в Go, UTF8, UTF16, UTF32 в D и только один вариант в Go.

Скорость кода, сгенерированного референсным компилятором (dmd vs goc) выше в полтора-два раза. Если говорить о gcc, то здесь разница меньше, но всё равно в пользу gdc против go-gcc.

Теперь по синтаксису. Есть и там и там:

  • Автоматические типы.
  • Кортежи.
  • foreach (который в Go просто for).
  • ещё что-то наверняка забыл.

Есть в D и нет в Go:

  • D может делать операции над срезами массивов вида:
    A[$/4 .. $/2] = 0.5*B[$/2 .. $] + C[0 .. $/2]*D;
    
    Go не может.
  • D может передавать произвольный тип в функцию (фактически это вариант шаблонов):
    auto f(T, S)(T x1, S[] x2) {return x1*std.reduce!"a+b"(x2)}
    

Можно писать дальше, но зачем?

Исходная версия Vudod, :

А доказать этот факт можно? Удобная система вкладываемых структур, нативная многопоточность, прекрасная система зависимостей со встроенным пакетным менеджером, куча синтаксического сахара, высокая производительность, очень лёгкий стартап. Что из перечисленного — «убогость это факт»? :)

Хорошо, давайте по порядку. Я буду на примере D излагать, потому что Rust и Vala мне плохо знакомы.

Итак, давайте посмотрим, что имеет D из крупных вещей и не имеет Go (если я не прав, вы меня поправите):

  • ООП: наследование, интерфейсы, множественное наследование интерфейсов.
  • Шаблоны.
  • Лямбды и всякие там мапы (функциональщина).

Стандартная библиотека D богаче, например, есть такие вещи, как std.algorithm, std.parallel, std.mathspecial, std.numeric, std.regexp, которыми в Go и не пахнет.

Стандартные типы: float, double, real в D с возможностью работы с 80-битною (а на некоторых архитектурах вскоре и 128-битною за счёт эмуляции средствами AVX) арифметикою против float32 и float64 в Go, UTF8, UTF16, UTF32 в D и только один вариант в Go.

Скорость кода, сгенерированного референсным компилятором (dmd vs goc) выше в полтора-два раза. Если говорить о gcc, то здесь разница меньше, но всё равно в пользу gdc против go-gcc.

Теперь по синтаксису. Есть и там и там:

  • Автоматические типы.
  • Кортежи.
  • foreach (который в Go просто for).
  • ещё что-то наверняка забыл.
  • D может делать операции над срезами массивов вида:
    A[$/4 .. $/2] = 0.5*B[$/2 .. $] + C[0 .. $/2]*D;
    
    Go не может.
  • D может передавать произвольный тип в функцию (фактически это вариант шаблонов):
    auto f(T, S)(T x1, S[] x2) {return x1*std.reduce!"a+b"(x2)}
    

Можно писать дальше, но зачем?