LINUX.ORG.RU

Facebook платит за устранение багов в реализации языка программирования D

 ,


1

5

На данный момент размер вознаграждения за исправление багов в общей сложности насчитывает 1500$. Со слов Александреску, они будут внимательно смотреть, как это скажется на сообществе.

Одно из определений языка D: «D — это то, чем должен был быть С++». Вокруг языка сломалось уже много копий, но несмотря на это язык продолжает жить и развиваться, демонстрируя свои замечательные возможности и расширяя свое сообщество. Все больше разработчиков из мира С++/Java пристально следят за развитием языка и стараются держать руку на пульсе. Должен отметить, что сообщество D не является ортодоксальным и фундаменталистким (что бы это ни значило), и нередко в ньюсгруппах можно увидеть, что в ответ на вопрос, можно ли использовать D для решения определенной задачи, члены сообщества рекомендуют задавшему вопрос использовать другой язык, отличный от D. Так что в лице сообщества D любой найдет грамотных специалистов своего дела, готовых ответить на нужный вопрос кратко и по существу. Все это делает развитие языка неизбежным и неотвратимым.

Список багов с ценами за их устранение

>>> Оригинал новости

★★

Проверено: Shaman007 ()
Последнее исправление: cetjs2 (всего исправлений: 6)
Ответ на: комментарий от DarkEld3r

Надо так

> (ann 10 : 10)
- : Integer [generalized from 10]
10

И на что это влияет?

Позволяет писать такое

(: test ((U 1 2 3 3.14) -> (U  2 3 4 2.9237)))

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

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

Для строк почти всегда реализуют operator char*()... Умный компилятор может решить, что надо преобразовать в char* и разыменовать.

В общем, ясно что в C++ по-другому было бы хуже. Но в Scheme при разработке было принято решение, что язык должен максимально изолировать код друг от друга (смотрели на Common Lisp, где в люьой момент можно изменить что угодно). Отсюда гигиенические макросы, невозможность доопределения функций, разделение define и set! (определение значения и переопределение значения). В Racket пошли дальше: запретили переопределять то, что импортировано из другого модуля (если очень надо, можно определить своё с тем же именем, но на функции модуля это не повлияет).

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

В Racket, если функция зависит от класса, то это очевидно. Так как она при этом метод и вызывается как (send A f 2) (send B f 2), а не (f 2)

И? Мы ведь не можем сказать, что с классом и двойкой после этого произойдёт.

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

Мы ведь не можем сказать, что с классом и двойкой после этого произойдёт.

Если я пишу (send A f 2), то я знаю, что я не могу считать этот код постоянным. И ожидаю, что в зависимости от типа A будет разное поведение.

Если я пишу (f A 2), то я ожидаю, что все пред-/постусловия, типы и алгоритм f будет тот, который я вижу в моей нынешней программе. Считай аналогом слова final в Java.

Такой подход радикально облегчает тестирование.

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

Для строк почти всегда реализуют operator char*()

Не самый умный поступок.

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

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

Я вообще-то про Racket это написал. На D возможно и будут писать успешный коммерческий софт. А на Racket - нет.

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

ОК. Т.е. это можно сделать через наследование классов от общего предка.

А как тогда сказать, что это не просто tree, а tree, параметризованное типом? Ну например tree of integers / tree of blobs. Это возможно?

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

Насчет :accessor и (slot-value my-var 'value) == (value-of my-var) - не очень понял. Значит ли это, что если я объявляю ":accessor foo", то в области видимости появляется функция «value-of»? Если да, то что будет если я объявлю ":accessor foo" для двух различных классов?

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

И на Racket пишут (две штуки попадалось). Хотя, конечно, тоже фанатики.

А что пишут, если не секрет?

Затем, что многие вещи на нём решаются реально быстрее. Например, понадобилось мне сделать программу для чтения WMI под оффтопик, так на C++ только бойлерплейта две страницы. Или COM-объект подключить — аналогично.

Ну так по сравнению с C++ на много чём можно написать быстро и короче. :)

Парсинг HTML: код получился не длинней аналогичного на XMLPath. GUI строится в 3 строки, веб-сервер в 4. При этом нормальная многопоточность, возможность использовать замыкания и продолжения, вложенные функции, макросы.

Пожалуй да. Но почти всё это есть и в python, причем в python есть неплохая в 99% случаев документация, библиотеки и полно инструментария.

Фактически, ниша Racket где-то между скриптовыми языками и Java. Он быстрее скриптовых и на нём проще писать, чем на Java.

Кому как. Мне проще на Java, т.к. качество системных библиотек довольно высокое и есть нормальные инструменты. Но для програм - однодневок Java конечно это overkill во многих случаях.

Активно использую для программ, для которых скорость неважна (фактически скриптовые), но которые не являются одноразовыми (там действительно проще bash или python). Дописывать программу на Racket гораздо проще, так как система модулей почти заставляет сразу делать более-менее нормальный API (а не пачку глобальных переменных).

Хорошо тебе ... :)

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

В общем, ясно что в C++ по-другому было бы хуже. Но в Scheme при разработке было принято решение, что язык должен максимально изолировать код друг от друга (смотрели на Common Lisp, где в люьой момент можно изменить что угодно). Отсюда гигиенические макросы, невозможность доопределения функций, разделение define и set! (определение значения и переопределение значения). В Racket пошли дальше: запретили переопределять то, что импортировано из другого модуля (если очень надо, можно определить своё с тем же именем, но на функции модуля это не повлияет).

Но при этом mutable strings. Или есть и immutable тоже?

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

Ещё одна штука, которая меня в своё время оттолкнула от SBCL, это мой опыт экспериментирования с Uncommon Web.

Uncommon Web это такой веб-фрейморк для Common LISP. Неплохой, интересный.

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

Впрочем, это - вечная беда. И не только Common LISPа.

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

такие — это как в Typed Racket ? Исключительно возможность описать тип контейнера без указания типа элемента.

Я всё-таки не совсем понимаю один момент. А чем хуже использовать "(Listof Any)"?

(define: (length-1 [l : (Listof Any)]) : Integer
  (length l))
И не надо никаких полиморфных функций?

И ещё один момент. Что делает «All»?

(define: (T) (length-2 (T) [l : (Listof T)]) : Integer
  (length l))
Так ведь тоже работает. В чём разница?

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

Лучше расскажите о том, что делается на D прикладного. Или близкого к этому. О реальных разработках, не имеющих отношения к компилятору D или его стандартной библиотеке. Покажите, как делать обработку больших объемов данных, как работать с различными типами СУБД, как строить распределенные приложения и т.д. и т.п. И не на игрушечных примерах, а из реальной жизни. Раз вы верите в применение D в продакшене, так покажите это миру. Расскажите, как это происходит, какие задачи решаются, с какими затратами, сложностями или преимуществами по сравнению с другими языками/платформами.

Есть в записях выступлений с DConf 2013, мелкает на reddit. Только на это мало кто обращает внимания, а крикливые жёлтые заголовки приходятся в самый раз. И уж тем более такая информация никогда не появится на LOR, где единицы на самом деле интересутся содержание новостей.

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

если брать топовые, то [...] Objective C

Это он то «новый»? Лол. Кроме того даже используя его зачастую приходиться юзать плюсовые вещи в .mm. Либы сишные опять же.

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

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

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

как пример тот же Qt с QML

Для комерческого применения QML пока негодно. Из опенсорсного - не видел ни одной полезной программы на QML. Пока сыро. Такие дела.

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

и таки на той самой платформе когда-то рулил CodeWarrior и C++

История этой платформы богата банальными зондами, так что не показатель

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

даже Java более предпочтительна, если не нужна совместимость с С

Что там насчет производительности? Я смогу переписать свои расчеты на джаве без замедления в 3-4 раза?

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от yetanother

Они специально выбирают самые-самые говенные места(ну а жопа - она же есть у всех), откусывают оттуда шмат дерьма и потом кричат, что вот оно - говно! Я нашел его! И самое интересное - они счастливы в своих поисках дерьма! Да бог им судья.

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

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

Это он то «новый»?

«относительно старые, но получившие развитие и популярность», надо читать до конца

Кроме того даже используя его зачастую приходиться юзать плюсовые вещи в .mm. Либы сишные опять же.

оба, и ObjC и С++ держат свои позиции во многом благодаря старому доброму С, который их однозначно переживет

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

а) плюсы действительно местами устарели, не весь стандарт ес-но, но препроцессор, например, это одназночно привет из прошлого тысячелетия, хоть это и не вина самих плюсов
б) я и не писал, что «плюсы плохи», это хороший ЯП, но не для всех задач
в) старайся не переходить на личности

// WBR

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

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

Ну, да. 1С и ABAP - идеальные ЯП

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

Для комерческого применения QML пока негодно.
Из опенсорсного - не видел ни одной полезной программы на QML

гугли Sailfish OS

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

История этой платформы богата банальными зондами, так что не показатель

не показатель чего? это был пример того, что ObjC таки потеснил С++, и не больше

wota ★★
()
Ответ на: комментарий от cvs-255

Что там насчет производительности? Я смогу переписать свои расчеты на джаве без замедления в 3-4 раза?

эксперты утверждают, что Java давно уже перегнала С :) а если серьезно, то в большинстве случаев Java лишь немного уступает С, но за 100% случаев конечно говорить нельзя, тем более, что много зависит от собс-но кода

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

Да это вам так кажется, что они далеки. Еще пара лет и на D будут писать успешный коммерческий софт, а плюсисты будут курить бамбук т.к. они будут делать ту же работу в 2 раза дольше и их будут нанимать все реже и реже.
А эти пару лет пройдут ооочень быстро, уж поверьте

Ага, и конец света уже несколько раз предрекали за последние пару сотен лет. И кто то даже велся.

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

Надо так

Хм, но я всё-таки не совсем понимаю. Итоговый тип ведь получается всё-таки более общий (Integer)?

Позволяет писать такое

А что это значит/даёт?

Я в лиспе не особо силён.

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

Речь же была про «нормальных программистов», т.е. про 80% в середине, не быдлокодеров, но и не топов. Если 3+ года опыта работы с «квантами» есть - вперёд, $300к в год твои.

10 дней, это я как-то с запасом взял, но $1.5к за рабочую неделю (чистыми) - вполне себе нормальная оплата программиста.

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

А... Я не так его понял. (Подумал, что имеются в виду шаблонные виртуальные методы)

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

Кому-то не нужны, а кому-то очень даже нужны.

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

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

Для строк почти всегда реализуют operator char*()...

Ну, положим, не всегда. В стандартных строках такого нет. В qтшных (QString) тоже.

Умный компилятор может решить, что надо преобразовать в char* и разыменовать.

Нет, такие вещи регулируются стандартом. Конвертации не будет, будет ошибка компиляции.

Но в Scheme при разработке было принято решение, что язык должен максимально изолировать код друг от друга (смотрели на Common Lisp, где в люьой момент можно изменить что угодно).

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

Но вот с функциями, на мой взгляд, как-то бредово. Тем более, что насколько я знаю, гигену в макросах «можно обойти». То есть подход не менее мощный (если я всё правильно понял), просто «более безопасный». Дефайн и сет опять же не ограничивают в возможностях.

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

Если я пишу (f A 2), то я ожидаю, что все пред-/постусловия, типы и алгоритм f будет тот, который я вижу в моей нынешней программе.

Теперь мысль понял. Но думаю найдётся немало желающих поспорить, что и без этого «всё нормально». Более строгии гарантии мне нравятся, но как-то ни разу на грабли с «s << 2» не наступал.

Считай аналогом слова final в Java.

Если правильно понял, то это даже удобнее. В джаве ведь чтобы «final» увидеть надо в декларацию смотреть, а тут при вызове всё видно.

Кстати, аналог final в С++ (уже) тоже есть.

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

В C99 можно. Неужели в C++ нельзя?

Нельзя. В своё время, аргументировали довольно бредово - типа можно задать слишком большой размер и стеку поплохеет. В С++14, тем не менее, будет (если не передумали).

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

Конечно гигиену можно обойти, достаточно лишь создать syntax-object для символа с контекстом, где раскрылся макрос.

Однако syntax-parameters + make-rename-transformer делают это ненужным почти всегда.

x4DA ★★★★★
()
Последнее исправление: x4DA (всего исправлений: 1)
Ответ на: комментарий от rtvd

А как тогда сказать, что это не просто tree, а tree, параметризованное типом? Ну например tree of integers / tree of blobs. Это возможно?

Возможно, но извращённо. Что-то типа

(defvar *trees* (make-hash-table))
(defmacro tree-class (elem-type)
  `(or (gethash *trees* elem-type)
       (defclass ,(make-tree-name elem-type) ()
          ...)))

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

Да. 3 бита в указателе — тэг типа + 4 байта адрес класса. Поле аналогично: если простое, то только 3 бита тратится, если объект, то + идентификатор класса.

Значит ли это, что если я объявляю ":accessor foo", то в области видимости появляется функция «value-of»?

Появляется функция foo

Если да, то что будет если я объявлю ":accessor foo" для двух различных классов?

Будет

(defmethod foo ((class class1))
   (slot-value class 'field-of-class1))

(defmethod foo ((class class2))
   (slot-value class 'field-of-class2))

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

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

Но почти всё это есть и в python,

Вот это «При этом нормальная многопоточность, возможность использовать замыкания и продолжения, вложенные функции, макросы.» почти всё в питоне отсутствует. Есть Scala, но создавать проект ради программы из 5 строк лень.

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

А чем хуже использовать "(Listof Any)"

Тем, что, например, list-ref должен возвращать не Any, а Integer, если исходный список типизирован и содержит только Integer.

Иначе, например, (define: (test [l : (Listof Number)] (add1 (list-ref l))) работать не будет, так как add1 для Any не определён.

Что делает «All»

В (define: ...) можно без него, в (: ...) нужен.

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

А что это значит/даёт?

Тип, заданный перечислением конкретных значений. Например тип функции Sgn (Number -> (U -1 0 1)).

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

Я понимаю ваши чувства, D1 был уже почти готов и тут запилили D2. В сети куча брошенных проектов того времени - многие бросили D из-за этого. Но им на смену пришли другие и D2 сейчас развивается. Хотя жаль, конечно, что часть ушла - коммунити очень нужно языку. Кроме него некому создавать инфраструктуру - бывает, что люди сделают хороший и полезный проект, но просто некому его использовать.

Насчет сравнения вайба с асио - лично я не вижу смысла позиционировать язык как убийцу плюсов или асио как жалкое подобие вайба. Смысл моего поста привлечь внимание тех людей, кого не устраивает сложившиеся положение вещей и они ищут замену привычным инструментам, чтобы они присмотрелись к D. И поскольку каждый ищет то, что нужно ему, а язык очень развитый, то описать все в одном анонсе просто нереально, поэтому пусть каждый ищет то, что нужно ему. А вопросы можно задать в группе новостей и на них подробно ответят. И более профессионально - там специалисты реально высокого уровня. Недавно на днях человек интересовался использованием D для серверного высоконагруженного финансового приложения, в данный момент написанного на Java, как можно реализовать то, как можно это. На все вопросы ему ответили (а он их задал не десяток даже), он сказал, что Java их устраивает сейчас, но ему очень понравился D и он подробнее изучит его, чтобы быть в курсе возможных альтернатив Java в их проекте. Вот именно в расчете на таких людей, кто ищет, я и сделал анонс, чтобы показать, что собаки лают, а караван идет. А те, кто ищут абстрактного убийцу $имя языка, или возможности потроллить - они будут всегда, но анонс не создавался в расчете на данных личностей.

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

Смысл моего поста привлечь внимание тех людей, кого не устраивает сложившиеся положение вещей и они ищут замену привычным инструментам

а получился твой пост смесью маркетоидного бреда без конкретики и корма для троллей, я, например, как раз ищу замену С++, но мне интересны конкретные преимущества, а не отвлеченный набор фраз

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

это ЛОР, тут тролли модерируют троллей, так что, если хочешь реально заинтересовать, показывай решение конкретных задач, технические статьи и т.д., даже тролли в таком случае пойдут по ссылкам для поиска еды, а найдут интересную информацию, сейчас же даже самые адекватные люди увидят только, что «D разрабатывают школьники за еду»

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

ну и тряхнем стариной, предыстория:

а) относительно недавно была новость, где Александреску рассказывал, что D компилируется быстрее С++;
б) тогда же кто-то рассказывал, что в D CTFE работает без всяких хинтов;
в) чуть позже еще один человек создал тему про свой бенчмарк.

Ну и собс-но я взял и на его примере проверил два первых пункта:

~$ cat 1.cpp
#include <stdio.h>

class Fib
{
     int _value;

  public:
    constexpr Fib(int n) : _value( n ) {}

    constexpr int value() const
    {
        return _value <= 2 ?
            1 :
            Fib(_value - 1).value() + Fib(_value - 2).value();
    }
};

int main()
{
    for(int i=0; i<10; i++)
    {
        constexpr int value = Fib(40).value();

        printf("n=%d\n", value);
    }
}~$time g++ -std=c++11 -Ofast 1.cpp

real    0m0.045s
user    0m0.033s
sys     0m0.012s
~$ time ./a.out 
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155

real    0m0.002s
user    0m0.000s
sys     0m0.001s
~$ cat a.d
import std.stdio;

struct Fib
{
  private:
        int _value;

  public:
        this(int n) { _value = n; }

        int value()
        {
                if(_value <= 2)
                        return 1;

                scope Fib f1 = Fib(_value - 1);
                scope Fib f2 = Fib(_value - 2);

                return f1.value() + f2.value();
        }
};

int main()
{
        for (int i = 0; i < 10; i++)
        {
                scope Fib x = Fib(40);
                writefln("n=%d", x.value);
        }
        return 0;
}~$time dmd -O a.d

real    0m0.280s
user    0m0.240s
sys     0m0.039s
~$ time ./a
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155

real    0m6.910s
user    0m6.897s
sys     0m0.004s
~$ time gdc -Ofast a.d

real    0m1.116s
user    0m0.964s
sys     0m0.055s
~$ time ./a.out 
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155

real    0m1.776s
user    0m1.772s
sys     0m0.002s

и что мы видим - тормозные компиляторы для D и никакого CTFE, может ты сможешь сделать лучше пример на D чем он? это будет реальный пример преимущества D (ну или хотя бы не такого сильного проигрыша в сравнении с С++)

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)
Ответ на: комментарий от wota

ну или хотя бы не такого сильного проигрыша в сравнении с С++

Ну и читак. Пиши сразу «в сравнении с compiletime C++11» что ты?

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от bhfq

Пиши сразу «в сравнении с compiletime C++11» что ты?

не разговаривай ерунду, во-первых, внезапно, не «compiletime C++11» будет компилироваться быстрее (инфа 100%), во-вторых проверяется конкретная особенность ЯП - CTFE, которую я хочу увидеть у D не только не в воображении его фанатов

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

проверяется конкретная особенность ЯП - CTFE

Проверяется всего лишь скорость CTFE в вычислении чисел Фибоначчи. Напиши на constexpr трассировщик лучей и сравни %)

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Проверяется всего скорость CTFE в вычислении чисел Фибоначчи. Напиши на constexpr трассировщик лучей и сравни %)

зачем писать - уже есть:

https://gitorious.org/metatrace

а вот на D даже выше приведенный пример пока не работает

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

Проверяется всего скорость CTFE в вычислении чисел Фибоначчи. Напиши на constexpr трассировщик лучей и сравни %)

зачем писать - уже есть:

https://gitorious.org/metatrace

Какой ужас. Трассировщик лучей на D тоже не отличается красотой, но там по крайней мере код на D, а не на интерпретаторе шаблонов.

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

а получился твой пост смесью маркетоидного бреда без конкретики и корма для троллей, я, например, как раз ищу замену С++, но мне интересны конкретные преимущества, а не отвлеченный набор фраз

А у тебя есть конкретный перечень что тебя не устраивает в плюсах? Реально? Не абстрактно, а именно у тебя есть в этом потребность? Если есть, то берешь и смотришь, что именно тебе D может предложить в этом конкретном случае - если он тебе не может предложить ничего что тебе нужно, ты берешь и идешь дальше. И не тратишь время на болтовню здесь. Если же что-то нашел, то берешь и пользуешься. Просто, без разговоров лишних. А если остались вопросы - задавай их в ньюсгрупп, пока это самое лучшее место. Все очень просто. А развлекать всю толпу доказывая что-то одному - просто глупая трата времени. Я не понимаю, зачем сидеть здесь в топике и доказывать всем что язык D это круто, или наоборот, отговаривать всех. Ты либо пользуешься, либо нет. Зачем тратить время?

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

А у тебя есть конкретный перечень что тебя не устраивает в плюсах?

есть, конечно

Реально? Не абстрактно, а именно у тебя есть в этом потребность? Если есть, то берешь и смотришь, что именно тебе D может предложить в этом конкретном случае - если он тебе не может предложить ничего что тебе нужно, ты берешь и идешь дальше. И не тратишь время на болтовню здес

ну а нахрен тогда ты тут такой приперся? :)

Я не понимаю, зачем сидеть здесь в топике и доказывать всем что язык D это круто, или наоборот, отговаривать всех

ну ты же его пиаришь, а теперь вот смысла не видишь в этом, нестыковочка, ага?

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