Обсуждение:D (язык программирования)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Чтобы прочесть статью, пришлось лезть в "Историю". Спасибо вам, доблестные паладины правил. В русской Вики кто-нибудь занимается делом или все только срутся?!

Нейтральность[править код]

Текст рекламного характера, возможно, перевод рекламной статьи от Digital Mars, на что указывают некоторые термины ("портирование" вместо "перенос"). Содержит по большей части критику C++ (основательную и безосновательную) без противопоставления языку D. Недостатки языка представлены как его преимущества. Содержит множество ляпов, например принадлежность грамматики языка к классу контекстно-свободных грамматик не относится к плюсам языка, это необходимое свойство для быстрого разбора исходного кода в синтаксические деревья, оно характерно почти для всех используемых языков. Выношу правку к обсуждению. 93.157.165.93 14:18, 1 сентября 2009 (UTC)Phil[ответить]

92.46.195.33 15:19, 4 апреля 2010 (UTC) 92.46.195.33 15:19, 4 апреля 2010 (UTC)== Препроцессор ==[ответить]

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

Вместо:

#define MAX_INT 32767  // Объявление константы

#define true TRUE      // Создание псевдонимов

#if defined(LINUX)
// Код для Linux
#endif

в Си можно сделать так:

const uint MAX_INT=32767;  // Объявление константы

typedef true TRUE ;     // Создание псевдонимов

const int LINUX=0;  // Управляющая константа

if (LINUX)
// Код для Linux
else
// Иначе

Написаное выше для С языка с использованием препроцессора указывает препроцессору что взять, а что выкинуть, второй же пример по сути компилируется и оба куска будут в коде. Если это будет разделение кода виндоус и линукс то по сути она даже не скомпилируется... 92.46.195.33 15:19, 4 апреля 2010 (UTC) Nicodrive[ответить]

также,
 #define MAX_INT 32767
и
const uint MAX_INT=32767
- это не одно и тоже. В первом случае - это manifest constant, т.е. в скомпилированной программе не будет символа с именем MAX_INT --Александр Малахов 09:51, 9 ноября 2011 (UTC)[ответить]


А вот как дела обстоят с модульностью? Ведь С/С++ не модульные языки. В них используется препроцессор для сборки из нескольких файлов одной общей портянки :

#include "some_file.h"

Что-то изменилось в этом отношении в D?
--90.189.173.121 15:28, 27 октября 2008 (UTC)[ответить]

В английской и русских статьях совсем нет критики языка. Но так ведь не бывает, недостатки всё равно есть :) Хорошо бы написать про них 92.124.122.138 10:31, 22 января 2009 (UTC)Den[ответить]

И как ты скомпилируешь код под линукс, с, например, винапишными вызовами? В C только дефайны решают эту проблему. 94.179.229.119 19:42, 3 декабря 2009 (UTC)[ответить]

А какая разница, на каком языке писать код с винапишными вызовами? или в D придумали один общий интерфейс для любой операционной системы? 109.75.192.71 16:28, 17 февраля 2010 (UTC)[ответить]
Имеется ввиду, когда в одном проекте код и для Linux, и для Windows, разделённый #IFDEF'ами (например, работа с файловой системой). --Александр Малахов 09:51, 9 ноября 2011 (UTC)[ответить]

Язык сверхвысокого уровня?[править код]

Что-то мне не понятно: давно ли D является языком сверхвысокого уровня? Это обычный язык высокого уровня. 89.179.64.51 09:18, 8 июня 2009 (UTC) Andrey[ответить]

Сомнительная нейтральность[править код]

Статья предвзято подходит к описанию языка. Нет сравнений с другими языками по практике применения, а не просто по внешнему виду кода, отсутсвие многих вещей подается как преимущества (раздел "Чего нет в языке D"). Не указывается малый объем родных системных библиотек. Необходимо переписать с более взвешенным подходом. Иначе получается что язык D - решение всех-всех проблем программирования. 93.81.70.76 21:01, 25 августа 2009 (UTC)Александр[ответить]

Требуется раздел "Критицизм" Сам пользовался языком. Мои минусы:

  • практически невозможно оторвать управление сборкой мусора
  • классы которые всегда "по ссылке" теряют в скорости работы с ними (по сравнению с классами по значению, возможными в C++)

95.188.113.24 21:29, 24 октября 2009 (UTC)Денис[ответить]

По поводу классов по значению. В Ди есть "struct" - тот же класс, но en:value type и без наследования. Если нужно наследование (т.е. полиморфизм), то в С++ вы всё равно будете создавать класс через new.
К тому же, это автоматически решает проблему en:Object slicing --Александр Малахов 08:10, 11 ноября 2011 (UTC)[ответить]
По поводу сборщика мусора. Есть ручное управление памятью (*alloc / free) и возможность отключить сборщик. Конечно, при отключенном GC многие вещи из языка и библиотеки использовать нельзя (например, конкатинация, slicing встроенных массивов), но эти вещи в принципе не возможны без GC с таким сжатым синтаксисом - сравните с С++. Если не ошибаюсь, есть флаг компилятора, с которым будут ошибки при использовании чего угодно, связанного с GC. Т.е. отдельные модули можно скопилировать с этим флагом, а потом использовать в проекте. Не спорю, это не предел мечтаний, но согласитесь, далеко не "практически невозможно" --Александр Малахов 08:10, 11 ноября 2011 (UTC)[ответить]

О нейтральности[править код]

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

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

PoemWriter 17:17, 14 сентября 2009 (UTC)[ответить]

В Ди есть
  • указатели
  • адресная арифметика
  • cast'ы
  • стандартная библиотека Ди содержит стд. библ. Си (модули std.c.*)
  • в силу предыдущего, доступны *alloc / free, т.е. ручное управление памятью
Таким образом, в этом плане статья верна - у Ди нет недостатков по сравнению Си (кроме размера языка :) ).
Также, ваше утверждение по поводу утечек памяти как миниму спорно. По крайней мере, все признаные эксперты С++, кого читал по этому поводу, сходятся на том, что в большой системе (скажем, больше 100К строк) практически невозможно уследить за памятью. И что вручную управлять нужно только в критических участках кода (Stroustrup, Herb Sutter, Alexandrescu, Bruce Eckel. Такое же мнение читал в статье программистов Unreal Engine. А также, очевидно, создатели Java, Delphi, C#)
--Александр Малахов 02:41, 11 ноября 2011 (UTC)[ответить]

Особенности[править код]

К уже отмеченному: статья не создаёт законченное представление о языке: не понятно как реализована модульность, в чём отличие от C#. Создаётся впечатление, что это не-MS-C# с небольшими изменениями...

Какие могут быть АИ на то что "Сбор мусора избавляет от утомительного написания кода", "Методика сбора мусора делает жизнь проще"? Это известно любому программисту, а если вы не программист - нечего и делать в этой статье.

Кстати это что такое "Сбор мусора"? Кому-то не терпится показать свою грамотность?

Авторское право[править код]

Статья является переводом обзора с офф. сайта (подробно не проверял, есть ли различия). Сейчас здесь, изначально было здесь. --Александр Малахов 02:52, 10 ноября 2011 (UTC)[ответить]

Перевод практически полностью повторяет оригинал? Он подпадает под нарушение авторских прав?--extern 03:22, 10 ноября 2011 (UTC)[ответить]
Насколько я смотрел - слово в слово. В авторском праве я не разбираюсь вообще. Но если нужно разрешение автора (скорее всего, это Walter Bright или Andrei Alexandrescu), то я могу попробовать с ними связаться. Почему-то мне кажется, что создатели языка не станут препятствовать его продвижению :). --Александр Малахов 02:50, 11 ноября 2011 (UTC)[ответить]
Нужно пройти процедуру ВП:ДОБРО - выяснить авторов текста, связаться с ними, получить запрос по почте. Проще переписать.--extern 08:00, 11 ноября 2011 (UTC)[ответить]
Уверен на 100%, что разрешение от авторов не проблемма и это выполнимо максимум за неделю-две. Меня больше волнует ситуация с переводом - нужно ли разрешение от переводчика (вероятно, было взято с внешнего сайта, но это не точно) ? --Александр Малахов 16:57, 11 ноября 2011 (UTC)[ответить]
Т.к. на Википедию захожу с логином редко и не знаю как настроить авто-оповещение -- если нужно будет получить разрешение от авторов, то я могу помочь. Мой контактный адрес a.malahov at mail точка com --Александр Малахов 03:56, 16 ноября 2011 (UTC)[ответить]

Объявление против описания[править код]

Возможность инициализации внутри класса добавлена в C++11 leha-bot 12:16, 29 августа 2012 (UTC)[ответить]

Официальный компилятор языка D переведён в разряд свободного ПО[править код]

Источники: новость на OpenNET, обсуждение на dlang.org, обсуждение на reddit.com, pull request github.com--Amalofeev (обс.) 22:34, 10 апреля 2017 (UTC)[ответить]