LINUX.ORG.RU

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

 , ,


0

0

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

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

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

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



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

>Языки с gc вместо своевременной чистки моего стола просто предлагают мне в любой момент другой такой-же стол.

А есть разница? Только не надо натягивать ган^W^W выдавать случай с одним только столом за все возможные варианты или даже за их половину.

И потом, даже для таких крайних случаев есть врианты (кои в С++ нет)

>А в иначе gc поварёнок тратит вычислительный ресурс на то чтобы сообразить закончил ли я свою работу, нужны ли мне те остатки на столе


ну чтобы он не простаивал когда ты таки занят основным делом ;)

>при этом язык оптимизируется таким образом, чтобы не мне было удобно сконцентрироваться на оформлении пирожного а поварёнку было удобно убирать со стола ;)


На всех не угодишь, а "изменяемых" языков - раз, два и обчёлся, да и далеко не все их любят ;)

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

> D можно закапывать... Щяс Александреску туда говна наложит мощно как в C++...

Петросян, перелогиньтесь! А вообще, ждем перла о том, чего же именно в язык C++ мощно наложил Степанов.

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

>http://shootout.alioth.debian.org/gp4/d.php

>на 2 теста больше =)


dmd сливает остальным компиляторам D почти на всех тестах. А gdc на генте они не осилили.

http://dbench.octarineparrot.com/ как бы говорит нам, что dmd быстро генерит медленный код, ldc и gdc - напротив, медленно генерят быстрый код.

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

>А C++ - тупой, поэтому хороший

хм. обкурившись книжками «Современное проектирование на C++» вышеупомянутого автора и «50 сложных задач на C++» Саттера, я понял, что C++ ни**я не тупой язык. Я не могу язык с таким количеством граблей и подводных булыжников назвать ни тупым, ни простым.

Примерно после этих книжек я начал смотреть в сторону чего-то более простого( C#, python, D ).

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

>Языки с gc вместо своевременной чистки моего стола просто предлагают мне в любой момент другой такой-же стол.

Все с точностью до наоборот - языки без gc предлагают тебе постоянно делать новые столы и уничтожать их после первого принятия пищи. И давать другим только под честное слово что они их уничтожат прежде чем придут за новыми.

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

Уйди, C++ fan, пожалуйста. Уж лучше на бейсике писать чем на этой broken by design каше из парадигм с хромым синтаксисом. Писать на нем не только не «нужно», но и просто нельзя в большинстве случаев. D тоже тот еще велосипед, но это хоть какая-то попытка сделать мир лучше. А в том мире (который лучше) си++ программистам не место.

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

а кто на нём пишет?

У нас часть п/о для кассового аппарата написана на D, например :)

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

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

жжошь!

С99 - комплексной математики быстрее не бывает.

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

Дорогой Absurd, производство столов не входит в нашу абстрактную технологическую цепочку из поварёнка и мастера-повара.

gena2x
()

Что меня удивляет... Я встретил дофига тем о том ЧТО такое D, но не хорошо написанных ответов ДЛЯ ЧЕГО/КОГО. Блин, почему Александреску именно эту тему не раскрывает? Продукт нельзя создавать не учитывая его пользователей. Я, честно говоря, практически не вижу областей применения для D. Может обсудим это?

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

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

сам дурак.

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

> ждем перла о том, чего же именно в язык C++ мощно наложил Степанов.

STL. Искренне надеюсь, что за это Степанов оправится в адЪ.

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

>Дорогой Absurd, производство столов не входит в нашу абстрактную технологическую цепочку из поварёнка и мастера-повара.

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

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

>> ждем перла о том, чего же именно в язык C++ мощно наложил Степанов.

STL. Искренне надеюсь, что за это Степанов оправится в адЪ.

Я так и не дождался вменяемого ответа в чем же такая фатальная роль STL.

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

> Я так и не дождался вменяемого ответа в чем же такая фатальная роль STL.

Насчет «фатальной» я ничего не говорил. А плоха STL тем, что привела к сильному усложнению и без того сложного языка.

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

Просто и удобно говоришь? Приведи пожалуйста простой пример, как сделать свой istream который бы читал свои данные не из файла-строчки, а используя заданную тебе функцию my_mega_read_function (выглядит как fread).

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

* HashMap<String, String> - это джавовская стандарнтная хэштаблица.

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

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

Задача получения и освобождения ресурса релевантна проблеме его использования.

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

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

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

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

> В явке это достигается за счет большого числа библиотек. И хороших библиотек, которые охватывают практически весь спектр прикладных задач.

Большого количества - да. Хороших библиотек - как повезёт. Саныч, хочешь поговорить про программирование на Java? Слова типа Swing, JMF, JAIN-SIP тебе знакомы не по наслышке, или просто читал что такое есть? Брр, не напоминайте мне...

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

>Задача получения и освобождения ресурса релевантна проблеме его использования.

Да нифига - получить что-то и пользоваться этим это разные проблемы. Отсюда растут уши семейства порождающих паттернов типа AbstractFactory или Builder.

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

> STL это мощь. просто и удобно.

Не пробовал в gdb поотлаживать конструкции из STL? Да хоть тот же vector, уж куда проще объект. Например, по корке понять, что же лежало в a[i]?

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

>> STL. Искренне надеюсь, что за это Степанов оправится в адЪ.

Я так и не дождался вменяемого ответа в чем же такая фатальная роль STL.

И не дождешься ))) Ибо большинство оппонентов это кто не осилил stl, у кого «он непредсказуемо течёт», «тяжёл в отладке» и т.д. Хорошо еще если они тихо сами с собой начинают писать свои стринги, мапы и вектора. Хуже если они становятся начальниками и начинают напрягать на эту тему тех у кого stl лёгок в отладке и не течёт )))

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

>И не дождешься ))) Ибо большинство оппонентов это кто не осилил stl, у кого «он непредсказуемо течёт», «тяжёл в отладке» и т.д.

Слушайся старших и годик не пиши ничего на С++ - попросись на багфиксинг.

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

> STL. Искренне надеюсь, что за это Степанов оправится в адЪ.

меня всегда удивляло это твое отношение к степанову и STL

www_linux_org_ru
()

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

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

на счет приемственности (legacy). пока в C++/Java будет популярно использование каких-то специфичных библиотек, которые обходят проблемы самого языка, вроде ACE, boost, apache-..., для такого кода D вряд ли хорошо, только если больше делать нечего :) для нового кода, почему бы и не попробовать…

p.s. «The Case for D» лучше переводить как «Аргументы в пользу D», а «дварф» — это просто «карлик» :)

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

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

Язык общего назначения был и будет сложным.

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

Ну и писать свои малоабстрактные (прикладные) библиотечки, юзая 15% языка.

______________________

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

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

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

Язык общего назначения был и будет сложным.

Особенно если он включает в себя второй язык общего назначения как подмножество.

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

> Особенно если он включает в себя второй язык общего назначения как подмножество.

что фактически доказывает неортогональность его концепций, см. выше

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

> Я так и не дождался вменяемого ответа в чем же такая фатальная роль STL.

Почитай перевод.

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

>> STL это мощь. просто и удобно.

Не пробовал в gdb поотлаживать конструкции из STL? Да хоть тот же vector, уж куда проще объект. Например, по корке понять, что же лежало в a[i]?

Дай угадаю! Ты намутил трехэтажную конструкцию серьезно «разруливающую туда-сюда» память и т.п. Но надо было их еще и в массив ... И тут ты вспомнил про Степанова ))) В этом случае действительно лучше намутить свой вектор. )))

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

Приведи пожалуйста простой пример, как сделать свой istream который бы читал свои данные не из файла-строчки, а используя заданную тебе функцию my_mega_read_function

Вот пример для дескриптора, можно вместо read (fd, ) поставить my_mega_read_function

http://www.josuttis.com/cppcode/fdstream.html

class fdinbuf : public std::streambuf {
  protected:
    int fd;    // file descriptor
  protected:
    static const int pbSize = 4;        // size of putback area
    static const int bufSize = 1024;    // size of the data buffer
    char buffer[bufSize+pbSize];        // data buffer

  public:
    fdinbuf (int _fd) : fd(_fd) {
        setg (buffer+pbSize,     // beginning of putback area
              buffer+pbSize,     // read position
              buffer+pbSize);    // end position
    }

  protected:
    virtual int_type underflow () {
        if (gptr() < egptr()) {
            return traits_type::to_int_type(*gptr());
        }

        int numPutback;
        numPutback = gptr() - eback();
        if (numPutback > pbSize) {
            numPutback = pbSize;
        }

        memmove (buffer+(pbSize-numPutback), gptr()-numPutback,
                numPutback);

        int num;
        num = read (fd, buffer+pbSize, bufSize); //Изменить эту строку
        if (num <= 0) {
            return EOF;
        }

        setg (buffer+(pbSize-numPutback),
              buffer+pbSize,
              buffer+pbSize+num);

        return traits_type::to_int_type(*gptr());
    }
};

class fdistream : public std::istream {
  protected:
    fdinbuf buf;
  public:
    fdistream (int fd) : std::istream(0), buf(fd) {
        rdbuf(&buf);
    }
};
HexGhost
()
Ответ на: комментарий от Absurd

>> И не дождешься ))) Ибо большинство оппонентов это кто не осилил stl, у кого «он непредсказуемо течёт», «тяжёл в отладке» и т.д.

Слушайся старших и годик не пиши ничего на С++ - попросись на багфиксинг.

Неврубился в ход твоих мыслей ))) Ну багфикс кроме как за собой - врядли, мне стока денег никто не сможет заплатить )))

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

По-твоему как только придумали C++ на нем сразу появилась куча годных программ? Был ли он калом до того как на нем было написано первое коммерческое приложение? Что изменилось после этой переломной точки в самом языке?

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

> По моему только Александреску в конце концов приблизился к тому чтобы соорудить из изначально бесполезных шаблонов что-то стоящее наподобие языка спецификации проектирования

Александреску - акробат, который должен отправиться в адЪ вслед за Степановым. То, что этот акробат приложил руку и к D - серьезный минус в моих глазах.

Так что тут неверна изначальная задумка.

Какая задумка - параметризованные типы?

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

> А можно перевести конструкцию static const на русский? Для новичка.

Это единственное, что смущает уважаемого анонимуса )))

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

А можно перевести конструкцию static const на русский? Для новичка.


static - переменная располагаеться в дата сегменте
const - любые обращения к переменной не смогут ее изменить

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

> А можно перевести конструкцию static const на русский?

const - константа, после инициализации изменить нельзя (если хаком, то иногда можно).

static - поле/метод класса, а не объекта. Т.е. оно одно на все объекты данного класса, а не в каждом классе своё.

Т.е. static const - это константа класса. А вообще, Страуструп вам в помощь.

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

Ужос. Спасибо за разъяснения всем :)

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

> Потому что можно в разных объектах одного класса инициализировать константу разными значениями (в конструкторе).

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

> Ну как бы да :) Зачем static для объекта с модификатором const?

Понятен твой сарказм ))) Это из раздела мифологии языка, как про Геракла, Зевса )))

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

Ну как бы да :) Зачем static для объекта с модификатором const?


ты еще спроси в чем разница между static const и const static :)))

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