[devel] D -- нафиг
Mikhail Yakshin
=?iso-8859-1?q?greycat_=CE=C1_altlinux=2Eorg?=
Сб Май 7 13:59:29 MSD 2005
Michael Shigorin пишет:
> On Fri, May 06, 2005 at 10:42:07PM +0400, Mikhail Yakshin wrote:
>
>>Если посмотреть, например, сюда:
>>http://www.digitalmars.com/d/comparison.html
>>и немножко поразмыслить, то оказывается, что в этой самой
>>таблички совершенно наглым способом много где врут.
>
>
> Значит, в /dev/arse их. Если в малом врут -- и в большом подведут.
Ну, например:
Lightweight arrays Yes Yes Yes No No
Не знаю, что они там подразумевали под этим сакральным утверждением, но
обычное объявление массивов без каких-нибудь new Vector() или new
Array() - в Java и C# вообще-то есть. То, что они в результате
получаются не какими-то отдельными специфическими сущностями -
массивами, а полноценными объектами - это скорее плюс языка, его куда
более продуманная объектная парадигма, а не минус.
Resizeable arrays Yes No No No No
Глупость какая-то. В C - есть realloc. В C++ - есть std::vector. В Java
- java.util.Vector.setSize. В C# - в первом есть property
System.Collections.ArrayList.Capacity, в C# 2.0 - есть Array.Resize.
Built-in strings Yes No No Yes Yes
Опять некорректно сравнивают. В C есть char[], который есть местный
string и никакого другого там в принципе-то особенно придумать нельзя. В
C++, как они справедливо замечают в сноске - std::string есть, но
почему-то они хотят закрыть на это глаза.
Associative arrays Yes No No No No
Нагло врут. В C++ есть std::map. В Java - например, java.util.HashMap. В
C# - есть System.Collections.Hashtable и даже более "продвинутый
вариант" - System.Collections.SortedList.
Multiple Inheritance No No Yes No No
Вообще-то mixin, который достаточно активно эксплуатируется в D, по
жизни был способом множественного наследования.
Direct access to hardware Yes Yes Yes No No
Очень пафосная формулировка, но ничего не отражающая толком. На том же
C# есть возможность писать как unmanaged code, так и в принципе вещи,
очень близко работающие с underlying OS. При небольшом желании - даже
драйверы в оффтопике можно на нем писать...
Lightweight objects Yes Yes Yes Yes No
Тут они "правы", но смешна сама формулировка - если почитать, что они
имеют в виду под этим. Lightweight object'ами они называют как ни
странно struct, как известно, отличающийся исключительно заданной
негласно по умолчанию областью видимости public. Есть немало ругани на
тему того, зачем эту глупость включили в C#, так они мало того, что этот
сомнительный feature включили в D - этим еще и гордятся...
Independent of VM Yes Yes Yes No No
Direct native code gen Yes Yes Yes No No
Формально они правы - реально - если подумать - то как только в языке
появляется GC, сложные типы данных, многочисленные проверки и
перестраховки, возможность не сегфолтиться аппартно, а всегда нести в
себе некие контрольные механизмы, которые в случае ошибки выкинут
хороший exception с отладочной информацией - во всех этих случаях
фактически элементы того, что делает эта самая VM просто вкомплируются
внутрь бинарника программы - и все...
Unit testing Yes No No No No
Крайне советую почитать, что они имеют в виду под этими словами. Если
принять их терминологию - все так, конечно %)
Direct access to C Yes Yes Yes No No
Сильно спорно в контексте C# и возможности легко использовать код на
unmanaged C в нем.
Generates standard object files Yes Yes Yes No No
Скорее смешно, чем грустно. Правильное название этого пункта - скорее
"Generates C-compatible object files"... А то вообще-то C# DLLs и Java
classes - тоже вполне себе "стандартные файлы"...
В общем, скорее, хочу извиниться за этот пост, он скорее всего уже
здорово пахнет оффтопиком в этом списке, а еще может быть весьма
flamebait-о-образным... Посему - не думаю, что эту тему стоит развивать
по крайней мере здесь...
--
WBR, Mikhail Yakshin AKA GreyCat
ALT Linux [http://www.altlinux.ru] [xmpp:greycat на altlinux.org]
Подробная информация о списке рассылки Devel