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 ()
Последнее исправление: Silent (всего исправлений: 2)

Мне понравился слог новости. Спасибо автору, хорошо получилось.

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

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

Нет. Я хочу сказать, что если есть полноценная(!) интроспекция и динамика, такие ошибки не должны возникать вообще. Разумеется, не стоит требовать чудес и об этом надо думать на этапе проектирования.

Защита от грубых ляпов, да, нужна. В Питоне её (пока?) нету.

Кстати, а как насчет поддержки языка стороны IDE, которая обычно опирается именно на статические типы?

Да точно так-же.

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

но для начала его ... и предоставить стабильные популярные фротненды.

О том и речь!

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

Эхехе, надо начать хотябы с популяризации.

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

forth есть в реинкарнациях gnu, fig и чёрт-те каких ещё.

но forth по определению не компилируется в истинный машинный код, нафига он в gcc?

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

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

«Не должны вообще»? O_o

def foo(l):
  for a, b in l:
    print a, b

foo([1, 2])

Ты не мог бы объяснить, как интроспекция и динамика не дадут случиться ошибке?

а как насчет поддержки языка стороны IDE, которая обычно опирается именно на статические типы?

Да точно так-же.

«Точно так же» не получится - статических типов нет.

tailgunner ★★★★★
()

Лучше б они уделили больше внимания на оптимизацию, чистоту и прозводительность кода C и C++, чем впихивать в єтот комбайн очередную поддержку.

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

Ты вообще не понимаешь смысл динамических языков. Это в первую очередь REPL, который обеспечивает очень высокую скорость разработки, даже по сравнению с IDE. Основная ниша таких языков - разработка прототипов. Пока ты будешь бороться с компилятором, пытясь хотя бы скомпилировать программу с сложной системой типов из 500+ классов, я буду заниматься «программированием» задачи. В конечном итоге перевести отлаженный прототип на С++ - это чисто технический вопрос.

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

Посетители ЛОРа - всё знают о плюсах и минусах всех на свете языков, но код привести не могут.

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

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

Не забудь потом поделиться ссылкой.

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

Ты не мог бы объяснить, как интроспекция и динамика не дадут случиться ошибке?

дык это как раз случай очевидного ляпа. И да, в Питоне нет от таких ляпов никакой защиты. А программист не подумал, что получится при for a, b in

«Точно так же» не получится - статических типов нет

но базы методов --- есть

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

Ты вообще не понимаешь смысл динамических языков.

Неверное предположение.

Это в первую очередь REPL, который обеспечивает очень высокую скорость разработки, даже по сравнению с IDE.

О REPL знаю и пользуюсь.

Основная ниша таких языков - разработка прототипов.

Т.е. одноразовых программ на выброс. И это я тоже понимаю.

В конечном итоге перевести отлаженный прототип на С++ - это чисто технический вопрос.

Твое понимание динамических языков программирования осталось в 70-х. Сейчас на них пишутся готовые приложения, которые никуда не переводят, но адекватность динамических языков _этой_ задаче оставляет желать лучшего. И, прежде чем ты спросишь: даже не очень адекватные задаче динамические языки могут быть выгоднее Си++.

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

да, в Питоне нет от таких ляпов никакой защиты

Ну слава ТНБ.

А программист не подумал, что получится при for a, b in

O_o А что и как он должен был подумать?

cтатических типов нет

но базы методов --- есть

Т.е. при попытке completion конструкции «obj.» IDE должна вывалить всю свою базу методов?

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

Ну слава ТНБ.

Технике Национальной Безпасности :O ?! :)

А что и как он должен был подумать?

ЧТО и ПО ЧЕМУ может пробегать. Я бы так писать не стал.

Т.е. при попытке completion конструкции «obj.» IDE должна вывалить всю свою базу методов?

Зачем? IDE «знает», что есть obj.

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

Технике Национальной Безпасности :O ?! :)

Так Называемому Богу же.

Я бы так писать не стал.

А как бы ты написал?

IDE «знает», что есть obj.

Откуда? IDE делает приличный вывод типов? Но даже он не всегда сработает.

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

Твое понимание динамических языков программирования осталось в 70-х. Сейчас на них пишутся готовые приложения, которые никуда не переводят, но адекватность динамических языков _этой_ задаче оставляет желать лучшего. И, прежде чем ты спросишь: даже не очень адекватные задаче динамические языки могут быть выгоднее Си++.

Если говорить о рефакторинге, да и, вообще, об анализе зависимостей, то есть хорошие средства в Smalltalk. Вот, только что, взял VisualWorks, открыл стандартный класс OrderedCollection и переименовал метод addAll:. Автоматом метод был переименован везде, где он переопределялся, а также там, где он использовался (!!). Это заняло всего пару секунд.

Даже IntelliJ IDEA работает много дольше для аналогичной задачи.

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

только что, взял VisualWorks, открыл стандартный класс OrderedCollection и переименовал метод addAll:. Автоматом метод был переименован везде, где он переопределялся, а также там, где он использовался (!!)

1) сколько методов с совпадающим именем (и сигнатурой) было в образе? 2) почему ты считаешь, что метод переименовался _везде_? 3) сколько Си-расширений в образе (если в ST они вообще есть)?

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

Очевидно же - в динамическом языке при любом таком изменении нужно прогнать весь набор тестов. Если они есть. Если нет - ойй.

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

(1) Не понял причем здесь это. Все случаи использования любого метода известны заранее. Их можно легко посмотреть в таком удобном окошке, где подчеркиваются соответствующие места в коде.

(2) См. пункт 1. Хотя я до конца не уверен на счет блоков, но очень вероятно, что они тоже учитываются. Надо экспериментировать.

Вот, взял один стандартный метод и добавил к нему от балды новый параметр с дефолтным значением nil - так VisualWorks везде все заменил, как надо. Просто обалдеть.

(3) Про расширения Си не знаю. Я только начал изучать Smalltalk :) Но как понял, такие расширения изолированы. Смолтокеры очень гордятся тем, что один и тот же образ может запускаться на разных платформах.

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

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

Расскажи это моему проекту на Perl в 50 тыщ строк кода.

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

В конечном итоге перевести отлаженный прототип на С++ - это чисто технический вопрос.

Который часто даже и не востребован по итогу ;)

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

Не понял причем здесь это

Если имя метода уникально, с переименованием справится и sed (я немного утрирую да).

VisualWorks везде все заменил, как надо. Просто обалдеть.

Либо не везде, либо это какая-то image-специфичная магия.

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

Это в первую очередь REPL

REPL есть даже в C#, не говоря о всяких окамляхаскелеях.

Пока ты будешь бороться с компилятором,

Динамический язык не значит «интерпретируемый».

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

Расскажи это моему проекту на Perl в 50 тыщ строк кода.

Есть люди, которые складывают пирамиду из 13 тыс. костяшек домино. Или которые молотками шурупы забивают. Они тоже много чего рассказать могут :)

...

И, подумаешь, 50 тыс. строк кода. У меня во фреймворке на PHP только в ядре столько. Плюс несколько проектов на нём, в которых по 20..40 тыс. строк :)

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

Т.е. при попытке completion конструкции «obj.» IDE должна вывалить всю свою базу методов?

Умные IDE обычно показывают где они умнее компилятора в вопросах статического анализа:)

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

У меня во фреймворке на PHP

Ты его сам написал? Я говорю про свой самописный код.

Или которые молотками шурупы забивают.

Все аналогии сосут. (с)

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

Ты его сам написал?

Естественно :) Иначе бы я не писал «в моём» :)

Все аналогии сосут

Нет. Только развитие аналогий.

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

Пока ты будешь бороться с компилятором,

Динамический язык не значит «интерпретируемый».

Думаю, анонимный брат имел в виду борьбу с проверками типов, которые делает компилятор.

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

Либо не везде, либо это какая-то image-специфичная магия.

Да, выглядит как image-специфичная магия. Список всех случаев вызова какого-нибудь метода вылазит в VisualWorks за секунду-две, а то и быстрее. Похоже, что там старший брат следит за всем и вся.

Судя по всему, в области рефакторинга этот динамичный Smalltalk может дать фору таким статическим языкам как Java и C#.

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

Это просто негодование толстого на тему запихивания в gcc всякой «очень полезной» x..ни. Так что не принимайте близко к сердцу. :)

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

Думаю, анонимный брат имел в виду борьбу с проверками типов, которые делает компилятор.

Ну да - ведь компилятор говорит об ошибках из вредности:) Межает гад писать неработающие программы:)

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

Судя по всему, в области рефакторинга этот динамичный Smalltalk может дать фору таким статическим языкам как Java и C#.

А что, рефакторинг, это только переименование функции?

Casus ★★★★★
()

Я не понял! Так был же вроде D в составе GCC, я даже юзал это «gdc-4.6 - GNU D compiler (version 2), based on the GCC backend»...

т.е. просто более новую версию D 2.x пытаются добавить в GCC? т.е. обновление?

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

Хочешь высокоуровневости без отрыва от реальности - возьми ocaml.

Крипота же.

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

что-то я не понимаю как он может корректно в от в таком
[
| oc c |
oc addAll: c
^oc
]

что-то корректно мереименовать.

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

Естественно :) Иначе бы я не писал «в моём» :)

Ну крут. А я вот готовыми пользуюсь, типа POE, mod_perl... Ну, допустим, наша экспертиза примерно одинакова, а выводы разные. О чём это говорит? PHP sucks, Perl rulez? ;) Моё мнение, всё зависит от интерфейсов и документирования. Написать 100 небольших функций, которые так или иначе обрабатвают данные, что-то берут, складывают в базу и дают ответ, по готовому документированному API, это совсем не трудно и не подвержено неконтролируемому росту ошибок, скорее наоборот. По этому API часть на mod_perl тоже легко получает что надо, там вообще ошибаться почти негде. Ну и т.п.

Casus ★★★★★
()

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

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

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

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

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

А что, рефакторинг, это только переименование функции?

На этот счет VisulWorks имеет довольно много функций в меню.

dave ★★★★★
()

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

Not bad.

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

Это утверждение основывается на каких-то тестах?

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

Именно с функциями. На этом поддержка С++ практически заканчивается (http://dlang.org/faq.html#cpp_interface)

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

Забавно: reference implementation, но годится для исследовательских целей.

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

Фантастика, но VisualWorks переименовывает корректно. Только нужно правильно инициализировать переменную oc:

puperMethod
	| oc c | 
	c := #(1 2 3).
	oc := SortedCollection new.
	oc addAllPuperSuper: c.
	^oc
dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.