LINUX.ORG.RU

Андрей Александреску, The Case for D

 , александреску, ,


0

0

Перевод статьи The Case for D, выполненный сообществом сайта http://dprogramming.ru/d/

Мы, программисты, — странный народ. Достатчно взглянуть на то, как мы выбираем любимые языки и придерживаемся этих предпочтений в дальнейшем. Ожидаемая реакция программиста, заметившего на полке книжного магазинаиздание “Язык программирования XYZ” — “Даю себе ровно 30 секунд, чтобы найти в нём что-нибудь, что мне не понравится”. Изучение языка программирования требует времени и усилий, а результаты появляются не сразу. Попытка избежать этого — проявление инстинкта выживания. Ставки высоки, вложения рискованны, так что лучше уметь принимать быстрое решение “против”.

Изучение нового языка программирования может представлять интерес только в том случае, если язык удовлетворяет принципам, которые программист высоко ценит. Любое несовпадение создаёт у программиста впечатление небрежного и небезопасного или же навязчивого и нудного языка. Язык не может одновременно устраивать всех и каждого, он должен аккуратно выбирать основные координаты, позиционируя себя среди языков программирования.

>>> Перевод (pdf)

★★★★★

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

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

> насколько я понял из за гемороев с портабельностью. С прост и портируется легко

Навскидку. Не только. В ряде случаев (и ядро тому пример) нет возможности использовать ряд возможностей С++. Кроме того, ряд средств именно С, например макросы, являются спасением. Например, тот же printk, который заменяет собой printf для случая работы в ядре — макрос.

Отношение к макросам в С++ хорошо известно. Для того, чтобы от них уйти изначально предложены были inline-функции. А это «немного» другое, чем макросы, хотя по своей идее механизмы сходны.

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

Кроме того. Как пример другого подхода — ядро на С++ и что из этого вышло, рекомендую посмотреть на Symbian. Да. Изначально это С++. Но при прикручивании того же Апача http://opensource.nokia.com/projects/mobile-web-server/ , Nokia пришлось реализовывать библиотеки POSIX -> http://www.forum.nokia.com/main/resources/technologies/open_c/

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

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

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

ну с тех пор уже много воды утекло, gcc стал гораздо лучше с тех пор :)

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

>Я хочу сказать, что D - умный язык, слишком умный.

> А C++ - тупой, поэтому хороший. Забыли умную Винду?


Не умничай! (или не юродствуй?) Твой хороший язык, не смотря на то, что позволяет строить "абстрактные абстракции", заставляет всё время помнить о том, что "муку сначала надо просеивать, а стол надо протирать и до и после" и т.п. Это работа "поварёнка" - раз убедившись, что он нормально работает, я не хочу даже вспоминать об этих мелочах. Но ни буст с stl-м, ни (язык не поворачивается их так назвать) сишные макры не дают полной свободы.

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

О, знаток D детектед, это хорошо :) Возник вопрос по существу статьи. Конструкция вида

alias getGadget this;

скорее похожа на операцию приведения типа, причем тут множественное наследование?

А так есть конечно интересные моменты, но отладка вот такого например кода:

foreach ( f ; take(50, recurrence!( «a[n−1] + a[n−2]» ) (0,1)))

представляется нереально геморройной, мне пока не понятно как можно вставить breakpoint внутрь текстовой строки. А если эта текстовая строка еще и отпарсится не совсем так как ожидал автор? В общем могу только пожелать удачи программистам решившим забабахать действительно большой распределенный проект (с кучей кода генерящегося во время исполнения) в деле разбора багрепортов от ошеломленных пользюков.

ПыСы Программист это не тот кто пишет программы а тот кто их отлаживает. (С) Народная мудрость.

A-234 ★★★★★
()
Ответ на: комментарий от ip1981

> На C++ можно забабахать такую комплексную алгебру, какую вы хотите, сохранив совместимость со всем миром

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

hawai
()

Предсказываю over 9000 комментов и первое место в Top 10.

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

>и какой такой свободы Вам не дают STL с Boost-ом ?

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

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

я уж и не буду вспоминать контекстно-зависимый синтаксис

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

>Господи, просто 3.14здецкие идиоты сидели и шлифовали алгоритмы того же ядра Linux

А какие это нахрен алгоритмы? Был уже промышленный Unix, даже исходники были доступны. Осталось только повторить.

И «потоки» как таковые были сразу

Ага, это IBM залила весь код. Иначе не было бы скандала со SCO.

Sun-ch
()

Такое ощущение что авторы D дети, не понимающие сути. Что бы все кинулись переписывать что-то на новом языке, нужна просто гигантская мотивация(и возможности языка стоят абсолютно не на первом месте). И фразы типа - это круто потому что тут есть такой крутой эксепшин по своей сути глупейшие. Как правильно написал кто-то с ЛОРа - я знаю больше языков программирования чем хороших программ.

bigfrogg
()

Вообще я считаю, основываясь на собственном опыте, «путь хакера» в смысле Эрика Раймонда, я бы сейчас сформулировал так.

Java -> Common Lisp -> Haskell.

Изучать все остальное, уже зависит от специализации. Конечно системным прогерам без С и ассемблера не обойтись.

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

>а начём писать - дело десятое. умный пишет на Си(++), т.к. это работает быстро и кросплатформенно.

Глупый заявляет на ЛОРе про то, что «умный пишет на Си(++), т.к. это работает быстро и кросплатформенно».

Ничего не поделаешь: недостаток образования и самообразования ничем не компенсируешь :(

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

>но пока что ничего лучше нету C/C++

«Ну, кому и кобыла - невеста»

Led ★★★☆☆
()

Вспомнил про свободную реализацию Morrowind на D, зашёл на сайт и...

We're switching to C++ It's now official: OpenMW is changing development language from D to C++. The reasons for this are threefold:

* Very few people know D, lots of people know C++

* Nobody has a D compiler, and setting one up is difficult on most platforms except for 32 bit Linux

* Maintaining a mixed D/C++ code base is too much work, mostly because the compiler and tools don't work well together in this scenario (especially on Windows.)

...

16 November 2009

Подробнее http://openmw.sourceforge.net/jaws/

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

> Нафиг это компилируемый питон. Хочу компилируемый Smalltalk!

Вперед же, кто мешает!

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

>похапе детектед.
NO U

>полуркай «индусский код»

Незачем так далеко ходить, ващето. :)

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


Ух ты. Что прямо шлифовали-шлифовали, и вдруг потоки появились как побочный эффект? Потоки - это отдельная идея и ее заимплементили.

>Ндааа... И только прости, Господи, просто 3.14здецкие идиоты сидели и шлифовали алгоритмы того же ядра Linux


Выбрать алгоритм и его заимплементить - это 10 % времени разработки - дай бог. Вот что я хотел сказать. Еще есть разработка архитектуры, проектирование, а потом еще оптимизация и отладка. А потом еще расширение и кастомизация с саппортом бывают. И если ты сделал херовую архитектуру, то мега алгоритм ее не спасет, ты зарастешь костылями и успех пройдет мимо. (не повезло, не фортануло)
А возможность не зарости костылями частично определяется наличием средств абстракции. Короче, идите и пишите АЛГОРИТМЫ! А я пойду свое говно дебажить, пока не уволил :)

п.с. Конечно, алгоритмы очень важны. Но писать что все гавно, главное - алгоритмы - это имхо дилетантство.

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

> Выбрать алгоритм и его заимплементить - это 10 % времени разработки - дай бог. Вот что я хотел сказать. Еще есть разработка архитектуры, проектирование, а потом еще оптимизация и отладка

Да, и хавчик приготовить, выспаться, принять душ, выгулять собаку, ...

Разработка не простое дело.

ip1981 ☆☆
()
Ответ на: комментарий от Sun-ch

> Был уже промышленный Unix, даже исходники были доступны. Осталось только повторить.

Неправда Ваша, боярин... Неистину глаголете... Бога не боитесь! :)))) Тот же стек TCP/IP, который уж кто только не реализовывал... Даже в вянде не почурались «стибрить» изо FreeBSD, а вот подиж ты... В линуксе самописный.

Доказать просто — для вянды и фряхи, в случае написания сниффера, например, потребны либы winpcap или libpcap соответственно. А в линуксе карточка может быть благополучно переведена в promisc. режим куда как проще. Это доказывает то, что сама по себе работа данной части ядра не «заимствована» ни откуда, а была честно написана.

С другой стороны, есть ещё масса вещей, которые создавались «с нуля» и работают весьма и весьма не плохо. Например, те же pthreads. Был более старый вариант «LinuxThreads», сейчас заменён на NPTL. Оба варианта базировались на системном вызове clone(), но NPTL победил. Как-то по-лучше работает. LT ушёл в прошлое. Алгоритм изменили? Или так... «косметически»? Кстати, именно по причине того, что используется вызов clone() и все нити порождаются в одной группе, в Linux используется «странный» TID. Но это уже другое. Не столь суть.

Я НЕ спорю с тем, что писать код «в вакууме», не опираясь на какие-то ранее существующие решения это НЕ правильно. Но и смотреть надо что и как реализуется.

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

A-234

представляется нереально геморройной, мне пока не понятно как можно вставить breakpoint внутрь текстовой строки

Гг, а как отлаживать что-то продвинутое на шаблонах в плюсах? Ну даже ещё не на уровне Boost и даже Loki, но уже и не на уровне пресловутого hello world.

А ещё есть восхитительный препроцессор C/C++, он кааак нагенерирует кода - хоть заотлаживайся.

К слову, Decent умеет compile-time view (http://www.youtube.com/watch?v=oAhrFQVnsrY), ставь брейкпоинты и отлаживайся, сколько душе угодно. А вообще в таких случаях полезно головой думать в процессе написания.

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

> «муку сначала надо просеивать, а стол надо протирать и до и после»

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

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

> А давайте все перейдём на Эсперанто!!!

Ага, это будет круто, только вдумайтесь, где ещё в мире троллят про Линукс (и не только) на эсперанто!

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

> К слову, Decent умеет compile-time view

* Descent, конечно же

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

Только почему-то scope(failure) никак для C++ не сделают, хотя пытались. Да и время компиляции с рекурсивными шаблонами никуда не деть. Никто не спорит, что на C++ можно сделать всё. Всё можно писать и на ассемблере, но нужно ли?

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

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

Это ты сейчас про SQL? Или про Prolog? Нет? Может про Хаскель? Или про любой язык с GC?

Продолжая кривые аналогии: если известно, что я в 16-00 приду что-то месить, и к этому времени мой стол не будет готов - это DoS, хорошо если без "кернелпаника" :) А большее меня и волновать-то не должно - кто, когда и чем помыл стол и помыл ли вообще

yyk ★★★★★
()

void main!!!11

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

>Что бы все кинулись переписывать что-то на новом языке

Никто не будет ничего переписывать. Но будут начинать новые проекты. Вон, питон - говно говном (и с си не совместим, как c++), однако новых проектов на нём (к сожалению) over 9000.

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

> Доказать просто — для вянды и фряхи, в случае написания сниффера, например, потребны либы winpcap или libpcap соответственно. А в линуксе карточка может быть благополучно переведена в promisc. режим куда как проще. Это доказывает то, что сама по себе работа данной части ядра не «заимствована» ни откуда, а была честно написана.

Ув. коллега, вы в корне неправы. А точнее, не знаете ни хрена ни про снифферы, ни тем более про TCP/IP стек в разных ОС.

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

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

Sun-ch
()

Вот так, с помощью нехитрых приспособлений буханку белого (или черного) ХЛЕБА можно превратить в троллейбус... НО ЗАЧЕМ?!

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

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

Автору часто предлагали помощь, но никто не хотел пошевелить пальцем и установить DMD. Автору пришлось ради своего проекта пойти навстречу фанатикам. От них в разработке польза неоценима.

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

> А давайте все перейдём на Эсперанто!!!

Почему бы и нет? Только родной язык (C++) забывать не нужжно. ;)

Но если вдруг все заговорят на простом, логичном и фичастом Эсперанто, всем будет только лучше.

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

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

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

> Ув. коллега, вы в корне неправы.

Ээээ... Кхммм... «Коллега», примеры сами в состоянии найти? С удовольствием посмотрю на Ваш сниффер без того же bpf... И сравните его использование в исходном коде для FreeBSD с, например, таким вариантом для Linux:

ifr.ifr_flags |= IFF_PROMISC; s=ioctl(fd, SIOCSIFFLAGS, &ifr); if(s < 0) { perror(«promisc. mode failed»); } return fd;

Думаю, что Вы мне явно не коллега... :)))

Если Вы подумали что я зачем-то пишу про сниффер протокола, то я Вас уверяю — здесь не про это.

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

Присоединяюсь! Только переходить лучше не на Эсперанто (новодел, как-никак). Лучше переходить на санскрит. То же логически созданный язык, насколько я слышал...

Потроллить на санскрите о Linux... Это просто праздник какой-то... :)))

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

функциональщики и до них доберутся. как сказал мне один товарищ "уравнения не падают"

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

Батенька, вы видимо ничего сложнее небольшой утилитки не писали. Потому-что метод «быстро и кросплатформенно» (а на самом деле быстро и грязно) для больших энтерпрайз проектах не работает.

anonymous
()

Алсо предвижу что в будущем D имеет все шансы занять место Жабы и Cи-решетка

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

> Батенька, вы видимо ничего сложнее небольшой утилитки не писали. Потому-что метод «быстро и кросплатформенно» (а на самом деле быстро и грязно) для больших энтерпрайз проектах не работает.

Батенька, право, не стоит говорить за всех. Это, как минимум, неуместно. Особенно, не видя кода человека. В конце-концов кто-то же портировал тот же GIMP под Windows. И оно, как ни странно, работает именно так, как и описано. Быстро и кроссплатформенно. И Апач с тем же постгресом. То же портированы. Претензии к скорости или кроссплатформенности есть?

Если Ваш проект куда как больше и энтерпрайзовее, то я просто снимаю шапку...

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

Увы (или не увы?) не имеет. Совершенно разные философии за языками стоят.

Nekuromento
()

>“Даю себе ровно 30 секунд, чтобы найти в нём что-нибудь, что мне не понравится”

char*, <>.

Deleted
()

Так и не понял, чего нового в мир принесли изобретатели языка D?

Сборку кучи?
Конструкторы/деструкторы?
Многопоточность?
Ексепшены ввода/вывода?
Классы?

Что нового? Чем D круче, хотя бы Оберона, которому сто лет в обед?

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

>Потому-что метод «быстро и кросплатформенно» (а на самом деле быстро и грязно) для больших энтерпрайз проектах не работает.

А как же Oracle? Или SAP? Просто изначально надо закладываться под другие платформы и технологии. Показательный пример - 1С как было изначально в клиенте все заточено под венду, так все и осталось. И про линакс с ней можно забыть.

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

Алсо предвижу что в будущем D имеет все шансы занять место Жабы и Cи-решетка


Бугага
Шутку понял. Смешно :)

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