LINUX.ORG.RU

Компилятор языка D будет переписан с С++ на D

 , ,


3

3

Проект набирающего популярность языка D стал достаточно зрелым чтобы отказаться от использования С++. Как сообщает один из его авторов, Андрей Александреску (Andrei Alexandrescu), в ближайшее время будет начат проект по переписыванию компилятора языка D с С++ на D. Это позволит не только более полно использовать весь потенциал самого D, но и решить ряд проблем местами не слишком красивой архитектуры компилятора.

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

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



Проверено: maxcom ()
Последнее исправление: Dendy (всего исправлений: 2)
Ответ на: комментарий от dmfd

«современное проектирование на C++»

Как можно проектировать на C++??

sv75
()
Ответ на: комментарий от sanaris

1) Мне чисельники до лампочки. Мне интересны богатые структуры управления - от scope до alias this, миксины, строковые миксины, шаблоны приличные и тому подобное. И здесь результаты очень даже хороши.

2) Позиция была и есть «сначала реализуем язык, оптимизации - если попадаются по дороге».

3) Проверки в релизной версии отключать - по-моему нормально. Тем более, что проверок в D получается много, если нормально писать (assert, контракты).

А уж что до скриптланга - постыдились бы. На шутауте D нет, но можете сами посравнивать - уж в первой пятёрке он будет на основной массе тестов. Скриптовые «несколько» подальше и несколько мнее надёжны, с их динамическими типизациями.

crazy_alex
()
Ответ на: комментарий от www_linux_org_ru

я же спрашивал: че это за таинственные «высокоуровневые объектные модели»?!

«Высокоуровневые»? Не знаю, я об этом не говорил. Пример другой объектной модели я привет - ссылочные типы а-ля Ява.

тебе все равно где-то придется хранить (или хотя бы передавать в функцию) тайптег, или vtbl ptr, или аналог для различения этих не важно классических объектов или объектов АлгТД

Как-то придется, конечно. Но если не придется морочиться о совместимости с Си++, это само по себе большое облегчение.

афайк в хаскеле разница с с++ только в том, что vtbl ptr лежит не в объекте, а передается функции вместе с указателем на объект

Ну то есть в объекте она просто не лежит %)

мой прошлый ответ не отменяет точного ответа на твои вопросы

Вопросы были риторические - для примера, какой can of worms придется распечатать. Но если возьмешься отвечать - заодно скажи, что делать с виртуальным и обычным множественным наследованием.

tailgunner
()

лисп-подобные макросы в D

а вообще, вот есть такой пример из книжки TDPL (Александреску, «Язык программирования D»): (глава 5.9.2, реализация reduce):

V  reduce(alias  fun,  V,  R)(V  x,  R  range)
if  (is(typeof(x  =  fun(x,  range.front)))
&&  is(typeof(range.empty)  ==  bool)
&&  is(typeof(range.popFront())))
{
for  (;  !range.empty;  range.popFront())  { 
x  =  fun(x,  range.front);
}
return  x;
}

построчно:

шаблон с 3 параметрами, первый: функциональный литерал (лямбда) параметр-псевдоним (alias fun), второй: тип начального значения, третий: тип range; 3 параметра шаблона, 2 параметра функции (нач. значение, диапазон).

сигнатура функции — с ограничением концепта, концепт из трёх строк, в каждой — проверка на то, что компилируется код x = fun(x, range.front); range.empty; range.popFront()

то есть, что у range есть три метода (хотя они могут быть реализованы и сахаром, как свойство или через UFCS), и что код x = fun (x,y), где y = range.front — компилируется.

от такого кода остаётся стойкое ощущение, что он написан не человеком, а каким-то макросом.

например, таким:

mixin(macros("macro_range", "reduce",
      q"/ fun : (x:V,y:V) -> V , V : x, R : range /",
  
      q"__macro_range__


      q"`  

      for  (;   q", !range.empty ,";  q", range.popFront() ,")  { 
 q", x  =  fun(x,  range.front) ,";
}
return  x;

      `"

      __macro_range__"
)); 

код должен быть сгенерирован автоматически в CTFE функции macros, которая раскрывает строку на «языке описания макросов» и возвращает строку на D, которая затем компилируется через string mixin.

эта macros раскрывает макросы:

1. парсит строку на «языке описания макросов» в AST; см. четвёртый параметр в macros

2. раскрывает макросы в AST (quasiquote q"` , unquote q", )

3. распечатывает раскрытое AST дерево

4. генерирует сигнатуру с ограничением концепта (например, выводит типы — «язык описания макросов» с типизированными макросами, см. третий параметр macros

в ограничения концепта добавляются строки вида «скомпилируется ли раскрытие unqoute»:

is(typeof(FOO)==bool)
, где FOO из четвёртого параметра вида
quasiquote( ....
     unquote(FOO)
  ....)

может, придумать что-то вроде интерполяции строк в синтаксисе макросов.

поинт в том, что если через CTFE будет доступен весь компилятор, например парсер исходника в AST — то такое несложно будет сделать. сейчас в принципе можно взять pegged, составить D грамматику на PEG (там где-то даже есть готовая), разобрать строку в AST в CTFE функции-парсере.

если D будет переписан на самом D, и будет какой-то интерфейс типа std.compiler, такую штуку можно будет довольно просто сделать.

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

дискасс.

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

всё, что вы хотели спросить про биндинги к Си статья, всего 5 частей

я, вообще-то, хотел спросить про биндинги к с++

extern(C++) недопилен , и вот почему

хотя мне кажется, ещё можно повозиться, если вручную херачить манглинг и нужные calling convention.

примерно так:

1. собрать C++ код, посмотреть асмовый исходник, пример как вызывается метод в этом коде

2. в D писать асм функцию-обёртку через naked : реализация обёртки на асме должна вызывать через нужные calling convention, подсмотренные в 1 пункте с нужными параметрами

3. naked обёртки на асме генерировать функцией в CTFE, и подставлять через string mixin.

4. с учётом C++ манглинга, конечно же.

5. вот время жизни С++ кода — тут сложнее.

думается, что если взять LLVM компиляторы, например, clang и ldc, то можно значительно облегчить первый пункт.

вплоть до автоматической какой-то тулзы: грубо говоря, clang похаканный имеет плагин с ещё одним проходом, где по вызываемым методам и определению класса генерирует какой-то IDL для класса, и какую-то базу по тому, как вызывается такой метод.

потом ldc конпеляет тоже в LLVM биткод, как и clang.

потом тулза собирает это всё вместе, с учётом IDL и этой базы.

есть ощущение, что этот «сборщик» можно написать на самом D, CTFE макросами.

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

а в zlib много такого кода по простой причине - поддержка различных убогих платформ

это не отменяет того, что убогий код убог (там в нём даже багу нашли), и череват тараканами из-за всяких частных случаев.

нафига исходный код постоянно дёргает realloc?

понятнее можно написать, чтобы тараканы не возникали, а читалось легче.

да, и твой код на С++ тоже убог по сравнению с ranges.

смотри презентацию Волтера про компонентное программирование через ranges

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

ну-ка, раскрой тему поподробнее — хотя бы какие объектные модели ты считаешь более высокоуровневыми и почему

в этом топике, в заголовке топика есть ссылка на сравнение различных объектных моделей: SOM, COM, GObject, ObjC, и т.п.

я щитаю, что тема довольно таки раскрыта.

я там немного поотжигал, на 4 странице.

вкратце, считаю что подобную SOM среду можно воспринимать как метаобъектный протокол, как объектную метамодель.

а уже её «специфицировать» в какую-то конкретную объектную модель, будь то C++ VTable, GObject, или там CLOS.

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

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

и если они не пошли, почему ты предлагаешь новообращенному-писателю-на-д пойти этим путем? поперек батьки в пекло полезть?

потому что никто не думал с этой стороны, объектной модели (метамодели). все думали с точки зрения языка.

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

как именно её составить не суть важно: то ли это SOM «как реализация», то ли это SOM «как метаобъектный протокол», то ли это «общий универсальный ABI и calling convention» на основе LLVM биткода (между clang и ldc).

важно понять, что именно такая метамодель должна делать, её API грубо говоря.

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

направление мысли вроде бы и верное, но скажем как реализовывать указатель на метод класса? тут емнип могут быть бинарно разные варианты

грубо говоря, мы можем написать код на С++, откомпилять его в ассемблер, посмотреть реализацию и наполнить по ней базу с шаблоном для такого «универсального ABI»

а в раскрытии шаблона — поиск шаблона в базе + подстановка параметров.

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

ooc=?

язык ooc же. тут в соседнем топике некто geekless распинался про «гомоиконный Си», а это вот оно самое и есть.

HN примеры

компилятор ooc на ooc : раскрутился через Java: первая версия была Java => C, потом переписан с Java на ooc и пересобран сам собой

грамматика ooc на PEG фронтенд

из плюшек: кроме классов (бинарно совместимых с Си с т.з. ABI) ещё есть cover , которыми легко пишутся всякие биндинги и обёртки.

компилятор компилирует через Си, рантайм простой и понятный.

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

но пример в PDF мягко говоря притянут, от удаления комментариев и до изменения алгоритма, что можно сделать и на С

ну-ка, расскажи, как ты легко сделаешь scope(failure) и вложенные scope в сишечке?

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

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

теоретически, уже сейчас можно брать в руки «компилятор D на D» (по ссылке в топике приведено аж 4 штуки), и его фронтенд, или pegged + D PEG грамматику, херачить в string mixin'ы, делать всё это в CTFE, раскрывать какие-то свои макросы.

упорных достаточно писателей не хватает, однако.

хотя да, если бы был интерфейс к AST с точки зрения компилятора, чтобы эти string mixins легче дёргать, а в идеале, и не string mixin-ы, а типизированные AST макросы, было бы гораздо проще и нужнее.

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

как будут взаимодействовать системы управления памятью?)

тут засада, потому что время жизни C++ кода и D кода будет сильно разная.

На Венде - ХЗ, но, думаю, и там прще будет поддеривать какой-нибудь COM.

там COM и есть «из коробки».

вообще, надо прикрутить к D «какой-нибудь SOM» :)))

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

я же спрашивал: че это за таинственные «высокоуровневые объектные модели»?!

моя версия: это та самая объектная «метамодель», с неявными спеками, разными для каждого языка (а нестабильный ABI например — вплоть до реализации этого языка).

и если бы её составить явно для языка С++, например, для языка D, для языка СLOS, для модели SOM, например, и наложить их друг на друга, чтобы определить общие места и отличия в реализации — то можно и более чётко обозначить.

а потом из этой мета генерировать конкретную объектную модель конкретного языка: VTable + Fragile Base Class Problem в случае C++, что-то другое в случае Oberon, что-то другое в случае D, SOM и т.п.

короче, эти МЕЛОЧИ вовсе не делают из Новых Объектов нечто инопланетное — это обычные житейские дрязги вроде управления временем жизни; их надо просто упорядочить (да, тут нужны кое-какие системы эффектов)

+666

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

ну-ка, расскажи, как ты легко сделаешь scope(failure) и вложенные scope в сишечке?

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

wota
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от anonymous

Но согласитесь, что синтаксис Модулы или Оберона гораздо приятнее для чтения, чем синтаксис С или Паскаля.

да. но соглашусь и с Керниганом, «почему паскаль не самый мой любимый». на примере Go и Oberon-a (на oberoncore почему-то люди кипятком писают от Go, дескать «оберон с сишным синтаксисом», а это не так — есть же goroutines, каналы,ad hoc интерфейсы то есть Go это совсем другой язык, а не просто синтаксис) — тут мне Go немного синтаксически приятнее.

код того же линкера в DevLinker выглядит убого. работа с BigNums в BlackBox CP убога. нет scope, нет исключений.

И опять же, не следует понимать буквально «взять модулу или оберон», можно взять их за основу при разработке нового языка, а лучше двух или трех ибо идея охватить одним языком программирования все сферы применения, ИМХО, неудачна.

на эту тему у Р. Богатырёва есть проект «Роса», языки M,R,S,T. Интересный проект, погуглите. правда, когда у них будет какой-нибудь релиз, чтобы пощупать --- непонятно.

концепт интересный.

ибо идея охватить одним языком программирования все сферы применения, ИМХО, неудачна.

тоже так думаю, но ИМХО, такую систему можно построить на основе LLVM, а из Оберон-системы (или блекбокса) оставить только загрузчик модулей, подключаемый сборщик мусора, подключаемый рантайм + много разных «языковых модулей» на разных языках, но в однотипном ABI (бинарном формате этих самых модулей)

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

я же спрашивал: че это за таинственные «высокоуровневые объектные модели»?!

моя версия: это та самая объектная «метамодель»

Нет. Я считаю, что «надъязыковые „метамодели“ полностью зафейлились и интересны только с точки зрения легаси.

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

так зафейлилась реализация вроде маршаллинга, а с реализацией через метапрограммирование ИМХО вполне можно ещё побороться.

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

«Реализация объектной метамодели через метапрограммирование», okay.

tailgunner
()
Ответ на: комментарий от Napilnik

А как по твоему создаётся первый компилятор на новой платформе?

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

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

Вопросы были риторические - для примера, какой can of worms придется распечатать.

ни разу не распечатать — эти черви *уже* разбежались

в той же жабке одни чуваки, когда реализовывали кэш в оперативе, написали его на с/с++ (т.к. жц на ~16ГБ кошмарно тормозит) и дергали его через jni — на хабре была статья, причем они побенчили и получили, что у них быстрее, чем альтернативные реализации

это я к тому, что у чуваков объекты, собираемы gc, и не собираемые, сосуществуют вместе — и чуваки че-то не жалуются

Но если возьмешься отвечать - заодно скажи, что делать с виртуальным и обычным множественным наследованием.

на большую часть я отвечать не буду, отмазавшись тем, что топик про Д

насчет виртуального и обычным множественного наследования:

1. оно очень полезно и не требует особых сложностей, когда используется в стиле mix-in (т.е. когда не требуется кастить к *множеству* баз)

2. где-то может быть лучше «множественное» делегирование (страуструп в d&e писал, что вначале вместо наследования было делегирование, но там обнаружились некие проблемы — надо их изучить, тем более alias this это случайно не делегирование ли? примеров на dlang мало и один явно плохой, и я забил на выяснение этого)

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

Но если не придется морочиться о совместимости с Си++, это само по себе большое облегчение.

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

www_linux_org_ru
()
Последнее исправление: www_linux_org_ru (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ты ни черта не понимаешь. Читай про бутстрап и метаязыки. Нулевая реализация языка может быть тупым интерпретатором поверх какого либо притимивного метаязыка.

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

Нулевая реализация языка может быть тупым интерпретатором поверх какого либо притимивного метаязыка.

поверх динамически типизированного языка?

я тут вижу профит в том, что нет нужды делать весь этот accounting, связанный с типизацией, и даже с пространством имен, который, собственно, и составляет большую часть современного компилятора (ну и интерпретация таки проще кодогенерации)

btw, я бы бутстраппил д совсем иным образом — писал бы на неком подмножестве д, которое простыми регулярными выражениями трансформировалось бы в с++

www_linux_org_ru
()
Последнее исправление: www_linux_org_ru (всего исправлений: 2)
Ответ на: комментарий от www_linux_org_ru

эти черви *уже* разбежались

Wut? Еще раз: проектируется новый язык, черви за его пределами никого не интересуют.

у чуваков объекты, собираемы gc, и не собираемые, сосуществуют вместе — и чуваки че-то не жалуются

Во-первых, зависит от интерфейса; во-вторых, вручную можно написать что угодно.

насчет виртуального и обычным множественного наследования:

1. оно очень полезно и не требует особых сложностей

Где еще есть виртуальное наследование, кроме как в Си++? Нигде? Вот именно.

в любом случае бинарные данные вида «класс с++ с множественным наследованием» надо хотя бы потенциально уметь понимать

Это было бы полезно, да. И правильно это делать какими-то внешними инструментами.

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

Устранение не добавляет сложности? Кажется, ты не прочитал мессагу перед тем, как запостить ее.

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

Это было бы полезно, да. И правильно это делать какими-то внешними инструментами.

можно и внешними (и даже я об этом писал, применительно к д), но пойнт был в том, что поддержка языка для этого все равно требуется

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

Устранение не добавляет сложности?

очевидно, «не добавляет сложности» не устранение, а необходимость

Во-первых, зависит от интерфейса;

не ясна мысль

во-вторых, вручную можно написать что угодно.

ну а нафейхоа вообще нужны языки программирования? в основном, чтобы чекать то, что написано ручками, и автоматически генерить то, что можно ручками написать, но лень

Где еще есть виртуальное наследование, кроме как в Си++? Нигде? Вот именно.

и?

www_linux_org_ru
()
Ответ на: комментарий от tailgunner

Wut? Еще раз: проектируется новый язык, черви за его пределами никого не интересуют.

что значит «за пределами»? они как-бы везде

что ты предлагаешь? сделать объектную модель а-ля ява-где-все-собирается-жц? все равно потребуются weak references, fantom references и возможно вообще ручное уничтожение объектов

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

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

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

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

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

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

ортогональность не противоречит сахару (тут мне было бы полезно подробнее написать)

TIMTOWDI не шибко конечно хорошо, но вполне терпимо, и вообще — тут д надо сравнивать не с абстрактным идеалом, а скажем с с++ по уровню TIMTOWDI

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

www_linux_org_ru
()
Ответ на: комментарий от tailgunner

ну ты вообще кто — AI или человек? человеки (правда не все конечно) умеют по слегка испорченному хэшу соообщения восстанавливать само сообщение

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

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

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

ну вот тебе например один классический хэш а-ля «черное - это белое» — «начало зимы это середина лета»

при наличии мозгов его можно восстановить до вполне непротиворечивой фразы, которая даже дает немного информации

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

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

Почитай в википузии статью «Раскрутка компилятора». У Ди есть компилятор для «платформы» С++. Не он первый, у визуалбейсика и 1С тоже компиляторы на плюсах.

Napilnik
()
Ответ на: комментарий от www_linux_org_ru

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

В данном случае как раз всё прозрачно - alias this применяется только в классе, а в приведенном примерчике - в параметрах функции. Вон, вы с первого взгляда увидели, что это разные вещи, а кто один раз докментацию почитал - и подавно не спутает.

А TIMTOWDI где не надо легко ограничивается локальным style guide, зато позволяет выбрать то или иное средство в зависимости от ситуации. Вот, скажем, есть RAII как в плюсах, есть scope(exit) и есть finally - штуки функционально идентичные, но в конкретном случае одна может смотреться как родная, а другая - весьма странно. И если не индус пишет, то выбрать нужный вариант особого труда не составит.

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

Кстати, вот забавный примерчик, в чем-то изоморфный языку: почтовая рассылка, форум и ньюсгруппа у них - это одно и тоже, просто три интерфейса доступа к одному контенту. И чень хорошо - на форум можно дать ссылку, а читать/писать удобнее в ньюсридере (постоянным участникам) или в почтовике (тем, кто захоит иногда). Тоже такой TIMTOWDI.

crazy_alex
()
Ответ на: комментарий от Napilnik

Что-то гнутое сообщество так и не смогло нормально перенести gcc на винду. По твоим словам получается что у них проблемы с головой?

Вообще-то уже давно перенесено. Причем используется во всю. Qt, например, с ним используется.

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

Вообще-то уже давно перенесено. Причем используется во всю.

Где скачать это нетормозящее чудо? Хочу пересобрать под винду самый новый mplayer и чтобы без секса с некомпилируемостью новых либ.

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

Где скачать это нетормозящее чудо? Хочу пересобрать под винду самый новый mplayer и чтобы без секса с некомпилируемостью новых либ.

В своих фантазиях. Слово «тормозит» к компиляторам не имеет никакого отношения и говорит о вашей ангожированности.

Некомпилируемость либ, опять же - дело либ.

А ошибки есть в любом компиляторе. Весь вопрос в скорости их выявления и устранения.

Так что смотрите в свой мозг. Проблема там.

x86_64
()
Ответ на: комментарий от glebiao

Гражданин спрашивал, где читать про бутстрап. Вот в SICP и читать.

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

Почитай в википузии

Читаем:

используя какой-либо существующий для платформы M язык (например, C) программируется компилятор L0—С—M.

Чудес-то не бывает. Первоначальный сабсет все равно должен быть реализован на другом языке, для которого компилятор уже есть. А уж целиком реализован язык или нет это мелкие детали. А преимущества от self-hosting, прямо скажем, не гигантские. Особенно в случае D, который вообще неясно, полетит ли в том качестве, в котором его изначально проектировали. То есть предъява к языку за то, что компилер до сих не написан на нем самом, я воспринимаю как треп диванных экспертов. Тем паче, что многие эксперты тут тяжело больны религией «C++».

anonymous
()

Откуда столько негативных комментов в треде? Они ведь не крадут, не убивают, просто пишут всякую лажу just for fun.

vertexua
()

Мдээээээ… 8) Как всё-таки народ обожает подрать глотку во имя хз чего…

Мало довести язык до состояния бутстрапа - гораздо сложнее заставить его генерить приличный код. Чему всякие «мета» и «над» сущности ну никак не способствуют. Хотелось бы, конечно, ошибиться, но сабж (судя по ушам и яйцам) еще долго будет погремушкой для эстетствующих балбесов. 8)

Если, конечно, не будет отыскана новая…

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