LINUX.ORG.RU

Попытка реинтеграции компилятора D в состав GCC

 , ,


2

6

Как можно заключить из сообщений в рассылке разработчиков gcc, к версии gcc 4.8 будет предпринята попытка официально ввести в состав gcc gdc — свободную реализацию компилятора языка D (digitalmars D).

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

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

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

Имеются средства прямого вызова функций, реализованных на языках C и C++.

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

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

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



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

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

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

Ага, читал я пару таких статеек. Читал и плакал.

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

Хм, и какие проблемы присутствующие в C++11 D способен решить?

Например, нечитаемые сообщения об ошибках при интенсивном использовании шаблонов. И вообще мозголомный синтаксис шаблонов. Интроспекция. Отсутствие модулей и следующие из этого проблемы с выявлением зависимостей при сборке (ах, время-время). Надёжная сборка мусора. Код, защищённый от исключений. Штатные ленивые вычисления. Средства динамичности.

И главное: без отдельных справочников по особенностям языка и особенностям особенностей, типа Мэйерса, Дьюхерста и иже с ними.

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

Ага, читал я пару таких статеек. Читал и плакал.

Плакать --- это всё фигня.

Прямой эксперимент есть? Я, знаешь ли, экспериментатор. К «общим соображениям» прислушиваюсь, но не верю :)

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

Хм, и какие проблемы присутствующие в C++11 D способен решить?

Ну, проблему по названием C++, прежде всего.

С++ неоправданно идиосинкратичен для изучения непрофессиональными программистами.

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

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

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

Более того, язык специфицирует даже встроенный ассеблер! Опять-таки, если имярек знает, что делает.

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

Что такое «программирующие пользователи» ? И в чем разница к программистам я не понял?

Это просто непрофессиональные программисты. Не в смысле, плохо программирующие, а в прямом смысле: те, для кого программирование не является профессией.

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

anonymous ()

Это, конечно, всего-лишь мое мнение, но я считаю, что язык D как таковой избыточен. Если вы хотите простоты — питон и еще раз питон. Быстроты — С\С++ (хотя все относительно и я уверен, что скоро питон станет таким же быстрым, как и С, ну почти..)

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

10 лет опыта подойдет?

Дык... у меня тоже... 23 года опыта C, 21 C++, 11 Python. Ну и к чему это писькомеряние? Где перечисление проблем в проектах на динамических языках?

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

Ссылок нет. Я их встречал в python@, когда еще читал его. Но там было изложение на уровне «я раньше писал на Си++ и, когда перешел на Python, боялся, что мне будет плохо. А мне хорошо, и теперь я знаю, что статическая типизация не нужна!!11».

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

Кстати, что означает слово референсный?

По-русски это называется «эталонная реализация». Это реализация, поведение которой можно напрямую (без обращения к тексту стандартов) использовать для верификации поведения иной реализации.

Иногда эталонная реализация считается фактическим стандартом, дополняющим, перекрывающим или даже заменяющим текст настоящего стандарта.

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

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

Ох... Видишь ли в чём дело. Я ЗА Питон. Двумя руками. Но у него принципиально иная парадигма. И когда требуется изворачиваться ужом, особенно при тесной работе с оборудованием, лучше C++.

В то же время, у C++ тяжёлая наследственность.

ЗЫ: я, в некотором смысле, начинал с PL/1. И когда читаю «PL/1 умер из=за запредельной слоности», становится смешно и грустно.

напишу-ка сегодня таки развёрнутый пост... в ЖЖ, наверное

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

у меня тоже... 23 года опыта C, 21 C++, 11 Python. Ну и к чему это писькомеряние?

Ты просил эксперимент - я его каждый день провожу последние 10 лет.

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

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

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

Приходится обмазываться юнит-тестами и на стадии выполнения отлавливать ошибки, о которых должен предупреждать компилятор

За всё надо платить. И да, если такие ошибки МОГУТ возникать, это ещё и архитектурный просчёт и динамическая типизация тут очень косвенным боком.

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

конкретно в питоне наличие статической типизации не помешало бы

Мне трудно представить язык, в котором наличие приличной статической типизации (с какой-то формой вывода типов) помешало бы. Возможно, отключить статических проверок тоже может быть полезным, но тут уж ХЗ.

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

Ну вот конкретно в питоне наличие статической типизации не помешало бы, кстати.

не сколько статической типизации, сколько синтаксических хинтов. Не для компилятора. для сопровождающего человека.

С такой поправкой --- согласен.

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

Кстати, да, гляжу на си++11 и вспоминаю времена, когда не только алгол-68 или ада, но и пл/1 считались громоздкими и сложными языками.

Вообще-то, со знанием фортрана я в свое время пл/1 выучил (до состояния «свободно читаю без словаря, пишу простые тексты») для за три.

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

Багзилу я читал. А вы? За последние несколько лет регулярно исправляют тонны багов (и, видимо, так же регулярно добавляют новые).
А вы строковые макросы из D видели? Этим отстрелить себе ногу гораздо проще, чем плюсовыми шаблонами.
Ни одной качественной (и активно развивающейся) среды разработки за столько лет, ни одного живого, качественного и документированного gui-фреймворка. Долгое время существовали 2 стандартные библиотеки (одна рекомендованная, другая - правильная).
Я бросил следить за D2 3 года назад и с тех пор ничего не изменилось. Все также куча багов в каждом релизе, переписывание стандартной библиотеки, попытки добавиться в gcc (первая версия). И с тех пор не появилось ни одного серьезного проекта на D.
А ведь еще тогда (3 года назад) казалось, что еще чуть-чуть и язык стабилизируется, появятся инструменты разработки и т.д.

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

Приходится обмазываться юнит-тестами и на стадии выполнения отлавливать ошибки, о которых должен предупреждать компилятор

За всё надо платить

Я не вижу, за что именно я плачу этим.

И да, если такие ошибки МОГУТ возникать, это ещё и архитектурный просчёт

И ошибка в ДНК, чего уж там.

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

Возможность билдтайм-проверки тоже не помешала бы.

Я разбил себе на этом рожу при переносе нескольких программ с питон-2 на питон-3, кстати.

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

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

И как ты думаешь, почему? :)

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

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

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

А вы строковые макросы из D видели?

Видели

Этим отстрелить себе ногу гораздо проще, чем плюсовыми шаблонами.

Если можно, пример? Я не понял опасности.

ни одного живого, качественного и документированного gui-фреймворка

привязки к Qt не совсем мертвы :)

Ни одной качественной (и активно развивающейся) среды разработки за столько лет

Это естественно. Ниша занята C++, пока пройдёт период популяризации, пока народ распробует и начнёт использовать... Это не начало 90-ых, когда C++ пошёл в народ усилиями Борлана и ТопСпида --- на незанятое место.

Всё-таки, сейчас dmd вплне юзабелен. Посмотрим, что будет с gcc.

Я считаю, что популяризация D нужна: другой адекватной альтернативы слишком обросшему особенностями особенностей C++, не привязанной к вендору (читай, .Net), пока не видно. Профессионалам, пофиг: за деньги, можно программировать и на каком-нибудь брэйнфаке. Но есть и программирующие пользователи, и им жизнено нужен не менее мощный, чем в мире пофессиональных программеров, инструмент!

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

А вы строковые макросы из D видели? Этим отстрелить себе ногу гораздо проще, чем плюсовыми шаблонами.

Миксины. Насколько я понимаю. это фича D 1.0, в D 2.0 вместо них предполагается использовать CTFE и шаблоны.

А ведь еще тогда (3 года назад) казалось, что еще чуть-чуть и язык стабилизируется, появятся инструменты разработки и т.д.

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

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

Но есть и программирующие пользователи, и им жизнено нужен не менее мощный, чем в мире пофессиональных программеров, инструмент!

им не нужен D, им нужен питон

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

Да, статическая типизация это скорее инструмент разработки и управления разработкой, чем инструмент кодирования.

Так же, как и инварианты-предусловия-постусловия всякие для директивного программирования.

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

им не нужен D, им нужен питон

опять: да, Питон --- очень хорошо.

Но не панацея.

панацеи вообще... не бывает.

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

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

tailgunner ★★★★★ ()

В целом, D представляется интересным для программирующих пользователей

Реинкарнация BASIC!

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

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

Ну да. Проходили. Сперва переходишь, вроде, всё нормально. Потом начинаются сложные проекты. И снова хочется строгую (я так понимаю, имелась в виду она?) типизацию.

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

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

Как по мне, это именно инструмент кодера, но неважно... пойнт в том, что динамически типизированные языки не предоставляют этого инструмента. И лично я не вижу этому никаких оправданий (кроме упрощения компилятора).

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

Компилятор на базе llvm тоже есть.

Но ведь код классического (gcc) и llvm --- очень разные вещи, нет?

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

Реинкарнация BASIC!

Это Python. Он же писался под влиянием ABC.

...

Из всех нынешних более-менее популярных языков именно Python мне больше всего напоминает Basic. В хорошем смысле напоминает.

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

Нет, во второй версии только одна стандартная библиотека

а, это хорошо :)

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от vertexua

С++ и Qt для гуя. Проблем при перекомпиляции под виндой не замечал

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

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

Конечно. Но должны ли они возникать в динамических языках?

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

Но должны ли они возникать в динамических языках?

Они должны возникать при написании программы. Пишется программа на статически или динамически типизированном языке - не имеет значения.

Или ты хочешь сказать, что динамически типизированные языки волшебным образом свободны от ошибок несовпадения типов? Кстати, а как насчет поддержки языка стороны IDE, которая обычно опирается именно на статические типы?

tailgunner ★★★★★ ()

следил за этой темой в списке рассылки. ЯП действительно имеет перспективу. но для начала его нужно стандартизовать и предоставить стабильные популярные фротненды.

niXman ★★★ ()

ЯП-срач, ня. По сабжу: хочется взять и заценить.

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

Надо будет плотнее познакомится с D. А то С++ - УГ. Питон еще более УГ. Пока все пишется все на правильных турбореактивных C и Perl (благо что под оба языка библиотеки встречаются под все и вся).

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

Хм, и какие проблемы присутствующие в C++11 D способен решить?

Кстати, не нужно забывать, что 11 вобрал некоторые средства, ранее включенные в D (вложенные функции и «foreach», например). Это если и не прямое заимствование, то результат тех же дискуссий, что привели к D.

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