DrDobbs обрадовал небольшой заметкой про использование языка D в таком крупном проекте, как Facebook. 5K LOC — как говорил Семёныч, выходя из пивной: "Маленький шажок человека, но большой шаг для человечества!". Действительно, ну не может же хороший язык быть вечным мальчиком для битья всякими язвительными сипиписниками — "разум когда-нибудь победит" (ц) Смысловые Галлюцинации.
Надеюсь, что уже сам пример использования таким "гигантом", станет хорошим вдохновителем для масс — многие просто боятся использовать что-то малораздутое или новоиспечённые выскочки типа Rust/Go. Ди развивается уже много лет и к счастью — без давления легаси или коммерческой продавабельности (как C#), так что если под Ди встанет хороший фундамент инвестиций, сипипи-убожества навсегда покинут индустрию.
21.10.2013 19:17, matumba пишет: > так что если под Ди встанет > хороший фундамент инвестиций, сипипи-убожества навсегда покинут индустрию.
Убожества не в языке, а в прослойке.
Здравствуйте, matumba, Вы писали:
M>так что если под Ди встанет хороший фундамент инвестиций, сипипи-убожества навсегда покинут индустрию.
У каждого языка есть свои цели, свои design guidelines. Язык это не просто набор фич.
Как известно, у C++ основным приоритетом является производительность.
А в D спокойно могут пожертвовать производительностью ради других целей (об этом говорил A.A.). Взять например те же ranges — они проигрывают итераторам по производительности by-design
Хорошо известный D-разработчик Андрей Александреску внёс в репозиторий Facebook первые 5112 строк кода на языке D, так что теперь гигант социальных сетей может сказать, что "использует язык D в серийном производстве". Язык был разработан Уолтером Брайтом, главным разработчиком компилятора C++ — "Zortech C++".
Александреску подтвердил, что проект, что называется, в "ежедневном, тяжёлом использовании" центром Facebook и в сравнении с оригинальной С++ версией, команда отметила множество выйгрышей во всех аспектах, включая размер исходников, скорость компилляции и скорость исполнения.
"D однозначно больше не может затмеваться С++, потому что превосходит не только слабые, но и сильные стороны С++. Касательно языка Go, вряд ли он будет преемником Си, т.к. не охватывает всего того, что Си умеет и что востребовано в некоторых системах — произвольный доступ к памяти, ручное управление памятью, да к тому же плохо взаимодействует с Си", — сказал Александреску.
*здесь пропущены характеристики Ди — всё и даже больше, чем всё есть на оффсайте*
Уолтер Брайт прокомментировал новость как "начало первого сражения, предвещающего конец Средиземья и наступление Эры D" (видимо, отнесение к Толкиену и его Кольцам, прим. пер.)
Другие D-разработчики, такие как J. M. Davis, выразились более прозаично: "Это не означает, что D типа захватил мир программирования, но это хорошо показывает, что язык D взрослеет и реальные компании хотят его реально использовать".
Здравствуйте, Константин, Вы писали:
К>Минус за попытку интересную новость превратить в срач.
Никакого срача — это лишь ваше личное восприятие. То, что Ди как язык на голову превосходит С++ — очевидно даже школоло, это я и подчеркнул. Если вам лично обидно за потраченное на С++ время — ССЗБ.
К>P.S. Александреску сам "сипиписник", и много сделал для развития "сипипи-убожества"
БЫЛ, но как только Ди набрал обороты, влился в команду Уолтера — тем самым подчеркнув, что даже для матёрого сипиписника С++ не является идолом и отжил свою эпоху.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>У каждого языка есть свои цели, свои design guidelines. Язык это не просто набор фич.
Это разве противоречит тому, что С++ просто УСТАРЕЛ? Ну не думал Страуструп, что его клёвые "игры в указатели" всем надоедят! Да и ООП было прикручено сбоку и является наихудшим его воплощением (и это при наличии Смоллтока!).
EP>Как известно, у C++ основным приоритетом является производительность.
В эпоху гигагерцовых смартфонов как-то даже неудобно экономить миллисекунды. Не говоря о том, что Ди — тоже не петрушка, это нативный компилятор — ничто не мешает ему вылизать производительность.
EP>Взять например те же ranges — они проигрывают итераторам по производительности by-design
Если вместо 0.0001 секунды работа будет сделана за 0.0003, никто на такую чепуху даже не обратит внимания. Точечное сравнение каких-то фич бессмысленно, тут надо смотреть ширше — язык Ди уже сам по себе спроектирован для безопасного п-я и очевидно намного больше подходит под язык мэйнстрима 21 века.
Здравствуйте, matumba, Вы писали:
EP>>У каждого языка есть свои цели, свои design guidelines. Язык это не просто набор фич. M>Это разве противоречит тому, что С++ просто УСТАРЕЛ?
А тут разве кто-то вообще говорит что он устарел?
В следующем году будут концепции — большой шаг вперёд. А что тут может предложить D? duck-typing?
EP>>Как известно, у C++ основным приоритетом является производительность. M>В эпоху гигагерцовых смартфонов как-то даже неудобно экономить миллисекунды.
M>Не говоря о том, что Ди — тоже не петрушка, это нативный компилятор — ничто не мешает ему вылизать производительность.
Ещё раз, язык D может пожертвовать производительностью ради других преимуществ, об этом говорит один из его авторов.
"Вылизывать" производительность можно в компиляторе, а вот когда сам язык приносит производительность в жертву другим фичам, то тут особо ничего не поделаешь
EP>>Взять например те же ranges — они проигрывают итераторам по производительности by-design M>Если вместо 0.0001 секунды работа будет сделана за 0.0003, никто на такую чепуху даже не обратит внимания.
Ещё бы, 3x — это уже такая мелочь, да и вообще всё в БАЗУ упирается
Здравствуйте, maloi_alex, Вы писали:
_>ИМХО, языку D не хватает хорошего финансирования на развитие.
В конечном итоге — да, всё упирается в деньги. На самом деле Ди нужно развитие библиотек, т.к. на одних контейнерах Офис не напишешь. GUI, базы, сеть, 3D — на этих китах можно наворотить большую часть десктоп-софта.
Здравствуйте, matumba, Вы писали:
M>Надеюсь, что уже сам пример использования таким "гигантом", станет хорошим вдохновителем для масс — многие просто боятся использовать что-то малораздутое или новоиспечённые выскочки типа Rust/Go.
Про малораздутое не понял. На счет новоиспеченности смешно. Это Ди новоиспеченный. Вернее непропеченный, и всегда таким останется.
На Rust'е Мозила свой браузер начала переписывать. С такой рекламой дело пойдет очень быстро.
И главное там есть новые полезные идеи. При то, что главная идея Ди — спилить некоторые занозы с C++.
Те что совсем уж страшные.
О Go и говорить нечего. На нём уже куча вещей написана.
M>Ди развивается уже много лет и к счастью — без давления легаси или коммерческой продавабельности (как C#),
Читай: на нём ничего до сих пор не написали.
Откуда же его [независимый суд] взять, если в нем такие же как мы? (c) VladD2
Здравствуйте, Evgeny.Panasyuk, Вы писали:
M>>Это разве противоречит тому, что С++ просто УСТАРЕЛ?
EP>А тут разве кто-то вообще говорит что он устарел?
Нда... вроде криокамеры ещё не изобрели?
EP>В следующем году будут концепции — большой шаг вперёд.
Большой шаг вперёд из той задницы, откуда шагает С++ — это всё то же сидение в заднице. Хуже того — даже при введении самых суперских фич, в руках остаётся всё тот же тротиловый С++, готовый не то что отстрелить ногу, а вообще всю башку снести! И синтаксис — как гляну, КАК С++ адаптирует всякие новшества, так сразу хочется послать сухарей Страуструпу.
EP> А что тут может предложить D?
эээ... в смысле "какие новые ежемесячные печеньки"? Бог ты мой, да ДАВНО УЖЕ ВСЁ РЕАЛИЗОВАНО!
EP>"Вылизывать" производительность можно в компиляторе, а вот когда сам язык приносит производительность в жертву другим фичам, то тут особо ничего не поделаешь
Да и не надо тут играть похоронный марш! Вон, ассемблер — не чета всяким Сям — забыли? И правильно сделали, ибо некоторые игры свеч не стóят. Если написание программ можно сильно обезопасить, слегка прогнув производительность, это обязательно надо сделать. А некоторые вещи (типа неизменяемости) — вообще дадены забисплатна (почитайте про это у Ди).
EP>Ещё бы, 3x — это уже такая мелочь, да и вообще всё в БАЗУ упирается
Я уверен на 146%, что большинство программ упираются в интеллект прогера, а не возможности CPU. Десктоп софт — тот вообще живёт от клавиши до клавиши, нажатой юзером.
Здравствуйте, matumba, Вы писали:
M>>>Это разве противоречит тому, что С++ просто УСТАРЕЛ? EP>>А тут разве кто-то вообще говорит что он устарел? M>Нда... вроде криокамеры ещё не изобрели?
Аргументы?
EP>>В следующем году будут концепции — большой шаг вперёд.
M>Большой шаг вперёд из той задницы, откуда шагает С++ — это всё то же сидение в заднице.
Откуда столько злости и ненависти?
EP>> А что тут может предложить D? M>эээ... в смысле "какие новые ежемесячные печеньки"? Бог ты мой, да ДАВНО УЖЕ ВСЁ РЕАЛИЗОВАНО!
Реализованы концепции с автоматической перегрузкой?
EP>>"Вылизывать" производительность можно в компиляторе, а вот когда сам язык приносит производительность в жертву другим фичам, то тут особо ничего не поделаешь M>Да и не надо тут играть похоронный марш!
Я лишь говорю то, что слышал в интервью от одного из создателей языка
M>Вон, ассемблер — не чета всяким Сям — забыли?
Чтобы на ассемблере обогнать результат современных C++ компиляторов, надо очень сильно постараться
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>В следующем году будут концепции — большой шаг вперёд. А что тут может предложить D? duck-typing?
Я не знаю всех подробностей плюсовых концептов, но судя по тому, что Страуструп недавно рассказывал на Going Native, обещая в С++14, это уже очень давно есть в D в намного более удобном и мощном виде. Об этом же говорит Александреску.
Про производительность range'й не очень понял — где именно она хуже? В плюсах принято передавать два итератора, begin и end, в D их объединили в одну структуру, получили range. Смысл тот же, но меньше писанины и меньше ошибок.
Про конкретный пример с фейсбуком, его слова:
"I wrote the core of the C++ implementation. Then many engineers contributed on top of it. The translation to D has been near-verbatim, i.e. as close to the C++ code as possible. Even git detected the new files as modified copies of the existing ones (!).
As I mentioned elsewhere: the D version compiles 5 times faster, runs 1.67 times faster on real workloads, and has 17% less code."
Здравствуйте, ins-omnia, Вы писали:
IO>На Rust'е Мозила свой браузер начала переписывать. С такой рекламой дело пойдет очень быстро. IO>И главное там есть новые полезные идеи. При то, что главная идея Ди — спилить некоторые занозы с C++.
Что за идеи? Встроенные смартпоинтеры или что-то еще?
Здравствуйте, include2h, Вы писали:
IO>>И главное там есть новые полезные идеи. При то, что главная идея Ди — спилить некоторые занозы с C++.
I>Что за идеи? Встроенные смартпоинтеры или что-то еще?
Там вроде нет встроенных смартпоинтеров.
Зато есть вменяемая модель многопоточности. И модель памяти, которая с этой многопоточностью работает.
И всё это безопасно — на уровне "управляемых платформ", но без их оверхеда.
Плюс некоторые функциональные фичи. Это конечно трудно назвать новой идеей, но если
уж мы серьёзно рассматриваем C++ и D...
Откуда же его [независимый суд] взять, если в нем такие же как мы? (c) VladD2
Здравствуйте, D. Mon, Вы писали:
EP>>В следующем году будут концепции — большой шаг вперёд. А что тут может предложить D? duck-typing? DM>Я не знаю всех подробностей плюсовых концептов, но судя по тому, что Страуструп недавно рассказывал на Going Native, обещая в С++14, это уже очень давно есть в D в намного более удобном и мощном виде. Об этом же говорит Александреску.
Александреску скорей всего говорил о static if — что хоть и пересекается в некоторых простых use-case'а с концепциями, но всё таки является более примитивной feature. Пример использования концепций:
Это шаблоны функций, перегрузка между которыми происходит автоматом. Требования каждой концепции разбиваются компилятором на атомы, и производится тест вложенности множеств и т.п.
DM>Про производительность range'й не очень понял — где именно она хуже? В плюсах принято передавать два итератора, begin и end, в D их объединили в одну структуру, получили range. DM>Смысл тот же, но меньше писанины и меньше ошибок.
Нет — range в D это другое — там совсем убрали итераторы, к ним вообще нет доступа.
Объедение итераторов в структуру это больше про Boost.Range — что действительно сокращает "писанину" и позволяет избежать некоторые ошибки, но из таких Range можно получить доступ к итераторам — они их не прячут.
Итераторы C++ обеспечивают эффективную композицию. Если у нас есть 4 итератора, то из них можно получить 6 range бесплатно, без runtime penalty — просто выбери нужную пару итераторов.
Но, чисто range'ы без итераторов, как в D — теряют свойства композиции, код алгоритмов получается менее эффективным, что неприемлемо для C++. Например тот же partition:
autoresult = r;
for (;;)
{
for (;;)
{
if (r.empty) returnresult;
if (!pred(r.front)) break;
r.popFront();
result.popFront();
}
for (;;)
{
if (pred(r.back)) break;
r.popBack();
if (r.empty) returnresult;
}
swap(r.front, r.back);
r.popFront();
result.popFront();
r.popBack();
}
Чтобы вернуть вменяемый результат, параллельно "рабочему" range'у приходится передёргивать дополнительный range result. В то время как в STL, нет этих лишних телодвижений — возвращается итератор, который практически бесплатно определяет два range'а.
Например код из SGI STL:
while (true)
{
while (true)
if (first == last) return first;
else if (pred(*first)) ++first;
else break;
--last;
while (true)
if (first == last) return first;
else if (!pred(*last)) --last;
else break;
iter_swap(first, last);
++first;
}