Oberon space
General Category => Общий раздел => Тема начата: valexey от Июль 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++.
-
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...
-
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...
У D аналогичный режим есть.
D хорош тут тем, что он реально высокоуровневый. То есть в качестве скриптового языка он идет отлично (я использовал например для мелкой утилитки которая открывала com-порт (в юниксе/линуксе), читала и писала туда попутно парся ответы. программулька строк на 100). Ну или там логи распарсить или еще чего автоматизировать - самое оно.
-
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...
И этот же довод приводится в пользу оберона :)
-
Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).
Этот же довод, кстати, приводится как плюс автором компилятора TinyC: там даже есть просто режим выполнения программы без сохранения екзешника на диск -- программа компилируется и тут же выполняется...
И этот же довод приводится в пользу оберона :)
Это да. Но у оберона есть две проблемы:
1) Он щеголяет скоростью компиляции/скриптопригодностью только в среде для которой был разработан - то есть в Оберон ОС и её производных. В других окружениях оно либо медленно собирается (точнее компиляция быстрая, а вот компоновка далеко не всегда), либо не умеет работать с окружением на уровне который ожидают от скриптового языка, либо и то и другое одновременно.
2) Скриптовое применение предполагает не только быстрый запуск приложения (с возможной компиляцией), но и достаточную компактность и выразительность самого языка. В скриптах важно суметь быстро и компактно написать, а вот читабельность там совершенно третьестепенна. По большей части скрипты могут писаться вообще на write only языке (APL/Perl/ВсеВодинРегЭксп), абы писалось быстро и достаточно компактно. D тут хороший компромисс - оно и пишется достаточно бытро и компактно (хотя конечно не настолько насколько перл), но при этом и весьма читабельно и безопасно получается (все же строгая статическая типизация).
-
D хорош тут тем, что он реально высокоуровневый. То есть в качестве скриптового языка он идет отлично (я использовал например для мелкой утилитки которая открывала com-порт (в юниксе/линуксе), читала и писала туда попутно парся ответы. программулька строк на 100). Ну или там логи распарсить или еще чего автоматизировать - самое оно.
Феноменально Алексей, но автор языка несогласен с этим... с его точки зрения D не предназначен для скриптования... Или что-то изменилось с тех пор...
-
D хорош тут тем, что он реально высокоуровневый. То есть в качестве скриптового языка он идет отлично (я использовал например для мелкой утилитки которая открывала com-порт (в юниксе/линуксе), читала и писала туда попутно парся ответы. программулька строк на 100). Ну или там логи распарсить или еще чего автоматизировать - самое оно.
Феноменально Алексей, но автор языка несогласен с этим... с его точки зрения D не предназначен для скриптования... Или что-то изменилось с тех пор...
Первоисточник найти этого можешь? Единственное известное мне место где упоминается что D "не годится для скриптового применения" - русская википедия. В книжке Александреску написано обратное. Более того, вместе с D поставляется все для того чтобы это было возможно. Вплоть до прописывания в первой строчке исходника какой программой "интерпретировать" этот исходник (то есть чтобы шелл знал за какую прогу дернуть чтобы этот скрипт исполнить).
Опять же - я эти устрицы не только пробовал, но и ел :-)
-
Первоисточник найти этого можешь? Единственное известное мне место где упоминается что D "не годится для скриптового применения" - русская википедия. В книжке Александреску написано обратное. Более того, вместе с D поставляется все для того чтобы это было возможно. Вплоть до прописывания в первой строчке исходника какой программой "интерпретировать" этот исходник (то есть чтобы шелл знал за какую прогу дернуть чтобы этот скрипт исполнить).
Опять же - я эти устрицы не только пробовал, но и ел :-)
Да нет, в Вики перевод введения с официально сайта 5 летней давности (я тогда разбирался с оригиналом) - собственно по этому и спросил (а не изменилось ли что с тех пор...)
-
Первоисточник найти этого можешь? Единственное известное мне место где упоминается что 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.
Ну и политика развития языка, иснтрументария и книжек тоже как бы намекает на то, что оно нынче позиционируется как язык весьма общего назначения.
-
Решил скачать компилятор DMD, по ходу дела начал читать описание языка, понял, что D сложнее С++ (в мелочах громоздче, по крайней мере), удалил закачку...
-
Решил скачать компилятор DMD, по ходу дела начал читать описание языка, понял, что D сложнее С++ (в мелочах громоздче, по крайней мере), удалил закачку...
Возможно он сложнее твоего знания C++ :-)
Мелочей в С++ МНОГО больше и он РЕАЛЬНО сложнее. Только чтобы узнать эти тонкости С++ нужно осилить стандарт на 1000 страниц, а в D нужно всего лишь прочитать описалово языка на сайте которое в разы меньше. И поскольку полное описание языка D доступней чем полное описание языка С++, то оный D субъективно кажется сложнее. Но объективно это не так.
У D есть другие минусы из за которых я его не использую активно в проектах сейчас, но сложность языка не из их числа.
-
В 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 в той же Аде запрещён, и правильно!
Короче, каша какая-то, а не язык...
-
В D слишком много возможностей сделать одно и тоже по разному.
...
Не знаю, что за оператор такой <>, подозреваю, что это тоже, что и !=.
Что за восклицательные знаки перед операторами (например !> или !<)?
Если это логическое отрицание, то что делает оператор !<> ???
Нет <> это не то же что и !=. Вообще, чтобы знать что это за операторы и зачем, нужно прочесть вот это: http://dlang.org/expression.html : Floating point comparisons. Это операторы для работы с плавающей точкой и они действительно точно позволяют выразить то, что описано в IEEE 754, в отличае от С++. Без этого язык не полон либо не однозначен.
В повседневной программерской жизни которая никак не связана с вычислениями и математикой, действительно эти операторы не будут встречаться. Думаю что ынтырпрайз программист спокойно может программить свой ынтырпрайз по автоматизации рутины старушки процентщицы не знаю про плавающую точку вообще.
-
Да, еще раз - чтобы сравнивать языки нужно прочесть референс на оба языка. Полностью прочесть.
Что-то мне подсказывает, что большество даже на этом форуме прочитали до конца только референс на один из Оберонов а референсы на C#/Java/C++/Ada и даже C99 наврятли прочли :-) В повседневном программинге каждый использует мало подмножество этих языков и когда начинает читать референс на D (или Go) чисто инстинктивно начинает сравнивать не C++ и D, а то малое подмножество С++ с которым он имел дело с D. И тут D конечно сразу кажется монстром :-)
-
Нет <> это не то же что и !=. Вообще, чтобы знать что это за операторы и зачем, нужно прочесть вот это: http://dlang.org/expression.html : Floating point comparisons. Это операторы для работы с плавающей точкой и они действительно точно позволяют выразить то, что описано в IEEE 754, в отличае от С++. Без этого язык не полон либо не однозначен.
В повседневной программерской жизни которая никак не связана с вычислениями и математикой, действительно эти операторы не будут встречаться. Думаю что ынтырпрайз программист спокойно может программить свой ынтырпрайз по автоматизации рутины старушки процентщицы не знаю про плавающую точку вообще.
Подобные операторы, имхо, следует убрать из языка и определить в спец. модуле Math в виде функций с говорящими названиями.
-
Нет <> это не то же что и !=. Вообще, чтобы знать что это за операторы и зачем, нужно прочесть вот это: http://dlang.org/expression.html : Floating point comparisons. Это операторы для работы с плавающей точкой и они действительно точно позволяют выразить то, что описано в IEEE 754, в отличае от С++. Без этого язык не полон либо не однозначен.
В повседневной программерской жизни которая никак не связана с вычислениями и математикой, действительно эти операторы не будут встречаться. Думаю что ынтырпрайз программист спокойно может программить свой ынтырпрайз по автоматизации рутины старушки процентщицы не знаю про плавающую точку вообще.
Подобные операторы, имхо, следует убрать из языка и определить в спец. модуле Math в виде функций с говорящими названиями.
Тогда уж и сам тип float туда же :-)
Но если мы хотим что бы модуль Math был написан на языке высокого уровня а не асме, то операторы таки придется внести в язык.
Вообще, эти операторы никому же не мешают - начал бы изучать D также как C++, до сих пор про них не знал бы :-) Незнание - сила!
-
Вообще, эти операторы никому же не мешают - начал бы изучать D также как C++, до сих пор про них не знал бы :-) Незнание - сила!
То есть как это не мешают???
Ковыряешься, значит, в чужой программе -- а тут бац!!!
Птичий язык а-ля Хацкель: >>>= !<> !>= и прочие иероглифы...
-
Вообще, эти операторы никому же не мешают - начал бы изучать D также как C++, до сих пор про них не знал бы :-) Незнание - сила!
То есть как это не мешают???
Ковыряешься, значит, в чужой программе -- а тут бац!!!
Птичий язык а-ля Хацкель: >>>= !<> !>= и прочие иероглифы...
Ну идешь в справочник и смотришь что это такое :-) То же мне, проблема. Вообще какой-нибудь <= или там <> (в паскале) ничуть не лучше - один фиг в справочник лезть по первости.
-
Вообще какой-нибудь <= или там <> (в паскале) ничуть не лучше - один фиг в справочник лезть по первости.
Ну по первости -- возможно, а опытным программистам, изучающим новый язык, эти операторы и так уже знакомы...
-
Вообще какой-нибудь <= или там <> (в паскале) ничуть не лучше - один фиг в справочник лезть по первости.
Ну по первости -- возможно, а опытным программистам, изучающим новый язык, эти операторы и так уже знакомы...
Зависит от его предыдущего опыта. Кому то эта вот стрелочка влево: <= может быть ну нифига не интуитивной (тем более что далеко не везде она обозначает именно меньшеравно), ибо они привыкли для меньшеравно к например le.
PS. А вообще - проблема надумана. Найди мне реальный исходник на D с которым ты мог бы столкнуться по работе и где бы эти неизвестные тебе операторы использовались бы.
PPS. Вообще, по моему, опытный программист должен знать что делать в случае если вдруг увидел что-то неизвестное, особенно когда документация по языку общедоступна. Напугать такое может только быдлокодера или совсем уж новичка.
-
PS. А вообще - проблема надумана. Найди мне реальный исходник на D с которым ты мог бы столкнуться по работе и где бы эти неизвестные тебе операторы использовались бы.
Я реальных исходников на D вообще ни разу не видел, тем более по работе )))
-
PS. А вообще - проблема надумана. Найди мне реальный исходник на D с которым ты мог бы столкнуться по работе и где бы эти неизвестные тебе операторы использовались бы.
Я реальных исходников на D вообще ни разу не видел, тем более по работе )))
Ну а я видел, в том числе и по работе - и ни разу этих операторов там не встретил :-)
(вообще float используется в обычных задачах весьма редко. кстати, float также есть далеко не на всех процессорах, поэтому возможно этот тип вообще из рельно переносимого языка нужно выпилить. впрочем, как и операцию умножения для целых чисел)
-
(вообще float используется в обычных задачах весьма редко. кстати, float также есть далеко не на всех процессорах, поэтому возможно этот тип вообще из рельно переносимого языка нужно выпилить. впрочем, как и операцию умножения для целых чисел)
Почему сразу выпилить? Ну нет аппаратной поддержки типа float или умножения целых -- и что с того? Ничто же не мешает реализовать их программно, с переносимостью языка это абсолютно никак не связано...
-
(вообще float используется в обычных задачах весьма редко. кстати, float также есть далеко не на всех процессорах, поэтому возможно этот тип вообще из рельно переносимого языка нужно выпилить. впрочем, как и операцию умножения для целых чисел)
Почему сразу выпилить? Ну нет аппаратной поддержки типа float или умножения целых -- и что с того? Ничто же не мешает реализовать их программно, с переносимостью языка это абсолютно никак не связано...
Если руководствоваться той же логикой, то с тем же успехом в язык можно запихнуть тип vector и matrix и операции их перемножения например.
Вопрос - чем нужно руководствоаться при выборе что нужно пихать в язык, а что нет? (исходим из предположения что у нас чистый новый язык, и типов там пока нет вообще)
-
Из обсуждения новости на LOR'e:
Плохо, что дебагер gdb толком не поддерживает D на уровне строк исходников. Язык без дебагера - это не то, что нужно пользователю.
-
Кстати, там и про Оберон с Адой помянули: http://www.linux.org.ru/news/gnu/7941093/page4#comment-7947658
С++ неоправданно идиосинкратичен для изучения непрофессиональными программистами.
Я вообще подозреваю, что непрофессиональным программистам для их прикладных задач гораздо больше подошёл бы, скажем, Оберон (или даже Ада), чем любой из наследников Си.
-
Вопрос - чем нужно руководствоаться при выборе что нужно пихать в язык, а что нет? (исходим из предположения что у нас чистый новый язык, и типов там пока нет вообще)
Тем, что часто используется, практикой то есть. А она разная в разных сферах применения...
-
Вопрос - чем нужно руководствоаться при выборе что нужно пихать в язык, а что нет? (исходим из предположения что у нас чистый новый язык, и типов там пока нет вообще)
Тем, что часто используется, практикой то есть. А она разная в разных сферах применения...
И какова же сфера применения языка общего назначения? :-)
-
И какова же сфера применения языка общего назначения? :-)
В этой сфере тип Float и умножение целых -- нужны, а вот такие операции, как !<> и прочая херня -- нет.
-
Именно поэтому, например, в хаскелле все эти парсековские операторы <+> и прочее не входят в язык, а определены в отдельном модуле.
-
И какова же сфера применения языка общего назначения? :-)
В этой сфере тип Float и умножение целых -- нужны, а вот такие операции, как !<> и прочая херня -- нет.
Если ты работаешь с флоатами, то тебе эти операторы понадобятся, или будешь мучаться с непонятным поведением и багами.
У меня такое ощущение, что тебя страшат не сами эти операторы, а их названия (потому как тебе они не привычны). Но это ж фигня полная - к ним привыкнуть дело получаса. И уж лучше такие операторы в самом языке чем либо полное отсутствие их либо они же но префиксные да с буквенными названиями.
-
У меня такое ощущение, что тебя страшат не сами эти операторы, а их названия (потому как тебе они не привычны). Но это ж фигня полная - к ним привыкнуть дело получаса. И уж лучше такие операторы в самом языке чем либо полное отсутствие их либо они же но префиксные да с буквенными названиями.
Я не хочу привыкать к ним -- забивать голову новой фигнёй. Они должны быть в виде функций с говорящими названиями в модуле Math -- потому что они практически не нужны, а если кому и нужны раз в году -- пусть оттуда их и вызывает!