LINUX.ORG.RU

[D] Чё-каво?

 


0

0

Решил рахзвиваться :). А если конкретнее - посмотреть/пощупать D. Если кто пользовался - отзовитесь - какие ощущения при сравнении с С/С++ ? Мой профиль - системное программирование, так что использую, главным образом, С и немного bash. Но при написании чего-то большого хочется более высокоуровневого инструмента, чем С и, тем не менее, совместимого с ним на уровне библиотек. D - это самое оно?

anonymous

Язык супер, imho, как-то так и должен выглядеть мэйнстрим.

Anoxemian ★★★★★
()

> Если кто пользовался - отзовитесь - какие ощущения при сравнении с С/С++ ?

С C сравнивать некорректно, разные классы языков. С C++ можно. D, как язык, значительно удобнее для программиста, нет многих маразмов C++. Большой минус — нет хорошей, semantic-aware IDE для D. Если Emacs с подсветкой в качестве IDE устроит, прекрасно. Впрочем для D утилиты писать значительно легче, чем для C++, и при некотором уровне популярности такое IDE обязательно появится. В принципе и сейчас уже пытаются писать (Descent например), может и у них получится.

Впрочем писать на D, не зная C++ я бы не советовал. С нуля, без опыта траха с C++-ом там могут многие вещи быть непонятны.

Ещё одна особенность D — раздутость языка. В нём очень много всего. С другой стороны он модулен, и все фичи совсем не обязательно использовать. Поэтому я не отношу это ни к плюсам, ни к минусам.

С C-шными библиотеками интерфейситься несложно. Нужно прототипы функций написать самому (или сгенерировать специальной утилитой из .h-файлов, но я не пробовал) и всё. Линкер сам всё сделает.

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

К C биндится напрямую, но есть и обёртки (к GTK); вторая версия D будет биндится к С++. По поводу же фреймворка обычно достаточно unixа.

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

Спасибо, добрые люди :)

Ида дело десятое - пользую vim.

> Впрочем писать на D, не зная C++ я бы не советовал. С нуля, без опыта траха с C++-ом там могут многие вещи быть непонятны.

Опыт с С++ есть - хоть и не очень большой. Но совет, если честно, несколько удивляет.. По-вашему, надо сперва посношать мозг с С++ и только потом к хорошему привыкать? :))

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

>вторая версия D будет биндится к С++

Когда обещают? В смысле, стоит ли поизучать, если учесть, что мне Qt нужно будет в любом случае?

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

> Когда обещают?

Уже биндится, но 2 версия в стадии альфы, и там время от времени меняют язык.

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

> язык куда более приятный и стройный чем C++

Не гнать на ЦеПэПэ, ЦеПэПэ укрепляет разум и дух! ЦеПэПэ это дзен, а D - это путь слабаков!

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

> По-вашему, надо сперва посношать мозг с С++ и только потом к хорошему привыкать?

Не знаю. Мне после того, как я на m4 генерировал 16 плюсовых шаблонов для того, чтобы сделать функцию с произвольным количеством аргументов, D был как бальзам на душу :) В D много вещей, которые читаешь и думаешь, во блин, в С++ я такие костыли воротил, а тут оно вон как просто и логично, круто.

anonymous
()


ну и главный плюс D - это его причастность к кругу Избранных. так уж повелось, что людей, использующих D очень мало. проектов на его основе ещё меньше. так что если вы Профессионал D вы можете смело считать себя уникальным разработчиком. если у вас при этом получится найти уникального работодателя, то жизнь превратится в сказку. ну а так - в тыкву.

// wbr

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

ШТОНЕТАК?

------ test.d --------- import std.stdio;

int main(char[][] args) { foreach(int i, char[] a; args) writefln("args[%d] = '%s'", i, a); return 0; } ----------------------- #gcc test.d /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o: In function `_start': (.text+0x18): undefined reference to `main' /tmp/ccIVOowC.o: In function `_Dmain': test.d:(.text+0x89): undefined reference to `_D3std5stdio8writeflnFYv' /tmp/ccIVOowC.o: In function `_D4test9__modinitFZv': test.d:(.text+0xa9): undefined reference to `_Dmodule_ref' test.d:(.text+0xb4): undefined reference to `_Dmodule_ref' /tmp/ccIVOowC.o:(.data+0x0): undefined reference to `_D11TypeInfo_Aa6__initZ' /tmp/ccIVOowC.o:(.data+0x4): undefined reference to `_D10TypeInfo_i6__initZ' /tmp/ccIVOowC.o:(.data+0x8): undefined reference to `_D11TypeInfo_Aa6__initZ' /tmp/ccIVOowC.o:(.data+0x3c): undefined reference to `_D3std5stdio12__ModuleInfoZ' /tmp/ccIVOowC.o:(.data._D16TypeInfo_B5AaiAa6__initZ[_D16TypeInfo_B5AaiAa6__init Z]+0x0): undefined reference to `_D14TypeInfo_Tuple6__vtblZ' /tmp/ccIVOowC.o:(.eh_frame+0x11): undefined reference to `__gdc_personality_v0' collect2: ld returned 1 exit status

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

ШТОНЕТАК?

------ test.d ---------
import std.stdio;

int main(char[][] args)
{
        foreach(int i, char[] a; args)
                writefln("args[%d] = '%s'", i, a);
        return 0;
}
-----------------------
#gcc test.d
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/tmp/ccIVOowC.o: In function `_Dmain':
test.d:(.text+0x89): undefined reference to `_D3std5stdio8writeflnFYv'
/tmp/ccIVOowC.o: In function `_D4test9__modinitFZv':
test.d:(.text+0xa9): undefined reference to `_Dmodule_ref'
test.d:(.text+0xb4): undefined reference to `_Dmodule_ref'
/tmp/ccIVOowC.o:(.data+0x0): undefined reference to `_D11TypeInfo_Aa6__initZ'
/tmp/ccIVOowC.o:(.data+0x4): undefined reference to `_D10TypeInfo_i6__initZ'
/tmp/ccIVOowC.o:(.data+0x8): undefined reference to `_D11TypeInfo_Aa6__initZ'
/tmp/ccIVOowC.o:(.data+0x3c): undefined reference to `_D3std5stdio12__ModuleInfoZ'
/tmp/ccIVOowC.o:(.data._D16TypeInfo_B5AaiAa6__initZ[_D16TypeInfo_B5AaiAa6__init
Z]+0x0): undefined reference to `_D14TypeInfo_Tuple6__vtblZ'
/tmp/ccIVOowC.o:(.eh_frame+0x11): undefined reference to `__gdc_personality_v0'
collect2: ld returned 1 exit status

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

> Опыт с С++ есть - хоть и не очень большой. Но совет, если честно, несколько удивляет.. По-вашему, надо сперва посношать мозг с С++ и только потом к хорошему привыкать? :))

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

// wbr

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

> Ещё одна особенность D — раздутость языка. В нём очень много всего. С другой стороны он модулен, и все фичи совсем не обязательно использовать. Поэтому я не отношу это ни к плюсам, ни к минусам.

Значет сдохнет как ADA (читай: скатится в узкую нишу, из которой больше не выберется), историю надо учить, прежде чем быдло язык дезигнить.

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

> если у вас при этом получится найти уникального работодателя

Работодателям, зачастую пофиг, на чём пишется софт - "лишь бы оно работало" Зато вот себе жизнь можно сильно упростить...

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

Во-первых не все программируют только на работе, во-вторых не всем указывают, на чём программировать. Что вы так переживаете, не выкинут плюсы ещё лет двадцать. Кобольщиков до сих пор не истребили.

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

> Не знаю. Мне после того, как я на m4 генерировал 16 плюсовых шаблонов для того, чтобы сделать функцию с произвольным количеством аргументов, D был как бальзам на душу :) В D много вещей, которые читаешь и думаешь, во блин, в С++ я такие костыли воротил, а тут оно вон как просто и логично, круто

Мусье в школе не учился? Или что за особенную такую "функцию с произвольным количеством аргументов" захотелось?

http://www.cplusplus.com/reference/clibrary/cstdarg/va_start.html

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

> Значет сдохнет как ADA (читай: скатится в узкую нишу, из которой больше не выберется)

Очень может быть. Только не из за перегруженности (когда плюсы сдохнут как ада?), а из за проприетарности основного компилятора.

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

> Мусье в школе не учился? Или что за особенную такую "функцию с произвольным количеством аргументов" захотелось?

Типобезопасную. Идите вы с вашим vararg. В курсе, что в такие функции нельзя передавать объекты? undefined behaviour :)

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

> Ещё одна особенность D — раздутость языка. В нём очень много всего. С другой стороны он модулен, и все фичи совсем не обязательно использовать. Поэтому я не отношу это ни к плюсам, ни к минусам.

А можно на конкретике - что имеется в виду?

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

>Значет сдохнет как ADA

Тогда время было другое ... Жаба бы тогда сдохла не родившись, а сейчас ничего, "память нынче дешевая" (с)

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

> Очень может быть. Только не из за перегруженности (когда плюсы сдохнут как ада?), а из за проприетарности основного компилятора.

Если речь об ADA -- то gnat вполне себе открыт. А плюсы не сдохнут, они останутся, так-же как и D, языком для фанатиков, только у C++ фанатиков куда больше чем у D, ну и у плюсов очевидный есть плюсище (прямо каламбур): огромная масса кода на плюсах написанного, так что с плюсами прощатся не мечтайте, как ФОРТРАН будут жить вечно.

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

> Тогда время было другое ... Жаба бы тогда сдохла не родившись, а сейчас ничего, "память нынче дешевая" (с)

У явы "корка" весьма лаконична.

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

>В курсе, что в такие функции нельзя передавать объекты?

Мил человек, если вам в функцию с произвольным кол-вом элементов требуется передать объект, то гнать вас из быдлокодеров надо метлой поганой...

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

Гм. Открываю стандарт, начинаю сверху.

Лексер. StringLiteral: WysiwygString AlternateWysiwygString DoubleQuotedString EscapeSequence HexString DelimitedString TokenString 7 видов синтаксиса для строк. Полезно но много.

Integer: Decimal Binary Octal Hexadecimal

бинарный никому не нужен, все, кому это надо, давно в hex-е пишут и в уме переводят.

Комплексные числа (1 + 2i), штука конечно забавная, но для системного программирования нафиг не нужная.

Модули: Куча видов импорта. Круто, но можно было меньше сделать.

Юнит-тесты как часть синтаксиса. Круто, но не сильно надо. И без стектрейса ошибки вообще тяжело отлаживаться.

Надоело, в общем, такой весь язык. Круто, всё где-нибудь да пригодится, но можно было постараться сделать попроще.

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

> Мил человек, если вам в функцию с произвольным кол-вом элементов требуется передать объект, то гнать вас из быдлокодеров надо метлой поганой...

Гы, смешной какой. Я делал механизм сигналов-слотов, мне нужно было универсальное решение. Указывать на то, что мне нужно или не нужно, не надо. Ты не страуструп.

Да, в D есть типобезопасный аналог printf-а, как в C++ сделать?

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

> Типобезопасную. Идите вы с вашим vararg. В курсе, что в такие функции нельзя передавать объекты? undefined behaviour :)

Неправославно, но если очень аккуратно и с reinterpret_cast-ом -- то можно. А вообще вы странного хотите, вы случайно не быдлокодер? :)

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

> Работодателям, зачастую пофиг, на чём пишется софт - "лишь бы оно работало" Зато вот себе жизнь можно сильно упростить...

может быть конечно мой опыт нехарактерен, я не спорю, но все работодатели, которых я встречал и которым было действительно пофигу что, как и на чём пишется "лишь бы побыстрее работало" представляли собой глубокий стартап в самом его зачатке, когда нет ни денег, ни времени ни людей. в этой ситуации на безрыбье и рак щука -> цепляется первый попавшийся "студент" шо наобещает золотые горы и его садят девелупить. зло, факт, но дёшево. с вероятностью 99% новоиспечённый архитектор-девелупер-кодер всё-в-одном готовит такой причудливый коктейль, что на жопе волосы не шевелятся - они седеют и выпадают. и то, что это был не самый оптимальный вариант народ понимает лишь через пару лет, когда все участники трагедии чуть-чуть поднабравшись опыта уныло смотрят на получившегося Франкенштейна и чешут затылки..

// wbr

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

> Неправославно, но если очень аккуратно и с reinterpret_cast-ом -- то можно.

Если звёзды сложатся нужным образом — да. По стандарту нельзя.

Поэтому в * C++ * нет функций с переменным числом аргументов. Они есть в C.

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

ps: термин "студент" я специально взял в кавычки дабы не обижать действительно талантливых ребят. "студентом" можно быть и в сорок лет.

// wbr

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

> Запихать все аргументы в tuple, как делается в Ъ языках?

Костыли. Кстати, как написать tuple для произвольного количества аргументов, не подскажете?

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

> Если звёзды сложатся нужным образом — да. По стандарту нельзя.

Вам уже сказано, это неправославно, тру используют tuples, в крайнем случае.

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

> Костыли. Кстати, как написать tuple для произвольного количества аргументов, не подскажете?

Очень просто: подождать 2009-ого года и нового C++ стандарта.

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

> Вам уже сказано, это неправославно

О том и речь.

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

> Очень просто: подождать 2009-ого года и нового C++ стандарта.

А в каком году хотя бы основные компиляторы будут его поддерживать на уровне, достаточном для его практического применения?

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

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

Я думаю в gcc все будет реализовано в конце 2008-ого, достаточно много уже сделали (man concept gcc)

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

> Поэтому в * C++ * нет функций с переменным числом аргументов. Они есть в C.

наверное, я что то не понимаю, но что именно вы понимаете под функциями с переменным количеством аргументов применимо к C++ :-?

// wbr

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

> что именно вы понимаете под функциями с переменным количеством аргументов применимо к C++ :-?

В идеале, чтобы можно было написать

std::string s("hello world"); std::printf("%s", s); std::printf("%d", s); // throws std::bad_argument_exception или что то похожее.

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

> что именно вы понимаете под функциями с переменным количеством аргументов применимо к C++ :-?

В идеале, чтобы можно было написать

std::string s("hello world"); std::printf("%s", s); std::printf("%d", s); // throws std::bad_argument_exception или что то похожее.

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

> что именно вы понимаете под функциями с переменным количеством аргументов применимо к C++ :-? 

В идеале, чтобы можно было написать

std::string s("hello world");
std::printf("%s", s); 
std::printf("%d", s); // throws std::bad_argument_exception или что то похожее.

// сорри за дубликаты

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

> А зачем вам такие извращения?

нет, как раз зачем они нужны более чем понятно, это не проблема. одно из популярных применений - всё тот-же debug output. но макросы в паре с boost::format прекрасно с этим справляются.

// wbr

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

>В идеале, чтобы можно было написать

Ананимус, при грамотном проектировании это не нужно. Не сваливай свое неумение проектировать на язык.

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

> нет, как раз зачем они нужны более чем понятно, это не проблема. одно из популярных применений - всё тот-же debug output. но макросы в паре с boost::format прекрасно с этим справляются.

Ну, не, я про то, что "помощь дедушки" еще тоже никто не отменял, и C-подмножество языка вполне пригодно для реализации debug output-а, если вдруг boost-а нет

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

Костыль :) printf проще.

Возьмём абстрактного программиста в вакууме. Он не умеет читать boost. В D он может использовать writef так же, как использовал printf в C, не особо задумываясь о том, как на самом деле оно работает. В C++ ему придётся хорошо представлять, что как работает (иначе он от первой же простыни ошибок сойдёт с ума). Например почему он не может писать format("%d") % 2 + 3; Пример утрирован, но, надеюсь, он мою мысль доносит.

И вообще для меня оператор % это остаток от деления, использовать его для других вещей, как минимум, некрасиво. Я видел, как оператором ~= добавляли child-окна. Это было жутко :)

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