LINUX.ORG.RU

QtD 0.1

 ,


0

0

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

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

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

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



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

да, это хорошо :) очень хорошо. только не совсем нужно.

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

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

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

>vector чем не устроил ? там всё это есть.

Все знают про STL и автоуказатели. Не надо повторяться.

>А за var[i] = new var[size] вообще руки отрывать надо.

Да, замапить большой плоский массив и настроить указатель для двухмерной индексации по нему конечно лучше.

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

> Самое плохое в этом языке, что за столько лет существования до сих пор нет релиза.

Возможно этот вопрос прозвучит глупо, но что Вы понимаете под релизом? :)

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

А еще D не стандартизирован, в отличие от С# - под который есть и IDE, и библиотеки, и большое сообщество.

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

> Воспользуйтесь гуглом.

Пользовался. Не нашел. Есть даже форум русский, но помер он по мойму уже давно.

ну а то что там выдается за иде ... ну смешно. Даже к эклипсу не допиленный плюгин

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

> А еще D не стандартизирован, в отличие от С#

Это как раз обещали пофиксить скоро...сам александреску озадачился.

только вот если загнется дигитал марс, Ди загнется вместе с ними.

да и за C# стоит огромная корпорация Сами_знаете_кто.

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

Чё? (с)

Либо любое предупреждение считаем ошибкой -- и тогда в ряде случаев можно застрелиться (компилятор не всегда умнее человека), либо тупо не выводим -- и тогда получаем кучу ошибок в работе. Make your choice.

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

>>Язык D: Отсутствие предупреждений (warnings) Компиляторы языка D не генерируют предупреждений при встрече неоднозначного кода. Код может быть понятным компилятору или непонятным, это избавляет от необходимости решать, какие предупреждения относятся к ошибкам программы, а какие — нет. Использование предупреждений компилятора является признаком плохого дизайна языка.

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

Смотрите шире. Есть ведь полезные варнинги, которые предупреждают о только возможной проблеме. Например, когда переменная инициализирутеся, но не используется. Да и в самом языке есть неоднозначности. Взять, хотя бы, оператор присваивания. Кароче, сказано про D красиво, но реально не о D сказано.

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

> энд-юзерства

> фри софтваре


Так ты, Федька, - дурак! :)

Jayrome ★★★★★
()

Эльдар таки кросафчег. Осилил. С чем его да остальных и поздравляю.

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

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

а почему бы это ошибкой не считать?

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

> а почему бы это ошибкой не считать?

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

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

на этот случай "полезных варнингов" есть lint. Да, а теперь поделитесь, кто его хоть раз запускал.

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

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

хочется пример.. неиспользуемая переменная - это явная проблема)

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

> А еще D не стандартизирован, в отличие от С# - под который есть и IDE, и библиотеки, и большое сообщество.

C# нинужен.

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

>http://dprogramming.ru/d/ Жив и по сей час.

>Кстати, IDE далеко не всеми используется. Впрочем, это не отменяет того факта, что IDE с номером версии >= 1.0 нет.

http://dprogramming.ru/d/index.php?n=Instruments.IDE - CodeBlocks - отличная IDE и версия гораздо больше, чем 1.0

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

> Одному мне показалось, что API у QtD более легкочитаемый, чем у Qt?

это более легкочитаемый чем цпп.

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

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

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

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

>ldc - http://www.dsource.org/projects/ldc свободен. >gdc потихоньку поддерживают в trunk. Последний коммит - 5 дней назад, но с развитием ldc про него скорее всего забудут.

>На всякий случай: *llvm умеет генерировать машинный код*

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

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

>А еще D не стандартизирован, в отличие от С# - под который есть и IDE, и библиотеки, и большое сообщество.

D cледующее поколение, но раскрутки не хватает

anonymous
()

Кстати а gdc или кто-нить другой научился бинари под 64 бита собирать? я могу сейчас взять этот QTD и собрать хеловорд для Ubuntu64?

anonymous
()

Вот и вопрос предупреждений:

>Для кого и чего предназначен язык D

> * Для людей, которые компилируют код с максимальным количеством включенных уровней предупреждений (warning levels), что означает интерпретацию предупреждений как ошибок;

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

LDC is a compiler for the D programming Language.

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

> Лично мне после D в плюсах больше всего не хвататет
> foreach
#define foreach(it, cont) \
for (typeof((cont).begin()) it = (cont).begin(); it != (cont).end(); it++)
// В Qt такой макрос есть (немного по-другому работает)
> нормальных массивов с проверкой границ, полем размера
std::vector

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

> CodeBlocks - отличная IDE и версия гораздо больше, чем 1.0

Вот только возможностей по редактированию и анализу кода даже у Descent 0.5.4 больше.

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

>> нормальных массивов с проверкой границ, полем размера

> std::vector

Его operator[] уже проверяет границы массива? А итератор?

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

> Опишите что такое вообще LDC? как он используется и при чем тут D?

Читаем заголовок страницы по ссылке:
LLVM D Compiler

А ну да. Это ж надо было по ссылке сходить. :)

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

> Кстати а gdc или кто-нить другой научился бинари под 64 бита собирать? я могу сейчас взять этот QTD и собрать хеловорд для Ubuntu64?

Не пробовал, но http://www.dsource.org/projects/ldc/wiki/PlatformSupport говорит, что Linux-x86-64 поддерживается.

naryl ★★★★★
()

Такое впечатление, что люди выкидывающие множественное наследование никогда им не пользовались? А ведь удобная шутка иногда бывает!

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

> Такое впечатление, что люди выкидывающие множественное наследование никогда им не пользовались

Александреску сказал что айс :))

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

>> foreach

auto a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
foreach (item; a) { writefln(item); }
foreach (i, item; a) { writefln("a[%s] = %s", i, item); }

auto dict = [1: "one", 2: "two", 3: "three"];
foreach (value; dict) { writefln(value); }
foreach (key, value; dict) { writefln("a[%s] = %s", key, value); }

foreach (i; 0 .. a.length) { writefln(i); }

Препроцессор C уже научился перегружать макросы по типу аргументов? :D

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

> Кстати а gdc или кто-нить другой научился бинари под 64 бита собирать?

сорец на D + ldc -> байт-код LLVM -> маш.код

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

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

> хочется пример.. неиспользуемая переменная - это явная проблема)


Да легко... Даже с моим знанием си. Начал писать функцию, которая получает аргумент, но аргумент еще не используется, так как не дописал до этого метса... А проверить работу уже написанного текста уже надо. Специально что-то делать что-то незначащее с этим аргументом, чтобы оно таки собралось -- маразм...

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

> D cледующее поколение, но раскрутки не хватает

Вот только хз когда это наступит поколение.

Уже слишком много платформ, которые держат другие и не держит D. Ну а то, что Dll под винду собрать нельзя 64 битную и стабильную, чтоб не валилась, то это вообще просто смертельный недостаток. и sys на сколько знаю тоже никто из компиляторов не умеет. вот попробовал сейчас QTD этот завести перематерился весь. то ему одно не нравится, то другое. Плюнул, ну его нах. Пусть пилят, может лет через 10 можно будет избавится наконец от недоразумения с крестами.

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

> в грядущем стандарте обещают такое: [type inference]

Знаю. Вопрос немного в другом был.

Не зря Брайт с Александреску препроцессор выбросили.

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

ну я думаю ты в курсе зачем страуструп оставил препроцессор, "глупые" массивы и т.д.

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

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

> хочется пример.. неиспользуемая переменная - это явная проблема)

- используемый тип или метод устарел или устарее в следующей версии

- подключенная часть кода работает неправильно, еще не доделана, имеет проблемы или просто какие-то особенности (под Windows, с OpenGL итд)

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

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

.at() проверяет. Если нужна проверка, то пользуйся им. Если не хочется проверки на каждый чих и как следствие замедление скорости - пользуйся operator[]. Свобода выбора.

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

>vector чем не устроил ?

Извините, но меня не прикалывает писать "func(vector<int> arg) { arg.at(pos) ..." там, где достаточно "func(int[] arg) { arg[pos] ...".

>А за var[i] = new var[size] вообще руки отрывать надо.


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

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

Привет, можно задать несколько вопросов по поводу твоего оверлея?
Добавил, обновил layman -s d-overlay, собрал llvm-2.4 из gnustep через tmpfs (temerge). Запустил emerge -vu dev-lang/dmd-bin dev-util/dmd-common app-admin/eselect-dmd dev-libs/tango.

1. dmd-bin и (что-то одно из) ldc/ldc2 вместе работают? или tango надо отдельно каждый раз собрать USE="-dmd ldc" emerge ldc и USE="dmd -ldc" emerge dmd-bin?

2. ldc и ldc2 вместе работают? что там за патчик такой в процессе установки dev-libs/tango-9999 (хочет установленный llvm-2.4 в /var/tmp/portage, а оно у мну в tmpfs было -- ругается
-- Build files have been written to: /var/tmp/portage/dev-libs/tango-9999/work/ldc
make -j2 runtime
Scanning dependencies of target impcnvgen
Scanning dependencies of target gen_revs_h
[ 0%] Generating revisions.h
[ 0%] sh: line 0: cd: /var/tmp/portage/sys-devel/llvm-2.4/work/llvm-2.4/: Нет такого файла или каталога
Building CXX object CMakeFiles/impcnvgen.dir/dmd/impcnvgen.c.o
abort: repository /var/tmp/portage/dev-libs/tango-9999/work/ldc not found!
[ 0%] Built target gen_revs_h
правда, дальше собирает успешно)

3. eselect dmd list работает, нормально? а то у меня выдал только "[1] dmd1-tango", как добиться чтобы там было и "dmd2-tango" ?

4. нестандартный каталог для слотового dmd-bin работает нормально? Пытаюсь собирать ~/src/d/helloworld/{tango,phobos}/hello.d -- получаю:
$ dmd2.bin tango/helloworld.d
object.d: module object cannot read file 'object.d'
$ dmd2.bin phobos/helloworld.d
object.d: module object cannot read file 'object.d'

/// гуг

$ cd phobos
$ dmd|head -n1
Digital Mars D Compiler v1.039
$ dmd helloworld.d
helloworld.d(1): module stdio cannot read file 'std/stdio.d'
$ cd ../tango && dmd helloworld.d
helloworld.o:(.data+0x38): undefined reference to `_D5tango2io7Console12__ModuleInfoZ'
helloworld.o: In function `_Dmain':
helloworld.d:(.text._Dmain+0x10): undefined reference to `_D5tango2io7Console4CoutC5tango2io7Console7Console6Output'
helloworld.d:(.text._Dmain+0x15): undefined reference to `_D5tango2io7Console7Console6Output6appendMFAaZC5tango2io7Console7Console6Outpu t'
helloworld.d:(.text._Dmain+0x1a): undefined reference to `_D5tango2io7Console7Console6Output7newlineMFZC5tango2io7Console7Console6Output '
collect2: выполнение ld завершилось с кодом возврата 1
--- errorlevel 1
# ls -l /usr/lib/*tango*
-rw-r--r-- 1 root root 589422 Фев 6 20:59 /usr/lib/libtango-base-dmd.a
-rw-r--r-- 1 root root 792926 Фев 6 20:27 /usr/lib/libtango-base-ldc.a
-rw-r--r-- 1 root root 8784734 Фев 6 20:59 /usr/lib/libtango-user-dmd.a
-rw-r--r-- 1 root root 7958156 Фев 6 20:59 /usr/lib/libtango-user-ldc.a
# dmd1.bin -I/usr/include/tango -L-L/usr/lib -I/usr/include/d -version=Posix -version=Tango -defaultlib=tango-base-dmd -debuglib=tango-base-dmd -L-ltango-user-dmd helloworld.d
# ls -lh helloworld
-rwxr-xr-x 1 root root 169K Фев 6 21:39 helloworld

^^^ хм... многовато для хелловорлда.. но вывод: пофикси -L-l в оверлее, плиз :))

# rm helloworld
# dmd2.bin -I/usr/include/tango -L-L/usr/lib -I/usr/include/d -version=Tango -defaultlib=tango-base-dmd -debuglib=tango-base-dmd -L-ltango-user-dmd helloworld.d
/usr/include/tango/tango/io/model/IConduit.d(115): variable tango.io.model.IConduit.IOStream.Eof field not allowed in interface
# ls -lh helloworld
ls: невозможно получить доступ к helloworld: Нет такого файла или каталога

5. Можно ли поставить одновременно tango и phobos?
5.1 чтобы собирались одновременно ~/src/d/helloworld/{tango,phobos}/hello.d (через dmd2.bin)?
5.2 чтобы собирался и через dmd-bin:2 и через ldc2?
5.3. dmd-bin:{1,2} , ldc{,2} ?

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

Да, ну и сабж через SVN у мну тоже не собирается:
WARNING(MetaJavaBuilder) :: type 'QPictureFormatInterface' is specified in typesystem, but not defined. This could potentially lead to compilation errors.
WARNING(JavaGenerator) :: DGenerator: no java classes, skipping
WARNING(CppHeaderGenerator) :: CppHeaderGenerator: no java classes, skipping
WARNING(CppImplGenerator) :: CppImplGenerator: no java classes, skipping
Classes in typesystem: 0
Generated:
- d.........: 0 (0)
- cpp-impl..: 0 (0)
- cpp-h.....: 0 (0)
- meta-info.: 0 (0)
- pri.......: 0 (0)

Done, 879 warnings (0 known issues)
.......
-- Build files have been written to: /home/dimux/src/d/qtd/qtd/build
make: *** Не заданы цели и не найден make-файл. Останов.
qt/core/Qt.d: module Qt cannot read file 'qt/core/Qt.d'

И куда копать? У кого-нибудь оно нормально собралось?

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

>#define foreach(it, cont) \
>for (typeof((cont).begin()) it = (cont).begin(); it != (cont).end(); it++)


Вспоминается пример с MAX(a++,b++).. :)

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