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 👍👍
()
Ответ на: комментарий от 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
()
Ответ на: комментарий от q0tw4

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

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

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