Андрей Хропов wrote: > VD>- — возможность поддерживается слабо. > Я бы "-" убрал. В D полноценный GC. > Можно и вручную управлять памятью, но это в специальных случаях.
Минус стоит правильно — в D сейчас возможно использовать только
консервативный GC, сама семантика языка (юнионы, например) не позволяет
использовать точный GC.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[8]: Таблица сранения языкво от создателей D поправленная
VD>Это не зависит от реализации. Незнаю как в Ди, но в С++ вообще нет средств выдачи сообщений из меташаблонов. Они вообще являются недоразумением. Это как раз к вопросу о том, что является полноценным. Как в случае Лиспа в Немерел метакод — это полноценный код на Немерле. В нем можно проверить условие и вызвамть метод сообщеющий об ошибке.
В D сейчас шаблоный код стал гораздо чище и лучше чем в C++, например:
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 поправленная
VD>То с чем согласен, поправлю завтра. Но желательно видеть примеры. (это я о Ди).
У тебя строка Type safe variant data type два раза повторяется.
И опечаток очень много.
Насчет тюринг полного языка, все таки шаблоны и в D и в C++ тюринг полные. Другое дело что они не могут полноценно использовать все возможности языка и платформы, в общем надо бы разделить эту строку на две 1) тюринг полность и 2) и использование всех возможностей языка и библиотек. (хотя второе у тебя уже есть)
Report clear and intelligible error and diagnostic message
Это тоже не понятно почему в D NO стоит? сообщения об ошибках в шаблонах у него гораздо более внятные чем у C++.
Re[6]: Таблица сранения языкво от создателей D поправленная
Вообще-то в 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 поправленная
Здравствуйте, Cyberax, Вы писали:
C>Андрей Хропов wrote: >> VD>- — возможность поддерживается слабо. >> Я бы "-" убрал. В D полноценный GC. >> Можно и вручную управлять памятью, но это в специальных случаях. C>Минус стоит правильно — в D сейчас возможно использовать только C>консервативный GC, сама семантика языка (юнионы, например) не позволяет C>использовать точный GC.
Да, теперь понятно за что "-". Спасибо за разъяснение.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Таблица сранения языкво от создателей D поправленная мно
АХ>>Шаблоны C++ и D являются Turing-complete (сам не доказывал , но про крайней мере во многих местах я это видел, в том числе и в АХ>>Wikipedia).
VD>Серьезно? Ну, тода жду примера чтения файла с диска во время компиляции средствами шаблонов С++ или Ди. До тех пор останусь при своем мнении.
Здравствуйте, Oyster, Вы писали:
E>>Это не правильно написанный Boost Не я один очепятки допускаю
O>Это я к тому, что TLS тоже, возможно, не TLS, а очень даже STL
Вообще то STL -- это неотъемлимая часть Ansi C++
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Таблица сранения языкво от создателей D поправленная
Здравствуйте, eao197, Вы писали:
O>>Это я к тому, что TLS тоже, возможно, не TLS, а очень даже STL
E> E>Вообще то STL -- это неотъемлимая часть Ansi C++
Не факт, что это помешало бы автору написать ANSI C++ + STL... в общем, ждём разъяснений.
Re[4]: Таблица сранения языкво от создателей D поправленная
Здравствуйте, _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 поправленная
Здравствуйте, Андрей Хропов, Вы писали:
_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 поправленная
Здравствуйте, 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 enoughconst sqrt = root;
else static if (root * root - x == 0)
const sqrt = root; // exact matchelse// iterate againconst sqrt = sqrt!(x, (root+x/root)/2, ntries+1);
}
void main()
{
real x = sqrt!(2);
writefln("%.20g", x); // 1.4142135623730950487
}
Преобразование числа в строку (~ в D означает конкатенацию строк):
АХ>>и их кстати можно параметризовывать любыми именами символов, вещественными числами и строками. 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 поправленная мно