Re[2]: Таблица сранения языкво от создателей D поправленная
От: Cyberax Марс  
Дата: 19.05.06 07:09
Оценка:
Андрей Хропов wrote:
> VD>- — возможность поддерживается слабо.
> Я бы "-" убрал. В D полноценный GC.
> Можно и вручную управлять памятью, но это в специальных случаях.
Минус стоит правильно — в D сейчас возможно использовать только
консервативный GC, сама семантика языка (юнионы, например) не позволяет
использовать точный GC.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[8]: Таблица сранения языкво от создателей D поправленная
От: Дарней Россия  
Дата: 19.05.06 07:12
Оценка: +1
Здравствуйте, alex_ez, Вы писали:

_>Ну сбоку то дырок меньше...

_>И скорость на порядок вышее...

И навигации по коду нет. и рефакторинга нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[3]: Таблица сранения языкво от создателей D поправленная
От: FR  
Дата: 19.05.06 07:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>lambda support в D есть, не хуже чем в C#2


FR>>
FR>>auto tst = function int(int x) {return x + 3;};
FR>>


VD>ОК, добавил.


VD>Замыкания в них, кстати, поддерживаются?


Да, только вместо function надо использовать delegate, function связывает статически.
Re[3]: Таблица сранения языкво от создателей D поправленная
От: FR  
Дата: 19.05.06 07:23
Оценка:
Здравствуйте, VladD2, Вы писали:



VD>Это не зависит от реализации. Незнаю как в Ди, но в С++ вообще нет средств выдачи сообщений из меташаблонов. Они вообще являются недоразумением. Это как раз к вопросу о том, что является полноценным. Как в случае Лиспа в Немерел метакод — это полноценный код на Немерле. В нем можно проверить условие и вызвамть метод сообщеющий об ошибке.


В D сейчас шаблоный код стал гораздо чище и лучше чем в C++, например:

template factorial(int n)
{
  static if (n == 1)
    const factorial = 1;
  else
    const factorial = n * factorial!(n-1);
}


По моему вполне себе код на языке, да и сообщения об ошибке вывести используя static if не сложно.
Re[2]: Таблица сранения языкво от создателей D поправленная
От: FR  
Дата: 19.05.06 07:23
Оценка:
Здравствуйте, ArhAngelVezel, Вы писали:


AAV>1. А что такое unit тесты ?? Если то как это описывают специалисты XP, то класс Debug в C# вполне можно рассматривать как инструмент для создания unit-тестов. По крайней мере Debug.Assert(), Debug.Fail(), Debug.Write() и Debug.WriteIf() есть, а создать консольный проект ...


В D unit тесты просто встроены в язык.


AAV>2. Частично макротекст препроцессор в C# есть. see C# Preprocessor Directives (#if, #else, #elif, #endif, #define, #undef) конечно до Nemerle....


да можно bad поставить
Re[3]: Таблица сранения языкво от создателей D поправленная
От: FR  
Дата: 19.05.06 07:52
Оценка: +1
Здравствуйте, VladD2, Вы писали:


VD>То с чем согласен, поправлю завтра. Но желательно видеть примеры. (это я о Ди).


У тебя строка Type safe variant data type два раза повторяется.
И опечаток очень много.

Насчет тюринг полного языка, все таки шаблоны и в D и в C++ тюринг полные. Другое дело что они не могут полноценно использовать все возможности языка и платформы, в общем надо бы разделить эту строку на две 1) тюринг полность и 2) и использование всех возможностей языка и библиотек. (хотя второе у тебя уже есть)

Report clear and intelligible error and diagnostic message
Это тоже не понятно почему в D NO стоит? сообщения об ошибках в шаблонах у него гораздо более внятные чем у C++.
Re[6]: Таблица сранения языкво от создателей D поправленная
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.05.06 08:22
Оценка: :)
Здравствуйте, alex_ez, Вы писали:

_>VI|VIM + "ANSI C++" + Boots + TLS + ...


А что такое TLS?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Таблица сранения языкво от создателей D поправленная мно
От: Vermicious Knid  
Дата: 19.05.06 10:24
Оценка:
Здравствуйте, VladD2, Вы писали:

Implicit Function Template Instantiation No No Yes No No No
Вообще-то в D уже появилось, но пока в довольно ограниченном виде. И раз уж дженерики посчитали за шаблоны, то ifti в C#2 и Nemerle тоже есть. Но конечно ifti в C++ это беспрецедентная по своей мощности вещь, особенно если вспомнить о шаблонных конструкторах и операторах. Так что для D, C# и Nemerle следует записать Yes-.

Правда простые макросы Nemerle можно использовать как более мощный аналог обычных шаблонных функций(т.е. не методов) с ifti, но все таки шаблоны и макросы это очень разные вещи. И выполняют они совершенно разные задачи на мой взгляд.

try-catch-finally blocks Yes No No Yes Yes Yes
Тут тоже можно было бы Yes+ написать, так как в отлове исключений поддерживается pattern-matching.

Documentation comments Yes No No Yes Yes No (plan)
Почему у Nemerle No? Вроде бы есть.
Re[3]: Таблица сранения языкво от создателей D поправленная
От: Андрей Хропов Россия  
Дата: 19.05.06 11:57
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Андрей Хропов wrote:

>> VD>- — возможность поддерживается слабо.
>> Я бы "-" убрал. В D полноценный GC.
>> Можно и вручную управлять памятью, но это в специальных случаях.
C>Минус стоит правильно — в D сейчас возможно использовать только
C>консервативный GC, сама семантика языка (юнионы, например) не позволяет
C>использовать точный GC.
Да, теперь понятно за что "-". Спасибо за разъяснение.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Таблица сранения языкво от создателей D поправленная мно
От: co  
Дата: 19.05.06 13:04
Оценка:
а есть ли в D мультиметоды ?
Re[3]: Таблица сранения языкво от создателей D поправленная
От: _DAle_ Беларусь  
Дата: 19.05.06 13:33
Оценка: 7 (3) +2
АХ>>Шаблоны C++ и D являются Turing-complete (сам не доказывал , но про крайней мере во многих местах я это видел, в том числе и в
АХ>>Wikipedia).

VD>Серьезно? Ну, тода жду примера чтения файла с диска во время компиляции средствами шаблонов С++ или Ди. До тех пор останусь при своем мнении.


А при чем тут файлы, диски?
http://osl.iu.edu/~tveldhui/papers/2003/turing.pdf
Re[7]: Таблица сранения языкво от создателей D поправленная
От: Oyster Украина https://github.com/devoyster
Дата: 19.05.06 14:09
Оценка: :))) :)
Здравствуйте, eao197, Вы писали:

_>>VI|VIM + "ANSI C++" + Boots + TLS + ...


E>А что такое TLS?


Ты лучше мне скажи, что такое "Boots"
Re[8]: Таблица сранения языкво от создателей D поправленная
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.05.06 14:16
Оценка:
Здравствуйте, Oyster, Вы писали:

_>>>VI|VIM + "ANSI C++" + Boots + TLS + ...


E>>А что такое TLS?


O>Ты лучше мне скажи, что такое "Boots"


Это не правильно написанный Boost Не я один очепятки допускаю


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Таблица сранения языкво от создателей D поправленная
От: Oyster Украина https://github.com/devoyster
Дата: 19.05.06 14:23
Оценка:
Здравствуйте, eao197, Вы писали:

E>Это не правильно написанный Boost Не я один очепятки допускаю


Это я к тому, что TLS тоже, возможно, не TLS, а очень даже STL
Re[10]: Таблица сранения языкво от создателей D поправленная
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.05.06 14:26
Оценка:
Здравствуйте, Oyster, Вы писали:

E>>Это не правильно написанный Boost Не я один очепятки допускаю


O>Это я к тому, что TLS тоже, возможно, не TLS, а очень даже STL



Вообще то STL -- это неотъемлимая часть Ansi C++


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Таблица сранения языкво от создателей D поправленная
От: Oyster Украина https://github.com/devoyster
Дата: 19.05.06 14:30
Оценка:
Здравствуйте, eao197, Вы писали:

O>>Это я к тому, что TLS тоже, возможно, не TLS, а очень даже STL


E>

E>Вообще то STL -- это неотъемлимая часть Ansi C++

Не факт, что это помешало бы автору написать ANSI C++ + STL... в общем, ждём разъяснений.
Re[4]: Таблица сранения языкво от создателей D поправленная
От: Андрей Хропов Россия  
Дата: 19.05.06 15:04
Оценка:
Здравствуйте, _DAle_, Вы писали:

АХ>>>Шаблоны C++ и D являются Turing-complete (сам не доказывал


VD>>Серьезно? Ну, тода жду примера чтения файла с диска во время компиляции средствами шаблонов С++ или Ди. До тех пор останусь при своем мнении.


_DA>А при чем тут файлы, диски?

_DA>http://osl.iu.edu/~tveldhui/papers/2003/turing.pdf
Ну вот, умные люди доказали .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Таблица сранения языкво от создателей D поправленная
От: WolfHound  
Дата: 19.05.06 15:34
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

_DA>>А при чем тут файлы, диски?

_DA>>http://osl.iu.edu/~tveldhui/papers/2003/turing.pdf
АХ>Ну вот, умные люди доказали .
Вот только на практике шаблоны не Turing-complete... Компилятор хвостовую рекурсию не оптимизирует.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Таблица сранения языкво от создателей D поправленная
От: Андрей Хропов Россия  
Дата: 19.05.06 15:52
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Андрей Хропов, Вы писали:


АХ>>Я бы "-" убрал. В D полноценный GC.

АХ>>Можно и вручную управлять памятью, но это в специальных случаях.

VD>Не полноценный. В Ди консервативный ЖЦ, а значит уплотнение кучи невозможно.

Объяснили, понял.

АХ>>В C++ можно перегрузить оператор [] для одного параметра,

VD>Ага. Но индексатор не получить. Не так семантика.
Ставим bad?

АХ>>в D можно перегружать оператор [] для произвольного количества (opIndex).

VD>Вот это возможно то что нужно.
Ставим Yes?

VD>>> Named parametrs

АХ>>Имеется ввиду при передаче в функцию указание названий параметров?
VD>Да.
Здорово, мне это еще в Питоне понравилось.

VD>>>

VD>>> Metaprograming support
VD>>> Bad (static calcs)
VD>>> Bad (textual macro)
VD>>> Bad (textual macro, template side effect)
VD>>> No
VD>>> No
VD>>> Yes+ (AST based macros)
VD>>>

АХ>>Metaprograming support — разница между шаблонами и макросами существенная

АХ>>(первые — типизированы, вторые — просто текстовая замена),
АХ>> и я бы не стал сваливать их в одну кучу "bad".
VD>А я стану. Назвать удовлетворительным нельзя ни то, ни другое.
Шаблоны (особенно в D) я бы удовлетворительными по крайней мере точно назвал.
Синтаксис как в Nemerle менять нельзя и пользоваться всеми средствами языка
(вызывать любые функции) нельзя, но тем не менее для многих применений достаточно.
По мне здесь лучше не bad, а limited.
Впрочем, я чувствую, здесь каждый останется при своем мнении.

АХ>>И надо бы указать, что в D static calcs + templates,


VD>Возможно. Я не силен в Ди и не знаю, что могут его шаблоны в области метапрограммирования. Так что жду примеров.


Вот могу привести примеры отсюда
(там еще есть длинный (поэтому не стал сюда копировать) пример с regular expressions в котором в частности выдаются сообщения об ошибках):

Вычисление квадратного корня:
import std.stdio;

template sqrt(real x, real root = x/2, int ntries = 0)
{
  static if (ntries == 5)
    // precision doubles with each iteration,
    // 5 should be enough
    const sqrt = root;
  else static if (root * root - x == 0)
    const sqrt = root;  // exact match
  else
    // iterate again
    const sqrt = sqrt!(x, (root+x/root)/2, ntries+1);
}

void main()
{
    real x = sqrt!(2);
    writefln("%.20g", x); // 1.4142135623730950487
}


Преобразование числа в строку (~ в D означает конкатенацию строк):
template decimalDigit(int n)    // [3]
{
  const char[] decimalDigit = "0123456789"[n..n+1];
} 

template itoa(long n)
{   
  static if (n < 0)
     const char[] itoa = "-" ~ itoa!(-n);  
  else static if (n < 10)
     const char[] itoa = decimalDigit!(n); 
  else
     const char[] itoa = itoa!(n/10L) ~ decimalDigit!(n%10L); 
}

char[] foo()
{
  return itoa!(264);   // returns "264"
}



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

VD>В немерле этого нет, но возможности метапрограммирования куда шире.
Согласен, шире.

АХ>>Шаблоны C++ и D являются Turing-complete (сам не доказывал , но про крайней мере во многих местах я это видел, в том числе и в

АХ>>Wikipedia).

VD>Серьезно? Ну, тода жду примера чтения файла с диска во время компиляции средствами шаблонов С++ или Ди. До тех пор останусь при своем мнении.


Уже ответили другие (со ссылкой на статью).


VD>>> Meta-language is same language


VD>Это не вопрос, а факт. Метаязыком Немерле является сам же Немерле. А вот в С++ это функциональный-недоязык случайно родившийся от того, что рекурсивные шаблоны С++ создают побочные эффекты.


VD>>> Compiled meta-code


VD>>> Fast meta-code


VD>А поставлю нет, так как понимаю о чем говорю. По крайней мере С++ интерпретирует шаблоны во время компиляции. И не имеет ни какого значения то, что они выполняются во время компиляции. Главное, что они сами интерпретируются.


Ок, я не так интерпретировал эти пункты.
Знающие люди вспомнят провал ключевого слова "export" в C++.


VD>>> Report clear and intelligible error and diagnostic message


АХ>>Это вообще-то зависит от реализации, хотя соглашусь, что с шаблонами a-la C++/D это сделать труднее, чем в Nemerle.


VD>Это не зависит от реализации. Незнаю как в Ди, но в С++ вообще нет средств выдачи сообщений из меташаблонов. Они вообще являются недоразумением. Это как раз к вопросу о том, что является полноценным. Как в случае Лиспа в Немерел метакод — это полноценный код на Немерле. В нем можно проверить условие и вызвамть метод сообщеющий об ошибке.


В D тоже можно проверить условие и выдать информацию об ошибке, благодаря static if
(взят кусок отсюда):

91     // Returns the value of the exponent.
92     // must be of the form "" or  "e-543" or "E+2_453" etc
93     template parseExponent(char [] s, int result = 0, EFloatParseState state = EFloatParseState.WAITEXP)
94     {
95         static if (s.length == 0) {
96             // an empty string is acceptable
97             static if (state == EFloatParseState.WAITEXP || state == EFloatParseState.EXPDIG)
98                 const int parseExponent = result;
99             else {
100                 pragma(msg, "Error: No exponent found in floating-point literal.");
101                 static assert(0);
102             }
103         } else static if (state == EFloatParseState.WAITEXP && (s[0]=='e' || s[0]=='E') )
104             const int parseExponent = parseExponent!(s[1..$], 0, EFloatParseState.GOTEXPCHAR);
105         else static if (state == EFloatParseState.GOTEXPCHAR && s[0]=='-')
106             const int parseExponent = -parseExponent!(s[1..$], 0, EFloatParseState.GOTEXPSIGN);
107         else static if (state == EFloatParseState.GOTEXPCHAR && s[0]=='+')
108             const int parseExponent = parseExponent!(s[1..$], 0, EFloatParseState.GOTEXPSIGN);
109         else static if (state == EFloatParseState.EXPDIG && s[0]=='_')
110             // embedded underscores are allowed after the first digit
111             const int parseExponent = parseExponent!(s[1..$], result, state);
112         else static if (isdigit!( (s[0]) ) )
113            const int parseExponent = parseExponent!(s[1..$], result*10 + (s[0]-'0'), EFloatParseState.EXPDIG);   
114         else {
115             pragma(msg, "Error: Invalid characters found in floating-point literal.");
116             static assert(0);
117         }
118     }


VD>>> Internal DSL support


АХ>>Уж D то в этом смысле явно не хуже С++, так как в нем вся та же перегрузка операторов.


VD>Возможно Ди и не хуже С++. Но С++ ниже плинтуса. Так что уровень С++ здесь не показатель.


АХ>>Так что по крайней мере не меньше чем bad .


VD>Ну, это возможно.


Тогда надо поставить.


АХ>>А разве для не ОО-языков можно говорить о рефакторинге? Не знаю, мне кажется напротив C надо поставить No.


VD>А чем они отличаются? То же АСТ, те же методы парсинга. Те же имена идентификаторов.


В своей книге Фаулер говорит в основном об объектно-ориентированном коде, да и список на его сайте говорит о том, что большинство рефакторингов предполагают ОО-концепции.
Но хотя в усеченном виде (типа разделить длинную функцию на несколько) наверное можно и к C применять.

Уважаемый all, кто-нибудь применял рефакторинг в C?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Таблица сранения языкво от создателей D поправленная мно
От: GlebZ Россия  
Дата: 19.05.06 16:30
Оценка:
Здравствуйте, VladD2, Вы писали:


Arrays D C C++ C# Java Nemerle
Aliases Yes Yes Yes No No Yes
А в C# using — чем не алиас?

Performance D C C++ C# Java Nemerle
Direct native code gen Yes Yes Yes No No No
Этот раздел вообще не понял. Во многом, тут перфоманс не причем. А вот Direct native code gen в С#- есть.

Reliability D C C++ C# Java Nemerle
RAII (automatic destructors) Yes No Yes Yes No Yes
Здесь я уже возмущался. using — это все таки полуавтоматический деструктор. В C++ дестроится или нет решает объект, в C# — клиент(или GC).

try-catch-finally blocks Yes No No Yes Yes Yes
Вооще-то в C есть __type/__catch/__finally. И в С++ она унаследована(правда неэквивалентна и несовместима с родным try/catch).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.