Re: Таблица сранения языкво от создателей D поправленная мно
От: volk  
Дата: 19.05.06 16:35
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:
VD>...

Вот еще одну колонку добавить бы ( ) --- и в священные войны!
Тот, кто желает, но не делает, распространяет чуму.
Re[2]: Таблица сранения языкво от создателей D поправленная
От: _DAle_ Беларусь  
Дата: 19.05.06 16:41
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Вооще-то в C есть __type/__catch/__finally. И в С++ она унаследована(правда неэквивалентна и несовместима с родным try/catch).


Ты что-то путаешь, __try/__catch/__finally нет ни в С, ни в С++. Это Microsoft extension.
Re[3]: Таблица сранения языкво от создателей D поправленная
От: GlebZ Россия  
Дата: 19.05.06 17:11
Оценка:
Здравствуйте, _DAle_, Вы писали:
:

GZ>>Вооще-то в C есть __type/__catch/__finally. И в С++ она унаследована(правда неэквивалентна и несовместима с родным try/catch).


_DA>Ты что-то путаешь, __try/__catch/__finally нет ни в С, ни в С++. Это Microsoft extension.

Не знал.
Re[6]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 20:09
Оценка:
Здравствуйте, alex_ez, Вы писали:

_>Мужики

_>IDE это жопа.
_>VI|VIM + "ANSI C++" + Boots + TLS + ...

Да, да. Перечисленные вещи конечно решат все проблемы... но как ты представляешь их использование если ты даже их названия правильно написать не смог?
Или это такой тонкий английский юмор и подколка люнуксойдов?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 20:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>Да, только вместо function надо использовать delegate, function связывает статически.


Почитал у них на сайте и пришел к выоду, что это не полноценные замыкания. Они не лексические. Используется термин "динамические". Что под этим понимается не ясно, но явно возможности сохранить контекст после выхода из метода уже нет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 20:09
Оценка:
Здравствуйте, FR, Вы писали:

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


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


Да, это лучше чем на С++, но похоже полноценностью тут не пахнет. Весьма странно выглядит этот код. Вместо возврата значения из функции "const factorial". Для меня это выглядит как объявление локальной константы.

FR>По моему вполне себе код на языке, да и сообщения об ошибке вывести используя static if не сложно.


Можно пример?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 20:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>У тебя строка Type safe variant data type два раза повторяется.


Дык не просто это дело форматировать. ООП то в редакторе не поддерживается. Приходится копипастом.

FR>И опечаток очень много.


Да, уж. Я точно не писатель про англицких заек.

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


Возможно, но полноценным языком (по крайней мере в С++) назвать я не могу. Можно попробовать подобрать другие термины.

FR>Report clear and intelligible error and diagnostic message

FR>Это тоже не понятно почему в D NO стоит?

Возможно потому, что я его не знаю.
Приведи пример, рассмотрим.

FR> сообщения об ошибках в шаблонах у него гораздо более внятные чем у C++.


Если есть констрэйны, то охотно верю. Однако вопрос о том, можно ли дать конкретное пояснение в сложных случаях?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 20:09
Оценка:
Здравствуйте, _DAle_, Вы писали:

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

_DA>http://osl.iu.edu/~tveldhui/papers/2003/turing.pdf

Да, все при том же. Толку от возможностей если они не полноценны? Статьи на темы вроде "как сделать сериализацию на шаблонах", или "декларативание конечных автоматов на шаблонах" заканчиваются одним и тем же. Решение работат, но без слез на него смотреть нельзя. Сообщения об ошибках никакие. Возможностей не хватает. Отладки нет. Кучи макросов вроде ХХХ_4, ХХХ_5. Скорость компиляции отвратительная.

Возможно в Ди что-то изменилось в лучшую сторону, но до Немерловским макросов им обоим как до Пикина раком.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 20:09
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

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

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

Однозначно.

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

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

Надо смотреть на пример. Надеюсь, хорошо знающие Ди люди дадут его в ближайшее время.

АХ>>>Имеется ввиду при передаче в функцию указание названий параметров?

VD>>Да.
АХ>Здорово, мне это еще в Питоне понравилось.

Я уж не знаю откуда это было содрано, но если в языке есть значения по умолчанию для параметров, то иногда действительно удобно. Бывает, что метод имеет тучу параметров, а задать нужно только 1-2. А иногда это просто порождает более понятный код. Ведь имена параметров так же являются своего рода документацией.

VD>>А я стану. Назвать удовлетворительным нельзя ни то, ни другое.

АХ>Шаблоны (особенно в D) я бы удовлетворительными по крайней мере точно назвал.

Возможно, но тогда нужно вводить оценки. Что тоже не здорово, так как в том же Немерле метапрограммирование это первоклассная сущность и возможности его очень большие. Так что просто оценка 5 против 3 мало что скажет. Да и может появиться какой нибудь Мерле или "E" в котором оно будет еще лучше. Так что мне кажется деление на плохое и хорошее в данном случае уместно.

АХ>Синтаксис как в Nemerle менять нельзя и пользоваться всеми средствами языка

АХ>(вызывать любые функции) нельзя, но тем не менее для многих применений достаточно.

Но это и есть неполноценное решение. В С++ тоже кое что можно. И даже не так мало можно. Но ой как сложно. И результат просто отвратительный. В результате средство превращается в игрушку для продвинутых, а не в инструмент для всех.

АХ>По мне здесь лучше не bad, а limited.


Возможно, но тогда нужно прорабатывать оценики и делать новую таблицу. А у меня есть большие сомнения в том, что она вообще отражает реальный расклад сил. Например, про то что в Немерле есть паттерн-матчинг, а в других языках его нет сказано ровно одна строка. Между тем это стольк большое приемущество, что ему можно посвятить целую статьию.

АХ>Впрочем, я чувствую, здесь каждый останется при своем мнении.


Естественно. Но лично я пытаюсь быть корректным и с соглашусь с разумными аргументами. Собственно я уже не мало поправил. Вот наберем мнений, подитожим их и поправим еще раз.

АХ>Вычисление квадратного корня:

АХ>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 означает конкатенацию строк):

[c]
АХ>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"
АХ>}
[/q]

Как я понимаю — это тоже самое.

А возможно ли в Ди что-то вроде частичного выполнения из Немерле:
http://nemerle.org/Partial_evaluation ?

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

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

Со своей стороны могу сказать, что раздел таблицы посвященный обобщенном программированию вообще хреновый. Его имеет смысл предеделать. Подобное сравнения для С++ и Шарпа я делел тут http://rsdn.ru/article/csharp/newincsharp.xml#ESJAG
Автор(ы): Владислав Чистяков (VladD2)
Дата: 24.06.2004
В статье рассказывается о новшествах, которые должны появиться в новой версии языка C#



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

АХ>>>Wikipedia).

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


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


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

К тому же Вольхаунд разумно заметил, что компиляторы не оптимизирует концевую рекурсию, что на практике не позволит выполнятиь любой код. Так что доказательство это чисто теоритическое.

АХ>Ок, я не так интерпретировал эти пункты.

АХ>Знающие люди вспомнят провал ключевого слова "export" в C++.

Говорят, что в одном компиляторе это реализовано, но я сам его не видел. К тому же уверен, что для метапрограммирования это ничего не даст, так как нужно выполнять метакод. И этот код может быть или скомпилирован в исполняемый (что вообще не предусматривается шаблонами), или интерпретироваться. В лучшем случае мы получим предварительный парсинг.

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


ОК, этот пункт изменим. Только опять же поддержка разная. Ведь многое зависит от того, что можно проверить. В немерле можно проверить очень много (почти все, если не все). Тут же мы (как я понимаю) ограничены статическими вычислениями которые не могут анализировать АСТ и темболее его типизацию.

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


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


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


ОК, предлагай крадацию оценок.

АХ>В своей книге Фаулер говорит в основном об объектно-ориентированном коде, да и список на его сайте говорит о том, что большинство рефакторингов предполагают ОО-концепции.


Фаулер мужик мною уважаемый, но не стоит делать догм из его выказываний. В конце концов и в С-коде можно иметь ОО-решения. И рефакторить можно не ОО-решения. Просто Фаулер живет в мире ООП, и говорит об ООП.

АХ>Но хотя в усеченном виде (типа разделить длинную функцию на несколько) наверное можно и к C применять.


Думаю, что переименование переменных и т.п. тоже для С не проблема. Просто С не так популярен на сегодня, чтобы на нем зацикливаться.

АХ>Уважаемый all, кто-нибудь применял рефакторинг в C?


Боюсь, что никто и в С++ не применяет. Но это не значит, что не будут применять если он будет доступен. Ну, и как я уже говорил, на С сегодня пишут не многие.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 20:09
Оценка:
Здравствуйте, ArhAngelVezel, Вы писали:

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


В исходной таблице делалось предположение о наличии возможностей непосредственно в языке, а не в библиотеках. Иначе и динамические массивы в дотнете и Яве тоже есть.

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


Между макросами и препроцессором очень большая разница. Макросы С — это #define в котором подставляются вычисления. В #define-е же Шарпа ничего кроме имени задать нельзя. А #if и т.п. предоставляют исключительно возможности условной компиляции и к макросам отношения не имеют.

Вот только No в этом пункте плюс для языка, а не минус. Так как текстуальные макросы в стиле С давно дескредитировали себя из-за множества проблем.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Таблица сранения языкво от создателей D поправленная
От: FR  
Дата: 19.05.06 20:47
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>Да, только вместо function надо использовать delegate, function связывает статически.


VD>Почитал у них на сайте и пришел к выоду, что это не полноценные замыкания. Они не лексические. Используется термин "динамические". Что под этим понимается не ясно, но явно возможности сохранить контекст после выхода из метода уже нет.


Да там есть проблема со стековыми переменными, по моему явный баг, когда будут править не знаю.
Re[5]: Таблица сранения языкво от создателей D поправленная
От: FR  
Дата: 19.05.06 20:47
Оценка:
Здравствуйте, VladD2, Вы писали:

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


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


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


VD>Да, это лучше чем на С++, но похоже полноценностью тут не пахнет. Весьма странно выглядит этот код. Вместо возврата значения из функции "const factorial". Для меня это выглядит как объявление локальной константы.


Это и есть объявление переменной внутри шаблона
По любому красивый ход по сравнению с C++.

FR>>По моему вполне себе код на языке, да и сообщения об ошибке вывести используя static if не сложно.


VD>Можно пример?


Тут уже есть Re[4]: Таблица сранения языкво от создателей D поправленная
(template parseExponent)
Главное там pragma(msg и static assert
Re[5]: Таблица сранения языкво от создателей D поправленная
От: FR  
Дата: 19.05.06 20:47
Оценка:
Здравствуйте, VladD2, Вы писали:


АХ>>Здорово, мне это еще в Питоне понравилось.


VD>Я уж не знаю откуда это было содрано, но если в языке есть значения по умолчанию для параметров, то иногда действительно удобно. Бывает, что метод имеет тучу параметров, а задать нужно только 1-2. А иногда это просто порождает более понятный код. Ведь имена параметров так же являются своего рода документацией.


Из питона и содрано, а там появилось в результате адаптации tcl'ной Tk, для удобства задания значений по умолчанию, и получается содрано с tcl, но у tcl синтаксис очень специфичный, так что можно скорее сказать подсмотренно
Re[2]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 21:42
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

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


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


Мне кажется, что сравнение "шаллонов" у Дишников просто из рук вон плохо.

По уму нужно сравнивать языки по возможностям. Вот тогда все будет очевидно.
Так стоит отделить и сравнить отдельно:
* обобщенное программирование;
* метапрограммирование;
* вычисления во время компиляуии;
* частичные вычисления.

Это, кстати, сительно не выгодно ни С++, ни Ди, так как они не сильно вииграют в обобщенном программировании (а кое где проиграют) и сольют в чистую в метапрограммирование и частичных вычислениях (опять же за Ди не скажу, но похоже на то).

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


По моему от C# тут отличий не много. Все же паттерны там не полноценные вроде.

VK>
VK>
VK>
VK>
VK>
VK>
VK>
VK>
VK>
VK>
VK>
Documentation comments Yes No No Yes Yes No (plan)

VK>Почему у Nemerle No? Вроде бы есть.

Покажи как/где и не проблема поправить. Лично я не видел. Хотя это конечно не совсем язык... Это уже требования к компилятору.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 21:42
Оценка:
Здравствуйте, co, Вы писали:

co>а есть ли в D мультиметоды ?


Вроде нет. Но пусть скажут те кто знает язык лучше меня.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 21:42
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>А в C# using — чем не алиас?


Вопрос сложный. Это конечно алис, но тип он не вводит. Это просто шорткат. В Немерле и Ди же это введение полноценных типов. В Немерле так объявлены все встроенные типы вроде (int, string).

GZ>Этот раздел вообще не понял. Во многом, тут перфоманс не причем. А вот Direct native code gen в С#- есть.


Это копипаст исходной таблицы. Согласен, что притянуто за уши, но из пести слов не выкинишь. Для кого-то это важно. Только разумнее было бы назвать не "производительность", а "VM vs. direct native code".

GZ>Здесь я уже возмущался. using — это все таки полуавтоматический деструктор. В C++ дестроится или нет решает объект, в C# — клиент(или GC).


Опять же к авторам Ди вопрос. Но я с ними согласен.

GZ>Вооще-то в C есть __type/__catch/__finally. И в С++ она унаследована(правда неэквивалентна и несовместима с родным try/catch).


Приведи, плиз раздел стандарта С в которых описаны такие операторы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 21:42
Оценка: -1
Здравствуйте, volk, Вы писали:

V>Вот еще одну колонку добавить бы ( ) --- и в священные войны!


Лучше в С++ перекинуть, чтобы больше С++-ников почувствовало дискомфорт. Глядишь задумались бы над чем нибудь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 21:42
Оценка:
Здравствуйте, FR, Вы писали:

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


FR>да можно bad поставить


-1 Подробносии здесь
Автор: VladD2
Дата: 20.05.06
.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 21:56
Оценка:
Здравствуйте, FR, Вы писали:

FR>Да там есть проблема со стековыми переменными, по моему явный баг, когда будут править не знаю.


Ага, но похоже в дизайне языка. Лексические замыкания на ура проходят в языках с автоматическим управлением памятью, и хреново (точнее никак) с ручной. Вот Ди наступил на те же грабли. Гнались за производительностью, а получили хреновую реализацию.

В прочем, и синтаксисом там не важно. C# и Немерле постепенно переходят к более краткому синтаксису лямбд "параметр => выражение" и "(параметры) => выражение", а Ди использует какой-то бредовый синтаксис, да еще снабженный жуткой терминалогией вроде "функциональный литерал". Где они их только берут то?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Таблица сранения языкво от создателей D поправленная
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.06 21:56
Оценка:
Здравствуйте, FR, Вы писали:

FR>Это и есть объявление переменной внутри шаблона

FR>По любому красивый ход по сравнению с C++.

"По сравнению" согласен. Но все же можно было с синтаксисом и по больше поработать. А то странно выглядит.

FR>Тут уже есть Re[4]: Таблица сранения языкво от создателей D поправленная

FR>(template parseExponent)
FR>Главное там pragma(msg и static assert

ОК, Ди тоже неплохо с сообщениями. Поправим в ближайшее время.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.