[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