Автор Тема: D в GCC  (Прочитано 14648 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
D в GCC
« : Июль 04, 2012, 12:52:47 am »
Появилась новсть про реинтеграцию фронтенда D в набор компиляторов gcc: http://www.linux.org.ru/news/gnu/7941093

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

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

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

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

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: D в GCC
« Ответ #1 : Июль 04, 2012, 11:24:59 am »
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: D в GCC
« Ответ #2 : Июль 04, 2012, 11:29:02 am »
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...
У D аналогичный режим есть.

D хорош тут тем, что он реально высокоуровневый. То есть в качестве скриптового языка он идет отлично (я использовал например для мелкой утилитки которая открывала com-порт (в юниксе/линуксе), читала и писала туда попутно парся ответы. программулька строк на 100). Ну или там логи распарсить или еще чего автоматизировать - самое оно.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: D в GCC
« Ответ #3 : Июль 04, 2012, 02:29:04 pm »
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...

И этот же довод приводится в пользу оберона :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: D в GCC
« Ответ #4 : Июль 04, 2012, 03:10:50 pm »
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...

И этот же довод приводится в пользу оберона :)
Это да. Но у оберона есть две проблемы:
1) Он щеголяет скоростью компиляции/скриптопригодностью только в среде для которой был разработан - то есть в Оберон ОС и её производных. В других окружениях оно либо медленно собирается (точнее компиляция быстрая, а вот компоновка далеко не всегда), либо не умеет работать с окружением на уровне который ожидают от скриптового языка, либо и то и другое одновременно.
2) Скриптовое применение предполагает не только быстрый запуск приложения (с возможной компиляцией), но и достаточную компактность и выразительность самого языка. В скриптах важно суметь быстро и компактно написать, а вот читабельность там совершенно третьестепенна. По большей части скрипты могут писаться вообще на write only языке (APL/Perl/ВсеВодинРегЭксп), абы писалось быстро и достаточно компактно. D тут хороший компромисс - оно и пишется достаточно бытро и компактно (хотя конечно не настолько насколько перл), но при этом и весьма читабельно и безопасно получается (все же строгая статическая типизация).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: D в GCC
« Ответ #5 : Июль 04, 2012, 09:41:50 pm »

D хорош тут тем, что он реально высокоуровневый. То есть в качестве скриптового языка он идет отлично (я использовал например для мелкой утилитки которая открывала com-порт (в юниксе/линуксе), читала и писала туда попутно парся ответы. программулька строк на 100). Ну или там логи распарсить или еще чего автоматизировать - самое оно.
Феноменально Алексей,  но автор языка несогласен  с этим... с его точки зрения D не предназначен для скриптования... Или что-то  изменилось с тех пор...

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: D в GCC
« Ответ #6 : Июль 04, 2012, 09:46:40 pm »

D хорош тут тем, что он реально высокоуровневый. То есть в качестве скриптового языка он идет отлично (я использовал например для мелкой утилитки которая открывала com-порт (в юниксе/линуксе), читала и писала туда попутно парся ответы. программулька строк на 100). Ну или там логи распарсить или еще чего автоматизировать - самое оно.
Феноменально Алексей,  но автор языка несогласен  с этим... с его точки зрения D не предназначен для скриптования... Или что-то  изменилось с тех пор...
Первоисточник найти этого можешь? Единственное известное мне место где упоминается что D "не годится для скриптового применения" - русская википедия. В книжке Александреску написано обратное. Более того, вместе с D поставляется все для того чтобы это было возможно. Вплоть до прописывания в первой строчке исходника какой программой "интерпретировать" этот исходник (то есть чтобы шелл знал за какую прогу дернуть чтобы этот скрипт исполнить).

Опять же - я эти устрицы не только пробовал, но и ел :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: D в GCC
« Ответ #7 : Июль 04, 2012, 09:52:42 pm »
Первоисточник найти этого можешь? Единственное известное мне место где упоминается что D "не годится для скриптового применения" - русская википедия. В книжке Александреску написано обратное. Более того, вместе с D поставляется все для того чтобы это было возможно. Вплоть до прописывания в первой строчке исходника какой программой "интерпретировать" этот исходник (то есть чтобы шелл знал за какую прогу дернуть чтобы этот скрипт исполнить).

Опять же - я эти устрицы не только пробовал, но и ел :-)
Да нет, в Вики перевод введения с официально сайта 5 летней давности (я тогда разбирался с оригиналом) - собственно по этому и спросил (а не изменилось ли что с тех пор...)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: D в GCC
« Ответ #8 : Июль 04, 2012, 09:58:57 pm »
Первоисточник найти этого можешь? Единственное известное мне место где упоминается что D "не годится для скриптового применения" - русская википедия. В книжке Александреску написано обратное. Более того, вместе с D поставляется все для того чтобы это было возможно. Вплоть до прописывания в первой строчке исходника какой программой "интерпретировать" этот исходник (то есть чтобы шелл знал за какую прогу дернуть чтобы этот скрипт исполнить).

Опять же - я эти устрицы не только пробовал, но и ел :-)
Да нет, в Вики перевод введения с официально сайта 5 летней давности (я тогда разбирался с оригиналом) - собственно по этому и спросил (а не изменилось ли что с тех пор...)
Видимо изменилось. Сейчас там красуется такое:
Цитировать
From simple scripts to large projects, D has the breadth to scale with any application's needs: unit testing, information hiding, refined modularity, fast compilation, precise interfaces.

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: D в GCC
« Ответ #9 : Июль 05, 2012, 04:54:12 pm »
Решил скачать компилятор DMD, по ходу дела начал читать описание языка, понял, что D сложнее С++ (в мелочах громоздче, по крайней мере), удалил закачку...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: D в GCC
« Ответ #10 : Июль 05, 2012, 05:09:34 pm »
Решил скачать компилятор DMD, по ходу дела начал читать описание языка, понял, что D сложнее С++ (в мелочах громоздче, по крайней мере), удалил закачку...
Возможно он сложнее твоего знания C++ :-)
Мелочей в С++ МНОГО больше и он РЕАЛЬНО сложнее. Только чтобы узнать эти тонкости С++ нужно осилить стандарт на 1000 страниц, а в D нужно всего лишь прочитать описалово языка на сайте которое в разы меньше. И поскольку полное описание языка D доступней чем полное описание языка С++, то оный D субъективно кажется сложнее. Но объективно это не так.

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: D в GCC
« Ответ #11 : Июль 05, 2012, 05:32:59 pm »
В D слишком много возможностей сделать одно и тоже по разному.

Например, 0xFF и x"FF", x"00 FBCD 32FD 0A" и 0x00_FBCD_32FD_0A,
r"c:\root\foo.exe" и `c:\root\foo.exe`, q"(foo(xxx))" и "foo(xxx)"...

Не знаю, что за оператор такой <>, подозреваю, что это тоже, что и !=.
Что за восклицательные знаки перед операторами (например !> или !<)?
Если это логическое отрицание, то что делает оператор !<> ???

123_456 вместо 123456 -- это хорошо, но вариант типа 1_2_3_4_5_6 в той же Аде запрещён, и правильно!

Короче, каша какая-то, а не язык...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: D в GCC
« Ответ #12 : Июль 05, 2012, 05:43:49 pm »
В D слишком много возможностей сделать одно и тоже по разному.
...
Не знаю, что за оператор такой <>, подозреваю, что это тоже, что и !=.
Что за восклицательные знаки перед операторами (например !> или !<)?
Если это логическое отрицание, то что делает оператор !<> ???
Нет <> это не то же что и !=. Вообще, чтобы знать что это за операторы и зачем, нужно прочесть вот это: http://dlang.org/expression.html : Floating point comparisons. Это операторы для работы с плавающей точкой и они действительно точно позволяют выразить то, что описано в IEEE 754, в отличае от С++. Без этого язык не полон либо не однозначен.

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: D в GCC
« Ответ #13 : Июль 05, 2012, 05:50:48 pm »
Да, еще раз - чтобы сравнивать языки нужно прочесть референс на оба языка. Полностью прочесть.

Что-то мне подсказывает, что большество даже на этом форуме прочитали до конца только референс на один из Оберонов а референсы на C#/Java/C++/Ada и даже C99 наврятли прочли :-) В повседневном программинге каждый использует мало подмножество этих языков и когда начинает читать референс на D (или Go) чисто инстинктивно начинает сравнивать не C++ и D, а то малое подмножество С++ с которым он имел дело с D. И тут D конечно сразу кажется монстром :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: D в GCC
« Ответ #14 : Июль 06, 2012, 05:32:27 am »
Нет <> это не то же что и !=. Вообще, чтобы знать что это за операторы и зачем, нужно прочесть вот это: http://dlang.org/expression.html : Floating point comparisons. Это операторы для работы с плавающей точкой и они действительно точно позволяют выразить то, что описано в IEEE 754, в отличае от С++. Без этого язык не полон либо не однозначен.

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

Подобные операторы, имхо, следует убрать из языка и определить в спец. модуле Math в виде функций с говорящими названиями.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…