1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Введение в d

Тема в разделе 'D', создана пользователем pdev, 4 фев 2014.

Статус темы:
Закрыта.
  1. TopicStarter Overlay

    pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.409
    Лайки:
    1.406
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    Довольно часто в чате проскакивают вопросы:
    - Я хочу выучить язык программирования, подскажите, с какого начинать...

    На этот вопрос всегда отвечал:
    - Обязательным для изучения в первую очередь, является Си (С). Да, тот самый Си без плюсов, поскольку на нем можно писать самые быстрые программы, также, как и на assembler. По-сути Си я рассматриваю, как надстройку над асмом, позволяющую просто вызывать подпрограммы, реализованные на том же асме. Код Си компилируется напрямую в машинный код и не использует для исполнения виртуальные машины, как Java или C#.

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

    Кому подойдет?
    Системным программистам, администраторам.
    Очень хорошо подходит для решения задач, не требующих современных средств построения GUI, будь то WPF или Qt. Хотя, интеграция с Qt довольно таки проста:
    Также, в настоящее время разрабатывается нативный графический тулкит для D DQuick.

    Андрей Александреску:

    D заинтересует вас, если для вас важны следующие аспекты:
    • Производительность. D - это язык для системного программирования. Его модель памяти, несмотря на сильную типизацию, совместима с моделью памяти С. Функции на D могут вызывать функции на С, а функции на С могут использовать функции D без каких-либо промежуточных преобразований.
    • Выразительность. D нельзя назвать небольшим, минималистичным языком, но его удельная мощность достаточно велика. Он позволяет определять наглядные, не требующие объяснений инструкции, точно моделирующие сложные реалии.
    • «Крутящий момент». Любой лихач-«самоделкин» скаж ет вам, что мощность еще не все - было бы где ее применить. На одних языках лучше всего пишутся маленькие программы. Синтаксические излишества других оправдываются только начиная с определенного объема программ. D одинаково эффективно помогает справляться и с короткими сценариями, и с большими программами, и для него отнюдь не редкость целый проект, органично вырастающий из простенького скрипта в единственном файле.
    • Параллельные вычисления. Подход к параллельным вычислениям - несомненное отличие D от похожих языков, отражающее разрыв меж ду современными аппаратными решениями и архитектурой компьютеров прошлого. D покончил с проклятьем неявного разделения
    памяти (хотя и допускает статически проверенное, явно заданное разделение) и поощряет независимые потоки, которые «общаются» друг с другом посредством сообщений.
    • Обобщенное программирование. Идея обобщенного кода, манипулирующего другим кодом, была впервые реализована в мощных макросах Лиспа, затем в шаблонах С++, обобщенных классах Java и схожих конструкциях других языков. D также предлагает невероятно мощные механизмы обобщенного и порождающего программирования.
    • Эклектизм. D подразумевает, что каждая парадигма программирования ориентирована на свою задачу разработки. Поэтому он предполагает высокоинтегрированный объединенный стиль программирования, а не Единственно Верный Подход.
    "Это мои принципы". А если они вам не нравятся, то у меня есть и другие. D старается всегда следовать своим принципам устройства языка. Иногда они идут вразрез с соображениями cложности реализации и трудностей использования и, главное, с человеческой природой, которая не всегда находит скрытую логику здравой и интуитивно понятной. В таких случаях все языки полагаются на собственное бесконечно субъективное понимание баланса, гибкости и - особенно - хорошего вкуса. На мой взгляд, D как минимум неплохо смотрится на фоне других языков, разработчикам которых приходилось принимать решения того жe плана.

    Скотт Мейерс:

    Цель D - стать наследником С++ в области системного программирования. Как и Java с C#, D стремится избежать сложности С++, поэтому он отчасти задействует те ж е техники. Сборке мусора - «добро пожаловать», ручному управлению памятью - «до свиданья»1. Простому наследованию и интерфейсам - да, множественному наследованию - нет. Вот и все сходство, дальше D идет уж е собственной дорогой.
    D поддерживает Юникод с момента своего появления. Как современный С++, так и C++Ox не предоставляют ни средства для работы с модулями (в том числе для их тестирования), ни инструментарий для реализации парадигмы контрактного программирования, ни «безопасные» подмножества (где невозможны ошибки при работе с памятью). D предлагает все вышеперечисленное, не жертвуя при этом способностью генерировать высококачественный машинный код.
    Там, где С++ одновременно и мощный, и сложный, D пытается быть не менее мощным, но более простым. Любители шаблонного метапрограммирования на С++ продемонстрировали, насколько важна технология вычислений на этапе компиляции, но, для того чтобы использовать их, им пришлось прыгать через горящие обручи синтаксиса. D предлагает те же возможности, избавляя от лингвистических мучений. В С++ вы знаете, как написать функцию, но при этом не имеете ни малейшего понятия о том, как написать соответствующую функцию, вычисляемую на этапе компиляции. А в языке D, зная, как написать функцию, вы уж е точно знаете, как написать ее вариант времени компиляции, поскольку код тот ж е самый.
    Один из самых интересных моментов, где D расходится со своими coбратьями-наследниками С++, - подход к параллельным вычислениям при многопоточном программировании. Ввиду того что неверно синхронизированный доступ к разделяемым данным («гонки за данными») - это западня, угодить в которую легко, а выбраться сложно, D переворачивает традиционные представления с ног на голову: по умолчанию данные не разделяются меж ду потоками. По мнению разработчиков D, благодаря глубоким иерархиям кэшей в современном аппаратном обеспечении память все равно зачастую реально не разделяется между ядрами и процессорами, так зачем по умолчанию предлагать разработчикам абстракцию, которая не просто фиктивна, но еще и чревата ошибками, с трудом поддающимися отладке?

    Ссылки:
    http://dlang.org/
    http://dlang.ru/
    Книга на русском
    Последнее редактирование: 6 фев 2014
    Denis-root, DIABLO, FrozenThrone и 4 другим нравится это.
Черновик сохранён Черновик удалён
Статус темы:
Закрыта.

Поделиться этой страницей