LINUX.ORG.RU

Планы разработки языка D3

 


0

2

На днях в блогах разработчиков языка программирования D и его референсного компилятора dmd появилось сообщение о том, что ветка D2 вскоре будет заморожена и дальнейшие изменения вноситься не будут кроме исправляющих существенные и часто повторяющиеся ошибки. По совам главного разработчика D Уолтера Брайта это связано с тем, что D2 стал слишком стабилен и вносить в него новые свойства оказывается опасно. Другой разработчик --- известный программист Андрей Александреску выразил озабоченность тем фактом, что качество реализации D2 в dmd достигло такого уровня, когда он может быть использован для реализации конкретных прикладных проектов. По словам обоих авторов описанные выше проблемы являются непреодолимым препятствием для реализации в D2 новых, более современных концепций и передовых идей.

В связи с этим команда авторов D2 и компилятора dmd рассматривает варианты перехода на 3-ю ветку для внесения существенных изменений в структуру проекта. Основные проблемы D2 с точки зрения его дизайна по словам разработчиков следующие.

  • Слишком большая неопределённость и обилие типов. В частности, 3 типа юникода: char, wchar и dchar, 8 целочисленных типов данных, 3 с плавающею запятой. В качестве примера приводится язык Python, где в версии 3 оставлен всего 1 целочисленный, 1 действительнозначный и 1 юникодовый типы. Уменьшение числа типов способствует лучшей читаемости и поддержке кода и в то же время избавляет от ряда ошибок при переносе на другие архитектуры.
  • Недостаточная реализация концепции метапрограммирования. Проблема заключается в том, что компилятор нередко не знает, чего от него хочет программист, а тот не может объяснить это компилятору.
  • Поддержка целочисленных вычислений с большими числами. DВ настоящее время в D2 поддерживаются максимум 64 битные целые числа, что в будущем неизбежно приведёт к проблемам. Следует реализовать механизм поддержки целых чисел произвольного размера по аналогии с существующим типом real. При этом размер типа будет определяться на этапе компиляции, а не динамически, как в Python.
  • Поддержка «открытых» классов, к экземплярам которых можно добавлять новые поля и методы динамически во время работы программы. При этом будет реализован механизм памяти: каждый объект помнит свой исходных класс и знает все свои поля и методы, так что можно в реальном времени проверить, был ли добавлен нужный метод в данный объект или нет.

Вопрос об отделении ветки D3 будет рассматриваться после выпуска корректирующего обновления dmd 2.059 и 1.074.

>>> Подробности

★★★★★

Проверено: maxcom ()

Ответ на: комментарий от s9gf4ult

Значит я правильно понял что макросы должны разворачиваться в строки ? (лиспер недоумевает)

cмотря какие макросы. Макросы должны разворачиваться в корректно компилирующийся код. В D несколько типов макросов: шаблоны, как в C++ (template) http://dlang.org/template.html , template mixins http://dlang.org/template-mixin.html , «макросы, разворачивающиеся в строки» (string mixin) http://dlang.org/mixin.html

Из этих последние обладают наибольшей гибкостью. Из-за traits http://dlang.org/traits.html — можно проверить, компилируется ли код через __traits(compiles). А сам текст для подстановки в string mixin можно генерировать CTFE функциями. Впрочем, можно генерировать не текст, а любой другой компилирующийся кусок кода  — для подстановки в другой тип шаблонов. Опять же, полезным этот кусок кода делает рефлексия (traits, см. TypeInfo http://dlang.org/phobos/object.html ) , кортежи значений http://dlang.org/tuple.html и кортежи типов type tuple http://dlang.org/phobos/std_typetuple.html http://dlang.org/phobos/std_typecons.html , точнее то, что это может быть рефлексия времени компиляции. Например, в Pegged результатом парсинга во время компиляции является не строка, а объект нужного типа. Который остаётся только подставить в нужный шаблон, и проверить что такая подстановка успешно компилируется.

anonymous
()
Ответ на: комментарий от WatchCat

Tango --- это альтернативная реализация.

Если смотреть на пример из педивикии, то видно, что это скорее не реализация, а ещё альтернативный велосипед.

альтернативная реализация альтернативного стандарта. То есть, библиотека Phobos — реализация API Phobos. В древние времена сообщество выкатило альтернативную библиотеку Deimos, другую реализацию этого API. Потом думало, какое лучшее API придумать. Возникло API Tango и реализация этого API (D1). То есть, вторая стандартная библиотека. В ней «из коробки» были некоторые вещи, которых не было в том старом Phobos D1.
Затем к Phobos подключился Александреску и наворотил бустовы std.ranges, std.algorithm,std.functional и проч. А основным стал D2 с immutable strings например. Поэтому Tango перестал собираться под D2, потому что рантайм Tango (object.di) и Phobos стал сильно отличаться. В итоге в Phobos D2 выделили «минимальный» рантайм, то есть RTTI (object.d) и core.*, после чего SiegeLord портировал Tango D2 на этот минимальный рантайм.

А альтернативная реализация это ulibc и glibc.
Т.к. и там и там объявление функции printf подключается через stdio.h

альтернативные реализации одного и того же стандартного libc.
а что мешает мне в няшной сишечке не использовать libc вообще и дёргать сисколл write напрямую? в итоге получим свой мини-си-рантайм, без стандартного либц вообще.
Если мы возьмём какой-нибудь sdcc, pcc, tcc или lcc — они прекрасно могут жить без стандартного libc. Более того, glibc этими конпеляторами может и не собраться вообще.

anonymous
()
Ответ на: комментарий от Vudod

Dalvik --- это жабамашина,
Тогда любую VM можно назвать жабамашиной.
Так что это ты изворачиваешься.
И кстати, ты говорил про «множество», а привёл в пример только одну, причём совсем не _J_vm

WatchCat ★★★★★
()
Ответ на: комментарий от anonymous

а что мешает мне в няшной сишечке не использовать libc вообще и дёргать сисколл write напрямую? в итоге получим свой мини-си-рантайм, без стандартного либц вообще.

Ничего не мешает, но стандартная библиотека входит в состав компилятора, иначе ни о какой поддержке стандарта говорить мы не можем. Ибо в стандарте Си описан как сам язык, так и библиотека.
А так конечно, любой Вася Пупкин может написать свой компилятор с блэкджеком и шлюхами и обзывать его конпелятором Си(C++, Java, etc)
За это никто его бить по голове не будет.

WatchCat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.