The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Вышла версия 2.066 компилятора языка D

19.08.2014 04:00

Вышла версия 2.066 кроссплатформенного компилятора языка программирования D: Digital Mars D (DMD). Язык D использует статическую типизацию, обладает синтаксисом, схожим с C/C++, и обеспечивает производительность компилируемых языков, при этом заимствуя некоторые полезные возможности динамических языков в области эффективности разработки и обеспечения безопасности. Например, предоставляется поддержка ассоциативных массивов, косвенное определение типов, автоматическое управление памятью, средства параллельного программирования и т.п.

Краткий список изменений:

  • Изменения в компиляторе DMD и языке:
    • Опция "-w" теперь выводит предупреждение про неиспользованное значение, возвращаемое pure-функцией. Так как pure-функции не могут иметь побочных эффектов, то подобный код, скорее всего, возник из-за невнимательности.
    • Опция "-noboundscheck" объявлена устаревшей и заменена на опцию "-boundscheck={on|safeonly|off}". Это позволяет гибко управлять проверками на выход из диапазона массивов в режиме -release (раньше включить проверку на выход из диапазона для relese-режима было невозможно).
    • Добавлена опция "-vgc", которая выводит места, где программа неявно выделяет память (это могут быть изменения размеров динамических массивов, объединения строк и т.п.). Опция использует новый атрибут "@nogc" для анализа.
    • Добавлена опция "-vcolumns", которая в диагностических сообщениях включает вывод не только номера строки, но и позиции в строке.
    • Добавлена опция "-color", которая расцвечивает диагностические сообщения об ошибках и предупреждения.
    • Добавлена языковая конструкция extern (C++, namespace), позволяющая использовать прямые вызовы функций C++ из пространств имён.
    • Добавлена возможность перегружать оператор многомерного слайсинга (multi-dimensional slicing).
    • Добавлен новый трэйт: __traits(getFunctionAttributes). Он позволяет получить атрибуты функции, такие, как "pure", "nothrow", "@safe" и пр.
    • Улучшен механизм автоматического определения типов в шаблонах. Шаблон вида "void foo(T)(T[] arr, T elem)" теперь может быть вызван как "foo(a, 1)", если a определено как "short[] a". Раньше было необходимо явно приводить 1 к типу short.
    • Операции Read-Modify-Write на разделяемых (shared) переменных объявлены устаревшими. Вместо "foo += 2" теперь следует использовать "atomicOp!"+="(foo, 2)".
    • Добавлена поддержка конструкторов для встроенных типов: "auto foo = long(1)".
  • Изменения в стандартной библиотеке
    • В модуле core,time операция Duration.get объявлена устаревшей и заменена на универсальный шаблон Duration.split, позволяющий более гибко управлять получением нужных частей временного промежутка. Duration.get всегда вычисляла все части (недели, дни, часы, минуты, секунды и т.д.), но возвращала только запрошенные; Duration.split вычисляет только то, что запросил пользователь. Вдобавок Duration.split может возвращать значения как в out-переменных, так и структуру с запрошенными полями.
    • Некоторые свойства встроенных типов заменены на библиотечные функции. Благодаря универсальному синтаксису вызова функций программисту не надо исправлять код. Такая замена позволяет более гибко управлять деталями реализации встроенных типов - динамических массивов и ассоциативных массивов.
    • Типы-ключи ассоциативных массивов теперь нуждаются в операции opEqu (сравнение на идентичность), а не в операции opCmp (сравнение "больше-меньше-равно").


  1. Главная ссылка к новости (http://forum.dlang.org/thread/...)
  2. OpenNews: В GDC, компилятор для языка D, добавлена поддержка архитектуры ARM
  3. OpenNews: Вышли DCD 0.3.0 и DScanner 0.1.0, инструменты для разработчиков на языке D
  4. OpenNews: Компания Google расширила действие инициативы по повышению безопасности свободного ПО
  5. OpenNews: Для текстовых редакторов KDE и IDE KDevelop представлена поддержка языка D
  6. OpenNews: Вышла новая версия dmd 2.063, компилятора для языка D
Автор новости: anonymous
Тип: Программы
Ключевые слова: dlang
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (101) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (-), 10:23, 19/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Надо на D systemd переписать - больше линукс инноваций!
     
  • 1.2, Resonance (ok), 10:26, 19/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Единственный шанс сделать язык нужным - портировать на Android/iOS. Нативить на плюсах не в кайф.
     
     
  • 2.3, Аноним (-), 10:33, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –5 +/
    У D практически не осталось явных преимуществ перед C++. Сегодня C++14 вышел, ещё дальше толкнул развитие языка.
     
     
  • 3.4, Resonance (ok), 10:50, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > У D практически не осталось явных преимуществ перед C++. Сегодня C++14 вышел,
    > ещё дальше толкнул развитие языка.

    Ну вот тут не соглашусь, пакетная организация кода чего только стоит в D, а так же не нужно разделять на .cpp и .h исходники. Да и вообще С++ слишком переусложнен. Вот пример кода с хабра:
    int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OK
    Все понятно?

     
     
  • 4.6, nib (?), 11:33, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а чем тут можно напугать?
     
  • 4.7, Сука (?), 11:34, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    да
     
  • 4.8, RazrFalcon (ok), 11:36, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> а так же не нужно разделять на .cpp и .h

    какой ужас

     
  • 4.9, Пиони (?), 11:44, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это непонятно только тем, кто на C++ никогда толком и не писал :)
     
  • 4.10, Наноним (?), 11:49, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OK

    Кто ни будь, разтолкуйте, интересно стало =)

     
     
  • 5.12, Пиони (?), 12:09, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Слева - переменная fpi, которая является указателем на функцию, принимающую в качестве аргумента указатель на int, и возвращающая ссылку на int.

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

    В случае с fpi сущность будет иметь тип int.

     
  • 5.13, Аноним (-), 12:12, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    указатель на функцию принимающую указатель на int и возвращающую ссылку на int который указывает на нафиг никому не нужную лямбда функцию которая принимает указатель на автоматический тип (в данном случае int) и возвращает ссылку на автоматический тип (в данном случае int).

    все эти последние C++ стандарты просто мусор для ленивых чудаков которые замусоривают язык из за того что им проще писать auto, а не полный тип и они не осилили pthread_create и восторгаются тупыми как и они сами лямбда функциями

     
     
  • 6.15, Аноним (-), 12:18, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    pthreads лежат гораздо ниже уровнем, чем C++11 threads. Первыми пользуются либо студенты, либо авторы параллельных библиотек. Auto в некоторых случаях удобен, хотя бы при создании итератора.
     
  • 6.16, Пиони (?), 12:25, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Привет чудакам, которые любят писать везде тип, а потом много рефакторить, от чудаков которые используют auto, для автоматическое дедукции и отдают себя радостям жизни
     
     
  • 7.71, Аноним (-), 07:06, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Привет любителям auto, пишущим такой код, в который без IDE, всплывающими подсказками позволяющей узнавать типы переменных, лучше даже не смотреть.
     
  • 6.21, arisu (ok), 12:38, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > язык из за того что им проще писать auto

    google:dlang+voldemort+types. вперёд сделать это без auto.

     
     
  • 7.32, Crazy Alex (ok), 14:35, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Тут до людей еще не дошло, что auto - это механизм абстракции. Что интересно, в скриптовых  языках они этот механизм обычно вполне ценят.
     
     
  • 8.40, Vkni (ok), 15:30, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Это вывод типов для бедных В OCaml е аналог функции с учётом того, что ссылок ... текст свёрнут, показать
     
     
  • 9.42, Crazy Alex (ok), 17:04, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А что такое вывод типов Это и есть механизм абстракции Когда всё, что мне надо... текст свёрнут, показать
     
     
  • 10.43, Vkni (ok), 17:15, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Угу Кстати, auto - это те же шаблоны, только сделанные в другом виде - Т о ... текст свёрнут, показать
     
     
  • 11.62, arisu (ok), 04:28, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    всё на свете шаблоны, только в разных видах ... текст свёрнут, показать
     
  • 11.102, Crazy Alex (ok), 18:43, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Э вывод типов - да Но шаблоны Чего ради Но если даже и да - то тем лучше ... текст свёрнут, показать
     
     
  • 12.106, arisu (ok), 18:55, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    scope вообще мегаофигенен, как по мне всяческие освобождения можно писать сра... текст свёрнут, показать
     
  • 4.28, ями (?), 14:12, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Господи, шо это?
     
     
  • 5.31, arisu (ok), 14:23, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +9 +/
    > Господи, шо это?

    это перл.

    хотя… нет, перл понятней.

     
  • 4.48, Аноним (-), 21:14, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    это не C++, а C. На C++ будет как-то так: std::function<int& (int*)> fpi = ...
     
     
  • 5.51, Аноним (-), 22:51, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Твоя ирония понятна, собрат аноним, но в С нет ни замыканий, ни вывода типов.
     
     
  • 6.54, rob pike (?), 23:24, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > в С нет ни замыканий

    Вопрос не так однозначен. http://okmij.org/ftp/cpp-digest/#pointer-closure

    > ни вывода типов

    И аппликативных функторов тоже нет. Вот ведь ужас-то какой.

     
     
  • 7.79, Аноним (-), 11:15, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Вопрос не так однозначен. http://okmij.org/ftp/cpp-digest/#pointer-closure

    В этой статье нет ничего о том, как симулировать замыкания в С — только о том, как симулировать С-подобные операции над указателями с помощью замыканий scheme.

    > И аппликативных функторов тоже нет. Вот ведь ужас-то какой.

    В комментируемом примере аппликативных функторов, в отличии от вывода типов, не наблюдается, так что сарказм неуместен.

     
  • 4.57, Аноним (-), 00:45, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Плохой пример. Откройте книжку Шаблоны С++ - именно они причина, почему Александреску сказал "хватит" С++. С++ неверен by design - слишком много к нему присобачивали design-костылей. В итоге получилось пугало: ни красоты ни лаконичности. Мне кажется у него нет будущего и это уже агония: все ушли в C, Java/Python/C# и т.д. Кто-то прекрасно себя чувствует в Erlang, ML/HAskell... Впереди восхождение Rust, Go, D. Нет смысла инвестировать так много времени в язык, отдача от которого так низка. Вспомните ошибку компиляции шаблонов - в 100 строк и романтика сразу пропадет.
     
     
  • 5.70, arisu (ok), 05:15, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    но всё это перекрывается тем, что на C++ уже написано огромное количество кода, и переписать его на другом языке часто попросту нереально по трудозатратам. а вот постепенно чистить и улучшать, используя новые фичи C++ — вполне возможно.
     
  • 3.18, chinarulezzz (ok), 12:34, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    c++ пухнет, а не развивается.
     
  • 3.20, arisu (ok), 12:37, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > У D практически не осталось явных преимуществ перед C++.

    ага. кроме отсутствия идиотского legacy и нормальной системы шаблонов, а не того инфернального ужаса, который в цпп.

     
     
  • 4.44, Аноним (-), 17:24, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Теперь инфернальные ужасы C++ и легаси есть и в D - ведь можно подцеплять С++ код :).
     
     
  • 5.61, arisu (ok), 04:27, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Теперь инфернальные ужасы C++ и легаси есть и в D - ведь
    > можно подцеплять С++ код :).

    не весь, шаблоны нельзя пока. Уолтер по этому поводу думает, но дело непростое.

     
  • 3.45, Yaisis (?), 18:47, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сколько бы С++ не развивали, основной его синтаксис уже вряд ли изменится. Обрастёт он всеми возможностями, что есть и в других языках, но это нагромождение символов так и останется. В D изначально внедряли всё новое и поэтому код в нём более наглядный.
     
     
  • 4.68, arisu (ok), 05:06, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > В D изначально внедряли всё новое

    lolwut?!

     
  • 3.49, Kodir (ok), 21:27, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Жирный плюсовый троль, ты хоть Ди в глаза-то видел??
     
  • 2.19, arisu (ok), 12:36, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Единственный шанс сделать язык нужным - портировать на Android/iOS. Нативить на плюсах
    > не в кайф.

    конечно, как же иначе. почти 150 contributors, большое живое комьюнити, фэйсбук — это всё фигня, язык «нинужен». а вот как только его на говнодроид заточат (конечно, это будет не анонимус: ему надо готовенькое; присоединиться к уже существующему проекту анонимус тоже не хочет — хотя gdc умеет генерировать код для ARM, и проект портирования именно на говнодроид есть) — так сразу нужен станет.

    тьфу.

     
     
  • 3.37, Аноним (-), 15:15, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Смешно везде этот фейсбук пихают. То PHP с фейсбучными ускорялками, то вот D. Невдомёк вам что они просто с жиру бесятся и прикручивают под свои задачи инструменты которые для этого не подходят просто потому что могут. Почти 150 контрибуторов и про живое коммунити это вы рассмешили. Был ровно один интересный проект на D - openmw. Так давно на C++ переехал, потому что D не нужен.
     
     
  • 4.39, arisu (ok), 15:18, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ок. не нужен. проходи мимо.
     
     
  • 5.59, Аноним (-), 04:16, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А поговорить?!
     
     
  • 6.60, arisu (ok), 04:26, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А поговорить?!

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

     

  • 1.11, yet another anonymous (?), 12:05, 19/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Позиционирование D какое-то мутное.

    Если C --- достаточно низкоуровневый язык, C++ --- мультипарадигменный, позволяющий выбирать уровень абстракции/модель в зависимости от задачи, то D --- "ещё один язык с C-подобным синтаксисом".

     
     
  • 2.14, Пиони (?), 12:16, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Как я понимаю, язык D позиционировался как "Нормальный C++", но т.к. C++ уже имеет огромную аудиторию, и в последнее время стал развиваться шустрее, впитывая многие преимущества D, он постепенно оставляет D без преимуществ

    Еще сделают в С++ import - цены ему не будет
    http://llvm.org/devmtg/2012-11/Gregor-Modules.pdf

     
  • 2.22, arisu (ok), 12:39, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > D --- "ещё один язык с C-подобным синтаксисом".

    ценное экспертное мнение от знатока ди, чо. хоть «приветмир»-то сделал? про что-то поглубже я и не спрашиваю, из цитаты уровень очевиден.

     
     
  • 3.36, yet another anonymous (?), 15:09, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ценное экспертное мнение от знатока ди, чо. хоть «приветмир»-то сделал? про что-то поглубже я и не спрашиваю, из цитаты уровень очевиден.

    Именно так: я не нашел ответа на "зачем мне нужен D? для каких задач D будет эффективен/полезен?", поэтому дальше "hello, world!" и нескольких простых оценочных задач интереса не возникло.

    Основное впечатление: в язык надергано "специальных случаев" на вкус авторов. Какую целевую область они при этом хотят прикрыть (и какой ценой) --- осталось непонятным. (Точнее, осталось понятным, что авторы языка этим вопросом совсем не заморачивались).

     
     
  • 4.38, arisu (ok), 15:16, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    перевожу: «изучать я ничего не хочу, чем этот ваш автомобиль лучше лошади — не понимаю. куда сено совать — не ясно. дымит, воняет. правила какие-то учить заставляют. фигня, короче, не понимаю, зачем эти автомобили придумали.»
     
  • 2.24, Mihail Zenkov (ok), 13:40, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > D --- "ещё один язык с C-подобным синтаксисом".

    Скорее аналог C++ с более адекватным синтаксисом.

     
     
  • 3.25, arisu (ok), 13:47, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Скорее аналог C++ с более адекватным синтаксисом.

    в общем-то, это и была оригинальная идея. повыкидывать legacy и сделать нечто вроде «c++ done right». а потом туда пришёл Александреску и добавил: «and templates done right».

     
     
  • 4.46, anonymous (??), 19:14, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Скорее аналог C++ с более адекватным синтаксисом.
    > а потом туда пришёл Александреску и добавил:
    > «and templates done right».

    Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?

     
     
  • 5.63, arisu (ok), 04:35, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?

    совершенно серьёзно. и, в общем-то, по фактам: оно примерно так и было. одна из мегафич D — действительно удобные шаблоны, которые не выглядят белибердой, которые удобно использовать, которые можно не только писать, но и читать без труда. также Александреску ответственен за довольно большую часть std.algorithm (и не только).

    а начиналось у него всё с того, что: «я попробую, вдруг интересное что?» мне сейчас лень статью об этом искать, но по-моему, она где-то в доббсе была.

     

  • 1.17, Anonym0uz (?), 12:31, 19/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    К сожалению самолёт получился слишком тяжёлым. А так хорошо всё начиналось…
     
     
  • 2.23, arisu (ok), 12:42, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > К сожалению самолёт получился слишком тяжёлым.

    в чём? что именно тебе кажется там ненужным? нет, не сарказм.

     

  • 1.26, анон (?), 13:56, 19/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    в этом вашем цпп есть аналог mixin-ов?
     
     
  • 2.27, arisu (ok), 14:01, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > в этом вашем цпп есть аналог mixin-ов?

    и ctfe, ага. впрочем, цпп-шники будут говорить, что «нинада». ровно до тех пор, пока в очередном стандарте такое не введут — тогда оно сразу станет Уберфичей.

     
     
  • 3.29, анон (?), 14:16, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ну лицемеры они такие. в цпп нет и доли интроспекции d. отвратные шаблоны вообще отдельный разговор
     
     
  • 4.30, arisu (ok), 14:22, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.
     
     
  • 5.58, anonymous (??), 01:04, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.

    А что, Александреску правда в D ушел?

     
     
  • 6.64, arisu (ok), 04:39, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.
    > А что, Александреску правда в D ушел?

    не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях. но в то же время он весьма активный разработчик на D, написал практически весь костяк std.algorithm (это такой дальний родственник алгоритмов из STL, только использует ranges) и ещё много всякой шаблонной магии в D.

    книгу, опять же, написал: «The D Programming Language» (TDPL). как и полагается — отличная книга. её даже перевели на русский, и не так уж плохо, скорее даже хорошо.

     
     
  • 7.72, anonymous (??), 10:09, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях.

    Хорошо, что ушел. Плохо, что не бросил C++.

    "Не читайте Александреску." (C) А. Степанов.

     
  • 3.33, Crazy Alex (ok), 14:40, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну, constexpr уже весьма близок к ctfe. А вот более гибкая объектная система за счет UFCS и alias this - это уникальные фичи D - особенно когда используются с шаблонами.
     
     
  • 4.34, arisu (ok), 14:46, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    по-моему, alias this — это какая-то невнятная мерзопакость. чемодан без ручки. его надо или выкинуть, или уже приделать нормальную ручку и обивку поменять.
     
     
  • 5.41, Crazy Alex (ok), 16:59, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А за что так? Как по мне - удобная и контролируемая альтернатива множественному наследованию. Для реализации тех же аспектов - в самый раз, тем более, что с шаблонами его, насколько я помню, уже подружили.
     
     
  • 6.65, arisu (ok), 04:44, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А за что так?

    как минимум потому, что alias this допускается только одно. то есть, никакая это не альтернатива, а именно чемодан без ручки.

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

    единственное, что даёт alias this и чего нельзя добиться иначе (и то не всегда, есть нюансы) — неявное преобразование типов. то есть, когда класс A можно использовать как класс B, хоть они и не особо родственники. я, впрочем, считаю, что это лишняя фича, только затрудняющая понимание кода.

     
     
  • 7.83, Crazy Alex (ok), 14:39, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    То, что alias this единственный - насколько я помню, бага, которая есть в багзилле.

    А интерфейсы (хоть формальные, хоть проверки через is и тому подобное) - это хорошо, но тогда надо для всего подряд ляпать прокси, если у тебя данный интерфейс реализуется отдельным готовым объектом, от которого ты не хочешь наследоваться. Как примитивный пример - допустим, есть объект и ты хочешь иметь возможность его лочить снаружи. Одно дело - когда ты создал внутри мьютекс, написал alias myMutex this и всё. Другое - когда тебе lock|unlock надо явным образом пробрасывать. Шаблонам оно ортогонально.

     
     
  • 8.84, arisu (ok), 14:46, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    и давно и всем пофигу алсо, template mixins на кой тебе этот alias спокойно ... текст свёрнут, показать
     
     
  • 9.89, Crazy Alex (ok), 16:25, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, они неспешно, но всё чинят mixin template - можно, std typecons Proxy Но э... текст свёрнут, показать
     
     
  • 10.90, arisu (ok), 16:40, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    стараемся - да ну их нафиг, шаблонная магия вкуснее ну, по гамбургскому счёт... текст свёрнут, показать
     
     
  • 11.99, Crazy Alex (ok), 18:34, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Да я о том, что сделать более человеческие шаблоны в плюсах можно - и даже совме... текст свёрнут, показать
     
     
  • 12.101, arisu (ok), 18:41, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    rdmd тоже крутая штука я как-то уже и привык скрипты на D писать 8230 - ... текст свёрнут, показать
     
  • 12.103, arisu (ok), 18:44, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    кстати, ребята сейчас допиливают автотранслятор фронтэнда с c на d и планирую... текст свёрнут, показать
     
  • 2.47, Аноним (-), 20:18, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > в этом вашем цпп есть аналог mixin-ов?

    Не знаю, как в цпп, а в этом нашем С есть примитивный аналог, хоть и не часть стандарта:
    [code]
    $ cat mixin.c
    #include <stdio.h>
    struct T1 {
            int x;
    };
    int inc_x(struct T1* t){
            return t->x++;
    }
    struct T2 {
            int y;
    };
    int dec_y(struct T2* t){
            return t->y--;
    }
    struct T {
            struct T1;
            struct T2;
            int z;
    };
    void main(){
            struct T t = {.x = 42, .y = 11, .z = -4};
            printf("%d\n",inc_x(&t) + dec_y(&t) - t.z);
    }

    $ gcc -fplan9-extensions mixin.c -o mixin
    $ ./mixin
    57

    [/code]

     
     
  • 3.50, Kodir (ok), 21:33, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Не знаю, как в цпп, а в этом нашем С есть примитивный аналог

    С таким успехом и ассемблер - примитивный аналог Си. :)
    Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслей. Ну и надёжный, конечно - что Ди и сделал как замена таймбомбовому Цэ-пи-пи.

    Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).

     
     
  • 4.52, rob pike (?), 23:15, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслей

    Такого человечество не придумало.
    Включая язык, секретаршу и энцефалографию.

     
  • 4.55, angra (ok), 23:41, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке
    > забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт
    > десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).

    Вот в php нет buffer overflow. Как там с безопасностью рассказать или сам знаешь?

     
  • 4.56, chinarulezzz (ok), 00:20, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >давно уже нужен нормальный язык

    Уже есть. Но с одной стороны legacy, с другой инерция.

     
  • 3.53, rob pike (?), 23:16, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну да. А еще эксепшны есть. В setjmp.h
     
  • 3.66, arisu (ok), 04:53, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    это, мягко говоря, соооовсем не то. mixin'ы в D — это геренация кода во время компиляции. проще говоря: mixin('int a=42;') во время компиляции будет заменено на «int a=42;».

    с первого взгляда эта фича кажется бессмысленной, но если узнать, что в ди во время компиляции можно исполнять код на ди (ограничение — нет глобальных переменных; но на функциональщине можно много всего сделать; например, функция toHash(), вычисляющая SuperFastHash, работает как во время компиляции, так и во время исполнения), то mixin'ы сразу становятся намного более интересными. потому что строки для них можно генерировать довольно сложным ди-кодом.

    например, парзить дишным кодом во время компиляции некие файлы с диска и на их основе генерировать дишный код (привет, шаблоны страниц в vide.d).

     
     
  • 4.67, arisu (ok), 04:59, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    p.s. например, библиотека std.regex активно пользуется этой фичей для того, чтобы превратить регулярку в обычный ди-код. при этом ей хватает мозгов использовать автоматы, когда регулярка без бэктрэйсинга и делать другие разные гитики.

    конечно, буст тоже нечто подобное умеет на шаблонной магии, но попробуйте почитать код буста для этого, а потом — код std.regex.

     
  • 3.69, arisu (ok), 05:12, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    кстати, спасибо. как-то я пропустил чудесный ключ «-fplan9-extensions».
     

  • 1.73, Бутират (?), 10:21, 20/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если язык такой бодрый. Почему он не пришел на замену c++? Не думаю что дело исключительно в традициях. PHP же смогли свергнуть. Причем за более короткое время чем существует C++
     
     
  • 2.74, arisu (ok), 10:36, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    у тебя хороший ник, точно описывает твой пост.
     
     
  • 3.75, Бутират (?), 10:44, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Видимо чтобы меня поняли, придется изъясняться в школьных традициях вашего сообщества.

    Этот ваш Дэ задумывался как c++ done right, но в итоге смачно лососнул у c++. О чем говорит текущая его популярность, а вернее его отсутствие. Видать не совсем уж и done right

     
  • 2.80, Аноним (-), 11:20, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Язык не так давно немного устаканился.  Была революционная 1-я версия, теперь 2-я сильно продвинутая.  Может будет и 3-я.  Язык D выгребает все самое интересное из других языков и не стесняется самого себя вычищать от анахронизмов. Но в этом его недостаток, нет окончательной стабильности.
     
     
  • 3.81, arisu (ok), 11:44, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Но в этом его недостаток, нет окончательной стабильности.

    «окончательная стабильность» — это «dead as a doornail».

    убедить Уолтера принять что-то, что ломает совместимость на уровне языка — та ещё задача: он даже неломающим расширениям сопротивляется до последнего.

    чуть активней ломают std, но и то не так быстро, чтобы это сильно напрягало. всегда есть время на починку старого кода (компилятор заругается на deprecation), плюс можно привинтить слой совместимости обычно, если очень уж чинить не хочется (или просто взять старый модуль). на практике — ломается не так много, и в основном то, что касается всяких околосистемных вещей — типа запуска процессов, обёрток над clock_gettime() и ты пы.

    ходят разговоры про написание «автомигратора», как в Go, но говорят многие, а делать никому не хочется. в принципе, парзер D на D есть, и продвинутый линтер на его основе тоже есть — так что писать не то, чтобы совсем с нуля надо. но пока — благодаря малому количеству «ломающих изменений» — всем проще починить свой код руками и не заморачиваться написанием (и, что намного важнее — дальнейшей поддержкой) такой тулзовины.

     
  • 2.82, Аноним (-), 14:12, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Все просто! Потому что Уолтер Брайт не бородат!
     

  • 1.85, Аноним (-), 15:26, 20/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Добавлена языковая конструкция extern (C++, namespace), позволяющая использовать прямые вызовы функций C++ из пространств имён.

    и как же они умудрились запилить эту фичу при полном отсутствии ABI и linking onvention на плюсовые ф-ии и методы?

     
     
  • 2.86, arisu (ok), 15:34, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > и как же они умудрились запилить эту фичу при полном отсутствии ABI
    > и linking onvention на плюсовые ф-ии и методы?

    для винды: -m64 поддерживает m$vc. -m32 поддерживает dmc. -m32mscoff поддерживает m$vc.

    для пигвинуса: gcc 4.

    точно так же, как и просто extern (C++).

     
     
  • 3.87, Аноним (-), 15:42, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > точно так же, как и просто extern (C++).

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

     
     
  • 4.88, arisu (ok), 15:48, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > вопрос собственно и был про плюсловые вызовы, хрен с этими неймспейсами. В
    > общем, чуваки намутили какую-то костыльную уйню в языке.

    а что делать, если стандартизаторы цпп до сих пор не озаботились стандартизацией name mangling? прямой вызов цпп-кода без ц-врапперов — фича достаточно удобная и востребованная. приходится вот так вот извращаться.

     
     
  • 5.93, all_glory_to_the_hypnotoad (ok), 20:34, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > а что делать, если стандартизаторы цпп до сих пор не озаботились стандартизацией name mangling?

    Ты ничего не понял. Этот самый фантазёр (Страуструп т.е.) специально советует всем делать разные name mangling схемы дабы случайно не слиплись разные ABI в одном бинарнике. Проблема только в отсутствии ABI и calling convention'ов, общая name mangling схема совсем не проблема.

    > прямой вызов цпп-кода без ц-врапперов — фича достаточно удобная и востребованная. приходится вот так вот извращаться.

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

    И дурачи из DMD сотворили большую уету сделав попытку поддержвать такие хаки у себя в языке.

     
     
  • 6.94, arisu (ok), 20:42, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    вот не зря у меня рядом с тобой подпись стоит: «тупорылый уе…н».
     
     
  • 7.95, all_glory_to_the_hypnotoad (ok), 21:50, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    да, у тебя не зря - это  твой диагноз самому себе, т.е. психологически здоровый человек не будет собирать подписи.
     
     
  • 8.96, arisu (ok), 06:31, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    у меня голова не казённая, чтобы каждого идиота помнить поимённо я понимаю, что... текст свёрнут, показать
     
     
  • 9.100, Crazy Alex (ok), 18:37, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А чем метишь Я давно какую-нибудь хрень приглядываю, чтобы на вебе по всяким кр... текст свёрнут, показать
     
     
  • 10.104, arisu (ok), 18:47, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    самописный userjs в принципе, его можно превратить в универсальный 8212 сдел... текст свёрнут, показать
     
  • 10.107, all_glory_to_the_hypnotoad (ok), 20:49, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    желчью метит, не видно чтоли... текст свёрнут, показать
     

  • 1.91, anonymous (??), 16:41, 20/08/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ошиблись, надо 2.666
     
     
  • 2.92, arisu (ok), 16:42, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > ошиблись, надо 2.666

    может, и до этого дойдём.

     
     
  • 3.97, Аноним (-), 07:25, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Да ладно тебе, твоё участие в D закончилось hello world'ом, а примазываешься как будто сам в dmd коммитил.
     
     
  • 4.98, arisu (ok), 07:48, 21/08/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Да ладно тебе, твоё участие в D закончилось hello world'ом, а примазываешься
    > как будто сам в dmd коммитил.

    извини, Уолтер, не узнал тебя в маске анонима.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру