LINUX.ORG.RU

QtD 0.1

 ,


0

0

Вышел первый релиз QtD — биндинга языка D к фреймворку Qt. Уже работает более чем 150 Qt классов из core, gui и opengl.

Полный список

QtD использует tango и распространяется под GNU GPL v3. Сейчас можно собрать только под GNU/Linux.

>>> Подробности



Проверено: svu ()

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

>Вот и цена "безопасного foreach" в стиле D - куча ручной работы

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

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

только вот с++ сужествует уже черти пойми сколько. и ничего адекватного (разве только некоторые места boost) там нет. а конструкции типа T<T::it<bt> >::tt > вообще не должны быть в нормальном языке

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

>> Вот и цена "безопасного foreach" в стиле D - куча ручной работы

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

Но это придется делать _мне_, а не Брайту или вот анонимному брату, который делает QtD :)

Еще одна важная вещь - за счет того, что компилятор D "знает" о массивах, он может делать разные оптимизации, повышающие эффективность индексирования.

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

> func(vector<int> arg)

для этого есть typedef'ы.

> arg.at(pos)

Ну ты уж выбери что тебе надо. Быстро небезопасно и удобно или медленно безопасно и неудобно.

> И как делают Ъ?

Смотря что надо. Либо vector < vector < type > >;

либо double * a = malloc(n * n * sizeof(double)); ...

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

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

>Очень верная мысль.

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

Менее абстрактно: В g++ и(кажется даже в java) есть варнинги которые говорят: вы используете старый код, который лучше нафиг переписать.

Если вы автор кода - то совет дельный. А если вы скачали исходник с freshmeat и хотите его собрать и запустить, то вам похрен на то что strstream сегодня никто не использует.

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

>>Очень верная мысль.

> Менее абстрактно: В g++ и(кажется даже в java) есть варнинги которые говорят: вы используете старый код, который лучше нафиг переписать.

И в дотнет/моно есть. Только в нормальных случаях это (обычно?) не сообщения компилятора самого языка (типа if (a=1) ...), а результат пометки кода как deprecated. А ключевое слово deprecated -- оно и в D есть.

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

>В g++ и(кажется даже в java) есть варнинги которые говорят: вы используете старый код, который лучше нафиг переписать.

Ключевое слово deprecated в D есть.

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

> vector<T>::iterator p = cont.end()++; и получить тем самым инвалидный итератор.

здесь есть ошибка, которую никто из "знатоков" не заметил (бмухаха) - итератор p остается валиден и равен cont.end(). Имелось в виду - vector<T>::iterator p = ++cont.end() .

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

> В g++ и(кажется даже в java) есть варнинги которые говорят: вы используете старый код, который лучше нафиг переписать.

в D тоже есть такие вонинги (от слова "вонь").

dmd -d: allow deprecated features
в исходнике стоит:
http://www.digitalmars.com/d/1.0/attribute.html#deprecated

-version=level
compile in version level >= level
-version=ident
compile in version identifier ident

http://www.digitalmars.com/d/1.0/version.html


хм, и ворнинги вернули взад:
-w
enable warnings http://www.digitalmars.com/d/2.0/warnings.html

потом, есть прагмы, которые у каждого компилятора свои (ldc активно прагмами пользуется)

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

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

namespace HardwareOpts {

typedef std::vector<double> DeviceParams;

};

//

HardwareOpts::DeviceParams params(PARAM_COUNT);

//

HardwareOpts::DeviceParams::iterator p = find_if(params.begin(), params.end(), HasChanged(oldParams));

if (p != params.end()) ... ;

и все в таком духе.

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

> Если вы автор кода - то совет дельный. А если вы скачали исходник с freshmeat и хотите его собрать и запустить, то вам похрен на то что strstream сегодня никто не использует.

гм.. похрен-то похрен, но вот например скачал старый исходник и захотел его собрать с tango-svn. Авотфиг, методы deprecated, переименовали или поместили в другой модуль/другой объект (с например, MemoryBuffer/Conduit, такое было). => компилятор ругнулся, что "метод устарел и не используется" => посмотрел в api reference на сайте танго, где сейчас этот метод, переписал исходник. => Заработало.
Но это уже сильно breaking changes, отрефакторили код, передвинули в другой класс. А если изменения по-мелочи, то есть, попал на тот момент в svn, когда уже помечено как deprecated, но ещё код не поломан, заработает и старый код, только ругаться будет, что "устарел, надо переписать".

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

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

>typedef std::vector<double> DeviceParams;

На ум приходит псевдоинтервью Строуструпа про поиск какого-то долбаного RoofRaised в проекте.

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

> На ум приходит псевдоинтервью Строуструпа про поиск какого-то долбаного RoofRaised в проекте.

Пост ниасилил, хотя пытался. Какого еще руфрайзед? ссылко в студию.

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

спасибо, пересобрал, заработало. Тоже, может надо инструкцию по USE-флагам и комбинациям tango/phobos/dmd:1,2/ldc повесить на страничке оверлея? Спасибо за оверлей, а то думал опять придётся ручками ставить и dmd.conf править.

> tango под dmd2 не работает и даже не компилится.


ага, немного посмотрел: существенные изменения между D1 и D2, D2 строже (константы в интерфейсах, immutable char[]/char[], и т.п.). Из любопытства, может его и можно допинать, чтобы собирался всеми компиляторами, да это сколько ж возиться надо. Кстати, кто там в Tango занимается переносимостью между компиляторами? Вроде для gdc что-то такое заявлялось.

Интересно, как устроен линкер в DMD и ldc. Попробовал пособирать хелловорды, с debug символами вообще 200-300 K, после strip Phobos: 134K, tango, собранный dmd: 96K, tango, собранный ldc: 194K. То есть, линкер сырее у ldc, линкует чего-то ненужного (или у ldc своя версия tango с более толстыми объектниками?). import делал точный, то есть import tango.io.Console:Cout; вместо import tango.io.Console; -- результат тот же самый, то есть, линкер достаточно хорошо определяет, что нужно линковать, что не нужно.

Эта, а neptune с тритоном совсем сдох? или где-то ещё можно скачать?

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

> В таком случае D 1 уже больше года как зарелизен. Конечно, можно ещё
> поспорить насчёт определения термина "стандарт".


1. В таком случае где можно прочесть драфты стандарта и какой комитет занимался стандартизацией.

2. Подскажите названия этих двух компиляторов?

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

> только вот с++ сужествует уже черти пойми сколько. и ничего адекватного (разве только некоторые места boost) там нет. а конструкции типа T<T::it<bt> >::tt > вообще не должны быть в нормальном языке

язык, который ломает совместимость при переходе с версии 1 на версию 2, имеет компилятор только под x86 и при этом все никак не выпустит версию 2.0 по твоему лучше?

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

>1. В таком случае где можно прочесть драфты стандарта и какой комитет занимался стандартизацией.

http://www.prowiki.org/wiki4d/wiki.cgi?LanguageSpecification
http://www.prowiki.org/upload/duser/spec_DMD_1.00.pdf
http://www.digitalmars.com/d/2.0/lex.html
http://www.digitalmars.com/d/2.0/abi.html
http://www.digitalmars.com/d/2.0/memory-safe-d.html

стандартизацией занимался не комитет, а сообщество и автор языка

> 2. Подскажите названия этих двух компиляторов?


1. DMD (c) Волтер Брайт. Открытый фронтенд компилятора dmdfe, входит в поставку: dmd.{2.023,1.039}.zip/src/dmd. Исходники рантайма и стд. библиотек там же (танго- отдельно).
2. GDC
3. LDC

DStress, юнит-тесты на соответствие компиляторов спецификации языка:
http://www.incasoftware.de/~kamm/ldc/tests/index.html (LDC и DMD)
старый http://dstress.kuehne.cn/www/dstress.html (DMD и GDC)

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

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

>>Очень верная мысль.

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

> Менее абстрактно: В g++ и(кажется даже в java) есть варнинги которые говорят: вы используете старый код, который лучше нафиг переписать.

В D подход проще - у них новая версия несовместима со старой.

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

> стандартизацией занимался не комитет, а сообщество и автор языка

Судя по всему это уникальный случай.

за ссылки - спасибо.

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

>только вот с++ сужествует уже черти пойми сколько

Значит уже столько лет никому это не понадобилось.

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

>а конструкции типа T<T::it<bt> >::tt > вообще не должны быть в нормальном языке

А что в них такого плохого, если вам это колит глаза то один раз с помощью typedef делаем менее колкий тип.

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

>Но это придется делать _мне_

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

>Еще одна важная вещь - за счет того, что компилятор D "знает" о массивах, он может делать разные оптимизации, повышающие эффективность индексирования.

А есть ссылка на описание каие он оптимизации делает?

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

>> На ум приходит псевдоинтервью Строуструпа про поиск какого-то долбаного RoofRaised в проекте.

>Пост ниасилил, хотя пытался. Какого еще руфрайзед? ссылко в студию.

На гугле забанили? http://www.google.ru/search?hl=ru&newwindow=1&q=%D1%81%D1%82%D1%80%D0...

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

>>а конструкции типа T<T::it<bt> >::tt > вообще не должны быть в нормальном языке

>А что в них такого плохого, если вам это колит глаза то один раз с помощью typedef делаем менее колкий тип.

По моему там надо T< typename T::it<bt> >::tt >

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

>> стандартизацией занимался не комитет, а сообщество и автор языка

> Судя по всему это уникальный случай.

А не напомнишь, когда появились стандарты на Си и Си++? А то мне в голову лезут странные цифры 1984 и 1998 :)

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

> А не напомнишь, когда появились стандарты на Си и Си++? А то мне в голову лезут странные цифры 1984 и 1998 :)

Комитет по стандартизации C++ появился сразу же, когда AT&T решили вынести язык за пределы своей конторы (до этого он был внутренней разработкой для внутреннего использования). Тогда еще на некоторых клавиатурах (датских, например) не было разных угловых скобочек и амперсантов. Поэтому для них придумали замену в виде слов "or", "and", "bitand" и смешных комбинаций других символов типа "<%".

Стандарт вышел... да, не сразу...

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

> Стандарт вышел... да, не сразу...

"Understatement of the century" (c) :)

А до выхода официального стандарта "стандартом" было "а посмотри, что в таком случае делает pcc".

P.S. если верить Вики, то комитет по стандартизации Си сформирован в 1983. Первый драфт стандарта вышел в 1984, ЕМНИП. Так что у D еще есть время :)

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

> Тоже, может надо инструкцию по USE-флагам и комбинациям tango/phobos/dmd:1,2/ldc повесить на страничке оверлея?
eix подсказывает где зачем и какие флаги можно ставить. Надо только metadata.xml написать как руки дойдут.

> Интересно, как устроен линкер в DMD и ldc.

dmd использует ld. ldc вроде тоже. dmd умеет разбиваь один исходник на несколько обьектников (ключ -lib), таким образом сильно уменьшается размер бинарников, слинкованных с библиотеками, скомпилированными с ключом -lib.

> Эта, а neptune с тритоном совсем сдох? или где-то ещё можно скачать?

На D сейчас активно разрабатывается только одна ОС - XOmB http://code.google.com/p/xomb/ http://xomb.org/

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

Всё просто. Стандарт есть на домашней страничке. :) Reference implementation есть, тесты есть. Если компилятор проваливает те тесты, которые dmd проходит - надо исправлять. Если компилятор давится на исходнике, который dmd осиливает - надо исправлть.

p.s. комитеты - зло

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

> И как насчет итератора, его выход за границу проверяется?

Я слышал, правда сам не использовал, об отладочной версии STL, проверяющей такие вещи.

___________________________

Мое отношение к Д -- это шаг в правильном направлении, только недостаточно модульный и абстрактный.

Кстати, когда наконец Благородные Доны, Написавшие Суперязык Д, соизволят документировать ABI интерфейсов:

Interfaces

TBD

( http://www.digitalmars.com/d/2.0/abi.html )

Я пока подержусь за С++. Там оно хоть известно...

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

Мое отношение к Д -- это шаг в правильном направлении в деле usability языка для обычных кодеров для обычных задач, только шаг этот недостаточно модульный и абстрактный.

Ну и плохая совместимость с С++.

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

>Лично мне после D в плюсах больше всего не хвататет делегатов, foreach, нормальных массивов с проверкой границ, полем размера и нормальной многомерностью (никаких долбанных циклов с var[i] = new var[size]!).

1) форич - это пять. это мегаполезная вешь. угу.

2) нормальная многомерность реализуется через std::map. удивись. никаких долбаных циклов.

3) ну ты понял вобщем.

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

> 2) нормальная многомерность реализуется через std::map. удивись. никаких долбаных циклов.

а это ничего, что у map сложность доступа к элементам логарифмическая?

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

> Мое отношение к Д -- это шаг в правильном направлении в деле usability языка для обычных кодеров для обычных задач, только шаг этот недостаточно модульный и абстрактный.

а что такое "достаточно модульный & абстрактный" шаг в деле usability? С точки зрения C++/C#/Java шаг вполне обычный, на полшага дальше (функции времени компиляции, mixinы).

> Ну и плохая совместимость с С++.

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

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

У D терпимая совместимость с C++, до тех пор пока либа на C++ не имеет шаблонов и текстовых макросов в интерфейсе.

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

>здесь есть ошибка, которую никто из "знатоков" не заметил (бмухаха)

Сам нагадил, сам и убирай.

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

>нормальная многомерность реализуется через std::map. удивись. никаких долбаных циклов.

Я сышал, даже в Фортране ситация с массивами какбе более благополучная чем в ++.

Absurd ★★★
()

Блин... терпел-терпел, не могу... ща буду флудить... :)

Господа с претензиями к С++ - идите и удавитесь. Вы просто не умеете его готовить. Да, сложно на нём писать код без ошибок. Да, владение данным языком требует солидной подготовки и опыта. Но никто Вам релакс и не обещал... Это, кагбэ, сродни езде на гоночной машине - неопытный гонщик даже с места не сумеет тронутся. Так что уймитесь и не показывайте свою некомпетентность.

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

>Да, сложно на нём писать код без ошибок.

Ну так зачем тогда мучиться? :)

> Это, кагбэ, сродни езде на гоночной машине - неопытный гонщик даже с места не сумеет тронутся.

Если практичность Си++ на уровне гоночных автомобилей, то удивительно, что он ещё хоть как-то жив. ИМХО, ты гонишь. Он более практичен :)

Си++, скорее, как трактор. Где-то необходим, но основная масса водителей предпочтёт что-то более комфортное.

(/me, кстати, водит только трактор :D )

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

>У D терпимая совместимость с C++, до тех пор пока либа на C++ не имеет шаблонов и текстовых макросов в интерфейсе.

А причём тут либа??? При компиляции и шаблоны и текстовые макросы разворачиваются в обычный код....

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

>А у тебя нет претензий к Си++? Или ты уже удавился?

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

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

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

>>Да, сложно на нём писать код без ошибок.

>Ну так зачем тогда мучиться? :)

А Вы бы как ответили на этот вопрос??? Кстати, вот Вы на чём бы стали писать если бэ был свободный выбор?

>Если практичность Си++ на уровне гоночных автомобилей, то удивительно, что он ещё хоть как-то жив. Си++, скорее, как трактор.

На тракторе этап F1 не выиграешь. :)

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

>Если практичность Си++ на уровне гоночных автомобилей, то удивительно, что он ещё хоть как-то жив. ИМХО, ты гонишь. Он более практичен :)

Кстате, прощу заметить, я нигде не говорил про практичность. Просто уровень вхождения у С++ довольно высок по сравнению, к примеру, с тем же Python или C#.

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

> Это, кагбэ, сродни езде на гоночной машине - неопытный гонщик даже с места не сумеет тронутся.

Именно поэтому на с++ так много говнокода, просто тонны говнокода. покажите мне пальцем человека, который "умеет его готовить". восторг по поводу ++ показывает лишь некомпетентность школоты, дорвавшейся до студии. С++ должен был еще с 20 веке сдохнуть...10 лет назад. Но инертность мышления и общее отупение масс ...

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

>> А у тебя нет претензий к Си++? Или ты уже удавился?

> Вы будете смеяться но чем больше я С++ (равно как и С) изучаю - тем больше начинаю понимать логику лежащую в основе языка

Это здорово, но я спрашивал о претензиях. Они у тебя есть, да или нет?

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

>Это, кагбэ, сродни езде на гоночной машине - неопытный гонщик даже с места не сумеет тронутся.

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

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

>Именно поэтому на с++ так много говнокода

Не передёргивайте. Говнокода много везде. А вот рабочих говнопрограмм на С++ именно по тем самым причинам меньше. :)

>восторг по поводу ++ показывает лишь некомпетентность школоты, дорвавшейся до студии.

Где восторг? Причём тут студия? Вы, мущина, фантазёр и ононизд.

>Но инертность мышления и общее отупение масс ...

По себе людей не судят.

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