LINUX.ORG.RU

Язык программирования D одобрен для принятия в GCC

 ,


0

10

Дэвид Эделсон (David Edelsohn), руководитель группы оптимизации GCC в IBM Research, объявил об одобрении включения рантайма и фронтенда для языка программирования D в состав GCC. Ментейнером назначен Ян Буклав (Iain Buclaw), основной разработчик GDC, работающий в Sociomantic Labs.

GDC — это реализация компилятора языка D под лицензией GPL, использующая бэкенд GCC. Проект был основан Давидом Фридманом (David Friedman) в 2004 году. Сейчас разработкой руководит Ян Буклав, присоединившийся к проекту в 2009 году.

Какая версия GCC получит поддержку D, пока неизвестно.

>>> Сайт проекта GDC

>>> Сообщение в рассылке GCC

★★★

Проверено: leave ()
Последнее исправление: sudopacman (всего исправлений: 4)
Ответ на: комментарий от q0tw4

При чём тут D? Язык заточенный под одну платформу - путь в никуда. Только это делает D более полезным чем Swift.

Но в мире корпоративного ненужно под мак он уже занял свою нишу, да.

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

константность ссылки автоматически врубает константность контейнеров.

Какое-то там странное отношение к иммутабельности:

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func increment(by amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
    func current() -> Int {
        return count;
    }
}

let c = Counter();
print("c: ", c.current());
c.increment();
print("c: ", c.current());
Печатает:
c:  0
c:  1
При этом декларация let используется для объявления именно что константы.

макросов и в D нету

В D есть продвинутые шаблоны, compile-time evaluation и строковые mixin-ы. Что позволяет делать весьма продвинутые штуки в compile-time без макросов.

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

Язык заточенный

Язык - да. Либы - нет.

противоречишь. Если испытываешь отрицательные чувства к языку, твое право. Беда в том что лучше то все равно ничего нет. Чем-то всегда надо жертвовать. Хотя к чему это я. Ты же все равно и дальше будешь мучать этот недокомпилятор раста. Надеюсь хоть в 22 веке появится язык общего назначения, который можно будет с чистой совестью советовать всем для решения любых задач.

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

При этом декларация let используется для объявления именно что константы.

Похоже работает так же как в Котлине, константна только ссылка, но не обьект.

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

Похоже работает так же как в Котлине, константна только ссылка, но не обьект.

Тогда в плане работы с иммутабельными данными Swift никакой не конкурент D.

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

константна только ссылка, но не обьект.

ну а как тогда они контейнеры сделали? хитрый хак? или просто иначе написали?

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

Swift никакой не конкурент D

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

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

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

В D выполнение функций на этапе компиляции отлично работает. Да и вообще много всякого навернуто.

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

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

Здрава мысль. Жаль вас это не останавливает.

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

И вообще, нужна иммутабельность - не мутируй.

Алло, это клуб любителей Go?

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

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

Так что вам мешает копнуть? Вот в D, например, я могу объявить объект как иммутабельный и компилятор даст мне по рукам, если я попытаюсь вызвать для него мутабельный метод:

class Counter {
	int count_ = 0;
	public void increment() { count_ += 1; }
	public int current() const { return count_; }
};
	
int main() {
	immutable auto c = new Counter();
	//c.increment();
	assert( 0 == c.current() );
	return 0;
}
Попробуйте строку с c.increment() раскоментировать, сами увидите.

Как тоже самое получить в Swift?

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

И вообще, нужна иммутабельность - не мутируй.

Отличное решение. Давай ещё все данные всем доступными сделаем. Ну а что? Нужна инкапсуляция - просто не лезь куда не надо.

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

Нужна инкапсуляция - просто не лезь куда не надо.

Не, тоньше нужно, тоньше — используй opaque types :)

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

Как тоже самое получить в Swift?

У них там похоже надо вручную помечать методы, мутируют они обьект или нет

public mutating func append<S : Sequence>(contentsOf newElements: S)
where S.Element == Element {
pftBest ★★★★
()
Ответ на: комментарий от pftBest

Я привел пример кода с созданием объекта Counter. Как этот пример переписать так, чтобы возникала ошибка при попытке вызывать increment для объекта типа Counter?

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

мучать этот недокомпилятор раста

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

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

бы добавить слово `mutating` перед функцией `increment`

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

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

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

забыл это не захотел. Не захотел - сам виноват. Да, конечно это не чистый ФЯП, он бить всех без разбору по рукам не подписывался. Уважает чувства императивщиков, ёпт.

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

Я ничего не знаю про swift,

Но мнение имеете? Иначе как объяснить вашу попытку что-то рассказать про Swift?

но попробовал бы добавить слово `mutating` перед функцией `increment`

Во-первых, метод класса, не помеченный как mutating, меняет значение объекта, задекларированного через let. Здравый смысл подсказывает, что такого быть не должно.

Во-вторых, использовать mutating можно либо в struct, либо в enum. Вот так уже будет ошибка компиляции:

struct Counter {
    var count = 0
    mutating func increment() {
        self.count += 1
    }
    mutating func increment(by amount: Int) {
        self.count += amount
    }
    mutating func reset() {
        self.count = 0
    }
    func current() -> Int {
        return self.count;
    }
}

let c = Counter();
print("c: ", c.current());
// c.increment();
print("c: ", c.current());

Но вопрос про иммутабельность экземпляра класса остается.

Тогда как в D этого вопроса нет в принципе, вне зависимости от использования struct/class (емнип).

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

использовать mutating можно либо в struct, либо в enum

Ну вполне логично. В С++ та же история, но там * явно пишется, так что консты можно крепить не только к поинтеру а и к типу памяти, на которую он указывает. В свифте синтаксис упрощен, возможностей соответственно меньше. Но никто не мешает сделать интерфейс с одними геттерами и хранить указатель на него.

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

Ну вполне логично.

Логично, что class-ы живут по своим законам, а struct-ы — по своим? И отношение к иммутабельности у них совсем разные? Классная логика, чё. Яблочная.

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

Но никто не мешает сделать интерфейс с одними геттерами и хранить указатель на него.

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

Вот в D есть иммутабельность, там компилятор разработчика по рукам бьет за такие вещи, что хорошо.

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

class-ы живут по своим законам, а struct-ы — по своим

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

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

Для низкоуровневых языков логично работать с ними по-разному.

Ну т.е. иммутабельности для классов нет. Так и запишем. D в этом отношении просто в другой весовой категории. А брать Swift для серьезной работы в многопоточности чревато.

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

Вам тогда уже не D, а rust или даже erlang/elixir надобен. Пока что не существует универсального языка, достаточно подходящего под любую задачу.

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

Вам тогда уже не D, а rust или даже erlang/elixir надобен.

Да я уж как-нибудь сам разберусь. Только вот ставить в один ряд нативные D и Rust вместе с erlang/elixir, работающими на весьма не быстрой VM... Это просто хипсторство какое-то.

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

Да я уж как-нибудь сам разберусь.

Зачем тогда гнать волну на свифт? Сам он значит разберется, а свифт - плохой только потому, что мне сейчас не подходит.

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

Но мнение имеете? Иначе как объяснить вашу попытку что-то рассказать про Swift?

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

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

Для низкоуровневых языков логично работать с ними по-разному.

Свифт ни разу не низкоуровневый.

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

Зачем тогда гнать волну на свифт?

Позволю себе напомнить:

Поздняк, у нас теперь есть swift. Ну и попробуйте найти хотя б одну причину узать D вместо swift (лепет про злых авторов яблочников не принимается).

Уже найдено, по меньшей мере, две причины юзать D вместо swift, касающиеся именно языка: иммутабельность данных и compile-time metaprogramming. И это мы еще не брали инфраструктуры для языков и их позиционирование.

PS. Меня тут обвиняют в злоупотреблении развешиванием ярлыков «дебил», но порой «дебилизм» — это самое простое объяснение для поведения некоторых участников дискуссий.

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

Но ведь так и под раздачу попасть можно ;)

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

а свифт - плохой только потому, что мне сейчас не подходит.

У вас с логикой совсем всё плохо...

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

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

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

Это про Александреску, что-ли?

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

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

Вот жеж блин, оказывается языка разработку остановили и все язык выкинули, а я и не в курсе?

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

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

Не знал, здорово. Отрадно видеть подвижки в этом направлении от официальной команды. Однако, это совсем не тот уровень поддержки. который я бы хотел видеть для языка программирования. Если я выберу D, я получу готовые протестированные сборки компиляторов, рабочий менеджер пакетов с библиотеками. В случае с Swift же мне суют описание сборки только под десятку, ни сборок, ни библиотек. Вообще, у меня Swift и на арче не завелся. Ставил из аура, при импорте foundation мне показывали полотнища стектрейсов. Получается, что с одной стороны у кроссплатформенный язык, неплохой, рабочий, бери и пользуйся, с другой же язык ориентированный в первую очередь на платформы Apple, без библиотек, без сборок, «надо только подождать». Я понимаю, что там всё будет бесплатно, там всё будет в кайф, но сейчас выбор очевиден. И он не в пользу Swift. Вот если бы меня интересовали только MacOS и iOS, то я бы без раздумий брал свифт.

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

Причем тут синтаксис к похожести? У Паскаля и Д сильно разная семантика.

Тем не менее, от паскаля в D тоже кое что есть. А именно - оператор with.

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

Rust - говно, потому что вам он «не подходит».

ет где я так сказал? Rust как раз подходит, только надо чтоб его переделали человеки. Те, кто его сейчас пишут на звание человека не тянут. Укурки сплошные.

q0tw4 ★★★★
()

Вот зачем? Кому нафиг это говнище нужно? Эдак они еще си-диез впихнут в гцц...

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

только надо чтоб его переделали человеки. Те, кто его сейчас пишут на звание человека не тянут. Укурки сплошные.

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

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

лучше всего переписать раст самому. Вот только влом, мне пока и свифта хватит, а потом посмотрим.

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

лучше всего переписать раст самому

Я ослеп от вашего ЧСВ.

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