Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.11.06 15:51
Оценка: 13 (5) :))) :))
Совсем недавно, 14 ноября 2006 года, увидел свет D версии 0.174. Как водится, что-то пофикшено, что-то выброшено (хороший, вероятно подарочек тем, кто на D уже начал писать). А вот среди добавленого оказалась поддержка туплов. Которая в сочетании с variadic templates делает программирование на шаблонах в D гооораздо привлекательнее, чем в C++

Например, стандартные пакеты std.traits и std.typetuple уже содержат то, что в C++ достигается килобайтами кода из Boost-a. Красота однако, аж слюньки текут.

Не все, однако, мне понятно и не все, имхо, еще чисто с этими нововедениями. Например, в процитированном ниже коде из описания туплов приходится реализовывать шаблон CurryAll дважды. Вальтер Брайт объясняет это тем, что невозможно перегрузить один и тот же шаблон двумя одинаковыми списками аргументов, поэтому в первый добавляется параметр Dummy. Чем-то напоминает сегоднящние workaround-ды для C++ с помощью SFINAE (хотя в обсуждениях на форуме Брайт высказался, что возможно в будущем это дело будет упрощено). Так же странно, что для копирования элементов из args в Foo.args_m приходится прибегать к поэлементному копированию. Обычное присваивание (пока?) не работает.

Так же много еще не сделано. В частности, нет возможности возвращать туплы из функции.

В общем, по своим языковым изыскам D лично для меня все привлекательнее и привлекательнее, чем C++ (особенно скорость его компиляции). Но когда же, черт побери, стабильная версия выйдет!!! Так ведь и C++0x быстрее, чем D 1.0 stable появится
(Кстати, среди нововведений версии 0.174 есть ключик командной строки -v1, который включает поддержку совместимости с версией 1.0 языка. Значит ли это, что 1.0 уже была? ).

А вот пример из описания туплов D:
R delegate() CurryAll(Dummy=void, R, U...)(R function(U) dg, U args)
{
    struct Foo
    {
        typeof(dg) dg_m;
        U args_m;

        R bar()
        {
            return dg_m(args_m);
        }
    }

    Foo* f = new Foo;
    f.dg_m = dg;
    foreach (i, arg; args)
        f.args_m[i] = arg;
    return &f.bar;
}

R delegate() CurryAll(R, U...)(R delegate(U) dg, U args)
{
    struct Foo
    {
        typeof(dg) dg_m;
        U args_m;

        R bar()
        {
            return dg_m(args_m);
        }
    }

    Foo* f = new Foo;
    f.dg_m = dg;
    foreach (i, arg; args)
        f.args_m[i] = arg;
    return &f.bar;
}

void main()
{
    static int plus(int x, int y, int z)
    {
        return x + y + z;
    }

    auto plus_two = CurryAll(&plus, 2, 3, 4);
    printf("%d\n", plus_two());
    assert(plus_two() == 9);

    int minus(int x, int y, int z)
    {
        return x + y + z;
    }

    auto minus_two = CurryAll(&minus, 7, 8, 9);
    printf("%d\n", minus_two());
    assert(minus_two() == 24);
}


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 16.11.06 16:00
Оценка: +2 -4 :))) :))) :))) :)))
Здравствуйте, eao197, Вы писали:

Преаращается в жалкое подобие Nemerle...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.11.06 18:23
Оценка: +4 :)
Здравствуйте, WolfHound, Вы писали:

WH>Преаращается в жалкое подобие Nemerle...


Nemerle -- это макросы, метапрограммирование + функциональщина. Т.е. то, чего в D пока не видно. Так что вряд ли.
Тем более, что Nemerle -- это только .NET, в отличии от D. Т.к. они вообще в разных песочницах расти будут.

А вот то, что D начинает позволять делать фокусы в духе Александреску, это, имхо, тревожный сигнал. Хотя std.traits полезная штука, но начинает казаться, что D сначала пытался уйти от переусложненности C++, а сейчас может C++ в этом деле переплюнуть.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 16.11.06 18:42
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>Преаращается в жалкое подобие Nemerle...


Знаешь, с одной стороны да (этот синтаксис Tuples просто жесть по сравнение с Nemerle),
с другой стороны в низкоуровневом языке задача которого заменить C/C++ это неплохо.

Мне кажется основная проблема D сейчас — довольно медленный GC (ну и библиотек немного, но это уже скорее про инфраструктуру, а не сам язык):
здесь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 16.11.06 18:45
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Nemerle -- это макросы, метапрограммирование + функциональщина. Т.е. то, чего в D пока не видно. Так что вряд ли.

Дак эта... ты сам то свои ссылки смотрел? Там как раз жалкие попытки сделать то что в немерле сделано давно и несравнимо качественней.

E>Тем более, что Nemerle -- это только .NET, в отличии от D. Т.к. они вообще в разных песочницах расти будут.

А что у D в плане переносимости есть какието преймущества перед Mono?
В любом случае сделать рантайм немерле не завязанный на .NET вполне возможно.

E>А вот то, что D начинает позволять делать фокусы в духе Александреску, это, имхо, тревожный сигнал. Хотя std.traits полезная штука, но начинает казаться, что D сначала пытался уйти от переусложненности C++, а сейчас может C++ в этом деле переплюнуть.

Ну переплюнуть С++ это задачка оооочень трудная. А вот приблизится вполне возможно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 16.11.06 19:06
Оценка: +3 -1
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Знаешь, с одной стороны да (этот синтаксис Tuples просто жесть по сравнение с Nemerle), с другой стороны в низкоуровневом языке задача которого заменить C/C++ это неплохо.

Системный язык не должен быть низкоуровневым.
Все что нужно это value-типы, поддержка двоичных данных на уровне виртуальной машины и оптимизатор который умеет делать region-inference. Еще нужно иметь несколько различных алгоритмов сборщика мусора в том числе подсчет ссылок и вобще отсутствие сборщика мусора (работает только region-inference).
Короче см singularity там почти оно только CLR на роль виртуальной машины для ОС не очень подходит.

АХ> Мне кажется основная проблема D сейчас — довольно медленный GC (ну и библиотек немного, но это уже скорее про инфраструктуру, а не сам язык):

А для D не возможен быстрый GC. Ибо быстрый == точный, а не консервативный как в D. Проблема в том что дизайн D просто не позволяет сделать точный сборщик мусора.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.11.06 20:00
Оценка: +2 :))
Здравствуйте, WolfHound, Вы писали:

E>>Nemerle -- это макросы, метапрограммирование + функциональщина. Т.е. то, чего в D пока не видно. Так что вряд ли.

WH>Дак эта... ты сам то свои ссылки смотрел? Там как раз жалкие попытки сделать то что в немерле сделано давно и несравнимо качественней.

А с чего ты взял, что это калька с Немерле?
Имхо, Немерл-овцы сам туплы откуда-то скомуниздили.
Кроме того, имхо, это явно не попытка догнать Немерле (чо вас на нем так клинт-то, кстати?), а сделать нормально в D то, что в C++ делается с помощью десятиэтажных макросов (памяти Александреску).

E>>Тем более, что Nemerle -- это только .NET, в отличии от D. Т.к. они вообще в разных песочницах расти будут.

WH>А что у D в плане переносимости есть какието преймущества перед Mono?

Реализация D в GNU Compiler Collection, например.

WH>В любом случае сделать рантайм немерле не завязанный на .NET вполне возможно.


А рантайму, вообще-то говоря, цена не большая. Ты вот на Nemerle сможешь без NET Framework писать?

E>>А вот то, что D начинает позволять делать фокусы в духе Александреску, это, имхо, тревожный сигнал. Хотя std.traits полезная штука, но начинает казаться, что D сначала пытался уйти от переусложненности C++, а сейчас может C++ в этом деле переплюнуть.

WH>Ну переплюнуть С++ это задачка оооочень трудная. А вот приблизится вполне возможно.

Приближение, имхо, уже весьма близкое. А вот желание переплюнуть, вместо того, чтобы язык в стабильное состояние перевести, это у автора D просматривается


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 16.11.06 20:55
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>А с чего ты взял, что это калька с Немерле?

А где сказанно что это калька с немерле?
E>Имхо, Немерл-овцы сам туплы откуда-то скомуниздили.
Дык туплы из покон веков были в функциональщине.
E>Кроме того, имхо, это явно не попытка догнать Немерле
Правильно ибо это дохлый номер. Тк гонятся в гибкости с языком который изначально проектировался в минималистической манере и возможностью добавления практически произвольных расширений пустая трата времени. Если конечно не сравнивать с подобным языком. Но D к таким языкам и близко не относится.
E>(чо вас на нем так клинт-то, кстати?),
По себе людей не судят. Стоит только произнести "немерле" как ты сразу начинаешь исходить ядом... к чему бы это?

E>а сделать нормально в D то, что в C++ делается с помощью десятиэтажных макросов (памяти Александреску).

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

E>А рантайму, вообще-то говоря, цена не большая.

из под стола раскажи это тем кто сделал внятные рантаймы.
hint: Разработчики руби в число этих людей не входят.

E>Ты вот на Nemerle сможешь без NET Framework писать?

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

E>Приближение, имхо, уже весьма близкое. А вот желание переплюнуть, вместо того, чтобы язык в стабильное состояние перевести, это у автора D просматривается

Автор просто пошол изначально не верным путем и по этому устроил себе массу проблем.
Если бы он выбрал бы путь аля немерле то давно бы язык зарелизил и кучу фенечек прикрутил.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 16.11.06 20:56
Оценка: +1 :)
Здравствуйте, eao197, Вы писали:

E>Кроме того, имхо, это явно не попытка догнать Немерле (чо вас на нем так клинт-то, кстати?)

Да потому что лучший язык на сегодня, ИМХО.

E>, а сделать нормально в D то, что в C++ делается с помощью десятиэтажных макросов (памяти Александреску).

Что в Немерле делается еще проще.

WH>>В любом случае сделать рантайм немерле не завязанный на .NET вполне возможно.

E>А рантайму, вообще-то говоря, цена не большая. Ты вот на Nemerle сможешь без NET Framework писать?
Так он про это и говорит. Нейтив-код компилятор.
Только тогда считай Немерле останется без возможностей пользоваться кучей функций в .NET.
Кстати сами разработчики именно этим и мотивируют свой выбор в пользу .NET:

Platform

Q: Why use CLI/.NET?


Mainly for interop reasons. There are number of CLI libraries and bindings out there already. There is going to be more and more.

Surely we'll loose WRT to compiled OCaml in terms of performance, at least until JIT's are made perfect, but it is easily possible to write a Gtk, GNOME, Windows GUI or even KDE application, we can embed Nemerle into ASP.NET web pages and there are more and more applications and libraries supporting .NET now. It is also possible to write libraries for other .NET languages, like C# or VB.NET.

We have also avoided significant development costs, because of this decision (no need for low-level compiler, JIT, the runtime library).

(здесь)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: D 1.0 for Jan 1, 2007
От: Андрей Хропов Россия  
Дата: 16.11.06 20:56
Оценка: 19 (2)
Здравствуйте, eao197, Вы писали:

E>(Кстати, среди нововведений версии 0.174 есть ключик командной строки -v1, который включает поддержку совместимости с версией 1.0 языка. Значит ли это, что 1.0 уже была? ).


Вальтер Брайт обещает выпустить 1.0 первого января:
здесь.

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

Для меня же главное же в принципе то, что наконец-то разобрались с двойным значением auto.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Ой, чо с D деется-то!?
От: FR  
Дата: 16.11.06 21:47
Оценка: 2 (2) +5 :)
Здравствуйте, WolfHound, Вы писали:


E>>(чо вас на нем так клинт-то, кстати?),

WH>По себе людей не судят. Стоит только произнести "немерле" как ты сразу начинаешь исходить ядом... к чему бы это?

А зачем призносить слово Немерле в топике никакого к нему отношения не имеющего?
Так что клинит конкретно
Re: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 16.11.06 23:20
Оценка: 41 (3)
Здравствуйте, eao197, Вы писали:

E>А вот пример из описания туплов D:


R delegate() CurryAll(Dummy=void, R, U...)(R function(U) dg, U args)
{
    struct Foo
    {
        typeof(dg) dg_m;
        U args_m;

        R bar()
        {
            return dg_m(args_m);
        }
    }

    Foo* f = new Foo;
    f.dg_m = dg;
    foreach (i, arg; args)
        f.args_m[i] = arg;
    return &f.bar;
}

R delegate() CurryAll(R, U...)(R delegate(U) dg, U args)
{
    struct Foo
    {
        typeof(dg) dg_m;
        U args_m;

        R bar()
        {
            return dg_m(args_m);
        }
    }

    Foo* f = new Foo;
    f.dg_m = dg;
    foreach (i, arg; args)
        f.args_m[i] = arg;
    return &f.bar;
}

void main()
{
    static int plus(int x, int y, int z)
    {
        return x + y + z;
    }

    auto plus_two = CurryAll(&plus, 2, 3, 4);
    printf("%d\n", plus_two());
    assert(plus_two() == 9);

    int minus(int x, int y, int z)
    {
        return x + y + z;
    }

    auto minus_two = CurryAll(&minus, 7, 8, 9);
    printf("%d\n", minus_two());
    assert(minus_two() == 24);
}


Для того чтобы почувствовать разницу вот тот же самый код на Nemerle
(тут также пример и с полной (что фактически эквивалентно ленивому исполнению) и частичной currying,
то что у Вальтера называется Curry и CurryAll (здесь) ):

using Nemerle;
using System.Console;

def plus(x,y,z){ x+y+z }

def minus(x,y,z){ x-y-z }

def plus_two = plus(2,_,_);
WriteLine($"$(plus_two(6, 8))");

def plus_three = plus_two(3,_);
WriteLine($"$(plus_three(7))");

def plus_all = lazy( plus(7,8,9) );
WriteLine($"$plus_all");

def minus_all = lazy( minus(7,8,9) );
WriteLine($"$minus_all");


Да, а вот здесьнекто Reiner Pope соорудил шаблон RealCurry, который делает из функций
типа plus(1,2,3) функции типа curried_plus(1)(2)(3):

void main()
{
    static int plus(int x, int y, int z)
    {
            return x + y + z;
    }

    auto curried_plus = RealCurry(&plus);
    auto plus_two = curried_plus(2);
    auto plus_two_plus_three = plus_two(3);

    writefln(plus_two_plus_three(4)); // 9
    writefln(plus_two(5)(6));         // 13 
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 08:13
Оценка: :)
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Для того чтобы почувствовать разницу вот тот же самый код на Nemerle


А почему именно на Nеmerle?
Почему не на Наскеле или даже Питоне?
Тоже будет такой же краткий код.
Re[6]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 08:35
Оценка: +2 -2
Здравствуйте, WolfHound, Вы писали:

E>>А с чего ты взял, что это калька с Немерле?

WH>А где сказанно что это калька с немерле?

Тогда зачем было говорить по превращении D в подобие Немерле?
Вообще, почитай ответ Vermicious Knid. Он там очень хорошо про разницу между Nemerle и D сказал.

E>>(чо вас на нем так клинт-то, кстати?),

WH>По себе людей не судят. Стоит только произнести "немерле" как ты сразу начинаешь исходить ядом... к чему бы это?

К тому что Nemerle здесь оффтопик, зачем его вообще поминать было я не понял.

E>>а сделать нормально в D то, что в C++ делается с помощью десятиэтажных макросов (памяти Александреску).

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

И слава богу, ты пользуешься (?) Nemerle и для тебя Nemerle лучше D. Отлично.
Я не собираюсь пользоваться Nemerle вообще, а вот D для меня привлекателен именно как эволюция C++. Поэтому я и сравниваю D с C++. А так же с тем, каким сам D был года три назад.

E>>А рантайму, вообще-то говоря, цена не большая.

WH> из под стола раскажи это тем кто сделал внятные рантаймы.

А ты из их числа?
И делают ли немерловцы сам рантайм или же они очень хорошо используют .NET?

WH>hint: Разработчики руби в число этих людей не входят.


Ну вот, еще и Ruby приплели. У тебя есть проблемы с Ruby-новым runtime? Ты им вообще пользуешься? Или языком в форумах?
На своих задачах я проблем в Ruby runtime не встречал. А что до скорости, так еще вопрос, может ли настолько динамический язык, как Ruby быть быстрым. Одна горячая замена кода чего стоит. Erlang, к примеру, такую возможность предоставляет, но и сам при этом не быстр. А ведь Erlang клепают проффесиональные разработчики языков и рантаймов. Клепатели JRuby, которые на гораздо более современном языке (а не на C) пытаются интерпритатор Ruby сделать и то пока даже сравнимых результатов достичь не могут.

E>>Ты вот на Nemerle сможешь без NET Framework писать?

WH>Смогу. Болие того если сделать внятный рантайм то можно будет скомуниздить подавляющие большинство нетовских и жабовских библиотек.

Ну Scala-лазы в первой версии тоже NET пытались поддерживать. А где теперь эта поддержка?

WH>Если бы он выбрал бы путь аля немерле то давно бы язык зарелизил и кучу фенечек прикрутил.


Немерле уже в релизе?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: Ой, чо с D деется-то!?
От: Gajdalager Украина  
Дата: 17.11.06 08:48
Оценка:
Здравствуйте, eao197, Вы писали:

E>Ну Scala-лазы в первой версии тоже NET пытались поддерживать. А где теперь эта поддержка?


здесь

Scala 2 doesn't yet have support for .NET but it's in the making.
The .NET related information at the Scala website is only relevant for
Scala 1.4.

Re[2]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 09:08
Оценка: 11 (1) -1
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Для того чтобы почувствовать разницу вот тот же самый код на Nemerle


Это не тет же код. Для того, чтобы это был то, нужно привести исходный код lazy.

Кстати на счет сравнения. Я недавно проверял корректность одного простого алгоритма распределения транзакций по квантам времени. Для экспериментов я сделал версию на ruby:
def make_dist(trx_count, quantum_count)
  result = []
  remaining_trx = trx_count
  remaining_quantums = quantum_count
  (1..quantum_count).each do |i|
    result << (remaining_trx.to_f / remaining_quantums).round
    remaining_trx -= result.last
    remaining_quantums -= 1
  end

  result
end

r = make_dist( 2, 6 )
puts r.join(',')

Очень компактно и понятно что присходит.
Затем захотел проверить, насколько выразительно можно сделать это же на D и Scala. D вариант мне понравился:
import std.math;

int[] makeDistrib( int trxCount, int quantums )
  {
    auto r = new int[ quantums ];
    auto remainingTrx = trxCount;
    auto remainingQuantums = quantums;
    for( int i = 0; i != r.length; ++i )
      {
        r[ i ] = cast(int)std.math.round(
            cast(float)remainingTrx / remainingQuantums );
        remainingTrx -= r[ i ];
        --remainingQuantums;
      }

    return r;
  }

int main()
  {
    int[] d = makeDistrib( 2, 6 );
    foreach( i; d )
      printf( "%i,", i );

    return 0;
  }

Хотя, имхо, читабельность Ruby выше.

А вот для Scala я сделал три варианта. Первый был калькой с Ruby/D решения:
object BufferizatorDistrib
  {
    def makeDist( trxCount: int, quantums: int ) : Array[ int ] =
      {
        var r = new Array[ int ]( quantums )
        var i = 0
        var remainingTrx = trxCount
        var remainingQuantums = quantums
        while( i != quantums )
          {
            r(i) = Math.round(remainingTrx.toFloat / remainingQuantums)
            remainingTrx = remainingTrx - r(i)
            remainingQuantums = remainingQuantums - 1
            i = i + 1 
          }
        r
      }

    def main( args: Array[ String ] ) =
      {
        val d = makeDist( 2, 6 )
        for( val i <- d )
          System.out.print( i + "," )
      }
  }

Вариант на D мне понравился больше из-за того, что for явно показывает, что я хочу делать. А вот while() в Scala выглядит как workaround для компенсации отсутствия for и операторов ++, -- и -= (либо я их не нашел).

Тогда я попытался применить локальные функции и рекурсию. Сначала с сохранением возврата из makeDist именно Array[int]:
object BufferizatorDistrib2
  {
    def makeDist( trxCount: int, quantums: int ) : Array[ int ] =
      {
        def nextValue( r: Array[ int ],
            place: int,
            remainingTrx: int,
            remainingQuantums: int ) : Array[ int ] =
            {
              r(place) = Math.round(remainingTrx.toFloat / remainingQuantums)
              if( remainingQuantums > 1 )
                nextValue( r, place + 1, remainingTrx - r(place), remainingQuantums - 1 )
              else r
            }

        nextValue( new Array[ int ]( quantums ), 0, trxCount, quantums )
      }

    def main( args: Array[ String ] ) =
      {
        val d = makeDist( 2, 6 )
        for( val i <- d )
          System.out.print( i + "," )
      }
  }

Но здесь нужно протаскивать индекс place на каждой итерации, что как-то не правильно, имхо, для рекурсивного алгоритма. Поэтому появился третий вариант:
object BufferizatorDistrib3
  {
    def makeDist( trxCount: int, quantums: int ) : List[ int ] =
      {
        def nextValue( values: List[ int ],
            remainingTrx: int,
            remainingQuantums: int ) : List[ int ] =
            {
              val r = Math.round(remainingTrx.toFloat / remainingQuantums) :: values
              if( remainingQuantums > 1 )
                nextValue( r, remainingTrx - r.head, remainingQuantums - 1 )
              else r
            }

        nextValue( Nil, trxCount, quantums ).reverse
      }

    def main( args: Array[ String ] ) =
      {
        val d = makeDist( 2, 6 )
        for( val i <- d )
          System.out.print( i + "," )
      }
  }

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

Так что выводы у меня сложились не однозначные. С одной стороны, лично для меня, D позволил сделать компактное и выразительное решение в императивном стиле. Плюс очень высокая скорость компиляции. Плюс D очень похож на C++, поэтому портирование (именно портирование, а не переписывание с нуля) имеющегося у меня C++ кода на D выглядит вполне реальным. Плюс D быстр (по крайней мере по тестам быстрее Scala), а производительность мне нужна. Но D не стабилен, хотя процесс его развития только ускоряется (мне так кажется). И библиотек для него кот наплакал, хотя можно пытаться C-ные использовать (вроде libxml2, openssl и пр.)

Но вот с другой стороны... Синтаксис Scala для меня после Ruby как-то ближе (например, все выражения имеют возвращаемые значения). Плюс Scala при критических ошибках (типа выхода за пределы массива) выдает полный stack trace, а D в release вообще помолчать может. Плюс Scala есть везде, где есть Java и для Scala есть все, что есть для Java (или так кажется). Плюс код на Scala можно интегрировать с кодом на Java. Минус то, что императивный код на Scala не так выразителен, как на D. А к функциональности еще привыкать нужно (например, необходимость вызова reverse после возврата из nextValue не слишком очевидна). Ну и под Scala все переписывать нужно

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
D и замыкания.
От: FR  
Дата: 17.11.06 09:27
Оценка:
Новый D стал нормально подерживать замыкания?

Такой код:
import std.stdio;

int delegate(int) test(int x)
{
return (int y) {return x + y;};    
}

void main()
{
writefln(test(123)(1));
writefln(test(10)(10));
}

Работает правильно.
Кто нибудь в курсе это так, или случайные совпадения , а то я в документации про замыкания ничего ни нашел.
Re[3]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 09:48
Оценка: 15 (1)
Здравствуйте, eao197, Вы писали:

E>Большей компактизации в Scala я достичь не смог. (Имхо, решение на Nemerle выиграло бы у Scala только за счет отсутствия типов аргументов для вложенной функции nextValue).


Прошу:

#pragma indent

using System.Console
using System.Math

def makeDistrib(trxCount : int, quantums : int)
    mutable r : list[int] = []
    mutable remainingTrx = trxCount
    mutable remainingQuantums = quantums
    foreach (_i in [1..quantums])
        r ::= Round(remainingTrx / (remainingQuantums :> double)) :> int
        remainingTrx -= r.Head
        --remainingQuantums
    r

def r = makeDistrib(2, 6)
WriteLine($"$r")
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[4]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 09:53
Оценка:
Здравствуйте, ie, Вы писали:

ie>
ie>#pragma indent

ie>using System.Console
ie>using System.Math

ie>def makeDistrib(trxCount : int, quantums : int)
ie>    mutable r : list[int] = []
ie>    mutable remainingTrx = trxCount
ie>    mutable remainingQuantums = quantums
ie>    foreach (_i in [1..quantums])
ie>        r ::= Round(remainingTrx / (remainingQuantums :> double)) :> int
ie>        remainingTrx -= r.Head
ie>        --remainingQuantums
ie>    r

ie>def r = makeDistrib(2, 6)
ie>WriteLine($"$r")
ie>


Выделенные декларации типов, безусловно, лишние. Для quantums декларация необходима, хотя мне кажется ее вполне можно было бы вывести из [1..quantums], но тут не уверен, надо смотреть.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[2]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 10:01
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Да, а вот здесь некто Reiner Pope соорудил шаблон RealCurry, который делает из функций типа plus(1,2,3) функции типа curried_plus(1)(2)(3):


Набросал макрос работающий аналогично. В Немерле он, конечно, нафиг не нужен, но ....

  macro RealCurry (func)
  {
    def typer = Macros.ImplicitCTX ();
    def smtype = typer.TypeExpr (func).Type.Hint;
    match (smtype)
    {
      | Some (MType.Fun as mtype) => 
        match (mtype.from)
        {
          | MType.Tuple (args) => 
            def makeCurryFunction (argCount, argNames)
            {
              if (argCount == 0)
                <[ $func(.. $argNames) ]>
              else
              {
                def x = Macros.NewSymbol ();
                def pe = <[ $(x : name) ]>;
                <[ ($pe) => { $(makeCurryFunction (argCount-1, argNames + [pe])) } ]>
              }
            }
            makeCurryFunction(args.Length, []);
          | MType.Class => 
            <[ $func ]>
          | MType.Void => 
            Message.FatalError (func.Location, $"`$func' should have at least one parameter.");
          | _ => 
            Message.FatalError (func.Location, $"Hmmm... Some strange arguments...");
        }
      | _ => Message.FatalError (func.Location, $"`$func' should be a function.");
    }
  }


Тест:

  module RealCurryTest
  {
    public Run () : void
    {
      def plus = (x, y, z) => { x + y + z };
      def cplus = RealCurry(plus);
      WriteLine(cplus(1)(2)(3));

      def mult = (x, y, z) => { x + y * z };
      def cmult = RealCurry(mult);
      WriteLine(cmult(1)(2)(3));
    }
  }


Что по поводу замечания
Автор: FR
Дата: 17.11.06
FR то согласен с ним на все 100. Давайте уж тогда со всеми языками сравнивать. А то как-то действительно часто всплывают однобокие темы: Nemerle vs ?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[4]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 10:20
Оценка: :)
Здравствуйте, ie, Вы писали:

ie>Прошу:


ie>
ie>#pragma indent

ie>using System.Console
ie>using System.Math

ie>def makeDistrib(trxCount : int, quantums : int)
ie>    mutable r : list[int] = []
ie>    mutable remainingTrx = trxCount
ie>    mutable remainingQuantums = quantums
ie>    foreach (_i in [1..quantums])
ie>        r ::= Round(remainingTrx / (remainingQuantums :> double)) :> int
ie>        remainingTrx -= r.Head
ie>        --remainingQuantums
ie>    r

ie>def r = makeDistrib(2, 6)
ie>WriteLine($"$r")
ie>


А без #pragma indent? (просто регулярно всплывают проблемы из-за табуляций/пробелов).
И разве WriteLine($"$r") будет печатать значения через запятую?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 10:38
Оценка:
Здравствуйте, eao197, Вы писали:

E>А без #pragma indent? (просто регулярно всплывают проблемы из-за табуляций/пробелов).


Тогда чуть больше строчек из-за {}, но ведь выразительность при этом не теряется.

E>И разве WriteLine($"$r") будет печатать значения через запятую?

[1, 0, 1, 0, 0, 0]

Если надо без скобочек [], то:
WriteLine(r.ToString(", "))
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[4]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 10:40
Оценка:
Здравствуйте, ie, Вы писали:

ie>Прошу:


ie>
ie>#pragma indent

ie>using System.Console
ie>using System.Math

ie>def makeDistrib(trxCount : int, quantums : int)
ie>    mutable r : list[int] = []
ie>    mutable remainingTrx = trxCount
ie>    mutable remainingQuantums = quantums
ie>    foreach (_i in [1..quantums])
ie>        r ::= Round(remainingTrx / (remainingQuantums :> double)) :> int
ie>        remainingTrx -= r.Head
ie>        --remainingQuantums
ie>    r

ie>def r = makeDistrib(2, 6)
ie>WriteLine($"$r")
ie>


Уж не знаю почему, но Nemerle 0.9.3 от 17 мая 2006 (который через MSI-инсталлятор ставится) выдает не правильный ответ:
[1, 0, 1, 0, 0, 0]


В то время как версии на Ruby, D и Scala:
0,0,1,0,1,0

Очень похоже, что Round округляет не в ту сторону, и что список не реверсирован.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: Ой, чо с D деется-то!?
От: Oyster Украина https://github.com/devoyster
Дата: 17.11.06 10:44
Оценка:
Здравствуйте, eao197, Вы писали:

E>Очень похоже, что Round округляет не в ту сторону


Возхможно. Используется Math.Round из BCL, а там по умолчанию банковское округление — если 0.5, то не от нуля (т.е. к 1), а к ближайшему чётному (т.е. 0). Это настраивается, естественно:

double x0 = Math.Round(0.5);  // x0 == 0.0
double x1 = Math.Round(0.5, MidpointRounding.AwayFromZero);  // x1 == 1.0
Re[5]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 10:54
Оценка:
Здравствуйте, eao197, Вы писали:

E>Очень похоже, что Round округляет не в ту сторону,


Угу, тут в примерах это хорошо видно. — почему такое поведение. Как-то, по-моему, в .NET эта тема поднималась, но к чему пришли не помню, лень искать

E>и что список не реверсирован.


+1 забыл
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[6]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 11:02
Оценка:
Здравствуйте, ie, Вы писали:

E>>Очень похоже, что Round округляет не в ту сторону,


ie>Угу, тут в примерах это хорошо видно. — почему такое поведение. Как-то, по-моему, в .NET эта тема поднималась, но к чему пришли не помню, лень искать


E>>и что список не реверсирован.


ie>+1 забыл


Опытным путем удалось установить, что достаточно прибавлять 0.1, тогда округляет как нужно. Но вот как сделать реверсию я не догнал
#pragma indent
 
using System.Console
using System.Math
 
def makeDistrib(trxCount : int, quantums : int)
    mutable r : list[int] = []
    mutable remainingTrx = trxCount
    mutable remainingQuantums = quantums
    foreach (_i in [1..quantums])
        r ::= Round((remainingTrx :> double) / remainingQuantums + 0.1) :> int
        remainingTrx -= r.Head
        --remainingQuantums
    r = r.Reverse
    r
 
def r = makeDistrib(2, 6)
WriteLine($"$r")


Кстати, именно учет особенности формирования списка и не нравится мне в функциональных решениях со списками. Слишком легко этот момент забыть. Императивный подход именно в данном примере лучше.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 11:12
Оценка:
Здравствуйте, eao197, Вы писали:

E>Опытным путем удалось установить, что достаточно прибавлять 0.1, тогда округляет как нужно. Но вот как сделать реверсию я не догнал

def makeDistrib(trxCount, quantums : int)
  mutable r = []
  mutable remainingTrx = trxCount
  mutable remainingQuantums = quantums
  foreach (_i in [1..quantums])
    // как правильно сказал Oyster
    r ::= Round(remainingTrx / (remainingQuantums :> double), 
                MidpointRounding.AwayFromZero) :> int
    remainingTrx -= r.Head
    --remainingQuantums
  r.Rev()


E>Кстати, именно учет особенности формирования списка и не нравится мне в функциональных решениях со списками. Слишком легко этот момент забыть. Императивный подход именно в данном примере лучше.


На самом деле привыкаешь быстро, однако, сам не перестаю удивляться, как уже вроде привыкши — вдруг не учел этот момент
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[8]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 11:19
Оценка: :)
Здравствуйте, ie, Вы писали:

ie>
ie>    // как правильно сказал Oyster
ie>    r ::= Round(remainingTrx / (remainingQuantums :> double), 
ie>                MidpointRounding.AwayFromZero) :> int
ie>


А почему у меня на этот символ ругается, мол не знаю, что такое?

ie>На самом деле привыкаешь быстро, однако, сам не перестаю удивляться, как уже вроде привыкши — вдруг не учел этот момент


А это к стати, в другую тему, к вопросу о гарантиях статической типизации
Автор: VladD2
Дата: 08.11.06
.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 11:36
Оценка:
Здравствуйте, eao197, Вы писали:

ie>>
ie>>    // как правильно сказал Oyster
ie>>    r ::= Round(remainingTrx / (remainingQuantums :> double), 
ie>>                MidpointRounding.AwayFromZero) :> int
ie>>

E>А почему у меня на этот символ ругается, мол не знаю, что такое?

Ээээ... Этот enum в System лежит, может не добавил using System?

ie>>На самом деле привыкаешь быстро, однако, сам не перестаю удивляться, как уже вроде привыкши — вдруг не учел этот момент

E>А это к стати, в другую тему, к вопросу о гарантиях статической типизации
Автор: VladD2
Дата: 08.11.06
.


Дык тут руки кривые никакая типизация не спасет
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[5]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 11:39
Оценка:
Здравствуйте, eao197, Вы писали:

E>А без #pragma indent? (просто регулярно всплывают проблемы из-за табуляций/пробелов).

using System.Console
using System.Math

def makeDistrib(trxCount : int, quantums : int)
{
    mutable r : list[int] = []
    mutable remainingTrx = trxCount
    mutable remainingQuantums = quantums
    foreach (_i in [1..quantums])
    {
        r ::= Round(remainingTrx / (remainingQuantums :> double)) :> int
        remainingTrx -= r.Head
        --remainingQuantums
    }
    r
}

def r = makeDistrib(2, 6)
WriteLine($"$r")


E>И разве WriteLine($"$r") будет печатать значения через запятую?

А ты проверь
hint: r имеет тип list[int] для которого в немерле перегружена операция преобразования к строке.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 11:39
Оценка: +2
Здравствуйте, eao197, Вы писали:

E>К тому что Nemerle здесь оффтопик, зачем его вообще поминать было я не понял.

Ну тебе этог не мешает приплетать руби куда попало.

WH>> из под стола раскажи это тем кто сделал внятные рантаймы.

E>А ты из их числа?
А мне не нужно быть разработчиком рантаймов чтобы оценить их качество.
Также как мне не нужно быть кондитером для того чтобы оценить качество торта.

E>Ну вот, еще и Ruby приплели. У тебя есть проблемы с Ruby-новым runtime? Ты им вообще пользуешься? Или языком в форумах?

E>На своих задачах я проблем в Ruby runtime не встречал. А что до скорости, так еще вопрос, может ли настолько динамический язык, как Ruby быть быстрым.
Может. До статики ему конечно не добратся никогда но быть гораздо быстрее чем руби можно.
E>Одна горячая замена кода чего стоит.
А чего она стоит? Ее можно делать в так называемых safe-point'ах в которых GC тормозит программу.
E>Erlang, к примеру, такую возможность предоставляет, но и сам при этом не быстр.
Ибо интерпритатор.
А для горячей замены не нужна ни интерпритация ни динамическая типизация. Это ортогональные понятия.
E>А ведь Erlang клепают проффесиональные разработчики языков и рантаймов. Клепатели JRuby, которые на гораздо более современном языке (а не на C) пытаются интерпритатор Ruby сделать и то пока даже сравнимых результатов достичь не могут.
Сколько они затратили на это времени? А сколько эрланговцы?

WH>>Если бы он выбрал бы путь аля немерле то давно бы язык зарелизил и кучу фенечек прикрутил.

E>Немерле уже в релизе?
А D? К тому же опять сколько времени делают немерле и сколько D? Я вот про D узнал за несколько лет до того как первый раз услышал про немерле. И еще учти что немерле горазо технологичнее чем D (один вывод типов чего стоит), а технологии требуют исследований. В тоже время в D нет вобще ничего скольнибудь не тривиального.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 11:40
Оценка: +1
Здравствуйте, eao197, Вы писали:


E>А к функциональности еще привыкать нужно (например, необходимость вызова reverse после возврата из nextValue не слишком очевидна). Ну и под Scala все переписывать нужно


Да вроде в функционалном стиле код проще получается, например на питоне:

def make_dist(trx_count, quantum_count, result = []):
    if quantum_count == 0: 
        return result
    else:
        result.append(int(round(float(trx_count) / quantum_count)))
        return make_dist(trx_count - result[-1], quantum_count - 1, result)

print ", ".join(map(str, make_dist(2, 6)))
Re[10]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 11:41
Оценка: :)
Здравствуйте, ie, Вы писали:

ie>Ээээ... Этот enum в System лежит, может не добавил using System?


В твоем коде этого using-а не было, вот и не работало. Я же на .NET ничего не писал, вот и не знаю, где что лежит.
С using-ом заработало.

Резумируя -- если не считать python-вского синтаксиса, то читабельность, имхо естественно, на уровне D.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 11:49
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>>>Если бы он выбрал бы путь аля немерле то давно бы язык зарелизил и кучу фенечек прикрутил.

E>>Немерле уже в релизе?
WH>А D? К тому же опять сколько времени делают немерле и сколько D? Я вот про D узнал за несколько лет до того как первый раз услышал про немерле. И еще учти что немерле горазо технологичнее чем D (один вывод типов чего стоит), а технологии требуют исследований. В тоже время в D нет вобще ничего скольнибудь не тривиального.

D если не ошибаюсь делает всего один человек.
Насчет не тривиального, судя по последнему релизу D уже стал мощнее чем C++. И все что годами не могли реализовать большие компании (ту же подержку шаблонов) в D появилось очень быстро и гораздо удобнее чем в С++. (На возражение что D слизало готовое, Немерле тоже самое сделало с ML языков).
Re[8]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 11:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

E>>К тому что Nemerle здесь оффтопик, зачем его вообще поминать было я не понял.

WH>Ну тебе этог не мешает приплетать руби куда попало.

В данной теме инициатива поговорить о Nemerle и Ruby исходит от тебя.

WH>Также как мне не нужно быть кондитером для того чтобы оценить качество торта.

Доказательство по аналогии есть... ну ты знаешь.

E>>Erlang, к примеру, такую возможность предоставляет, но и сам при этом не быстр.

WH>Ибо интерпритатор.
WH>А для горячей замены не нужна ни интерпритация ни динамическая типизация. Это ортогональные понятия.

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

E>>А ведь Erlang клепают проффесиональные разработчики языков и рантаймов. Клепатели JRuby, которые на гораздо более современном языке (а не на C) пытаются интерпритатор Ruby сделать и то пока даже сравнимых результатов достичь не могут.

WH>Сколько они затратили на это времени? А сколько эрланговцы?

Зато они стали высказываться, что нынешняя реализация рантайма Ruby не так плоха, как про нее принято говорить. Сделать лучше не так уж и просто.

WH>>>Если бы он выбрал бы путь аля немерле то давно бы язык зарелизил и кучу фенечек прикрутил.

E>>Немерле уже в релизе?
WH>А D?

Это ты начал приводить пример Nemerle как правильный путь к достижению релиза. Имхо, пока Nemerle сам не зарелизен, делать такие сравнения преждевременно.

WH> К тому же опять сколько времени делают немерле и сколько D? Я вот про D узнал за несколько лет до того как первый раз услышал про немерле. И еще учти что немерле горазо технологичнее чем D (один вывод типов чего стоит), а технологии требуют исследований.


Вывод типов есть и в D, вообще-то говоря.
А то, что D такой долгострой, так это вообще лично мне не понятно. Видимо, Брайт считает, что спешить особо не нужно. D нацелен на нишу C++, вытеснить оттуда C++ полностью вообще не получится, а вот отвоевать свое место вполне возможно. Но для этого нужно, чтобы язык получился более качественным, чем C++. Но для этого требуется время. Какие-то вещи в D (тот же самый вывод типов, теперь вот туплы) появляются с течением времени, что делает язык лучше. В общем, обычный процесс эволюции.
К тому же за прошедшее время D стал, как минимум, достаточно известным и сформировал вокруг себя некоторую community. А это так же требует времени.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 12:15
Оценка: 81 (3)
Здравствуйте, eao197, Вы писали:

E>А это к стати, в другую тему, к вопросу о гарантиях статической типизации
Автор: VladD2
Дата: 08.11.06
.

Это в другую тему
def makeDistrib(trxCount : int, quantums : int)
{
| (_, 0) => []
| (remainingTrx, remainingQuantums) =>
    def r = (remainingTrx :> double) / remainingQuantums;
    def r = Round(r, MidpointRounding.AwayFromZero) :> int;
    r :: makeDistrib(remainingTrx - r, remainingQuantums - 1);
}
def r = makeDistrib(2, 6);
WriteLine($"$r");

Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.
И заметь ни одной изменяемой переменной не вобще.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 12:18
Оценка:
Здравствуйте, FR, Вы писали:

FR>(На возражение что D слизало готовое, Немерле тоже самое сделало с ML языков).

В немерле совершенно иной вывод типов не имеющий ничего общего в ML.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 12:31
Оценка:
Здравствуйте, eao197, Вы писали:

WH>>Также как мне не нужно быть кондитером для того чтобы оценить качество торта.

E>Доказательство по аналогии есть... ну ты знаешь.
Это не доказательство. Это иллюстрация.
Ибо я могу взять рантайм и посмотреть как он работает. Так вот руби тормозит ужасно.

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

Это смотря как ее компилировать... если как С++ то конечно ничего не выдет.

E>Вывод типов есть и в D, вообще-то говоря.

Надеюсь ты не про это
auto test = new Testing(1, 2, 3);


Так вот по сравнению с неммерле это вобще ерунда.
E>А то, что D такой долгострой, так это вообще лично мне не понятно. Видимо, Брайт считает, что спешить особо не нужно. D нацелен на нишу C++, вытеснить оттуда C++ полностью вообще не получится, а вот отвоевать свое место вполне возможно.
На кой черт этот мутант там вобще нужен?
Если нужно выжимать биты из быйтов то нужен либо обыкновенный С/С++ либо совершенно иная нежели CLR и JavaVM виртуальная машина.
E>Но для этого нужно, чтобы язык получился более качественным, чем C++.
Для этого нужно менять основы.
E>Но для этого требуется время. Какие-то вещи в D (тот же самый вывод типов, теперь вот туплы) появляются с течением времени, что делает язык лучше. В общем, обычный процесс эволюции.
Тоже самое будет в следующем стандарте С++.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 12:44
Оценка:
Здравствуйте, FR, Вы писали:

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



E>>А к функциональности еще привыкать нужно (например, необходимость вызова reverse после возврата из nextValue не слишком очевидна). Ну и под Scala все переписывать нужно


FR>Да вроде в функционалном стиле код проще получается, например на питоне:


Кстати на D тоже:
import std.math;
import std.stdio;

int[] makeDistrib2(int trxCount, int quantums,  int[] result = [])
{
if(quantums == 0) return result;

auto next = cast(int)round(cast(float)trxCount / quantums);
return makeDistrib2(trxCount - next, quantums - 1, result ~ [next]);
}

void main()
{
writefln(makeDistrib2( 2, 6 ));
}
Re[10]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 12:52
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


FR>>(На возражение что D слизало готовое, Немерле тоже самое сделало с ML языков).

WH>В немерле совершенно иной вывод типов не имеющий ничего общего в ML.

Точно ничего общего не имеющий?
И почему сразу вывод типов, а паттерн матчинг там откуда?
Re[10]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 12:52
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.

WH>И заметь ни одной изменяемой переменной не вобще.

http://rsdn.ru/forum/Message.aspx?mid=2220435&amp;only=1
Автор: FR
Дата: 17.11.06
Re[10]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 12:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ибо я могу взять рантайм и посмотреть как он работает. Так вот руби тормозит ужасно.


А ты знаешь систему, в которой есть такая же степень динамизма, но не такие тормоза?
Которая, к примеру, открытые классы поддерживала бы?

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

WH>Это смотря как ее компилировать... если как С++ то конечно ничего не выдет.

Предложи вариант, как компилировать. Может как в Java или C#?

WH>Надеюсь ты не про это

WH>
WH>auto test = new Testing(1, 2, 3);
WH>

WH>
WH>Так вот по сравнению с неммерле это вобще ерунда.

Нет, не про это. Посмотри, скажем на исходный пример с CurryAll.

E>>А то, что D такой долгострой, так это вообще лично мне не понятно. Видимо, Брайт считает, что спешить особо не нужно. D нацелен на нишу C++, вытеснить оттуда C++ полностью вообще не получится, а вот отвоевать свое место вполне возможно.

WH>На кой черт этот мутант там вобще нужен?
WH>Если нужно выжимать биты из быйтов то нужен либо обыкновенный С/С++ либо совершенно иная нежели CLR и JavaVM виртуальная машина.

Да уж, виртуальная машина, чтобы биты выжимать. Круто.
Ты вот сейчас на C++ для Linux и AIX (если я ничего не перепутал) пишешь. В связи с этим два вопроса:
1) помешало бы тебе, чтобы вместо C++ там был гораздо более предсказуемый и стройный D, который и компилируется к тому же в сотни раз быстрее, чем C++? Чем хуже сегодня выжимать максимум из железа на D, а не на C++ (давай не будем брать библиотеки, просто основные качества языка)?

2) почему же ты не используешь Nemerle? Он что, биты хуже выжимает?

E>>Но для этого требуется время. Какие-то вещи в D (тот же самый вывод типов, теперь вот туплы) появляются с течением времени, что делает язык лучше. В общем, обычный процесс эволюции.

WH>Тоже самое будет в следующем стандарте С++.

Есть у меня подозрения, что будущий стандарт C++ будет меня интересовать постольку, поскольку. К тому же у D есть все шансы предоставить такие же возможности, но на пару лет раньше.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 13:00
Оценка:
Здравствуйте, FR, Вы писали:

WH>>Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.

WH>>И заметь ни одной изменяемой переменной не вобще.
FR>http://rsdn.ru/forum/Message.aspx?mid=2220435&amp;only=1
Автор: FR
Дата: 17.11.06

И что ты этим сказать хотел?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 13:00
Оценка:
Здравствуйте, FR, Вы писали:

WH>>В немерле совершенно иной вывод типов не имеющий ничего общего в ML.

FR>Точно ничего общего не имеющий?
Ну начнем с того что в немерле принципиально иная система типов...

FR>И почему сразу вывод типов, а паттерн матчинг там откуда?

WH>А D? К тому же опять сколько времени делают немерле и сколько D? Я вот про D узнал за несколько лет до того как первый раз услышал про немерле. И еще учти что немерле горазо технологичнее чем D (один вывод типов чего стоит), а технологии требуют исследований. В тоже время в D нет вобще ничего скольнибудь не тривиального.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 13:02
Оценка:
Здравствуйте, FR, Вы писали:

FR>>Да вроде в функционалном стиле код проще получается, например на питоне:

FR>Кстати на D тоже:

Короче, все как обычно, везде делается проще, главное с нужной стороны подойти
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[11]: Ой, чо с D деется-то!?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 17.11.06 13:09
Оценка: 1 (1) +2 :)))
Здравствуйте, eao197, Вы писали:

E>А ты знаешь систему, в которой есть такая же степень динамизма, но не такие тормоза?

E>Которая, к примеру, открытые классы поддерживала бы?

Э-э-э. Ну этот, ну ты понял.
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[12]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 13:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


WH>>>В немерле совершенно иной вывод типов не имеющий ничего общего в ML.

FR>>Точно ничего общего не имеющий?
WH>Ну начнем с того что в немерле принципиально иная система типов...

Да расширена, но основа то была, не на пустом месте делали.

FR>>И почему сразу вывод типов, а паттерн матчинг там откуда?

WH>

WH>>А D? К тому же опять сколько времени делают немерле и сколько D? Я вот про D узнал за несколько лет до того как первый раз услышал про немерле. И еще учти что немерле горазо технологичнее чем D (один вывод типов чего стоит), а технологии требуют исследований. В тоже время в D нет вобще ничего скольнибудь не тривиального.


И что?
Будем по кругу бегать?
Re[12]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 13:14
Оценка: 15 (1)
Здравствуйте, WolfHound, Вы писали:

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


WH>>>Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.

WH>>>И заметь ни одной изменяемой переменной не вобще.
FR>>http://rsdn.ru/forum/Message.aspx?mid=2220435&amp;only=1
Автор: FR
Дата: 17.11.06

WH>И что ты этим сказать хотел?

Только то что в D это получается не хуже чем в Nemerle, полный аналог твоего кода даже читабельней по моему:
import std.math;
import std.stdio;

int[] makeDistrib(int trxCount, int quantums)
{
if(quantums == 0) return [];

auto next = cast(int)round(cast(float)trxCount / quantums);
return [next] ~ makeDistrib(trxCount - next, quantums - 1);
}

void main()
{
writefln(makeDistrib(2, 6));
}
Re[10]: Ой, чо с D деется-то!?
От: Gajdalager Украина  
Дата: 17.11.06 13:17
Оценка: 45 (2)
Здравствуйте, WolfHound, Вы писали:

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


E>>А это к стати, в другую тему, к вопросу о гарантиях статической типизации
Автор: VladD2
Дата: 08.11.06
.

WH>Это в другую тему
WH>
WH>def makeDistrib(trxCount : int, quantums : int)
WH>{
WH>| (_, 0) => []
WH>| (remainingTrx, remainingQuantums) =>
WH>    def r = (remainingTrx :> double) / remainingQuantums;
WH>    def r = Round(r, MidpointRounding.AwayFromZero) :> int;
WH>    r :: makeDistrib(remainingTrx - r, remainingQuantums - 1);
WH>}
WH>def r = makeDistrib(2, 6);
WH>WriteLine($"$r");
WH>

WH>Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.
WH>И заметь ни одной изменяемой переменной не вобще.

Обогнал

object BufferizationDisturb extends Application {
  def makeDist(trxCount: int, quantum: int): List[int] = quantum match {
      case 0 => Nil
      case _ => {
        import java.lang.Math;
        val put = Math.round(trxCount.toFloat / quantum)
        put :: makeDist(trxCount - put, quantum - 1);
      }
    }
  val d = makeDist(2, 6)
  Console.println(d.mkString("", ", ", ""));
}

Но все равно на строчку меньше чем Руби
Re[10]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 13:17
Оценка: 9 (1)
Здравствуйте, WolfHound, Вы писали:

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


E>>А это к стати, в другую тему, к вопросу о гарантиях статической типизации
Автор: VladD2
Дата: 08.11.06
.

WH>Это в другую тему
WH>
WH>def makeDistrib(trxCount : int, quantums : int)
WH>{
WH>| (_, 0) => []
WH>| (remainingTrx, remainingQuantums) =>
WH>    def r = (remainingTrx :> double) / remainingQuantums;
WH>    def r = Round(r, MidpointRounding.AwayFromZero) :> int;
WH>    r :: makeDistrib(remainingTrx - r, remainingQuantums - 1);
WH>}
WH>def r = makeDistrib(2, 6);
WH>WriteLine($"$r");
WH>


Паттер-матчинг, говоришь...
object BufferizatorDistrib4
  {
    def makeDist( trxCount: int, quantums: int ) : List[ int ] =
      quantums match
      {
        case 0 => Nil
        case _ =>
              val r = Math.round(trxCount.toFloat / quantums)
              r :: makeDist( trxCount - r, quantums - 1 )
      }

    def main( args: Array[ String ] ) =
      {
        System.out.print( makeDist( 2, 6 ) )
      }
  }


WH>Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.

WH>И заметь ни одной изменяемой переменной не вобще.

Среди первых трех моих решений на Scala последнее как раз было без изменяемых переменных. Через val в Scala объявляется константа.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 13:19
Оценка:
Здравствуйте, eao197, Вы писали:

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


WH>>Ибо я могу взять рантайм и посмотреть как он работает. Так вот руби тормозит ужасно.


E>А ты знаешь систему, в которой есть такая же степень динамизма, но не такие тормоза?

E>Которая, к примеру, открытые классы поддерживала бы?

Таких полно
Re[12]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 13:23
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

E>>А ты знаешь систему, в которой есть такая же степень динамизма, но не такие тормоза?

E>>Которая, к примеру, открытые классы поддерживала бы?

ANS>Э-э-э. Ну этот, ну ты понял.




Кстати, в тему:

From: Avi Bryant (Nov 12 2006, at 16:04)

So I was curious just how much better those mythical Smalltalk VMs did at array indexing, and ran some quick benchmarks. In all cases what I was measuring was the time it took to do one billion accesses of a 1000 element array of integers in the 0..255 range, discounting loop overhead and startup time. This is on my MacBook Pro; Ruby, Squeak and Java are running natively, Strongtalk is in Windows inside Parallels so probably slightly penalized. Here's what I got; for some reason the top three fall neatly into a 10x progression.

Java: 0.7s

Strongtalk Smalltalk: 7.0s

Squeak Smalltalk: 70s

Ruby: 200s

Java is definitely the winner, which shouldn't be that surprising given that it has a primitive char type whereas everyone else is working with tagged integers. The other three are a "fair" comparison, in that the languages are all equally dynamic, open classes, objects all the way down, yadda yadda. Except that it's not fair, because the Strongtalk VM just cleans the floor with the other two. And (as I always feel compelled to point out) Ruby could run on this VM with 0 performance penalty, completely unlike JRuby, Ruby.NET, and so on.

So, Tim, want RX to run 30x faster? Let's get Ruby running on Strongtalk.



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 13:32
Оценка: :)
Здравствуйте, Gajdalager, Вы писали:

G>Обогнал


G>
G>object BufferizationDisturb extends Application {
G>  def makeDist(trxCount: int, quantum: int): List[int] = quantum match {
G>      case 0 => Nil
G>      case _ => {
G>        import java.lang.Math;
G>        val put = Math.round(trxCount.toFloat / quantum)
G>        put :: makeDist(trxCount - put, quantum - 1);
G>      }
G>    }
G>  val d = makeDist(2, 6)
G>  Console.println(d.mkString("", ", ", ""));
G>}
G>

G>Но все равно на строчку меньше чем Руби

Да ладно сравнивать императивное решение с функциональным:
def make_dist(trx_count, quantum_count)
  return [] if 0 == quantum_count
  r = (trx_count.to_f / quantum_count).round
  [ r ] + make_dist( trx_count - r, quantum_count - 1 )
end

r = make_dist( 2, 6 )
puts r.join(',')


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: Cyberax Марс  
Дата: 17.11.06 13:40
Оценка:
WolfHound wrote:
> E>Тем более, что Nemerle -- это только .NET, в отличии от D. Т.к. они
> вообще в разных песочницах расти будут.
> А что у D в плане переносимости есть какието преймущества перед Mono?
Да. Для D есть GCC frontend, так что (в теории) D будет работать почти
на всех платформах, где есть GCC.

> В любом случае сделать рантайм немерле не завязанный на .NET вполне

> возможно.
Ага, конечно.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re: D и замыкания.
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 13:43
Оценка:
Здравствуйте, FR, Вы писали:

FR>Новый D стал нормально подерживать замыкания?


FR>Такой код:

FR>
FR>import std.stdio;

FR>int delegate(int) test(int x)
FR>{
FR>return (int y) {return x + y;};    
FR>}

FR>void main()
FR>{
FR>writefln(test(123)(1));
FR>writefln(test(10)(10));
FR>}
FR>

FR>Работает правильно.
FR>Кто нибудь в курсе это так, или случайные совпадения , а то я в документации про замыкания ничего ни нашел.

Может быть ты об этом:

When comparing with nested functions, the function form is analogous to static or non-nested functions, and the delegate form is analogous to non-static nested functions. In other words, [b]a delegate literal can access stack variables in its enclosing function[/url], a function literal cannot.


Хотя про замыкания действительно не помню, может это бага?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 13:54
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>А ты знаешь систему, в которой есть такая же степень динамизма, но не такие тормоза?

E>Которая, к примеру, открытые классы поддерживала бы?
Меня такие системы не интерисуют ибо тормоза по определению.

WH>>Это смотря как ее компилировать... если как С++ то конечно ничего не выдет.

E>Предложи вариант, как компилировать. Может как в Java или C#?
Так они точно также как С++ компилятся.(ну с мелкими отличиями)

E>Нет, не про это. Посмотри, скажем на исходный пример с CurryAll.

Прости не вижу я там вывода типов кроме самого примитива аля auto.

E>Да уж, виртуальная машина, чтобы биты выжимать. Круто.

Зря смеешся. Если в ВМ сделать поддержку работы с битами то это будет даже проще чем на С/С++ и с очень высокой вероятностью эффективней.

E>Ты вот сейчас на C++ для Linux и AIX (если я ничего не перепутал) пишешь. В связи с этим два вопроса:

Без AIX
E>1) помешало бы тебе,
Мне оно ни разу бы не помогло.
E>чтобы вместо C++ там был гораздо более предсказуемый и стройный D,
У меня и С++ очень предсказуемый. А у тех у кого С++ не предсказуемый и D будет страдать темже в полный рост.
E>который и компилируется к тому же в сотни раз быстрее, чем C++?
Умные люди проектировавшие систему сделали так что все разбито на кучу маленьких so'шик. Сошки разложены по пакетам...
Так что с временем компиляции проблем не возникает вобще.
Те это конечно не плохо былобы иметь но это не критично вобще.
E>Чем хуже сегодня выжимать максимум из железа на D, а не на C++
В D консервативный GC, а это тормоза по определению.
Плюс у меня огоромный сервер с сотнями потоков и жрущий память гигами. Работает эта дура на многопроцессорном железе. И живет все это в кластере из десятков таких железок...
Консервативный ГЦ в таких условиях это смерь всему.
E>(давай не будем брать библиотеки, просто основные качества языка)?
А если будем?

E>2) почему же ты не используешь Nemerle? Он что, биты хуже выжимает?

либо совершенно иная нежели CLR и JavaVM виртуальная машина.

Ты вобще читаешь что я пишу?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 14:01
Оценка: 30 (1) :))) :))
Здравствуйте, eao197, Вы писали:

E>Да ладно сравнивать императивное решение с функциональным:

Точно-точно!
makeDist _ 0 = []
makeDist n m = let r = round (fromIntegral n / m) in r : makeDist (n-r) (m-1)
main = show (makeDist 2 6)
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[2]: D и замыкания.
От: FR  
Дата: 17.11.06 14:03
Оценка:
Здравствуйте, eao197, Вы писали:

E>Может быть ты об этом:

E>

E>When comparing with nested functions, the function form is analogous to static or non-nested functions, and the delegate form is analogous to non-static nested functions. In other words, [b]a delegate literal can access stack variables in its enclosing function[/url], a function literal cannot.


E>Хотя про замыкания действительно не помню, может это бага?


Не это не то просто function считается статическим и соответствено не может ссылатся на локальные переменные, delegate же может. Но для delegate там ниже написано что нельзя ссылатся на локальные переменные из вложенной функции, так как при выходе получим мусор указывающий на стек, я попробовал на простых примерах все почему-то работает, вот и гадаю теперь UB или не UB Ладно надо будет примерчик посложнее проверить.
Re[13]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 14:03
Оценка:
Здравствуйте, FR, Вы писали:

FR>Только то что в D это получается не хуже чем в Nemerle, полный аналог твоего кода даже читабельней по моему:

А если взять чуть мение игрушечный пример?
Re[7]: синтаксический анализатор
Автор: WolfHound
Дата: 23.10.06
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 14:03
Оценка: +1
Здравствуйте, FR, Вы писали:

WH>>Ну начнем с того что в немерле принципиально иная система типов...

FR>Да расширена, но основа то была, не на пустом месте делали.
Нет не расширена. Там совсем другая система типов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: Ой, чо с D деется-то!?
От: Vermicious Knid  
Дата: 17.11.06 14:28
Оценка: 30 (1)
Здравствуйте, ie, Вы писали:

E>>Да ладно сравнивать императивное решение с функциональным:

ie>Точно-точно!
ie>
ie>makeDist _ 0 = []
ie>makeDist n m = let r = round (fromIntegral n / m) in r : makeDist (n-r) (m-1)
ie>

Ну и Nemerle можно таким образом ужать:
def makeDist(n, m)
    if (n == 0) [] else
        def r = (n / m:>double).Round():>int; r :: makeDist(n-r, m-1)

Главная причина, по которой Nemerle трудно соревноваться в краткости со многими другими языками, это на самом деле .NET BCL и стандартная библиотека Nemerle, которая написана в стиле .NET BCL. Они вообще не способствуют написанию краткого кода. Но есть в принципе способы, которые позволяют это частично исправить. Например в примере выше используется такой вот маленький helper:
module RoundExt
    public Round(this num : double, mode : MidpointRounding = MidpointRounding.AwayFromZero) : double
        System.Math.Round(num, mode)
Re[14]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 17.11.06 14:34
Оценка: :)))
Здравствуйте, Vermicious Knid, Вы писали:

E>>>Да ладно сравнивать императивное решение с функциональным:

ie>>Точно-точно!
VK>Ну и Nemerle можно таким образом ужать:

Да я собсно и не спорю, ужать действительно что угодно можно, это так шутка юмора была
А кстати! J, дайте J!!
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[14]: Ой, чо с D деется-то!?
От: Vermicious Knid  
Дата: 17.11.06 14:40
Оценка: :)
Здравствуйте, Vermicious Knid, Вы писали:

VK>
VK>def makeDist(n, m)
VK>    if (m == 0) [] else
VK>        def r = (n / m:>double).Round():>int; r :: makeDist(n-r, m-1)
VK>

В примере была ошибка. Вот поэтому лучше ничего так не ужимать.
Re[12]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 15:06
Оценка:
Здравствуйте, WolfHound, Вы писали:

E>>Нет, не про это. Посмотри, скажем на исходный пример с CurryAll.

WH>Прости не вижу я там вывода типов кроме самого примитива аля auto.

Ну и ладно.

E>>Да уж, виртуальная машина, чтобы биты выжимать. Круто.

WH>Зря смеешся. Если в ВМ сделать поддержку работы с битами то это будет даже проще чем на С/С++ и с очень высокой вероятностью эффективней.

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

E>>Ты вот сейчас на C++ для Linux и AIX (если я ничего не перепутал) пишешь. В связи с этим два вопроса:

WH>Без AIX
E>>1) помешало бы тебе,
WH>Мне оно ни разу бы не помогло.

Ok. Вопрос закрыт.

E>>2) почему же ты не используешь Nemerle? Он что, биты хуже выжимает?

WH>

либо совершенно иная нежели CLR и JavaVM виртуальная машина.

WH>Ты вобще читаешь что я пишу?

Читаю, только есть в природе такая ВМ?
А вот Nemerle есть. Но ты его не используешь. Почему?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 15:17
Оценка:
Здравствуйте, FR, Вы писали:

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


АХ>>Для того чтобы почувствовать разницу вот тот же самый код на Nemerle


FR>А почему именно на Nеmerle?

Потому что эти языки (D и Nemerle) как мне кажется как раз могут рассматриваться в качестве конкурентов
(ну по крайней мере мне так кажется), поскольку оба статически типизированы, в них есть вывод типов (хотя у Немерле он и значительно мощнее), обладают средствами метапрограммирования
и активно развиваются.
Судя хотя бы вот по этой таблице
Автор: VladD2
Дата: 18.05.06
(хотя там не все верно, см. комментарии) у них много общих фич.

FR>Почему не на Наскеле или даже Питоне?

Питон — это динамика. Так что немного из другой оперы.
Хаскель не знаю

FR>Тоже будет такой же краткий код.

Да вот не такой же краткий (это еще к тому же только 2.5 который недавно вышел):

import functools.partial

def plus(x, y, z):
    return x + y + z

def minus(x, y, z):
    return x - y - z

plus_two = partial(plus,2);
print plus_two(6, 8)

plus_three = partial(plus_two,3);
print plus_three(7)

plus_all = partial(partial(partial(plus,3),4),5); # видимо только так?
print plus_all()

minus_all = partial(partial(partial(minus,7),8),9);
print minus_all()
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: D и замыкания.
От: Андрей Хропов Россия  
Дата: 17.11.06 15:17
Оценка:
Здравствуйте, FR, Вы писали:

FR>Не это не то просто function считается статическим и соответствено не может ссылатся на локальные переменные, delegate же может. Но для delegate там ниже написано что нельзя ссылатся на локальные переменные из вложенной функции, так как при выходе получим мусор указывающий на стек, я попробовал на простых примерах все почему-то работает, вот и гадаю теперь UB или не UB Ладно надо будет примерчик посложнее проверить.


UB. попробуй
import std.stdio;

void main()
{
  int delegate(int) test(int x)
  {
    return (int y) {return x + y;};    
  }
  
  writefln(test(1)(2));
}


Кое-что писал по этому поводу здесь.
Вальтер ответил что посмотрим ближе к 2.0. Но в свете последних фич может и раньше увидим.
Ведь по сути вот эти функции Curry делают те же замыкания руками.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 15:26
Оценка:
Здравствуйте, eao197, Вы писали:

WH>>Зря смеешся. Если в ВМ сделать поддержку работы с битами то это будет даже проще чем на С/С++ и с очень высокой вероятностью эффективней.

E>Никогда не поверю, что соптимизированный под конкретное железо нативный код будет проигрывать ВМ.
Это можно достичь только на асме и только очень долго вылизывая код. А порвать С/С++ имея качественную модель ВМ не сложно.

E>А вот Nemerle есть. Но ты его не используешь. Почему?

По тому что корпоративный стандарт это С++. Плюс у моно все тотже консервативный ГЦ... Может они из жабы потырят нормальный...
В любом случае в CLR весьма хреново с обработкой битовых последовательностей.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 16:21
Оценка:
Здравствуйте, FR, Вы писали:

FR>>Да вроде в функционалном стиле код проще получается, например на питоне:


FR>Кстати на D тоже:


Более функциональный стиль это:
import std.math;
import std.stdio;

int[] makeDistrib2(int trxCount, int quantums,  int[] result = [])
{
  return (quantums == 0) ?
      result
    : { auto next = cast(int)round(cast(float)trxCount / quantums);
        return makeDistrib2(trxCount - next, quantums - 1, result ~ [next]); }() ;
}

void main()
{
  writefln(makeDistrib2( 2, 6 ));
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 16:21
Оценка: +2
Здравствуйте, WolfHound, Вы писали:

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


АХ>>Знаешь, с одной стороны да (этот синтаксис Tuples просто жесть по сравнение с Nemerle), с другой стороны в низкоуровневом языке задача которого заменить C/C++ это неплохо.

WH>Системный язык не должен быть низкоуровневым.
Ну хорошо, выражусь по-другому: в системном языке должна быть возможность спуститься на низкий уровень и контролировать каждый бит. Все время это делать не надо, но, скажем, критические части ядра ОС по-другому не напишешь.

WH>Все что нужно это value-типы, поддержка двоичных данных на уровне виртуальной машины и оптимизатор который умеет делать region-inference. Еще нужно иметь несколько различных алгоритмов сборщика мусора в том числе подсчет ссылок и вобще отсутствие сборщика мусора (работает только region-inference).


Не согласен.
Помимо этого должна быть возможность вообще не пользоваться сборщиком мусора,
не должно быть обязательной зависимости от большого рантайма (для встроенных систем и вообще где мало памяти), должен быть встроенный ассемблер (желательно с легко настраиваемым под конкретную архитектуру набором инструкций) и указатели (можно (и даже неплохо) их конечно поместить в отдельный unsafe-загон, как в C#, но они должны быть, хотя бы для того чтобы реализовывать сборщики мусора).
Также должны быть средства жесткого задания бинарного представления в структурах (в D есть шаги в этом направлении).

WH>Короче см singularity там почти оно только CLR на роль виртуальной машины для ОС не очень подходит.

На языке для системного программирования должно быть можно написать ядро ОС.
Ядро в Singularity написано на assembler + C++ + С# (safe и unsafe).
Хотя неверифицируемая часть состоит всего из 5% кода.

Что ж, ждем-с этого счастья.

АХ>> Мне кажется основная проблема D сейчас — довольно медленный GC (ну и библиотек немного, но это уже скорее про инфраструктуру, а не сам язык):

WH>А для D не возможен быстрый GC. Ибо быстрый == точный, а не консервативный как в D.
Как в текущей реализации D.
Да, вот и надо приделать к D точный копирующий GC.

WH>Проблема в том что дизайн D просто не позволяет сделать точный сборщик мусора.

Почему? Надо только разобраться с вопросом можно ли (и как) работать с указателями на GC объекты.
Дизайн D вообще говоря меняется.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 16:37
Оценка:
Здравствуйте, WolfHound, Вы писали:

E>>Никогда не поверю, что соптимизированный под конкретное железо нативный код будет проигрывать ВМ.

WH>Это можно достичь только на асме и только очень долго вылизывая код. А порвать С/С++ имея качественную модель ВМ не сложно.
Зависит от задач.
Для тех где много мелких хаотично связанных объектов создается — да, GC рулит.
Для задач где много вычислений (+ грамотно написанных) — вряд ли. Хоть Java с HotSpotом и приближается, но
1) Оверхед по памяти велик, а значит меньше размер задач которые вообще влезают в пямять + менее эффективно используется кэш
2) Сам HotSpot отъедает ресурсы.

WH>Плюс у моно все тотже консервативный ГЦ...

Уже нет (читаем Mono 1.2 release notes):

Garbage Collector: We now use Boehm GC [b]in precise mode
as opposed to fully conservative mode. We also use it with a precise set of GC roots which greatly improved Garbage Collection performance.
[/b]

Хотя на тесте shootout.binarytrees, который как раз неплохо показывает скорость работы GC оно все равно ~ 3 раза медленнее (писал здесь)
:

C# on .NET 2.0 : 1.902 sec
DMD 0.173 — malloc(original version) : 5.189 sec
C# on Mono 1.1.18 : 6.630 sec
DMD 0.173 — full GC : 19.720 sec

(1.1.18 работает приблизительно так же как 1.2)

На linux (Mandriva 2007) кстати Mono чуть быстрее: 5.920 sec
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Ой, чо с D деется-то!?
От: Cyberax Марс  
Дата: 17.11.06 16:49
Оценка:
Андрей Хропов wrote:
> WH>Плюс у моно все тотже консервативный ГЦ...
> Уже нет (читаем Mono 1.2 release notes
> <http://www.go-mono.com/archive/1.2/&gt;):
> *
> Garbage Collector: We now use Boehm GC in precise mode* as opposed to
> fully conservative mode. We also use it with a precise set of GC roots
> which greatly improved Garbage Collection performance.
>

Это не полностью точный режим работы — там стек до сих пор консервативный.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[10]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 17:12
Оценка: +1 -1
Здравствуйте, WolfHound, Вы писали:

E>>Вывод типов есть и в D, вообще-то говоря.

WH>Надеюсь ты не про это
WH>
WH>auto test = new Testing(1, 2, 3);
WH>

WH>
WH>Так вот по сравнению с неммерле это вобще ерунда.
Зато самое нужное.
Еще бы в D добавили вывод типов для аргументов лямбд, тогда было бы все нормально вообще.

E>>А то, что D такой долгострой, так это вообще лично мне не понятно. Видимо, Брайт считает, что спешить особо не нужно. D нацелен на нишу C++, вытеснить оттуда C++ полностью вообще не получится, а вот отвоевать свое место вполне возможно.

WH>На кой черт этот мутант там вобще нужен?
WH>Если нужно выжимать биты из быйтов то нужен либо обыкновенный С/С++
А зачем C/C++ если есть лучше их — D?

WH> либо совершенно иная нежели CLR и JavaVM виртуальная машина.

Какая?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 17:36
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

WH>>Это можно достичь только на асме и только очень долго вылизывая код. А порвать С/С++ имея качественную модель ВМ не сложно.

АХ>Зависит от задач.
Нет. Не зависит.
АХ>Для тех где много мелких хаотично связанных объектов создается — да, GC рулит.
АХ>Для задач где много вычислений (+ грамотно написанных) — вряд ли.
У нас есть два ЯВУ.
Первый переводится в промежуточное представление где все строго определено.
Второй переводится в представление в котором куча скользких мест.
Какой ЯВУ оптимизировать легче?
АХ>Хоть Java с HotSpotом и приближается, но
А причем тут жаба? Я же оже говорил что ее ВМ плохо подходит для системных вещей. Ее вобще проектировали не для тяжелых вычислений, а для интерпритации мелких управляющих программок.
АХ>1) Оверхед по памяти велик, а значит меньше размер задач которые вообще влезают в пямять + менее эффективно используется кэш
Для жабы да. Для .НЕТ это уже не совсем верно. А если проектировать систему в расчете на вычисления то там все совсем по другому можно переиграть.
АХ>2) Сам HotSpot отъедает ресурсы.
По мне так это вобще тупиковая идея.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 17:36
Оценка: +2
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Ну хорошо, выражусь по-другому: в системном языке должна быть возможность спуститься на низкий уровень и контролировать каждый бит. Все время это делать не надо, но, скажем, критические части ядра ОС по-другому не напишешь.

Ну загрузчик по любому нужно писать на асме. Тут даже С не подходит.
А вот то что пишут на С уже можно писать на чемто болие высокоуровневом.

WH>>Все что нужно это value-типы, поддержка двоичных данных на уровне виртуальной машины и оптимизатор который умеет делать region-inference. Еще нужно иметь несколько различных алгоритмов сборщика мусора в том числе подсчет ссылок и вобще отсутствие сборщика мусора (работает только region-inference).

АХ>Не согласен.
АХ>Помимо этого должна быть возможность вообще не пользоваться сборщиком мусора,
Перечитай еще раз что я сказал.
АХ>не должно быть обязательной зависимости от большого рантайма (для встроенных систем и вообще где мало памяти),
Это совсем не проблема.
АХ>должен быть встроенный ассемблер (желательно с легко настраиваемым под конкретную архитектуру набором инструкций)
Только для загрузчика. А для этого проще внешний язычек прикрутить.
АХ>и указатели (можно (и даже неплохо) их конечно поместить в отдельный unsafe-загон, как в C#, но они должны быть, хотя бы для того чтобы реализовывать сборщики мусора).
У меня есть некоторые мысли на эту тему но я их сейчас думаю. Кгда додумаю напишу.
АХ>Также должны быть средства жесткого задания бинарного представления в структурах (в D есть шаги в этом направлении).
Я про это и говорил когда говорил про работу с битами на уровне ВМ.

АХ>На языке для системного программирования должно быть можно написать ядро ОС.

Есть только один язык на котором можно полностью написать ядро ОС. Это асм...
Если же С/С++ возводим в ранг системнах то и C# (и оберон) попадает тудаже...
АХ>Ядро в Singularity написано на assembler + C++ + С# (safe и unsafe).
АХ>Хотя неверифицируемая часть состоит всего из 5% кода.
5% это много. Должно быть много меньше.

АХ>Как в текущей реализации D.

АХ>Да, вот и надо приделать к D точный копирующий GC.
hint: union

АХ>Почему? Надо только разобраться с вопросом можно ли (и как) работать с указателями на GC объекты.

С указателями на ГЦ объект работать нельзя никак.
Иначе ни какого точного ГЦ не будет ни когда.

АХ>Дизайн D вообще говоря меняется.

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

С языками программирования как и интерфейсами объектов. Есть толстые и есть тонкие.
Толстые с виду проще но если нужно сделать что-то чего не предусмотрено то все... тушите свет...
Вот D это толстый язык, а немерле тонкий.
Вот попробуй к D прикрутить late.
Что не можешь? Нужно уговаривать автора?
А к немерле его прикрутил человек не имеющий к самому компилятору никакого отношения.
Таким образом ребята сейчас фиксят баги в ядре, а фенечки наворачивают совершенно посторонние люди.
Причем если к D прикрутить что-то типа late то он появится у всех. Даже у тех кому он не нужен. В случае с немерле все это прекрасно рулится при помощи подключения библиотек с расширениями и using.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 17:40
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>>>Erlang, к примеру, такую возможность предоставляет, но и сам при этом не быстр.

WH>>Ибо интерпритатор.
WH>>А для горячей замены не нужна ни интерпритация ни динамическая типизация. Это ортогональные понятия.

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


Ну для гибридных сред с JIT компиляцией — легко.

E>Зато они стали высказываться, что нынешняя реализация рантайма Ruby не так плоха, как про нее принято говорить. Сделать лучше не так уж и просто.


Вон для того же Pythonа Psyco есть, PyPy делают. Не вижу принципиальных проблем создать аналог для Руби.
А RubyCLR как — быстр?

E>А то, что D такой долгострой, так это вообще лично мне не понятно. Видимо, Брайт считает, что спешить особо не нужно.

Просто он один работает над компилятором (причем он еще и занимается другими своими проектами!), который написан в основном на низкоуровневом C, причем он работает еще и без IDE.

А поскольку как будет меняться сам язык определяет в конце концов только он (хотя и советуясь с сообществом), то даже если захочешь альтернативный компилятор не напишешь.

E>К тому же за прошедшее время D стал, как минимум, достаточно известным

Ну это на самом деле надувательство и результат некоторого SEO КМК. Более реально о популярности языков можно судить по числу вакансий (Статистика востребованности знания языков
Автор: Андрей Хропов
Дата: 08.11.06
).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 17:41
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Зато самое нужное.

АХ>Еще бы в D добавили вывод типов для аргументов лямбд, тогда было бы все нормально вообще.
А лично мне очень понраилось писать 170 без единого уточнения типа. Так что...

WH>>Если нужно выжимать биты из быйтов то нужен либо обыкновенный С/С++

АХ>А зачем C/C++ если есть лучше их — D?
Я тут
Автор: WolfHound
Дата: 17.11.06
уже писал что будет с D на моих задачах.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 18:06
Оценка:
Здравствуйте, WolfHound, Вы писали:

АХ>>Ну хорошо, выражусь по-другому: в системном языке должна быть возможность спуститься на низкий уровень и контролировать каждый бит. Все время это делать не надо, но, скажем, критические части ядра ОС по-другому не напишешь.

WH>Ну загрузчик по любому нужно писать на асме. Тут даже С не подходит.
C + inline asm

WH>А вот то что пишут на С уже можно писать на чемто болие высокоуровневом.

Можно, но возможность спуститься на низкий уровень должна быть.

WH>>>Все что нужно это value-типы, поддержка двоичных данных на уровне виртуальной машины и оптимизатор который умеет делать region-inference. Еще нужно иметь несколько различных алгоритмов сборщика мусора в том числе подсчет ссылок и вобще отсутствие сборщика мусора (работает только region-inference).

АХ>>Не согласен.
АХ>>Помимо этого должна быть возможность вообще не пользоваться сборщиком мусора,
WH>Перечитай еще раз что я сказал.
region inference говоришь. И где-нибудь он реализован? Как это на практике работает?
Он все равно кажется не слишком предсказуемым. Это вроде статического GC как мне кажется или то что иногда называют memory pools.

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

WH>Только для загрузчика. А для этого проще внешний язычек прикрутить.
А мне больше нравится встроенный асм, хотя бы потому что можно имена переменных те же использовать.

АХ>>Также должны быть средства жесткого задания бинарного представления в структурах (в D есть шаги в этом направлении).

WH>Я про это и говорил когда говорил про работу с битами на уровне ВМ.
понял

АХ>>Ядро в Singularity написано на assembler + C++ + С# (safe и unsafe).

АХ>>Хотя неверифицируемая часть состоит всего из 5% кода.
WH>5% это много. Должно быть много меньше.
Откуда такие выводы?

АХ>>Как в текущей реализации D.

АХ>>Да, вот и надо приделать к D точный копирующий GC.
WH>hint: union
Да выкинуть их давно надо. Я ими никогда не пользовался.
Хороший оптимизатор все равно в случае чего (если это безопасно) может соптимизировать распределение памяти.

АХ>>Почему? Надо только разобраться с вопросом можно ли (и как) работать с указателями на GC объекты.

WH>С указателями на ГЦ объект работать нельзя никак.
WH>Иначе ни какого точного ГЦ не будет ни когда.
Можно, только осторожно (например, специально помечая). Проще конечно запретить.

АХ>>Дизайн D вообще говоря меняется.

WH>Дык. Надо же с самого начала все продумывать, собирать информацию о других языках... проанализировать к чему приведет то или иное решение.
WH>А автор D этого не сделал... вот теперь и мучается...
WH>С языками программирования как и интерфейсами объектов. Есть толстые и есть тонкие.
WH>Толстые с виду проще но если нужно сделать что-то чего не предусмотрено то все... тушите свет...
WH>Вот D это толстый язык, а немерле тонкий.
WH>Вот попробуй к D прикрутить late.
WH>Что не можешь? Нужно уговаривать автора?
WH>А к немерле его прикрутил человек не имеющий к самому компилятору никакого отношения.
WH>Таким образом ребята сейчас фиксят баги в ядре, а фенечки наворачивают совершенно посторонние люди.
WH>Причем если к D прикрутить что-то типа late то он появится у всех. Даже у тех кому он не нужен. В случае с немерле все это прекрасно рулится при помощи подключения библиотек с расширениями и using.

Согласен. Вальтер на мой взгляд не слишком хороший разработчик языков. Хотя хороший разработчик быстрых компиляторов.

Если бы я сам выбирал на чем разрабатывать, я бы выбрал Nemerle основным языком и С++ или D для критических по скорости и затратам памяти частей.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Ой, чо с D деется-то!?
От: Cyberax Марс  
Дата: 17.11.06 18:28
Оценка:
Андрей Хропов wrote:
> WH>Перечитай еще раз что я сказал.
> region inference говоришь. И где-нибудь он реализован? Как это на
> практике работает?
> Он все равно кажется не слишком предсказуемым. Это вроде статического GC
> как мне кажется или то что иногда называют memory pools.
Ага, RI — это автоматический вывод memory pool'ов. Сам по себе в чистом
виде — бесполезен, так как часто вызывает огромный overhead.

Есть в Cyclone — там для юзабельности добавлены refcounted-пулы (и
возможность ручной аннотации пулов для указателей).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[10]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 18:34
Оценка: +1 -2 :))
Здравствуйте, Андрей Хропов, Вы писали:

АХ>А RubyCLR как — быстр?


.NET лежит вне сферы моих интересов.

АХ>Просто он один работает над компилятором (причем он еще и занимается другими своими проектами!), который написан в основном на низкоуровневом C, причем он работает еще и без IDE.


Да, IDE -- это наше все. Как же без этого, просто за компьютером без IDE сидеть невозможно. Ну никак.
Брам Мооленар делает VIM на C без IDE. Замечательный результат получается. Наверное, он делает что-то не так.
А вот Брайт каждые две недели новый релиз выпускает, с новыми фичами и багфиксами. Видимо он так же что-то не так делает. Ламер, должно быть. Не то что мы, завсегдатаи Философии Программирования.

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


Как-то пример Perl, Python и Ruby показывает, что это не страшно.

E>>К тому же за прошедшее время D стал, как минимум, достаточно известным

АХ>Ну это на самом деле надувательство и результат некоторого SEO КМК. Более реально о популярности языков можно судить по числу вакансий (Статистика востребованности знания языков
Автор: Андрей Хропов
Дата: 08.11.06
).


Не нужно путать известность (что и меряет TIOBE) и восстребованность (что показывает список вакансий).
Тем более, что восстребованность определяет популярность на данный момент. Если по ней судить, то не только D, но и хваленый Nemerle находится в полной ж... И вообще бы дальше COBOL-а и Fortran-а программирование не ушло.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 18:35
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


АХ>>Зато самое нужное.

АХ>>Еще бы в D добавили вывод типов для аргументов лямбд, тогда было бы все нормально вообще.
WH>А лично мне очень понраилось писать 170 без единого уточнения типа. Так что...
Что такое 170?

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

WH>>>Если нужно выжимать биты из быйтов то нужен либо обыкновенный С/С++

АХ>>А зачем C/C++ если есть лучше их — D?
WH>Я тут
Автор: WolfHound
Дата: 17.11.06
уже писал что будет с D на моих задачах.

1) Не надо GC — не используй. new/malloc с тобой.
2) Возможно появится D с точным GC (ну или почти точным, но не сильно медленнее). Я у них там в форуме за это буду агитировать .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 18:35
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


WH>>>Это можно достичь только на асме и только очень долго вылизывая код. А порвать С/С++ имея качественную модель ВМ не сложно.

АХ>>Зависит от задач.
WH>Нет. Не зависит.
Ну давай примеры ВМ которые быстрее С/C++ на большинстве типов задач.

АХ>>Для тех где много мелких хаотично связанных объектов создается — да, GC рулит.

АХ>>Для задач где много вычислений (+ грамотно написанных) — вряд ли.
WH>У нас есть два ЯВУ.
WH>Первый переводится в промежуточное представление где все строго определено.
WH>Второй переводится в представление в котором куча скользких мест.
WH>Какой ЯВУ оптимизировать легче?
первый, но
1)строгое определение может быть таким, что само по себе затрудняет эффективные реализации (например отказ от value-типов)
2)не позволять человеку соптимизировать руками определенные случаи трудные для автоматического анализа
(пока ИИ не придумали, человек иногда умнее).

АХ>>Хоть Java с HotSpotом и приближается, но

WH>А причем тут жаба? Я же оже говорил что ее ВМ плохо подходит для системных вещей. Ее вобще проектировали не для тяжелых вычислений, а для интерпритации мелких управляющих программок.
А что лучше?

АХ>>1) Оверхед по памяти велик, а значит меньше размер задач которые вообще влезают в пямять + менее эффективно используется кэш

WH>Для жабы да. Для .НЕТ это уже не совсем верно. А если проектировать систему в расчете на вычисления то там все совсем по другому можно переиграть.
Посмотрим что нам предложат в Fortress.

АХ>>2) Сам HotSpot отъедает ресурсы.

WH>По мне так это вобще тупиковая идея.
А что лучше?

Порвать статический анализ под конкретную архитектуру (типа Intel C++) вроде теоретически можно только чем-то вроде HotSpotа, который в динамике отслеживает что и где можно заинлайнить и т.п.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: D и замыкания.
От: FR  
Дата: 17.11.06 19:14
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>UB. попробуй


жаль


АХ>Кое-что писал по этому поводу здесь.

АХ>Вальтер ответил что посмотрим ближе к 2.0. Но в свете последних фич может и раньше увидим.
АХ>Ведь по сути вот эти функции Curry делают те же замыкания руками.

Ну руками и в функтор можно запихать, это не то.
Re[14]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 19:14
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

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


FR>>Только то что в D это получается не хуже чем в Nemerle, полный аналог твоего кода даже читабельней по моему:

WH>А если взять чуть мение игрушечный пример?

на чуть менее игрушечный нет времени

WH>Re[7]: синтаксический анализатор
Автор: WolfHound
Дата: 23.10.06


Ну судя по тому что там паттерн матчинг использован только как замена switch то не вижу почему на D должно получится не сопоставимо.
Re[4]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 19:14
Оценка: -1 :)
Здравствуйте, Андрей Хропов, Вы писали:

FR>>А почему именно на Nеmerle?

АХ>Потому что эти языки (D и Nemerle) как мне кажется как раз могут рассматриваться в качестве конкурентов
АХ>(ну по крайней мере мне так кажется), поскольку оба статически типизированы, в них есть вывод типов (хотя у Немерле он и значительно мощнее), обладают средствами метапрограммирования
АХ>и активно развиваются.
АХ>Судя хотя бы вот по этой таблице
Автор: VladD2
Дата: 18.05.06
(хотя там не все верно, см. комментарии) у них много общих фич.


Мне не кажется что это конкуренты, вообще больше похоже на не пересекающиеся вещи

FR>>Почему не на Наскеле или даже Питоне?

АХ>Питон — это динамика. Так что немного из другой оперы.
АХ>Хаскель не знаю

FR>>Тоже будет такой же краткий код.

АХ>Да вот не такой же краткий (это еще к тому же только 2.5 который недавно вышел):

Нет чуть короче и подойдет любой питон > 2.0
def plus(x, y, z): return x + y + z

def minus(x, y, z): return x - y - z

plus_two = lambda y, z: plus(2, y, z)
print plus_two(6, 8)

plus_three = lambda y: plus_two(3, y)
print  plus_three(7)
    
plus_all = lambda: plus(7,8,9)
print plus_all()

minus_all = lambda: minus(7, 8, 9)
print minus_all()
Re[15]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.11.06 19:34
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну судя по тому что там паттерн матчинг использован только как замена switch то не вижу почему на D должно получится не сопоставимо.

А ты по второй ссылочке ходил?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Ой, чо с D деется-то!?
От: FR  
Дата: 17.11.06 19:59
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

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


FR>>Ну судя по тому что там паттерн матчинг использован только как замена switch то не вижу почему на D должно получится не сопоставимо.

WH>А ты по второй ссылочке ходил?

Изнутри первой, сейчас сходил. Оно конечно да задача для паттерн матчинга, но думаю на текущем D вполне можно написать (проще чем на C++) аналог boost::spirit.
Re[11]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 17.11.06 20:18
Оценка:
Здравствуйте, eao197, Вы писали:

E>Не нужно путать известность (что и меряет TIOBE) и восстребованность (что показывает список вакансий).

E>Тем более, что восстребованность определяет популярность на данный момент.
Судя о TIOBE D почти так же популярен как и Ruby и намного популярнее чем хотя бы Lisp, Fortran и Matlab.
Что очевидно не так, да и на D было бы полно программ (хотя бы написанных энтузиастами).

E>Если по ней судить, то не только D, но и хваленый Nemerle находится в полной ж...

Да, они примерно в одинаковой ж... судя по Google.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.11.06 21:53
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

E>>Не нужно путать известность (что и меряет TIOBE) и восстребованность (что показывает список вакансий).

E>>Тем более, что восстребованность определяет популярность на данный момент.
АХ>Судя о TIOBE D почти так же популярен как и Ruby и намного популярнее чем хотя бы Lisp, Fortran и Matlab.

Еще раз: не популярен, а известен. Это разные вещи. Вот, например, какой процент из посетителей RSDN знает про Nemerle (это и есть известность), а какой процент использует (это и есть популярность)?



АХ>Что очевидно не так, да и на D было бы полно программ (хотя бы написанных энтузиастами).


Полно, не полно, но хоть что-то да есть и шевелится как-то
http://www.prowiki.org/wiki4d/wiki.cgi?FolderProjects
http://www.digitalmars.com/d/dlinks.html


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.11.06 23:53
Оценка:
Здравствуйте, eao197, Вы писали:

E>Nemerle -- это макросы, метапрограммирование + функциональщина. Т.е. то, чего в D пока не видно.


Ну, дык? Все полностью соотвествует твоим словам. Он же сказал "жалким". Так что все в порядке.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:05
Оценка: :))
Здравствуйте, FR, Вы писали:

FR>А почему именно на Nеmerle?

FR>Почему не на Наскеле или даже Питоне?
FR>Тоже будет такой же краткий код.

Потому что должен остаться только один бессмертный (с).

Если серьезно, то мне все равно, но код на Ди прсто прекрасен. Воистину автор темы прав. Ди достойный продолжатель дела С++.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:05
Оценка:
Здравствуйте, eao197, Вы писали:

E>Опытным путем удалось установить, что достаточно прибавлять 0.1, тогда округляет как нужно. Но вот как сделать реверсию я не догнал


О! Что я вижу?! eao197 осваиват передовые технологии.

E>Кстати, именно учет особенности формирования списка и не нравится мне в функциональных решениях со списками. Слишком легко этот момент забыть. Императивный подход именно в данном примере лучше.


Нравится императив? Так применяй соотвествующие структуры данных.
#pragma indent
 
using System.Console
using System.Math
 
def makeDistrib(trxCount : int, quantums : int)
    mutable r = Collections.Generic.List()
    mutable remainingTrx = trxCount
    mutable remainingQuantums = quantums
    foreach (_ in [1..quantums])
                def x = Round((remainingTrx :> double) / remainingQuantums + 0.1) :> int
        r.Add(x)
        remainingTrx -= x
        --remainingQuantums
    r
 
WriteLine(makeDistrib(2, 6).ToString(", "))
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:05
Оценка: :)
Здравствуйте, eao197, Вы писали:

Очередная тема превратилась в обсуждение темы "а казалось бы причем тут Nemerle?".

Создается впечатление, что eao197 тайный поклонник этого языка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:05
Оценка:
Здравствуйте, eao197, Вы писали:

E>А с чего ты взял, что это калька с Немерле?


Мне кажется, что Вольфхаунд с тобой полностью солидарен. Он тоже всесто слова "калька" воспользовался более подходящим словосочетанием "жалкое подобие".

E>Имхо, Немерл-овцы сам туплы откуда-то скомуниздили.


Ага. Из клонов ML-я. И сделали это качествнно.

E>Кроме того, имхо, это явно не попытка догнать Немерле


Несомннено! Это попытка украсть лавры у С++... в области удаления гланд через зад.

E> (чо вас на нем так клинт-то, кстати?),


Дык думали заклиниться на Ди, но подумали, что там клиника уже переполнена.

E> а сделать нормально в D то, что в C++ делается с помощью десятиэтажных макросов (памяти Александреску).


Хорошая задача! Остается только сожалеть, что пока, что не ее решить не удалось. Но лиха беда начала. До выхода С++ 0ххх еще время есть.

E>А рантайму, вообще-то говоря, цена не большая. Ты вот на Nemerle сможешь без NET Framework писать?


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

WH>По себе людей не судят. Стоит только произнести "немерле" как ты сразу начинаешь исходить ядом... к чему бы это?


А мне кажется, что eao197 симпатизирует Немерлу. Что не таема им созданная, так обязательно сводится к вопросу "а почему не Немерле?".

Это как со стихами о вине? Знаешь какое стихотворение посвящено белому вину? "О, белое вино... Почему ты не красное?".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:05
Оценка:
Здравствуйте, FR, Вы писали:

FR>А зачем призносить слово Немерле в топике никакого к нему отношения не имеющего?


Отличное слово! Произносишь его и eao197 с FR впадают в транс четко чувствуя, что над ними цинично глумятся.

А чё бы не поглумиться нед теми кто прославляет убогсть только потому, что она чуть мнее убогая чем старая убогсть?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:05
Оценка:
Здравствуйте, eao197, Вы писали:

E>Тогда зачем было говорить по превращении D в подобие Немерле?


Боже упоси! Какое пдобие?! Вольфхаунд сказал "жалкое подобчие". В русском языке это словосочетание означает, что сходство хотя и есть, но очень незначительное.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:05
Оценка: +1 -2
Здравствуйте, FR, Вы писали:

FR>(На возражение что D слизало готовое, Немерле тоже самое сделало с ML языков).


Ага. Причем ML — это язык постоенный на четких научных принципах. Передирание из него тоже делается знающими людьми и на высоком техническом уровне. А вот Ди явно делается на уровне С++. Результат конечно может превзайти С++, но вряд ли очень сильно.

Так что пусть он конечно будет. Это будет как минимум хорошим упреком Страуструпу. Но хватсаться его убогими фичами явно не стоит. Иначе все время будете получать в пример языки в которых тоже самое и намного больше реализовано куда лучше и уже работает. И снова будете злиться и кричать "а причем тут Немерле?".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Ой, чо с D деется-то!?
От: Cyberax Марс  
Дата: 18.11.06 01:09
Оценка: -2
VladD2 wrote:
> E>А с чего ты взял, что это калька с Немерле?
> Мне кажется, что Вольфхаунд с тобой полностью солидарен. Он тоже всесто
> слова "калька" воспользовался более подходящим словосочетанием "жалкое
> подобие".
Нет, это Немерль — жалкое подобие D. Поделка студентов. Даже без .NET
Framework/Mono работать не умеет. Фигня, короче.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[10]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 01:12
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


FR>>(На возражение что D слизало готовое, Немерле тоже самое сделало с ML языков).

WH>В немерле совершенно иной вывод типов не имеющий ничего общего в ML.

Алгоримт иной. Но:
1. ФР явно не о нем говорит. В этой ветке ведь кортежами хвастались.
2. МЛ был реальным прототипом. И разработчики Немерла не мало оглядывались на него. Насколько я понял первая версия Немерла была написана на ОКамле.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Ой, чо с D деется-то!?
От: McSeem2 США http://www.antigrain.com
Дата: 18.11.06 01:24
Оценка: 31 (4) +7 :))) :))) :))) :)
Здравствуйте, VladD2, Вы писали:

VD>А чё бы не поглумиться нед теми кто прославляет убогсть только потому, что она чуть мнее убогая чем старая убогсть?


   - Писсант - это такой тип, который воображает, будто он умнее
всех, и потому никогда не промолчит. Чтобы другие  ни  говорили,
писсанту  всегда  надо  спорить.  Вы скажете,  что  вам   что-то
нравится, и, клянусь богом, он тут же начнет вам доказывать, что
вы не правы и это вам нравиться не должно. При таком писсанте вы
чувствуете себя окончательным болваном. Что бы вы ни сказали, он
все знает лучше вас.

(Курт Воннегут, "Колыбель для кошки")
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[11]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:02
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>А зачем C/C++ если есть лучше их — D?


По-меому, все очевидно. С++ потому что на работу за это взяли. А не D, помтоу, что если он будет выбирать сам и другие условия будут позволять, то он как разумный и перспективно мыслящий человек несомненно выберет Nemerle.

А ты сам бы разве не так же поступил бы?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:02
Оценка:
Здравствуйте, eao197, Вы писали:

E>Если по ней судить, то не только D, но и хваленый Nemerle находится в полной ж...


Это единственное с чем можно согласиться в твоих словах. И из них я делаю вывод, что нужно приложить усилия к тому, чтобы Nemerle выбирался из этого непристойного места.

E>И вообще бы дальше COBOL-а и Fortran-а программирование не ушло.


А это явная инсинуация.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:02
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

C>Нет, это Немерль — жалкое подобие D. Поделка студентов. Даже без .NET

C>Framework/Mono работать не умеет. Фигня, короче.

И что забавно я даже спорить с тобой не буду. В этом просто нет смысла.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:02
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Ну хорошо, выражусь по-другому: в системном языке должна быть возможность спуститься на низкий уровень и контролировать каждый бит.


Тогда единственный выход это ассемблер.

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


Вот авторы Сингулярити уже доказали, что подобные слова — заблуждение. Да и не ясно почему нельзя какие-то критические места написать на низгоуровневом языке? Их же очень мало.

АХ>Помимо этого должна быть возможность вообще не пользоваться сборщиком мусора,


Это почему?

АХ>не должно быть обязательной зависимости от большого рантайма


А ничего, что рантайм Висты составляет где-то 3 гига?

АХ>(для встроенных систем и вообще где мало памяти), должен быть встроенный ассемблер


Нда. Твои представления сильно устарели. Да и вообще странные рассуждения. Неуже ли в этом мире не хватит мест где нужно качество и удобство и все упирается в объем памяти?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:02
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>C + inline asm


Ты меня извини, но "C + inline asm" == C и asm, т.е. два языка. Это можно и в Немрле встроить поддержку IL-блоков. Причем ты сам можешь это сделать.

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


Зачем? Чтобы смотреть как толпы ежиков лезут туда где их убьет током?

Ты серьезно собрался ОС писать? Нет?

АХ>>>Хотя неверифицируемая часть состоит всего из 5% кода.

WH>>5% это много. Должно быть много меньше.
АХ>Откуда такие выводы?

Лучше скажи откуда взял цифру — 5%?

АХ>Да выкинуть их давно надо. Я ими никогда не пользовался.


Скажи автору Ди. Посмотрим на рекцию. За одно скжи про указатели.

АХ>Хороший оптимизатор все равно в случае чего (если это безопасно) может соптимизировать распределение памяти.


Очень хороший. Такой способны породить только Sun, IBM, MS ну может еще кто-то. Но никак не кустари одиночки.

АХ>Если бы я сам выбирал на чем разрабатывать, я бы выбрал Nemerle основным языком и С++ или D для критических по скорости и затратам памяти частей.


И скоро понял бы, что давно забыл что как писать на С++ и Dю
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:42
Оценка:
Здравствуйте, eao197, Вы писали:

E>Резумируя -- если не считать python-вского синтаксиса, то читабельность, имхо естественно, на уровне D.


Я плякаль. Тебе самому не стыдно?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:42
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну судя по тому что там паттерн матчинг использован только как замена switch то не вижу почему на D должно получится не сопоставимо.


Не, ну, ты попробуй. Уверяю тебя желание языком молотить сразу пропадет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:42
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>Изнутри первой, сейчас сходил. Оно конечно да задача для паттерн матчинга, но думаю на текущем D вполне можно написать (проще чем на C++) аналог boost::spirit.


http://www.nestor.minsk.by/sr/2003/07/30710.html

Мощь языка, в которой заинтересован программист, возможно, трудно определить формальными методами, однако одно из объяснений этого понятия заключается в свойствах, которые в менее мощном языке можно получить, только написав на нем интерпретатор для более мощного языка.


... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:42
Оценка: :)
Здравствуйте, Gajdalager, Вы писали:

G>
G>object BufferizationDisturb extends Application {
G>  def makeDist(trxCount: int, quantum: int): List[int] = quantum match {
G>      case 0 => Nil
G>      case _ => {
G>        import java.lang.Math;
G>        val put = Math.round(trxCount.toFloat / quantum)
G>        put :: makeDist(trxCount - put, quantum - 1);
G>      }
G>    }
G>  val d = makeDist(2, 6)
G>  Console.println(d.mkString("", ", ", ""));
G>}
G>

G>Но все равно на строчку меньше чем Руби

О! А вот и Скала подтянулась.

Это очень правильно обсуждать современные решения в теме о D
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:42
Оценка: :)
Здравствуйте, ie, Вы писали:

ie>Что по поводу замечания
Автор: FR
Дата: 17.11.06
FR то согласен с ним на все 100. Давайте уж тогда со всеми языками сравнивать. А то как-то действительно часто всплывают однобокие темы: Nemerle vs ?


Дык сравнение с Питоном — это его задача. Пусть уж он не увыилвает.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 02:42
Оценка: 6 (1) +2 :))) :)))
Здравствуйте, McSeem2, Вы писали:

MS>
MS>   - Писсант - это такой тип, который воображает, будто он умнее
MS>всех, и потому никогда не промолчит. Чтобы другие  ни  говорили,
MS>писсанту  всегда  надо  спорить.  Вы скажете,  что  вам   что-то
MS>нравится, и, клянусь богом, он тут же начнет вам доказывать, что
MS>вы не правы и это вам нравиться не должно. При таком писсанте вы
MS>чувствуете себя окончательным болваном. Что бы вы ни сказали, он
MS>все знает лучше вас.
MS>

MS>(Курт Воннегут, "Колыбель для кошки")

Чувствую себя полным болваном.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.11.06 06:13
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

E>>Ты вот на Nemerle сможешь без NET Framework писать?


VD>Да даже без компьютера могу писать.


Чесслово ты бы этим и занялся.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.11.06 06:17
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Nemerle -- это макросы, метапрограммирование + функциональщина. Т.е. то, чего в D пока не видно.


VD>Ну, дык? Все полностью соотвествует твоим словам. Он же сказал "жалким". Так что все в порядке.


Т.е. любой язык, в котором нет макросов, метапрограммирования и функциональщины жалок по определению?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[16]: Ой, чо с D деется-то!?
От: FR  
Дата: 18.11.06 07:59
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>Ну судя по тому что там паттерн матчинг использован только как замена switch то не вижу почему на D должно получится не сопоставимо.


VD>Не, ну, ты попробуй. Уверяю тебя желание языком молотить сразу пропадет.


Ага час разбежался, это вам редакторам хорошо делаешь только то что хочешь
Re[10]: Ой, чо с D деется-то!?
От: FR  
Дата: 18.11.06 07:59
Оценка: +1 -1 :))
Здравствуйте, VladD2, Вы писали:

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


FR>>(На возражение что D слизало готовое, Немерле тоже самое сделало с ML языков).


VD>Ага. Причем ML — это язык постоенный на четких научных принципах. Передирание из него тоже делается знающими людьми и на высоком техническом уровне. А вот Ди явно делается на уровне С++. Результат конечно может превзайти С++, но вряд ли очень сильно.


Странно как ты мог раньше восхищаться таким убогим и не сделанным на четких научных принципах C#?

VD>Так что пусть он конечно будет. Это будет как минимум хорошим упреком Страуструпу. Но хватсаться его убогими фичами явно не стоит. Иначе все время будете получать в пример языки в которых тоже самое и намного больше реализовано куда лучше и уже работает. И снова будете злиться и кричать "а причем тут Немерле?".


Мне кажется Немерле с такими горе агитаторами может оказатся в полной ж...
В общем ничего кроме медвежьей услуги таким спамом не по теме вы Немерле не оказываете.
Кстати где модераторы, раньше злобных функциональщиков за такое же поведение банили.
Re[8]: Ой, чо с D деется-то!?
От: FR  
Дата: 18.11.06 07:59
Оценка: :))
Здравствуйте, VladD2, Вы писали:

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


FR>>А зачем призносить слово Немерле в топике никакого к нему отношения не имеющего?


VD>Отличное слово! Произносишь его и eao197 с FR впадают в транс четко чувствуя, что над ними цинично глумятся.


VD>А чё бы не поглумиться нед теми кто прославляет убогсть только потому, что она чуть мнее убогая чем старая убогсть?


Понятно, Влад поздравляю тебя со вступлением в славные ряды злобных функциональщиков.
Музыка, занавес...
Re[10]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 18.11.06 08:10
Оценка: +1
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Просто он один работает над компилятором (причем он еще и занимается другими своими проектами!), который написан в основном на низкоуровневом C, причем он работает еще и без IDE.


А почему не на D? Не забываем о принципе dogfood. В общем, выглядит подозрительно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Ой, чо с D деется-то!?
От: FR  
Дата: 18.11.06 08:11
Оценка: +2 -1 :)
Здравствуйте, VladD2, Вы писали:

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


VD>Очередная тема превратилась в обсуждение темы "а казалось бы причем тут Nemerle?".


VD>Создается впечатление, что eao197 тайный поклонник этого языка.


Вас (поклоников Немерле) по моему уже не просто клинит, а окончательно переклинило.
В общем я теперь твердо убежден функциональщина очень опасна для психики, срывает крышу, особенно если упертые императивщики резко на нее переходят
Re[11]: Ой, чо с D деется-то!?
От: FR  
Дата: 18.11.06 08:16
Оценка: -1
Здравствуйте, AndreiF, Вы писали:

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


АХ>>Просто он один работает над компилятором (причем он еще и занимается другими своими проектами!), который написан в основном на низкоуровневом C, причем он работает еще и без IDE.


AF>А почему не на D? Не забываем о принципе dogfood. В общем, выглядит подозрительно.


Хотя бы потому что он как я понимаю также участвует в разработке Digital Mars C++ и с его стороны было бы просто глупо не использовать общий code base.
Re[3]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 18.11.06 09:13
Оценка: :)
Здравствуйте, FR, Вы писали:

VD>>Очередная тема превратилась в обсуждение темы "а казалось бы причем тут Nemerle?".

VD>>Создается впечатление, что eao197 тайный поклонник этого языка.

FR>Вас (поклоников Немерле) по моему уже не просто клинит, а окончательно переклинило.


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

FR>В общем я теперь твердо убежден функциональщина очень опасна для психики, срывает крышу, особенно если упертые императивщики резко на нее переходят


Дык, функциональщина тут как бы не причем. Думаю любой шаг эволюции сопровождается таким клином если не у всех, то уж точно не у единиц.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[11]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.11.06 09:18
Оценка:
Здравствуйте, AndreiF, Вы писали:

АХ>>Просто он один работает над компилятором (причем он еще и занимается другими своими проектами!), который написан в основном на низкоуровневом C, причем он работает еще и без IDE.


AF>А почему не на D? Не забываем о принципе dogfood. В общем, выглядит подозрительно.


Объективности ради: компилятор D написан на C++ (в каталоге src файлы с расширениями .c и .h, но в них C++ный код).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: FR  
Дата: 18.11.06 09:29
Оценка: :)
Здравствуйте, ie, Вы писали:

FR>>Вас (поклоников Немерле) по моему уже не просто клинит, а окончательно переклинило.


ie>А поклоников чего бы то нибыло всегда клинит. Впрочем, я этого и не отрицаю. А как еще можно назвать ситуацию, когда я пишу какой-нибудь код и думаю, а как бы его можно было покрасивей переписать на Немерл? Одним словом — клинануло. При всем при этом я стараюсь быть объективен. Не всегда получается, что ж теперь


А у тебя легкая форма (надеюсь у меня тоже)
Но на всякий случай перед тем как писать в темы никакого отношения к Немерле не имеющие про Немерле, глубоко вдохни и медленно cчитай в уме до десяти
Еще почти любой код можно красивше переписать, и без Немерле

FR>>В общем я теперь твердо убежден функциональщина очень опасна для психики, срывает крышу, особенно если упертые императивщики резко на нее переходят


ie>Дык, функциональщина тут как бы не причем. Думаю любой шаг эволюции сопровождается таким клином если не у всех, то уж точно не у единиц.


Ты разве не слышал про "злобных функциональщиков"?
Re[14]: Ой, чо с D деется-то!?
От: FR  
Дата: 18.11.06 09:52
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

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


E>>>Да ладно сравнивать императивное решение с функциональным:

ie>>Точно-точно!
ie>>
ie>>makeDist _ 0 = []
ie>>makeDist n m = let r = round (fromIntegral n / m) in r : makeDist (n-r) (m-1)
ie>>

VK>Ну и Nemerle можно таким образом ужать:
VK>
VK>def makeDist(n, m)
VK>    if (n == 0) [] else
VK>        def r = (n / m:>double).Round():>int; r :: makeDist(n-r, m-1)
VK>


и D:
int[] makeDistrib(int n, int m)
{
if(m == 0) return [];
int r = cast(int)round(cast(float)n / m); return [r] ~ makeDistrib(n - r, m - 1);
}


и питон:
def make_dist(n, m):
    if m == 0:  return []
    r = int(round(float(n) / m)); return [r] + make_dist(n - r, m - 1)
Re[12]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 18.11.06 11:40
Оценка:
Здравствуйте, VladD2, Вы писали:

АХ>>А зачем C/C++ если есть лучше их — D?


VD>По-меому, все очевидно. С++ потому что на работу за это взяли. А не D, помтоу, что если он будет выбирать сам и другие условия будут позволять, то он как разумный и перспективно мыслящий человек несомненно выберет Nemerle.


VD>А ты сам бы разве не так же поступил бы?

Ответил здесь
Автор: Андрей Хропов
Дата: 17.11.06
:

Если бы я сам выбирал на чем разрабатывать, я бы выбрал Nemerle основным языком и С++ или D для критических по скорости и затратам памяти частей.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 18.11.06 11:41
Оценка:
Здравствуйте, VladD2, Вы писали:

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


АХ>>C + inline asm


VD>Ты меня извини, но "C + inline asm" == C и asm, т.е. два языка. Это можно и в Немрле встроить поддержку IL-блоков. Причем ты сам можешь это сделать.


Не, тут не в IL дело. Надо возможность пользоваться командами специфичными для данной архитектуры. IL тут не причем.

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


VD>Зачем? Чтобы смотреть как толпы ежиков лезут туда где их убьет током?


VD>Ты серьезно собрался ОС писать? Нет?

Мы не про меня говорим, а про то каким должен быть язык для системного ПО. Которое в себя включает в том числе написание менеджеров памяти, GC и т.п.

АХ>>>>Хотя неверифицируемая часть состоит всего из 5% кода.

WH>>>5% это много. Должно быть много меньше.
АХ>>Откуда такие выводы?

VD>Лучше скажи откуда взял цифру — 5%?


An Overview of the Singularity Project, раздел 5.1

Singularity’s I/O system consists of three layers: HAL, I/O manager, and drivers. The HAL
is a small, trusted abstraction of PC hardware: IoPorts, IoDma, IoIrq, and IoMemory
abstractions to access devices; interfaces to the timer, interrupt controller, real-time clock, and
debug console; kernel debugging stub; event logger; interrupt and exception vector; BIOS
resource discovery; and stack linking code. It is written in C#, C++, and assembler. The
assembler and C++ portions of the HAL represent approximately 5% of the trusted code in the
system
(35 out of 561 files).


Это правда только I/O, но более четких цифр там вроде нет.

АХ>>Да выкинуть их давно надо. Я ими никогда не пользовался.


VD>Скажи автору Ди. Посмотрим на рекцию.

Скажу

VD>За одно скжи про указатели.


АХ>>Хороший оптимизатор все равно в случае чего (если это безопасно) может соптимизировать распределение памяти.


VD>Очень хороший. Такой способны породить только Sun, IBM, MS ну может еще кто-то. Но никак не кустари одиночки.

Интересно, почему DMD на недавних тестах был быстрее компиляторов и рантаймов от MS и Sun?

АХ>>Если бы я сам выбирал на чем разрабатывать, я бы выбрал Nemerle основным языком и С++ или D для критических по скорости и затратам памяти частей.


VD>И скоро понял бы, что давно забыл что как писать на С++ и Dю

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 18.11.06 11:41
Оценка:
Здравствуйте, VladD2, Вы писали:

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


АХ>>Ну хорошо, выражусь по-другому: в системном языке должна быть возможность спуститься на низкий уровень и контролировать каждый бит.


VD>Тогда единственный выход это ассемблер.

inline assembler

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


VD>Вот авторы Сингулярити уже доказали, что подобные слова — заблуждение.

В смысле?

Еще раз :

An Overview of the Singularity Project, раздел 5.1

Singularity’s I/O system consists of three layers: HAL, I/O manager, and drivers. The HAL
is a small, trusted abstraction of PC hardware: IoPorts, IoDma, IoIrq, and IoMemory
abstractions to access devices; interfaces to the timer, interrupt controller, real-time clock, and
debug console; kernel debugging stub; event logger; interrupt and exception vector; BIOS
resource discovery; and stack linking code. It is written in C#, C++, and assembler. The
assembler and C++ portions of the HAL represent approximately 5% of the trusted code in the
system
(35 out of 561 files).


Итак, 5% хотя бы I/O (про ядро непонятно) написаны на asm + C++. Немного, но тем не менее.

VD> Да и не ясно почему нельзя какие-то критические места написать на низгоуровневом языке? Их же очень мало.


АХ>>Помимо этого должна быть возможность вообще не пользоваться сборщиком мусора,


VD>Это почему?

Потому что от него оверхед (для ядра это существенно) и к тому же он приводит к недетерминированному поведению.
В real-time системах бывает так, что вообще вся память статически распределяется.

АХ>>не должно быть обязательной зависимости от большого рантайма


VD>А ничего, что рантайм Висты составляет где-то 3 гига?

Что значит рантайм Висты?

Язык для системного ПО должен позволять писать с минимально возможным оверхедом — для встроенных устройств, для смарт-карт и т.п.

АХ>>(для встроенных систем и вообще где мало памяти), должен быть встроенный ассемблер


VD>Нда. Твои представления сильно устарели. Да и вообще странные рассуждения. Неуже ли в этом мире не хватит мест где нужно качество и удобство и все упирается в объем памяти?


Хватит, но я про языки для системного ПО, где производительность — одна из важнейших характеристик.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Ой, чо с D деется-то!?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.11.06 18:32
Оценка:
Здравствуйте, FR, Вы писали:

FR>Кстати где модераторы, раньше злобных функциональщиков за такое же поведение банили.


Модераторы здесь. А функциональщиков банили не за рекламу ФП, пусть и неуемную, а за потоки хамства, которыми эта реклама сопровождалась. И, уж коли ты первый о модераторах вспомнил, то предупреждаю: общаться в тоне, подобном Re[2]: Ой, чо с D деется-то!?
Автор: FR
Дата: 18.11.06
не стоит.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[5]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.11.06 18:47
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>А у тебя легкая форма (надеюсь у меня тоже)


Легкая форма самая опасная. Она чаще всего переходит в храническую, а та в клиническую.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 03:08
Оценка: -1
Здравствуйте, FR, Вы писали:

FR>Странно как ты мог раньше восхищаться таким убогим и не сделанным на четких научных принципах C#?


Он был лучше С++ и остается лучше Ди во многом. Так что не странно, что пока на горизонте не было чего-то более стоящего (по совокупности причин) Шарп был моим фаворитом. Но время идет вперед и все вокруг изменяется. Изменяется состав языков. Изменяюсь я. И только вы с eao197 не меняетесь. Я искренне рад за вас!

FR>Мне кажется Немерле с такими горе агитаторами может оказатся в полной ж...


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

FR>В общем ничего кроме медвежьей услуги таким спамом не по теме вы Немерле не оказываете.


Неумение оценивать реалии окружающего мира это конечно недостаток. Но думаю, он тебе не помешает в нашем деле. Так что продолжайте господа. Удивительно только то, что вы даже не замечаете, что вы соллисты в этом процессе.

FR>Кстати где модераторы, раньше злобных функциональщиков за такое же поведение банили.


Ябиднячать не хорошо. А кливетать и подавно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 03:08
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Не, тут не в IL дело. Надо возможность пользоваться командами специфичными для данной архитектуры. IL тут не причем.


Ничего что код с встроенным ассемблером не переносимый? Как раз при создании ОС люди обычно выделяют ассемблер в отдельный файлы и стараются минимизировать их число.

АХ>Мы не про меня говорим, а про то каким должен быть язык для системного ПО. Которое в себя включает в том числе написание менеджеров памяти, GC и т.п.


Системное ПО включает намного больший класс задач нежели написание менеджеров памяти.

VD>>И скоро понял бы, что давно забыл что как писать на С++ и Dю

АХ>

Ну, я типа такой же умный как ты был. Тоже думал, что если чё, то С++ нам поможет. Вот только любое столкновение с этим низким уровнем наталкивало меня на мысль, что ну его на...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 03:08
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Еще раз :


АХ>An Overview of the Singularity Project, раздел 5.1


АХ>

АХ>Singularity’s I/O system consists of three layers: HAL, I/O manager, and drivers. The HAL
АХ>is a small, trusted abstraction of PC hardware: IoPorts, IoDma, IoIrq, and IoMemory
АХ>abstractions to access devices; interfaces to the timer, interrupt controller, real-time clock, and
АХ>debug console; kernel debugging stub; event logger; interrupt and exception vector; BIOS
АХ>resource discovery; and stack linking code. It is written in C#, C++, and assembler. The
АХ>assembler and C++ portions of the HAL represent approximately 5% of the trusted code in the
АХ>system
(35 out of 561 files).


АХ>Итак, 5% хотя бы I/O (про ядро непонятно) написаны на asm + C++. Немного, но тем не менее.


Ты явно неверно интерпретируещь эти слова. Слова "5% of the trusted code" означают, что 5% небезопасного кода (коду которому приходится доверять) написано на С++ и ассемблере. Это значит, что 95% небезопасного кода написано на C# (с использованием unsafe-блока).

Эти слова ничего не говорят об отностельном объеме небезопасного кода. Можно только с уверенгстью утверждать, что на момент написания этих слов код с небезопасными файлами занимал 561 файл.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 03:08
Оценка:
Здравствуйте, FR, Вы писали:

FR>Хотя бы потому что он как я понимаю также участвует в разработке Digital Mars C++ и с его стороны было бы просто глупо не использовать общий code base.


Глупо использовать язык более низкого уровня если можно использовать более высокого.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 03:08
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Объективности ради: компилятор D написан на C++ (в каталоге src файлы с расширениями .c и .h, но в них C++ный код).


И почему же Ди не пишется на Ди? Может из-за этого все проблемы?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Ой, чо с D деется-то!?
От: FR  
Дата: 19.11.06 07:15
Оценка: -1
Здравствуйте, VladD2, Вы писали:

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


FR>>Хотя бы потому что он как я понимаю также участвует в разработке Digital Mars C++ и с его стороны было бы просто глупо не использовать общий code base.


VD>Глупо использовать язык более низкого уровня если можно использовать более высокого.


Если пишешь с нуля то да, но у него не такая ситуация.
Re[12]: Ой, чо с D деется-то!?
От: FR  
Дата: 19.11.06 07:15
Оценка: +3 -2 :)))
Здравствуйте, VladD2, Вы писали:

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


FR>>Странно как ты мог раньше восхищаться таким убогим и не сделанным на четких научных принципах C#?


VD>Он был лучше С++ и остается лучше Ди во многом. Так что не странно, что пока на горизонте не было чего-то более стоящего (по совокупности причин) Шарп был моим фаворитом. Но время идет вперед и все вокруг изменяется. Изменяется состав языков. Изменяюсь я. И только вы с eao197 не меняетесь. Я искренне рад за вас!


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

FR>>Мне кажется Немерле с такими горе агитаторами может оказатся в полной ж...


VD>Я вот уверен, что даже такие не очень опытные агитаторы приносят Nemerle только пользу. Ведь с техническими проблемами мы справимся. А вот популяризация языка очень важни. И вы вносите реальный вклад в нее. Так держать товарищи!


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

FR>>В общем ничего кроме медвежьей услуги таким спамом не по теме вы Немерле не оказываете.


VD>Неумение оценивать реалии окружающего мира это конечно недостаток. Но думаю, он тебе не помешает в нашем деле. Так что продолжайте господа.


Угу вы абсолютно неадекватно оцениваете и возможности и главное место в IT мире и популярность любимой вами технологии

VD>Удивительно только то, что вы даже не замечаете, что вы соллисты в этом процессе.


Значит люди мирно беседуют о D, к ним заваливается фанат и орет про "жалкое подобие" вместо нормального разговора возникает свара, и после этого всех спорщиков еще и записывают в пропагандисты Немерле.

FR>>Кстати где модераторы, раньше злобных функциональщиков за такое же поведение банили.


VD>Ябиднячать не хорошо. А кливетать и подавно.


Это я тебе намекаю чтобы ты сам себя забанил
Если бы здесь любой другой язык продвигали так же упорно как Немерле, уверен все продвигальщики давно уже сидели бы в бане.
Re[13]: Ой, чо с D деется-то!?
От: FR  
Дата: 19.11.06 07:15
Оценка: -1
Здравствуйте, VladD2, Вы писали:

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


E>>Объективности ради: компилятор D написан на C++ (в каталоге src файлы с расширениями .c и .h, но в них C++ный код).


VD>И почему же Ди не пишется на Ди? Может из-за этого все проблемы?


Это front end его разумно писать именно на C++ чтобы легко переносить например на тот-же gcc. Можно конечно возится с раскруткой но в случае D когда уже существует паралельно C++ компилятор это будет только потерей времени.
Re[14]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 19.11.06 08:32
Оценка: +1
Здравствуйте, FR, Вы писали:

Раскрутка и использование gcc в качестве back-end никак друг друга не исключают. Более того — они даже могли бы выгодно друг друга дополнять. Именно поэтому вопрос "если этот язык так хорош, то почему автор сам его не использует?" так и вертится у меня на языке.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Ой, чо с D деется-то!?
От: FR  
Дата: 19.11.06 09:00
Оценка:
Здравствуйте, AndreiF, Вы писали:

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


AF>Раскрутка и использование gcc в качестве back-end никак друг друга не исключают. Более того — они даже могли бы выгодно друг друга дополнять. Именно поэтому вопрос "если этот язык так хорош, то почему автор сам его не использует?" так и вертится у меня на языке.


Откуда ты взял что автор его не использует?
Весь RTL D написан на D. Кроме того на D уже переписан DMDScript:

Why is the D front end written in C++ rather than D?

The front end is in C++ in order to interface to the existing gcc and dmd back ends. It's also meant to be easily interfaced to other existing back ends, which are likely written in C++. The D implementation of DMDScript, which performs better than the C++ version, shows that there is no problem writing a professional quality compiler in 100% D.


Why aren't all Digital Mars programs translated to D?

There is little benefit to translating a complex, debugged, working application from one language to another. But new Digital Mars apps are implemented in D.

Re[8]: Ой, чо с D деется-то!?
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 19.11.06 11:31
Оценка:
Здравствуйте, VladD2, Вы писали:

АХ>>Итак, 5% хотя бы I/O (про ядро непонятно) написаны на asm + C++. Немного, но тем не менее.


VD>Ты явно неверно интерпретируещь эти слова. Слова "5% of the trusted code" означают, что 5% небезопасного кода (коду которому приходится доверять) написано на С++ и ассемблере. Это значит, что 95% небезопасного кода написано на C# (с использованием unsafe-блока).


VD>Эти слова ничего не говорят об отностельном объеме небезопасного кода. Можно только с уверенгстью утверждать, что на момент написания этих слов код с небезопасными файлами занимал 561 файл.


ИМХО, твой английский здесь тебя подвёл. Обычно слово trusted (trusted code, trusted zone) означают нечто, которому МОЖНО без опасений доверять, а не ПРИХОДИТСЯ надеяться, что там всё нормально.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Re[9]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 19.11.06 11:43
Оценка: +1
Сергей Туленцев wrote:
> VD>Ты явно неверно интерпретируещь эти слова. Слова "5% of the trusted
> code" означают, что 5% небезопасного кода (коду которому приходится
> доверять) написано на С++ и ассемблере. Это значит, что 95%
> небезопасного кода написано на C# (с использованием unsafe-блока).
>
> ИМХО, твой английский здесь тебя подвёл. Обычно слово trusted (trusted
> code, trusted zone) означают нечто, которому МОЖНО без опасений
> доверять, а не ПРИХОДИТСЯ надеяться, что там всё нормально.

Кажется, в разработке отказоустойчивых систем как раз терминология
такая, как использует VladD2 — есть trusted часть, в которую мы верим,
так как отлаживали. И остальное, которому мы не верим, поэтому
используем trusted часть для его контроля. То есть мы знаем, что ничего
плохого не должно случиться, источник этого — внедрённые проверки... или
"trust".
Posted via RSDN NNTP Server 2.1 beta
Re[10]: Ой, чо с D деется-то!?
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 19.11.06 11:48
Оценка:
Здравствуйте, raskin, Вы писали:

R>Кажется, в разработке отказоустойчивых систем как раз терминология

R>такая, как использует VladD2 — есть trusted часть, в которую мы верим,
R>так как отлаживали. И остальное, которому мы не верим, поэтому
R>используем trusted часть для его контроля. То есть мы знаем, что ничего
R>плохого не должно случиться, источник этого — внедрённые проверки... или
R>"trust".

Опыта в разработке отказоустойчивых систем у меня, прямо скажем, мало.
Звиняйте, если был неправ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Re[11]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 19.11.06 11:56
Оценка:
Сергей Туленцев wrote:
> R>Кажется, в разработке отказоустойчивых систем как раз терминология
> R>такая, как использует VladD2 — есть trusted часть, в которую мы верим,
> R>так как отлаживали. И остальное, которому мы не верим, поэтому
> R>используем trusted часть для его контроля. То есть мы знаем, что ничего
> R>плохого не должно случиться, источник этого — внедрённые проверки... или
> R>"trust".
>
> Опыта в разработке отказоустойчивых систем у меня, прямо скажем, мало.
> Звиняйте, если был неправ.
Опыта разработки и у меня нет, но я встречал такое употребление. В конце
концов, система надёжна, когда эти понятия совпадают.
Posted via RSDN NNTP Server 2.1 beta
Re[9]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 19.11.06 13:27
Оценка:
Здравствуйте, Сергей Туленцев, Вы писали:

СТ>ИМХО, твой английский здесь тебя подвёл. Обычно слово trusted (trusted code, trusted zone) означают нечто, которому МОЖНО без опасений доверять, а не ПРИХОДИТСЯ надеяться, что там всё нормально.


Нет, ты неправ. Именно, что здесь trusted — это тот которому приходиться ДОВЕРЯТЬ, в надежде что он работает, в отличие от
verified — проверяемо верный.

Верный, конечно, в смысле типобезопасности и корректной работы с памятью, а не логически верный . Без ИИ логику не проверишь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 14:04
Оценка:
Здравствуйте, FR, Вы писали:

FR>Все таки D и C# идут в разных направлениях, но согласен что примерно равны по возможностям (не считая библиотек конечно).


У них есть одна небьльшая но решающая вещь. C# типобезопасный язык, а D — нет.

FR>За eao197 отвечать не могу, но я меняюсь, в душе я уже почти злобный функциональщик




FR> Вообще за последние пару лет у меня стиль кодирования сильно изменился, а новые языки это фигня , если знаешь принципы начать писать на них не так сложно как мне раньше казалось.


Правильно. Важны только пчелы. Но и они в сущьности фигня. (с)

FR>От такого влезания не по теме, по моему только вред, ничего кроме отвращения, поливание помоями других технологий у читателя вызвать не может. Другое дело что у вас есть и нормальная пропоганда, статьи, топики по теме, это хорошо и приносит пользу. Но излишний фанатизм только вредит, все-таки у многих есть рефлекс на излишнюю рекламу и спам.


Ны снова додумывашь действительность. Я лично влез в тему когда увидил, то что она окончательно превратилась в тему "казалось бы причем тут Nemerle". Ты даже не замечаешь, что я до сих пор стебаюсь над вами.

FR>Угу вы абсолютно неадекватно оцениваете и возможности и главное место в IT мире и популярность любимой вами технологии


Поживем — увидим. Я уже рассказывал про такх же как вы смелых предрекателей и то чем это все кончилось. Уверен, что через пару лет ты лично будешь делать вид, что ничего подобного не говорил.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 14:04
Оценка:
Здравствуйте, Сергей Туленцев, Вы писали:

СТ>ИМХО, твой английский здесь тебя подвёл. Обычно слово trusted (trusted code, trusted zone) означают нечто, которому МОЖНО без опасений доверять, а не ПРИХОДИТСЯ надеяться, что там всё нормально.


Твое IMHO в данном случае тебя подвело. Я принимал участие в переводе статьи по этой ОС и прекрасно понимаю о чем идет речь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 14:04
Оценка:
Здравствуйте, raskin, Вы писали:

R>Кажется, в разработке отказоустойчивых систем как раз терминология

R>такая, как использует VladD2 — есть trusted часть, в которую мы верим,
R>так как отлаживали. И остальное, которому мы не верим, поэтому
R>используем trusted часть для его контроля. То есть мы знаем, что ничего
R>плохого не должно случиться, источник этого — внедрённые проверки... или
R>"trust".

Именно. Разработчики Сингулрити обычный код называют гарантированным или проверяемым (верифицируемым), а небезопасному коду они доверяют.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Ой, чо с D деется-то!?
От: FR  
Дата: 19.11.06 14:24
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>Все таки D и C# идут в разных направлениях, но согласен что примерно равны по возможностям (не считая библиотек конечно).


VD>У них есть одна небьльшая но решающая вещь. C# типобезопасный язык, а D — нет.


Это да, но в D в отличии от C++ можно без проблем писать полностью типобезопасно. Ключик компилятора который превращал бы в ошибки использование опасного кода не помешал бы.

FR>>За eao197 отвечать не могу, но я меняюсь, в душе я уже почти злобный функциональщик


VD>


FR>> Вообще за последние пару лет у меня стиль кодирования сильно изменился, а новые языки это фигня , если знаешь принципы начать писать на них не так сложно как мне раньше казалось.


VD>Правильно. Важны только пчелы. Но и они в сущьности фигня. (с)


Угу

FR>>От такого влезания не по теме, по моему только вред, ничего кроме отвращения, поливание помоями других технологий у читателя вызвать не может. Другое дело что у вас есть и нормальная пропоганда, статьи, топики по теме, это хорошо и приносит пользу. Но излишний фанатизм только вредит, все-таки у многих есть рефлекс на излишнюю рекламу и спам.


VD>Ны снова додумывашь действительность. Я лично влез в тему когда увидил, то что она окончательно превратилась в тему "казалось бы причем тут Nemerle". Ты даже не замечаешь, что я до сих пор стебаюсь над вами.


Я все замечаю, но ты не замечаешь что твой стеб уже стал немножко натужным

FR>>Угу вы абсолютно неадекватно оцениваете и возможности и главное место в IT мире и популярность любимой вами технологии


VD>Поживем — увидим. Я уже рассказывал про такх же как вы смелых предрекателей и то чем это все кончилось. Уверен, что через пару лет ты лично будешь делать вид, что ничего подобного не говорил.


Ты мне уже говорил это же самое, успокойся вид делать не буду. Но уверен через пару лет ни D ни Немерле не будут сильно популярными языками.
Re[15]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.06 21:53
Оценка:
Здравствуйте, FR, Вы писали:

FR>Это да, но в D в отличии от C++ можно без проблем писать полностью типобезопасно. Ключик компилятора который превращал бы в ошибки использование опасного кода не помешал бы.


У D такой есть? Нет? Тогда в чем разница с С++?

FR>Я все замечаю, но ты не замечаешь что твой стеб уже стал немножко натужным


Тебе показалось.

FR>Ты мне уже говорил это же самое, успокойся вид делать не буду. Но уверен через пару лет ни D ни Немерле не будут сильно популярными языками.


Бьюсь об заклад, что через пять-семь лет ты будешь говорить что не говорил эти слова, так как в это время господствовать будут языки очень сильно похожие на Немерле, или он сам. D — ошибка эволюции. Но и у него есть перспектива судя по отличному состоянию С++ (но перспектива есть сейчас и она стримительно исчезает).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Ой, чо с D деется-то!?
От: IT Россия linq2db.com
Дата: 19.11.06 22:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Бьюсь об заклад, что через пять-семь лет ты будешь говорить что не говорил эти слова, так как в это время господствовать будут языки очень сильно похожие на Немерле, или он сам. D — ошибка эволюции. Но и у него есть перспектива судя по отличному состоянию С++ (но перспектива есть сейчас и она стримительно исчезает).


Думаю, что у него нет никаких перспектив. Известность D зиждется на банальной эксплуатации чувств тех пользователей C++, которые хотели бы видеть либо улучшения самого C++, либо получить какого-нибудь его приемника. Вот на этого какого-нибудь приемника D и претендует, причём довольно вяло и уже безрезультатно много лет.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Ой, чо с D деется-то!?
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 19.11.06 22:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Сергей Туленцев, Вы писали:


СТ>>ИМХО, твой английский здесь тебя подвёл. Обычно слово trusted (trusted code, trusted zone) означают нечто, которому МОЖНО без опасений доверять, а не ПРИХОДИТСЯ надеяться, что там всё нормально.


VD>Твое IMHO в данном случае тебя подвело. Я принимал участие в переводе статьи по этой ОС и прекрасно понимаю о чем идет речь.


Бывает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
--
Re[16]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 20.11.06 04:50
Оценка: -1
Здравствуйте, FR, Вы писали:

FR>Весь RTL D написан на D. Кроме того на D уже переписан DMDScript:


Маловато будет.

FR>

FR>Why is the D front end written in C++ rather than D?

FR>The front end is in C++ in order to interface to the existing gcc and dmd back ends. It's also meant to be easily interfaced to other existing back ends, which are likely written in C++. The D implementation of DMDScript, which performs better than the C++ version, shows that there is no problem writing a professional quality compiler in 100% D.


FR>

FR>Why aren't all Digital Mars programs translated to D?

FR>There is little benefit to translating a complex, debugged, working application from one language to another. But new Digital Mars apps are implemented in D.


Замечательные слова! Вот это — очень хорошее объяснение, почему D и дальше не будет никем использоваться.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 20.11.06 07:02
Оценка: 22 (8)
Здравствуйте, VladD2, Вы писали:

FR>>Это да, но в D в отличии от C++ можно без проблем писать полностью типобезопасно. Ключик компилятора который превращал бы в ошибки использование опасного кода не помешал бы.


VD>У D такой есть? Нет? Тогда в чем разница с С++?


Ну, после нескольких дней штудирования документации по D набрался не такой уж и маленький список отличий D от C++. Вот, например, перечень того, что лично мне нравится в D по сравнению с C++:

* Фиксированные и не зависящие от платформы размерности примитивных типов (т.к. byte, short, int, long, ...).

* Наличие properties у объектов и типов (т.к. .init, .min, .max, .sizeof, .alignof и пр):
int a;
int b = 1;
typedef int t = 2;
t c;
t d = cast(t)3;

int.init    // is 0
a.init        // is 0
b.init        // is 1
t.init        // is 2
c.init        // is 2
d.init        // is 3

struct Foo
{
    int a;
    int b = 7;
}

Foo.a.init    // is 0
Foo.b.init    // is 7


* Все переменные и члены классов инициализируются значениями по умолчанию.

* Объявление локальной переменной без инициализации является ошибкой.

* Автоматический вывод типов через auto и в операторе foreach.

* Унифицированный способ приведения типов через cast (в отличии от зоопарка приведений типов в C++).

* Наличие строгого typedef (порождает подтипы) и alias (псевдоним для существующего типа).

* Наличие свойства length у массивов и операции слайсинга массивов.

* Порождение исключения в switch, если на сработал ни один из case. (Если не ошибаюсь, ты приводил этот пример как доказательство большой безопасности Nemerle по сравнению с Java.)

* Возможность использования в case строковых литералов.
char[] name;
...
switch (name)
{
    case "fred":
    case "sally":
    ...
}


* Статические конструкторы и статические деструкторы классов и модулей. Про счетчики Шварца теперь можно забыть.

* Инварианты класса:
class Range
  {
    this( int left, int right )
      {
        _left = left;
        _right = right;
      }

    invariant
      {
        assert( _left <= _right, "_left must be less or equal to _right" );
      }
  ...
  }


* Встроенные в язык unit-тесты.
class Range
  {
  ...
    int opApply( int delegate( inout int ) dg )
      {
        int r = 0;
        for( int i = _left; i != _right; ++i )
          {
            r = dg( i );
            if( r )
              break;
          }
        return r;
      }

    unittest
      {
        int cycles = 0;
        foreach( i; new Range( 0, 4 ) )
          {
            ++cycles;
          }
        assert( 4 == cycles );
      }
  ...
  }


* Наличие static assert.

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

* scope-конструкции, которые упрощают написание exception safe кода:
int doSomethingImportant()
  {
    // Здесь делаем что-то, что при порождении исключения нужно откатить.
    ...
    // Реакция на исключение.
    scope(failure) doRollback();
    ... // Продолжение работы.
  }


* Вложенные функции, классы, структуры.

* Нет макросов, каждый символ означает в точности то, что он означает.

* Типобезопасные функции с переменным числом аргументов.

* Параметрами шаблонов могут быть строки и вещественные значения.

* Параметрам шаблонов можно назначать специализации:
template TBar( D, U:D[] ) {}
template TFoo( T: T* ) {}


Имхо, достойный список того, что уже есть в языке сейчас. Даже по сравнении с тем, что может появится в стандарте C++ через пару лет, а затем, еще через пару лет, в компиляторах.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Ой, чо с D деется-то!?
От: FR  
Дата: 20.11.06 07:21
Оценка: -1
Здравствуйте, AndreiF, Вы писали:

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


FR>>Весь RTL D написан на D. Кроме того на D уже переписан DMDScript:


AF>Маловато будет.


У величайшего из языков современности и этого нет.
Re[17]: Ой, чо с D деется-то!?
От: FR  
Дата: 20.11.06 07:21
Оценка:
Здравствуйте, IT, Вы писали:


IT>Думаю, что у него нет никаких перспектив. Известность D зиждется на банальной эксплуатации чувств тех пользователей C++, которые хотели бы видеть либо улучшения самого C++, либо получить какого-нибудь его приемника. Вот на этого какого-нибудь приемника D и претендует, причём довольно вяло и уже безрезультатно много лет.


Реально у D до последних релизов были слабые места по сравнению с C++. Сейчас уже нет. Но пока не выйдет стабильный релиз перспектив у него на самом деле не будет.
Re[16]: Ой, чо с D деется-то!?
От: FR  
Дата: 20.11.06 07:21
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

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


FR>>Это да, но в D в отличии от C++ можно без проблем писать полностью типобезопасно. Ключик компилятора который превращал бы в ошибки использование опасного кода не помешал бы.


VD>У D такой есть? Нет? Тогда в чем разница с С++?


Насколько я знаю нет. Но в D в отличии от C++ можно реально писать не пользуясь указателями и другими низкоуровневыми возможностями вообще.

FR>>Я все замечаю, но ты не замечаешь что твой стеб уже стал немножко натужным


VD>Тебе показалось.




FR>>Ты мне уже говорил это же самое, успокойся вид делать не буду. Но уверен через пару лет ни D ни Немерле не будут сильно популярными языками.


VD>Бьюсь об заклад, что через пять-семь лет ты будешь говорить что не говорил эти слова, так как в это время господствовать будут языки очень сильно похожие на Немерле, или он сам. D — ошибка эволюции. Но и у него есть перспектива судя по отличному состоянию С++ (но перспектива есть сейчас и она стримительно исчезает).


Слушай не решай за меня что я буду говорить. Если я завтра начну писать на Немерле, для меня это не будет поводом поливать помоями все инструменты которые я до этого использовал. Вы мне напоминаете слесаря который дорвался до электроотвертки и кричит что обычные отвертки это гов... а молотками пользуются только идиоты.
Зато я могу представить что именно ты будешь очень нелестно отзыватся о Немерле (как сейчас о C++), так как через семь лет у тебя будет новая игрушка
Re[18]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 20.11.06 07:58
Оценка:
Здравствуйте, FR, Вы писали:

FR>У величайшего из языков современности и этого нет.


Если ты про Немерле, то его компилятор написан полностью на нем же, и это уже вполне доказывает жизнеспособность языка. В отличие от.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Ой, чо с D деется-то!?
От: FR  
Дата: 20.11.06 08:24
Оценка:
Здравствуйте, AndreiF, Вы писали:

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


FR>>У величайшего из языков современности и этого нет.


AF>Если ты про Немерле, то его компилятор написан полностью на нем же, и это уже вполне доказывает жизнеспособность языка. В отличие от.


А то что на D написан транслятор DMDScript по твоему ничего ни доказывает?
Очень интересная логика.
Re[20]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 20.11.06 08:28
Оценка:
Здравствуйте, FR, Вы писали:

FR>А то что на D написан транслятор DMDScript по твоему ничего ни доказывает?


Ничего. Транслятор скрипта и компилятор языка с выводом типов, паттерн матчингом и синтаксическими расширениями — сложность этих задач отличается на порядок, если не на два.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[21]: Ой, чо с D деется-то!?
От: FR  
Дата: 20.11.06 08:45
Оценка:
Здравствуйте, AndreiF, Вы писали:

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


FR>>А то что на D написан транслятор DMDScript по твоему ничего ни доказывает?


AF>Ничего. Транслятор скрипта и компилятор языка с выводом типов, паттерн матчингом и синтаксическими расширениями — сложность этих задач отличается на порядок, если не на два.


И что? Конечно компилятор сложнее, но это абсолютно не доказывает "жизнеспособность языка". Эта вещь доказывается только практикой.
Re[22]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 20.11.06 08:52
Оценка:
Здравствуйте, FR, Вы писали:

FR>И что? Конечно компилятор сложнее, но это абсолютно не доказывает "жизнеспособность языка". Эта вещь доказывается только практикой.


Точно, только практикой. Каков примерно объем всего кода на D, о котором тебе известно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Ой, чо с D деется-то!?
От: kedik  
Дата: 20.11.06 09:05
Оценка: :))) :))) :)
Здравствуйте, VladD2, Вы писали:

VD>Бьюсь об заклад, что через пять-семь лет ты будешь говорить что не говорил эти слова, так как в это время господствовать будут языки очень сильно похожие на Немерле, или он сам. D — ошибка эволюции. Но и у него есть перспектива судя по отличному состоянию С++ (но перспектива есть сейчас и она стримительно исчезает).


VladD2,
я Вам искренне завидую... обладай я хоть камплей Ваших способностей, я бы уже давно забросил бы к черту весь этот комьютерный хлам... и ушел бы торговать на бирже... а через несколько лет мирно жил бы на пенсии и просто наслаждался жизнью
Re[22]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 20.11.06 09:08
Оценка:
Здравствуйте, FR, Вы писали:

AF>>Ничего. Транслятор скрипта и компилятор языка с выводом типов, паттерн матчингом и синтаксическими расширениями — сложность этих задач отличается на порядок, если не на два.


FR>И что? Конечно компилятор сложнее, но это абсолютно не доказывает "жизнеспособность языка". Эта вещь доказывается только практикой.


+1
Более того, разные версии Modula и Oberon, если не ошибаюсь, изначально сами себя компилировали. Насколько им это помогло?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[23]: Ой, чо с D деется-то!?
От: FR  
Дата: 20.11.06 09:15
Оценка:
Здравствуйте, AndreiF, Вы писали:

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


FR>>И что? Конечно компилятор сложнее, но это абсолютно не доказывает "жизнеспособность языка". Эта вещь доказывается только практикой.


AF>Точно, только практикой. Каков примерно объем всего кода на D, о котором тебе известно?


Мало, можешь сам вот тут подсчитать http://dsource.org/projects/
Но на D уже есть выпущенные коммерческме продукты. (например тот же DMDScript) http://www.digitalmars.com/dscript/buy.html.
Вообще ты зря затеваешь это меряние пипи, и D и N пока представляют собой исчезающе малые величины.
Re[23]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 20.11.06 09:16
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Точно, только практикой. Каков примерно объем всего кода на D, о котором тебе известно?


Например, библиотека Mango -- это почти 2Mb d-кода (больше 63K строк).
В стандартной библиотеке D phobos уже 60K строк.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[24]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 20.11.06 09:18
Оценка:
Здравствуйте, FR, Вы писали:

FR>Вообще ты зря затеваешь это меряние пипи, и D и N пока представляют собой исчезающе малые величины.


Не забываем только о сравнительном времени жизни этих языков.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 20.11.06 09:22
Оценка:
Здравствуйте, ie, Вы писали:

ie>Прошу:


ie>
ie>#pragma indent

ie>using System.Console
ie>using System.Math

ie>def makeDistrib(trxCount : int, quantums : int)
ie>    mutable r : list[int] = []
ie>    mutable remainingTrx = trxCount
ie>    mutable remainingQuantums = quantums
ie>    foreach (_i in [1..quantums])
ie>        r ::= Round(remainingTrx / (remainingQuantums :> double)) :> int
ie>        remainingTrx -= r.Head
ie>        --remainingQuantums
ie>    r

ie>def r = makeDistrib(2, 6)
ie>WriteLine($"$r")
ie>


Кстати, оказалось, что и на D можно было версию с foreach сделать:
import std.math;
import std.stdio;

int[] makeDistrib( int trxCount, int quantums )
  {
    auto r = new int[ quantums ];
    foreach( inout c; r )
      {
        c = cast(int)std.math.round(
            cast(float)trxCount / quantums );
        trxCount -= c;
        --quantums;
      }

    return r;
  }

void main()
  {
    int[] d = makeDistrib( 2, 6 );
    writefln( d );
  }


Я просто упустил изначально из виду, что у динамических массивов в D известна их длина и поэтому их можно скармливать foreach-у.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: Ой, чо с D деется-то!?
От: Андрей Хропов Россия  
Дата: 20.11.06 10:01
Оценка: 4 (1)
Здравствуйте, FR, Вы писали:

FR>Реально у D до последних релизов были слабые места по сравнению с C++. Сейчас уже нет.


Вот мой список:

1. Слабые места по сравнению с C++:

  1. отсутствие полноценной поддержки const по-сравнению с C++ (const методы, const указатели)[/*]
  2. отсутствие возможности перегружать оператор присваивания или аналогичный механизм, который бы позволил реализовать подсчет ссылок[/*]
  3. отсутствие возможности возвращать ссылки из функций
    (поэтому my_class["name"] += 1 не получится)[/*]
  4. отсутствие возможности перегружать оператор присваивания не позволяет нормально реализовать механизм expression templates, что очень плохо для вычислительных программ[/*]

2. Другие слабые места:

  1. медленный консервативный GC (для точного нужно по всей вероятности корректировать дизайн)[/*]
  2. отсутствие полноценных замыканий, но при этом возвращать делегаты из функций не запрещено, что приводит к UB![/*]
  3. неполноценная поддержка рефлексии[/*]
  4. отсутствие генераторов (как сейчас реализуется foreach несколько менее удобно и я подозреваю сложнее оптимизировать)[/*]
  5. семантика использования миксинов до конца не проработана (я их не очень изучал но судя по форуму там много вопросов)[/*]

Все ИМХО.

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


Мне компилятор кажется достаточно стабильным, если не пользоваться новыми навороченными фичами вроде variadic templates.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Ой, чо с D деется-то!?
От: prVovik Россия  
Дата: 20.11.06 11:27
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

VD>Бьюсь об заклад, что через пять-семь лет ты будешь говорить что не говорил эти слова, так как в это время господствовать будут языки очень сильно похожие на Немерле, или он сам.


Хе хе.. Опытный форумный боец сразу чувствуется по заранее подготовленным маршрутам отступления
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[8]: Ой, чо с D деется-то!?
От: prVovik Россия  
Дата: 20.11.06 11:46
Оценка: :))
Здравствуйте, VladD2, Вы писали:

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


C>>Нет, это Немерль — жалкое подобие D. Поделка студентов. Даже без .NET

C>>Framework/Mono работать не умеет. Фигня, короче.

VD>И что забавно я даже спорить с тобой не буду.


черт!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[17]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.06 15:50
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Хе хе.. Опытный форумный боец сразу чувствуется по заранее подготовленным маршрутам отступления


Нет никаких отсуплений. Я реалист. И говорю о том, что четко могу предсказать путем банальной интерполяции известных мне фактов. Ну, а то что для многих мои выводы не очевидны — это их проблемы, а не мои. Я много раз наблюдал как такие умники отказывались от своих слов по прошествию времени. Поверь мне, что в 1993-1994 году слова про то что Новел окажется в заднице и его рынок уйдет МС вызвали такой же скепсис как эти сейчас. Ну, и где эти скептики?

Ежу понятно, что я могу ошибаться. Любой предсказание не может быть на 100% точным. Ну, да поживем увидим.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Ой, чо с D деется-то!?
От: prVovik Россия  
Дата: 20.11.06 16:37
Оценка:
Здравствуйте, VladD2, Вы писали:


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


А можно подробнее про "интерполяцию фактов" применительно к тому, что именно заставит Microsoft заменить свой теперешний флагман C# на немерле.
лэт ми спик фром май харт
Re[18]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.06 23:12
Оценка: -1
Здравствуйте, FR, Вы писали:

FR>Реально у D до последних релизов были слабые места по сравнению с C++. Сейчас уже нет. Но пока не выйдет стабильный релиз перспектив у него на самом деле не будет.


Ага. Когда выйдет рилиз придумаешь что-нить другое.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.06 23:12
Оценка:
Здравствуйте, prVovik, Вы писали:

V>А можно подробнее про "интерполяцию фактов" применительно к тому, что именно заставит Microsoft заменить свой теперешний флагман C# на немерле.


Этой теме? Здесь народ по злословить собрался и посмеяться друг над другом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.06 23:12
Оценка: -1
Здравствуйте, AndreiF, Вы писали:

FR>>

FR>>Why aren't all Digital Mars programs translated to D?

FR>>There is little benefit to translating a complex, debugged, working application from one language to another. But new Digital Mars apps are implemented in D.


AF>Замечательные слова! Вот это — очень хорошее объяснение, почему D и дальше не будет никем использоваться.


Долго думал согласиться с этими словами или нет. Но понял, что в общем-то согласен. И знаешь почему? Во все не потому, что считаю что переписывание имещихся пириложений на Ди является обязательным ритуалом доказательства его работоспособности. Дело в другом. Дело в том, что успех языка в не малой степени зависит от того насколько его легко развивать. Уж простят меня боги за очердное упоминание Немерле в суе, но во многом качество Неперле определяется тем, что он был переписан на самом себе и развивается на самом себе. Это дает комулятивный эффект. Любое увеличение мощьности языка и урошение его использования приводит к упрощенияю дальнейшего развития языка. Язык сам себя раскручивает.

Таким образом можно сказать, что ответ является лживым. Ответ как бы ставит нас перед фактом, что есть готовое приложение (компилятор Ди) и его не разумно переписывать на другом (пусть даже более мощьном) языка. Если бы дела обстаяли так, то я был бы полностью согласен с автором ответа. Но компилятор Ди не является законченным приложением. И решение развивать его на С++ говорит об одном из двух фактов. Или все же Ди не дает существенной разницы по сравнению с С++, или его авторы мягко говоря не дальновидны. Оба факта не в пользу Ди.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.06 23:12
Оценка:
Здравствуйте, FR, Вы писали:

FR>У величайшего из языков современности и этого нет.


Да, на русском матерном RTL не напишешь. Но, черт побери, это не делает его менее великим!!!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.06 23:12
Оценка: :)
Здравствуйте, AndreiF, Вы писали:

AF>Ничего. Транслятор скрипта и компилятор языка с выводом типов, паттерн матчингом и синтаксическими расширениями — сложность этих задач отличается на порядок, если не на два.


Ты в этом пыташся убедить поклонника Питона?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 21.11.06 05:12
Оценка:
Здравствуйте, eao197, Вы писали:

E>Например, библиотека Mango -- это почти 2Mb d-кода (больше 63K строк).

E>В стандартной библиотеке D phobos уже 60K строк.

И это — за добрых семь-восемь лет с тех пор, как появился D.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.11.06 06:30
Оценка: +2
Здравствуйте, AndreiF, Вы писали:

E>>Например, библиотека Mango -- это почти 2Mb d-кода (больше 63K строк).

E>>В стандартной библиотеке D phobos уже 60K строк.

AF>И это — за добрых семь-восемь лет с тех пор, как появился D.


Во-первых, за 4-ре года с момента выхода первой доступной версии (28 сентября 2002).
Во-вторых, это только два проекта из тех, что были у меня под рукой. Но на dsource.org есть еще штук надцать только OpenSource-проектов.
В-третьих, D очень сильно изменялся за эти годы, поэтому он был для части разработчиков (в том числе и для меня) не самой подходящей площадкой для работы (именно для работы, а не для программирования ради исскуства). Не было никакого желания делать что-то серьезное, зная что через полгода половину из написанного нужно будет переписывать. Но сейчас, в связи с грядущей стабилизацией ситуация сильно меняется в лучшую сторону.
В-четвертых, DMD официально поддерживает только Windows и Linux, но для некоторых проектов этого мало. Поэтому еще один всплеск интереса к D произойдет после выхода версии 1.0, когда ее начнет поддерживать порт GDC на других Unix-ах.

Так что, если не заниматься расставлением минусов и попытками обгадить собеседника замечаниями о "ранимой душе", а взглянуть на ситуацию непредвзято, то окажется, что для не вышедшего из стадии beta языка на D написано не так уж и мало.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Кстати о хвостовой рекурсии...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.11.06 12:26
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH>
WH>def makeDistrib(trxCount : int, quantums : int)
WH>{
WH>| (_, 0) => []
WH>| (remainingTrx, remainingQuantums) =>
WH>    def r = (remainingTrx :> double) / remainingQuantums;
WH>    def r = Round(r, MidpointRounding.AwayFromZero) :> int;
WH>    r :: makeDistrib(remainingTrx - r, remainingQuantums - 1);
WH>}
WH>def r = makeDistrib(2, 6);
WH>WriteLine($"$r");
WH>

WH>Просто если уж начал писать на функциональном языке так пиши в функциональном стиле.

Мне кажется, что данная реализация makeDistrib не позволяет языку выполнить рескрутку хвостовой рекурсии -- здесь обычная рекурсия за счет того, что r нужно сохранять в стеке до возврата из следующих makeDistrib.

Для того, чтобы раскрутка хвостовой рекурсии действительно выполнялась, необходимо текущий список передавать аргументом. Вот как-то так (Scala):
object BufferizatorDistrib5
  {
    def makeDist( trxCount: int, quantums: int ) : List[ int ] = {
      def distrib( trxCount: int, quantums: int, result: List[ int ] ) : List[ int ] = {
        if( quantums >= 1 )
          {
            val r = Math.round(trxCount.toFloat / quantums)
            distrib( trxCount - r, quantums - 1, r :: result )
          }
        else
          result
      }

      distrib( trxCount, quantums, Nil ).reverse
    }

    def main( args: Array[ String ] ) =
      {
        System.out.print( makeDist( 2000, 60000 ) )
      }
  }


Похоже, что я прав, поскольку при quantums == 60000 программа на Nemerle ломается. Но вот в таком виде работает:
using System;
using System.Console;
using System.Math;

def makeDistrib(trxCount : int, quantums : int)
{
  def distrib( trxCount: int, quantums: int, result ) {
    | (_, 0, _) => result
    | (remainingTrx, remainingQuantums, result) =>
      def r = (remainingTrx :> double) / remainingQuantums;
      def r = Round(r, MidpointRounding.AwayFromZero) :> int;
      distrib(remainingTrx - r, remainingQuantums - 1, r :: result );
  }
  distrib( trxCount, quantums, [] )
}

def r = makeDistrib(2000, 60000);
WriteLine($"$r");


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 26.11.06 17:23
Оценка:
Здравствуйте, ie, Вы писали:

ie>А кстати! J, дайте J!!


Как-то не особо гламурно получилось

r =. [:<.0.5+({.%}.) .NB round(trxCount/trxCount)
md =. ([:|.6{.|.)@([:#:{:@(+(-@r@(2&{.),_1,(2^([:<:1&{))*r@(2&{.))^:(1&{)))@(,&0)
md 2 6 .NB вернет [0 0 1 0 1 0]
... << RSDN@Home 1.2.0 alpha rev. 655>>
Превратим окружающую нас среду в воскресенье.
Re[16]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 26.11.06 18:45
Оценка:
ie wrote:
> ie>А кстати! J, дайте J!!
>
> Как-то не особо гламурно получилось
>
> r =. [:<.0.5+({.%}.) .NB round(trxCount/trxCount)
> md =. ([:|.6{.|.)@([:#:{:@(+(-@r@(2&{.),_1,(2^([:<:1&{))*r@(2&{.))^1&{)))@(,&0)
> md 2 6 .NB вернет [0 0 1 0 1 0]

Ну.. Как-то правда сложно.

r =. <.@(0.5&+([%]))
md =. (]#0:)`(r,([-r)$:<:@])@.(*@[)
md2 =. {. md {:


Бонусы: 2&{. — это, в данном случае, {: (tail). И не надо делить на
1-элементный список, полученный }. (behead).

А во всех antibase и capped forks я не стал разбираться.
Posted via RSDN NNTP Server 2.1 beta
Re[17]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 04:06
Оценка:
Здравствуйте, raskin, Вы писали:

>> ie>А кстати! J, дайте J!!

>>
>> Как-то не особо гламурно получилось
>>
>> r =. [:<.0.5+({.%}.) .NB round(trxCount/trxCount)
>> md =. ([:|.6{.|.)@([:#:{:@(+(-@r@(2&{.),_1,(2^([:<:1&{))*r@(2&{.))^1&{)))@(,&0)
>> md 2 6 .NB вернет [0 0 1 0 1 0]

R>Ну.. Как-то правда сложно.


Дык, первый блин

R>
R>r =. <.@(0.5&+([%]))
R>md =. (]#0:)`(r,([-r)$:<:@])@.(*@[)
R>md2 =. {. md {:
R>




До диадной формы r и md как-то даже не додумался
В r у тебя ошибка. Надо:
r =. <.@(0.5&+@([%]))
.NB или так
r =. <.@(0.5+([%]))

У тебя, если я все верно понял, получается ненужный hook.
f =. 0.5&+
g =. ([%])
получаем:
x f (g y)
, где (g y) == 1
а вот этого поведения не понял:
x f 1 -> (x*0.5) + 1
почему так получается?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[18]: Ой, чо с D деется-то!?
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.11.06 04:49
Оценка:
ie,

ie>До диадной формы r и md как-то даже не додумался

ie>В r у тебя ошибка. Надо:
ie>
ie>r =. <.@(0.5&+@([%]))
ie>.NB или так
ie>r =. <.@(0.5+([%]))
ie>

ie>У тебя, если я все верно понял, получается ненужный hook.
ie>f =. 0.5&+
ie>g =. ([%])
ie>получаем:
ie>x f (g y)
ie>, где (g y) == 1
ie>а вот этого поведения не понял:
ie>x f 1 -> (x*0.5) + 1
ie>почему так получается?

Ой. А вы аналог Жениной задачки чё ли сочиняете? Хм, похоже уже сочинили...
Кстати, советую юзать fndisplay — с ним многие вещи гораздо прозрачнее:
   load 'system/packages/misc/fndisplay.ijs'
   defverbs 'P Q R'
   setfnform 'Jv'

   0 (P Q~ &. R) 1
+-------------------------+
|0 _P_ RI_ (R_ 1) _Q_ R_ 1|
+-------------------------+


g y кстати не всегда 1. Попробуй подставить 0.
а x f 1 вообще некорректное выражение
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[19]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 05:09
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>ie,

ie>>У тебя, если я все верно понял, получается ненужный hook.
ie>>f =. 0.5&+
ie>>g =. ([%])
ie>>получаем:
ie>>x f (g y)
ie>>, где (g y) == 1
ie>>а вот этого поведения не понял:
ie>>x f 1 -> (x*0.5) + 1
ie>>почему так получается?

LCR>Кстати, советую юзать fndisplay — с ним многие вещи гораздо прозрачнее:

LCR>
LCR>   load 'system/packages/misc/fndisplay.ijs'
LCR>   defverbs 'P Q R'
LCR>   setfnform 'Jv'

LCR>   0 (P Q~ &. R) 1
LCR>+-------------------------+
LCR>|0 _P_ RI_ (R_ 1) _Q_ R_ 1|
LCR>+-------------------------+
LCR>


Ниче не понял, можешь пояснить, плз.

LCR>g y кстати не всегда 1. Попробуй подставить 0.


+1

LCR>а x f 1 вообще некорректное выражение


вот я и не понимаю почему интерпритатор его кушает

2 f 1
2
6 f 1
4

... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[18]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 27.11.06 06:16
Оценка:
ie wrote:
> R>r =. <.@(0.5&+([%]))
> R>md =. (]#0`(r,([-r)$:<:@])@.(*@[)
> R>md2 =. {. md {:
>
> В r у тебя ошибка. Надо:
>
> r =. <.@(0.5&+@([%]))
Тьфу. Так и было написано. На КПК, на котором J стоит.

> .NB или так

> r =. <.@(0.5+([%]))
У меня не работает.. Хотя должно бы.
0.5+([%]) — syntax error
  r =. <.@(0.5"0+([%]))
  r =. <.@(0.5"_+([%]))
  r =. <.@([: 0.5&+ ([%]))

Но самый первый вариант мне понравился больше.

> У тебя, если я все верно понял, получается ненужный hook.

> f =. 0.5&+
> g =. ([%])
> получаем:
> x f (g y)
> , где (g y) == 1
> а вот этого поведения не понял:
> x f 1 -> (x*0.5) + 1
> почему так получается?
Неясно. Наверное, (x monad y) = (monad ^: x) y
Posted via RSDN NNTP Server 2.1 beta
Re[19]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 06:33
Оценка:
Здравствуйте, raskin, Вы писали:

>> r =. <.@(0.5+([%]))

R>У меня не работает.. Хотя должно бы.
R>0.5+([%]) — syntax error

У мена все ок на Engine: j601/2006-11-10/14:25

R>
R>  r =. <.@(0.5"0+([%]))
R>  r =. <.@(0.5"_+([%]))
R>  r =. <.@([: 0.5&+ ([%]))
R>

R>Но самый первый вариант мне понравился больше.
+1

>> а вот этого поведения не понял:

>> x f 1 -> (x*0.5) + 1
>> почему так получается?
R>Неясно. Наверное, (x monad y) = (monad ^: x) y

Ничего по этому поводу пока найти не могу
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[20]: Ой, чо с D деется-то!?
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.11.06 06:48
Оценка:
ie,


LCR>>Кстати, советую юзать fndisplay — с ним многие вещи гораздо прозрачнее:

LCR>>
LCR>>   load 'system/packages/misc/fndisplay.ijs'
LCR>>   defverbs 'P Q R'
LCR>>   setfnform 'Jv'

LCR>>   0 (P Q~ &. R) 1
LCR>>+-------------------------+
LCR>>|0 _P_ RI_ (R_ 1) _Q_ R_ 1|
LCR>>+-------------------------+
LCR>>


ie>Ниче не понял, можешь пояснить, плз.


Сорри. Короче, предположим, у нас есть некий забубенный глагол, скажем (* %~ &. (+/ % #)) и нам надо выяснить, как он работает. Вот, с помощью fndisplay мы определяем псевдоглаголы P Q и R и эмулируем этот забубенный глагол с помощью P Q R. Получаем выражение, которое легко читается: _X_ означает диаду, X_ — монаду, _XI_ — обратную диаду, XI_ — обратную монаду.

LCR>>а x f 1 вообще некорректное выражение


ie>вот я и не понимаю почему интерпритатор его кушает

ie>

ie> 2 f 1
ie>2
ie> 6 f 1
ie>4


А можешь набрать просто f, чтобы он просто бокс выдал, чтобы просто посмотреть на него?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[21]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 07:12
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

ie>>Ниче не понял, можешь пояснить, плз.


LCR>Сорри. Короче, предположим, у нас есть некий забубенный глагол, скажем (* %~ &. (+/ % #)) и нам надо выяснить, как он работает. Вот, с помощью fndisplay мы определяем псевдоглаголы P Q и R и эмулируем этот забубенный глагол с помощью P Q R. Получаем выражение, которое легко читается: _X_ означает диаду, X_ — монаду, _XI_ — обратную диаду, XI_ — обратную монаду.


Ок, побалуюсь

LCR>А можешь набрать просто f, чтобы он просто бокс выдал, чтобы просто посмотреть на него?

+---+-+-+
¦0.5¦&¦+¦
+---+-+-+
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[22]: Ой, чо с D деется-то!?
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.11.06 16:10
Оценка:
ie,

LCR>>А можешь набрать просто f, чтобы он просто бокс выдал, чтобы просто посмотреть на него?

ie>
ie>+---+-+-+
ie>¦0.5¦&¦+¦
ie>+---+-+-+
ie>


Нашлись ноги. Тут: http://rsdn.ru/Forum/Message.aspx?mid=2235622&amp;only=1
Автор: Lazy Cjow Rhrr
Дата: 27.11.06
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[20]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 27.11.06 18:23
Оценка:
ie wrote:
> Здравствуйте, raskin, Вы писали:
>
>> > r =. <.@(0.5+([%]))
> R>У меня не работает.. Хотя должно бы.
> R>0.5+([%]) — syntax error
>
> У мена все ок на Engine: j601/2006-11-10/14:25
501-pocketpc...

>> > а вот этого поведения не понял:

>> > x f 1 -> (x*0.5) + 1
>> > почему так получается?
> R>Неясно. Наверное, (x monad y) = (monad ^: x) y
>
> Ничего по этому поводу пока найти не могу
Это, кажется, где-то мимоходом сказано. Ну и эксперимент подтверждает.
Posted via RSDN NNTP Server 2.1 beta
Re[16]: Ой, чо с D деется-то!?
От: Трурль  
Дата: 28.11.06 08:29
Оценка: 23 (2)
Здравствуйте, ie, Вы писали:
ie>А кстати! J, дайте J!!

ie>
ie>r =. [:<.0.5+({.%}.) .NB round(trxCount/trxCount)
ie>md =. ([:|.6{.|.)@([:#:{:@(+(-@r@(2&{.),_1,(2^([:<:1&{))*r@(2&{.))^:(1&{)))@(,&0)
ie>md 2 6 .NB вернет [0 0 1 0 1 0]
ie>

А вот два варианта на К.
длинный
round: {_0.5+x}
make_dist:{[trx_count; quantum_count]
  result: ()
  do[quantum_count
    result ,: rlast: round[trx_count%quantum_count]
    trx_count -: rlast
    quantum_count -: 1 ]
  result }

и короткий
md:{--':{x-_0.5+x%y}\[x;y-!y]}
Re[17]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 28.11.06 08:38
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>А вот два варианта на К.


Где его взять то?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 10.12.06 20:54
Оценка:
Здравствуйте, eao197, Вы писали:

E>Например, стандартные пакеты std.traits и std.typetuple уже содержат то, что в C++ достигается килобайтами кода из Boost-a. Красота однако, аж слюньки текут.


Уже добавили std.bind.
Аналог boost::bind.

А также имеется boostAlias, который принимает функцию как шаблон аргумента, а также разбирает out и inout аргументы:
Пример:
void foo(inout int a)
{
  ...
}

int x;
bindAlias!(foo)(&x);
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Ой, чо с D: подтянулся Александреску, начались пошлости
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 09:27
Оценка: 6 (2) :)
В news-группе digitalmars.D в последнее время стал часто появляться небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску.

Вот например, предложил написать обобщенный вариант функции max, удовлетворяющей следующим условиям:

a) generic
b) efficient
c) preserve lvalueness when possible such that one can write e.g.

max(arr[0], arr[1]) *= 0.9;

d) should accept two or more arguments
e) should return the "smartest" type, e.g. max of an unsigned int and
unsigned long should return unsigned long
f) short and easy to understand


и затем сам же предложил ее решение:
template max
{
private:
   template maxtype(storageof(T1) T1, storageof(T2) T2)
   {
     static if (storageof(T1) T1 == storageof(T2) T2)
       alias storageof(T1) T1 maxtype;
     else
       static if (std.is_num!(T1) && std.is_num!(T2))
         static if (T2.max > T1.max)
           alias T2 maxtype;
         else
           alias T1 maxtype;
       else
         alias typeof(true ? T1 : T2) maxtype;
   }
   maxtype(storageof(T1) T1, storageof(T2) T2)
   max2(T1, T2)(storageof(T1) T1 lhs, storageof(T2) T2 rhs)
   {
     if (rhs > lhs) return rhs;
     return lhs;
   }
public:
   alias std.varargs_reduce!(max2) max;
}

(причем реализацию std.varargs_reduce он предлагает как следующее упражнение ).

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Cyberax Марс  
Дата: 23.01.07 09:56
Оценка:
eao197 wrote:
> В news-группе digitalmars.D в последнее время стал часто появляться
> небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску.
Ничего, вот еще Буст портируют и вообще красота будет
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 10:30
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

>> В news-группе digitalmars.D в последнее время стал часто появляться

>> небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску.
C>Ничего, вот еще Буст портируют и вообще красота будет

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 23.01.07 11:25
Оценка: :))) :))
eao197,

E>Вот например, предложил написать обобщенный вариант функции max, удовлетворяющей следующим условиям:

E>

E>f) short and easy to understand



Навеяло, "как всегда придёт поручик Ржевский..."
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[4]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Андрей Хропов Россия  
Дата: 23.01.07 13:34
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>В-третьих, скорость компилятора D такова, что применение в D-шной программе монстров а-ля Boost не будет заметно сказываться на скорости компиляции программы (в отличии от C++).

Ну это пока там до 4-х этажных шаблонов не добрались . А вообще правильный подход, как уже говорилось, подход Немерле: метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: FR  
Дата: 23.01.07 15:38
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

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


E>>В-третьих, скорость компилятора D такова, что применение в D-шной программе монстров а-ля Boost не будет заметно сказываться на скорости компиляции программы (в отличии от C++).


АХ>Ну это пока там до 4-х этажных шаблонов не добрались .


Так надобность в четырехэтажных шаблонах в D гораздо меньше чем в C++.

АХ>А вообще правильный подход, как уже говорилось, подход Немерле:


Ты наверно хотел сказать лиспа?

АХ>метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.


Какие пляски еще немного дошлифовать D и будет тихий медленный танец
Re[6]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Андрей Хропов Россия  
Дата: 23.01.07 16:03
Оценка:
Здравствуйте, FR, Вы писали:

АХ>>А вообще правильный подход, как уже говорилось, подход Немерле:


FR>Ты наверно хотел сказать лиспа?


Да, идея в общем та же.
С Лиспом меньше знаком. Там вообще-то они насколько я знаю не всегда компилируются. Но не суть. Пусть будет Лиспа, раз уж там это раньще придумали.

АХ>>метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.


FR>Какие пляски еще немного дошлифовать D и будет тихий медленный танец


Ну меня напрягает само то, что приходится изобретать какие-то чисто функциональные метафункции. Проще разрешить работать с AST да и все. И ввести специальный синтаксис для вставки кода и API компилятора для вставки деклараций.

Правда, и в Немерле и D меня напрягает, то что нет работы с lvalue, поэтому и там и там пока не получится реализовать

 max(a[0],a[1]) *= 0.9;


в отличие от C++, кстати.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 16:56
Оценка: :)))
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

E>>Вот например, предложил написать обобщенный вариант функции max, удовлетворяющей следующим условиям:

E>>

E>>f) short and easy to understand

LCR>
По сравнению с C++ это действительно короче и легче воспринимается.

LCR>Навеяло, "как всегда придёт поручик Ржевский..."


А ты думаешь, откуда название поста взялось


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: alexeiz  
Дата: 26.01.07 06:04
Оценка:
"eao197" <31476@users.rsdn.ru> wrote in message news:2314503@news.rsdn.ru...
> Здравствуйте, Cyberax, Вы писали:
>
>>> В news-группе digitalmars.D в последнее время стал часто появляться
>>> небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску.
> C>Ничего, вот еще Буст портируют и вообще красота будет
>
> Вообще-то в портировании Boost-а в D (ну или какой-то его части), имхо,
> смысла может быть больше, чем в развитии Boost-а для C++.

А кому это надо? Кто сейчас на D пишет? Мизер по сравнению с C++. А пока
D разовьет момент, там уже и C++09 выйдет с примерно такими же фичами.
Posted via RSDN NNTP Server 2.0
Re[5]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.01.07 07:05
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

>> Вообще-то в портировании Boost-а в D (ну или какой-то его части), имхо,

>> смысла может быть больше, чем в развитии Boost-а для C++.

A>А кому это надо? Кто сейчас на D пишет? Мизер по сравнению с C++. А пока

A>D разовьет момент, там уже и C++09 выйдет с примерно такими же фичами.

Во-первых, мне кажется, что C++09 будет очень сильно отличаться от D. Это уже разные языки, не смотря на общих предков. И со временем это различие будет проявляться все сильнее.

Во-вторых, не важно, сколько именно людей программируют на D сейчас. Гораздо важнее, сколько обращают внимание на D и с какой динамикой программисты мигрируют на D (причем, что удивительно, не только с C++). Хорошая динамика сейчас создаст значительную D community к моменту появления C++09.

В-третьих, проблема C++ была в том, что он не обеспечил своим пользователям приличной стандартной библиотеки сразу. Из-за этого такой разброд и шатания: для одних только GUI -- MFC, WTL, Qt, FLTK, FOX, ... Для околосистемного программирования, например, ACE и Poco. Да тут еще и Boost подходит, который лично мне не нравится. Но, тем не менее, становится каким-то доминирующим центром развития C++. А у D в этом смысле сейчас уникальная ситуация -- первые появившиеся качественные библиотеки (вроде Phobos и Mango, а так же готовящейся к выходу замены Mango -- Tango) станут де-факто стандартными и не позволят повторить для D старую проблему C++.

Так что нужно это тем, кто будет программировать на D через год-полтора.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: alexeiz  
Дата: 26.01.07 07:25
Оценка:
Здравствуйте, eao197, Вы писали:

E>Во-вторых, не важно, сколько именно людей программируют на D сейчас. Гораздо важнее, сколько обращают внимание на D и с какой динамикой программисты мигрируют на D (причем, что удивительно, не только с C++). Хорошая динамика сейчас создаст значительную D community к моменту появления C++09.

...
E>Так что нужно это тем, кто будет программировать на D через год-полтора.

Вот пусть они и пишут этот новый Boost. Сначала деньги, потом стулья. Библиотека на пустом месте без заинтересованных людей не появится. И какая там у D ситуация, уникальная, неуникальная, значения не имеет.

>Да тут еще и Boost подходит, который лично мне не нравится.


Тогда зачем тебе boost на D, если тебе не нравится сама идея такой библиотеки? Или тебя гнетет ее реализация на C++?
Re[7]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.01.07 08:23
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Вот пусть они и пишут этот новый Boost. Сначала деньги, потом стулья. Библиотека на пустом месте без заинтересованных людей не появится.


Так ведь пишут. В том числе и некоторые вещи из Boost-а начинают включаться в стандартную библиотеку D: std.bind к примеру.

>>Да тут еще и Boost подходит, который лично мне не нравится.


A>Тогда зачем тебе boost на D, если тебе не нравится сама идея такой библиотеки? Или тебя гнетет ее реализация на C++?


В Boost-е есть довольно-таки полезные штуки. Но мне не нравится, во-первых, что C++ные шаблоны довольно многословные и некоторые практики их использования основываются на т.н. side effect-ах. И, во-вторых, их использование существенно замедляет компиляцию.

Ну и еще мне не очень нравится, что Boost такой огромный. Вроде как из него как-то можно выделять отдельные библиотеки, но я не пробовал. Имхо, было бы лучше, если бы Boost представлял из себя что-то вроде собрания отдельных библиотечек изначально. Как в RubyGems сделано -- когда можно сразу скачать то, что нужно. Причем с контролем зависимостей. Для D, насколько мне известно, такую штуку пытаются сделать уже сейчас (DSSS называется).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: FR  
Дата: 26.01.07 09:16
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

A>Вот пусть они и пишут этот новый Boost. Сначала деньги, потом стулья. Библиотека на пустом месте без заинтересованных людей не появится. И какая там у D ситуация, уникальная, неуникальная, значения не имеет.


Так в D очень приличная часть буста просто не нужна.

>>Да тут еще и Boost подходит, который лично мне не нравится.


A>Тогда зачем тебе boost на D, если тебе не нравится сама идея такой библиотеки? Или тебя гнетет ее реализация на C++?


Кстати реализация шаблоных штучек на D вполне читабельна в отличии от C++. Можно открыть тот же файл bind.d и читать его, при том усилий прикладывается не намного больше чем при чтении не шаблоного кода. В C++ так с ходу с нетривиальными шаблонами разобратся просто не реально.
Re[8]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: alexeiz  
Дата: 26.01.07 11:00
Оценка:
Здравствуйте, FR, Вы писали:

FR>Так в D очень приличная часть буста просто не нужна.


Это ситуации не меняет.

>>>Да тут еще и Boost подходит, который лично мне не нравится.


A>>Тогда зачем тебе boost на D, если тебе не нравится сама идея такой библиотеки? Или тебя гнетет ее реализация на C++?


FR>Кстати реализация шаблоных штучек на D вполне читабельна в отличии от C++.


В boost'е шаблоны используются как инструмент, а не как цель. Поэтому смысл твоей фразы неясен.

> Можно открыть тот же файл bind.d и читать его, при том усилий прикладывается не намного больше чем при чтении не шаблоного кода. В C++ так с ходу с нетривиальными шаблонами разобратся просто не реально.


Да, штука интересная. Только непонятно, зачем ее написали, когда в языке есть лямбды.
Re[5]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 11:15
Оценка:
Здравствуйте, alexeiz, Вы писали:

A> там уже и C++09 выйдет с примерно такими же фичами.


А кто сказал "09"? Я так понимаю в 0x — "x" это неопределенная константа.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 11:15
Оценка:
Здравствуйте, eao197, Вы писали:

E>В Boost-е есть довольно-таки полезные штуки. Но мне не нравится, во-первых, что C++ные шаблоны довольно многословные и некоторые практики их использования основываются на т.н. side effect-ах. И, во-вторых, их использование существенно замедляет компиляцию.


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

Первые две проблемы в Ди решены. Последняя — нет.

Дагадайтесь как называется зяык где таких проблем небыло от родясь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: raskin Россия  
Дата: 26.01.07 11:33
Оценка: +1 :)))
VladD2 wrote:
> Компиляцию замедляют не шаблоны.
> Ее замедляет отсуствие модульности, наличие кривой грамматики языка, то
> что эту грамматику нельзя распарсить без разбора типов, и то что на
> шаблонах производятся вычисления во время компиляции.
>
> Первые две проблемы в Ди решены. Последняя — нет.
>
> Догадайтесь как называется зяык где таких проблем небыло от родясь.

То есть грамматика языка легко разбирается, есть модули и нормальные
вычисления во время компиляции? Ну, первый пункт наводит на мысли про
LISP-подобные, остальные приводят к мысли, что это компилируемая
реализация Common Lisp.
Posted via RSDN NNTP Server 2.1 beta
Re[10]: Ой, чо с D: подтянулся Александреску, начались пошло
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 12:22
Оценка: :))
Здравствуйте, raskin, Вы писали:

R>То есть грамматика языка легко разбирается, есть модули и нормальные

R>вычисления во время компиляции?

Да.

R> Ну, первый пункт наводит на мысли про

R>LISP-подобные, остальные приводят к мысли, что это компилируемая
R>реализация Common Lisp.

Не совсем. Кое что от Лиспа взято, но язык ближе к C# и O'Caml.
В обещм, проще прочитать.
В общем, это лучше чем Лисп, C# и O'Caml по отдельности.
Но народ тупо обсуждает язык который чуть-чуть лучше чем С++.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Ой, чо с D: подтянулся Александреску, начались пошло
От: raskin Россия  
Дата: 26.01.07 13:46
Оценка:
VladD2 wrote:
> R>То есть грамматика языка легко разбирается, есть модули и нормальные
> R>вычисления во время компиляции?
>
> Да.
>
> R> Ну, первый пункт наводит на мысли про
> R>LISP-подобные, остальные приводят к мысли, что это компилируемая
> R>реализация Common Lisp.
>
> Не совсем. Кое что от Лиспа взято, но язык ближе к C# и O'Caml.
Ну, там грамматика сложная (хотя не катастрофа вроде вариантов
синтаксиса С). Кто тут рассказывал про два дерева разбора?

> В обещм, проще прочитать <http://rsdn.ru/summary/3766.xml&gt;.

> В общем, это лучше чем Лисп, C# и O'Caml по отдельности.
Сколько надо сил, чтобы поставить это на КПК? 500Мб места готов выделить
на всё, включая .NET CF . Пока на КПК я держу Scheme и J.

Вместо shell я это в любом случае для скриптов использовать не буду,
пока очень хорошо не освою..
Posted via RSDN NNTP Server 2.1 beta
Re[9]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Андрей Хропов Россия  
Дата: 26.01.07 13:53
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Да, штука интересная. Только непонятно, зачем ее написали, когда в языке есть лямбды.


Пока они без замыканий, так что нужна, к сожалению . Но надеюсь со временем поправят .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Андрей Хропов Россия  
Дата: 26.01.07 13:53
Оценка:
Здравствуйте, eao197, Вы писали:

A>>Тогда зачем тебе boost на D, если тебе не нравится сама идея такой библиотеки? Или тебя гнетет ее реализация на C++?


E>В Boost-е есть довольно-таки полезные штуки. Но мне не нравится, во-первых, что C++ные шаблоны довольно многословные и некоторые практики их использования основываются на т.н. side effect-ах. И, во-вторых, их использование существенно замедляет компиляцию.


Да, и при этом могут быть совершенно чудовищные сообщения об ошибках.

E>Ну и еще мне не очень нравится, что Boost такой огромный. Вроде как из него как-то можно выделять отдельные библиотеки, но я не пробовал.


Конечно, можно. Большинство самых полезных библиотек независимы и полностью в заголовочных файлах и их даже компилировать не надо.

E> Имхо, было бы лучше, если бы Boost представлял из себя что-то вроде собрания отдельных библиотечек изначально.

Фактически так и есть:

A Boost library should not use libraries other than Boost or the C++ Standard Library.

A Boost library should use other Boost Libraries or the C++ Standard Library, but only when the benefits outweigh the costs.

(здесь)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: FR  
Дата: 26.01.07 15:17
Оценка:
Здравствуйте, alexeiz, Вы писали:


FR>>Кстати реализация шаблоных штучек на D вполне читабельна в отличии от C++.


A>В boost'е шаблоны используются как инструмент, а не как цель. Поэтому смысл твоей фразы неясен.


Тем что это значит что и писабельна тоже
Так что писать вещи на шаблонах на D гораздо легче, и более реален вариант вместо "возьму из буста" "напишу сам"

>> Можно открыть тот же файл bind.d и читать его, при том усилий прикладывается не намного больше чем при чтении не шаблоного кода. В C++ так с ходу с нетривиальными шаблонами разобратся просто не реально.


A>Да, штука интересная. Только непонятно, зачем ее написали, когда в языке есть лямбды.


ну иногда бинд удобнее.
Re[12]: Ой, чо с D: подтянулся Александреску, начались пошло
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.01.07 21:32
Оценка:
Здравствуйте, raskin, Вы писали:

>> Не совсем. Кое что от Лиспа взято, но язык ближе к C# и O'Caml.

R>Ну, там грамматика сложная (хотя не катастрофа вроде вариантов
R>синтаксиса С).

Где, там? И что с синтаксисом С? Ничего не понял.

R>Кто тут рассказывал про два дерева разбора?


Не понял контекста.

R>Сколько надо сил, чтобы поставить это на КПК? 500Мб места готов выделить

R>на всё, включая .NET CF . Пока на КПК я держу Scheme и J.

Мегабайт то надо не много. Но не факт, что компилятор встанет на CF. Помнится кто-то писл что были какие-то проблемы прчем не связанные с компилятором как таковым. Если не ошибаюсь на CF не реализован Reflection.Emit требующийся для компилятора, или еще что-то в этом роде.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Ой, чо с D: подтянулся Александреску, начались пошло
От: raskin Россия  
Дата: 26.01.07 21:41
Оценка:
VladD2 wrote:
>>> Не совсем. Кое что от Лиспа взято, но язык ближе к C# и O'Caml.
> R>Ну, там грамматика сложная (хотя не катастрофа вроде вариантов
> R>синтаксиса С).
> Где, там? И что с синтаксисом С? Ничего не понял.
Там — у Немерле. По сравнения с С/С++ грамматика, вероятно проще и более
понятна, но по сравнению с LISP ясно, что грамматика сложна.

> R>Кто тут рассказывал про два дерева разбора?

>
> Не понял контекста.
Ну, Вы вроде говорили, как пример удобства Nemerle, что на нём хорошо
пишутся сложные парсеры, например, его собственный. Так что грамматика
не кривая и без разбора типов, но не совсем легко разбирается, как я понял.

> R>Сколько надо сил, чтобы поставить это на КПК? 500Мб места готов выделить

> R>на всё, включая .NET CF . Пока на КПК я держу Scheme и J.
>
> Мегабайт то надо не много. Но не факт, что компилятор встанет на CF.
Ну Mono хотел бы, кажется, за 100. Интересно, он есть под WM?

> Помнится кто-то писл что были какие-то проблемы прчем не связанные с

> компилятором как таковым. Если не ошибаюсь на CF не реализован
> Reflection.Emit требующийся для компилятора, или еще что-то в этом роде.
Ну значит не судьба..
Posted via RSDN NNTP Server 2.1 beta
Re[6]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: AndreiF  
Дата: 27.01.07 09:31
Оценка: +1 :)))
Здравствуйте, VladD2, Вы писали:

VD>А кто сказал "09"? Я так понимаю в 0x — "x" это неопределенная константа.


Подозреваю, что "x" просто 16-ричный. Так что у комитета в запасе еще много времени
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Ой, чо с D: подтянулся Александреску, начались пошло
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.01.07 10:35
Оценка:
Здравствуйте, raskin, Вы писали:

R>Там — у Немерле. По сравнения с С/С++ грамматика, вероятно проще и более

R>понятна, но по сравнению с LISP ясно, что грамматика сложна.

Граматика у С++ раза в два проще чем у C# и темболее чем у Немерла. Вот только сложность и удобство использования языка никакого отношения к сложности его грамматики не имеют. Язык удобен если он интуитивно понятен. И тут, пожалуй, Лисп будет полнейшим аутсайдером.

К тому же, что называть грамматикой Лиспа? С одной стороны у него вообще нет грамматики. Лисп — это программирование в AST. С другой Лисп как ХМЛ обладает (назавем это так) надстроечной грамматикой. Все соглашения о том, что список (+ 1 2) является сложением, а (defclass ...) объявлением класса — это и есть эта самая надстроечная грамматика. И в тут Лисп ни чем не отличается от других языков. Если в нем та же грамматика ООП примитивна, то это только ухудшает жизнь программиста вынужденного его использовать.

Лично я не вижу тут никакого приемущества. Лисп — это язык в котором пропущена одна из стадий работы компилятора — парсинга. И это само по себе усложняет зизнь. А возможности которые дает тот факт, что программу можно представить в виде вложенных списко можно получить используя квази-цитирование.

Так что разговоры о простоте и сложности грамматик я считаю слишком поверхностными и бессмысленными.

R>Ну Mono хотел бы, кажется, за 100. Интересно, он есть под WM?


Незнаю. Вряд ли. Рантайм моно очень маленький (что-то около 2 метров). 100 — это, видимо, все исходники.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Ой, чо с D: подтянулся Александреску, начались пошло
От: raskin Россия  
Дата: 27.01.07 14:47
Оценка:
VladD2 wrote:
> R>Там — у Немерле. По сравнения с С/С++ грамматика, вероятно проще и более
> R>понятна, но по сравнению с LISP ясно, что грамматика сложна.
>
> Граматика у С++ раза в два проще чем у C# и темболее чем у Немерла. Вот
Проще по объёму или по запутанности?

> только сложность и удобство использования языка никакого отношения к

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

> понятен. И тут, пожалуй, Лисп будет полнейшим аутсайдером.

Тогда почему Паскаль не вытеснил всё, что можно? Даже ярые сторонники
синтаксиса С периодически признаются, что не умея писать на Паскаль,
читать его они могут. Хотя, конечно по сравнению с
Lisp/Scheme/Nemerle/Scala недостаток возможностей бывает заметен. А
после прикручивания прозрачной кодогенерации (тоже на Паскаль,
разумеется, макрокод встроен в код и перегенерация происходит
автоматически) интуитивности не остаётся.

А читать LISP.. При подсветке скобок нормально. Мне хватило в школе
довольно малого объёма, написанного на Lisp-подобном минималистском
языке, чтобы это мне не мешало читать программу.

> К тому же, что называть грамматикой Лиспа? С одной стороны у него вообще

> нет грамматики. Лисп — это программирование в AST. С другой Лисп как ХМЛ
Правила расстановки скобок — уже грамматика, хотя и простая. Даже со
стандартными reader-macro вроде ` и ' .

> обладает (назавем это так) надстроечной грамматикой. Все соглашения о

> том, что список (+ 1 2) является сложением, а (defclass ...) объявлением
> класса — это и есть эта самая надстроечная грамматика. И в тут Лисп ни
Формально в грамматику я бы включил тот факт, что эти операции
определены. То, что (= (+ 1 2) 3), это уже не к тому относится.

> чем не отличается от других языков. Если в нем та же грамматика ООП

> примитивна, то это только ухудшает жизнь программиста вынужденного его
Нет там грамматики ООП. ООП — всего лишь библиотека.. Но если считать её
данностью — то грамматика весьма обширна.
> использовать.
>
> Лично я не вижу тут никакого приемущества. Лисп — это язык в котором
> пропущена одна из стадий работы компилятора — парсинга. И это само по
Имеется много библиотек, позволяющих её вернуть при желании. Не то,
чтобы ими совсем не пользовались — пользуются, когда действительно надо.
Потом опять бросают..

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

> себе усложняет зизнь. А возможности которые дает тот факт, что программу

> можно представить в виде вложенных списко можно получить используя
> квази-цитирование.
>
> R>Ну Mono хотел бы, кажется, за 100. Интересно, он есть под WM?
>
> Незнаю. Вряд ли. Рантайм моно очень маленький (что-то около 2 метров).
Посмотрел. Нет. Жаль.
> 100 — это, видимо, все исходники.
Наверное, я что-то напортачил и собрал debug с максимально полной
информацией.
Posted via RSDN NNTP Server 2.1 beta
Re[16]: Ой, чо с D: подтянулся Александреску, начались пошло
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.01.07 15:24
Оценка: :)
Здравствуйте, raskin, Вы писали:

R>Проще по объёму или по запутанности?


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

Так что по объему или по факту один черт.

>> только сложность и удобство использования языка никакого отношения к

>> сложности его грамматики не имеют. Язык удобен если он интуитивно
R>Речь шла о проблемах парсеров, не надо грязи.

А какие проблемы у парсеров? И где грязь?

>> понятен. И тут, пожалуй, Лисп будет полнейшим аутсайдером.

R>Тогда почему Паскаль не вытеснил всё, что можно?

А с чего бы ему это сделать? Хотя С/С++ он подвинул надо признать.

R>Даже ярые сторонники

R>синтаксиса С периодически признаются, что не умея писать на Паскаль,
R>читать его они могут.

Языки одного типа. Что тут удивительного?

R> Хотя, конечно по сравнению с

R>Lisp/Scheme/Nemerle/Scala недостаток возможностей бывает заметен. А
R>после прикручивания прозрачной кодогенерации (тоже на Паскаль,
R>разумеется, макрокод встроен в код и перегенерация происходит
R>автоматически) интуитивности не остаётся.

Знать такая реализация. Хотя хоть буей не вижу в Паскале особой интуитивности.

R>А читать LISP.. При подсветке скобок нормально. Мне хватило в школе

R>довольно малого объёма, написанного на Lisp-подобном минималистском
R>языке, чтобы это мне не мешало читать программу.

Читать Лисп не нормально. К этому конечно (как и ко всему в жизни) можно привыкнуть, но от этого код на Лиспе нормальным не становится. Даже поляки в 21 веке не используют польскую натацию.

R>Нет там грамматики ООП. ООП — всего лишь библиотека..


Дык учитывая наличие фукнции eval в Лиспе все библиотекой можно назвать. Так что не надо терминологического беспредела. Есть в стандарте — есть в языке.

В Немерле тоже 70% операторов являются макросами, но это не значит что они вдруг перестали быть частью языка.

Просто классических языках вроде С и Паскаля чтобы изменить синаксис языка надо было менять их компиляторы, а в Лиспе и Немерле для этого можно определить библиотеку. Это несомненный плю, и это удобно, но это не делает из языка что-то оморфное.

R> Но если считать её

R>данностью — то грамматика весьма обширна.

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

R>Имеется много библиотек, позволяющих её вернуть при желании.


Ага. Только зачем они нужны когда яесть полноценные языки?

R> Не то,

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

Потому что геморрой.

R>Преимуществом простота грамматики является для особо запутанных

R>макросов. Их, действительно, довольно мало. Переходить с Lisp многие не
R>хотят, скорее, из-за динамической типизации — если не считать её
R>абсолютным злом, и пользоваться при необходимости синтаксисом (после
R>небольшой привычки это не всегда удобнее), то фатальных недостатков нет,
R>и начинают играть роль мелочи — припасённая библиотека своих и найденных
R>функций, детали поведения макросистемы (вроде объявления макроса в том
R>же файле, где он используется), в случае Scheme — привычное в деталях
R>поведение полноценных continuations.

Дык зачем к чему-то привыкать когда есть алтернатива?
Лисп не принят сообществом программистов. И это уже не исправить. Никакая популяризация ему уже не поможет. Он останется уделом тех, кто готов дресировать себя и ставить мозги раком ради приемуществ которые дают макросы. Других приемуществ у Лиспа нет. Ну, а раз мы имеем альтернативу без недостатков Лиспа, но с его же достоинствами, то почему бы не поптатся ею пользоваться? Глядишь вторая попытка дойдет до мэйнстрима.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Ой, чо с D: подтянулся Александреску, начались пошло
От: raskin Россия  
Дата: 27.01.07 18:12
Оценка: +2
VladD2 wrote:
> R>Проще по объёму или по запутанности?
>
> Запутанности у грамматике быть не может. Проблемы С++ в неоднозначностях
Ну если это не называть запутанностью, то понять логику грамматики легче
не станет.

> и способах их разрешения. Другими словами проблемы С++ в семантике.

>
> Так что по объему или по факту один черт.
>
>>> только сложность и удобство использования языка никакого отношения к
>>> сложности его грамматики не имеют. Язык удобен если он интуитивно
> R>Речь шла о проблемах парсеров, не надо грязи.
>
> А какие проблемы у парсеров? И где грязь?

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

>>> понятен. И тут, пожалуй, Лисп будет полнейшим аутсайдером.

> R>Тогда почему Паскаль не вытеснил всё, что можно?
>
> А с чего бы ему это сделать? Хотя С/С++ он подвинул надо признать.
Ну это язык, сделанный, чтобы быть читаемым. А также аккуратным и
строгим. И добавление ООП, сделанное другими людьми и по пути
наименьшего сопротивления, его не загубило. Мне вот интересно, можно ли
человеку, хорошо пишущему на разных диалектах Паскаль, но не
испорченному С (Nemerle, Haskell, Scheme, J — допускаются), объяснить,
что такое Undefined behavior и зачем это вообще может компилироваться.

> R>Даже ярые сторонники

> R>синтаксиса С периодически признаются, что не умея писать на Паскаль,
> R>читать его они могут.
>
> Языки одного типа. Что тут удивительного?
Почему-то в паре bash-perl, которые, казалось бы, тоже похожи, такого не
происходит. Ну и вообще, Паскаль, кажется, может читать программист на
любом языке.

> R> Хотя, конечно по сравнению с

> R>Lisp/Scheme/Nemerle/Scala недостаток возможностей бывает заметен. А
> R>после прикручивания прозрачной кодогенерации (тоже на Паскаль,
> R>разумеется, макрокод встроен в код и перегенерация происходит
> R>автоматически) интуитивности не остаётся.
>
> Знать такая реализация. Хотя хоть убей не вижу в Паскале особой
Ну я написал нечто за день, что я могу нормально читать и писать.
Накрутил макросов в Vim, чтобы писать с комфортом. Успокоился. Для
читаемости надо было бы обдумывать, проектировать нормально, заботиться
о недвусмысленности конструкций в потоке нормального кода...

> интуитивности.



> R>А читать LISP.. При подсветке скобок нормально. Мне хватило в школе

> R>довольно малого объёма, написанного на Lisp-подобном минималистском
> R>языке, чтобы это мне не мешало читать программу.
>
> Читать Лисп не нормально. К этому конечно (как и ко всему в жизни) можно
> привыкнуть, но от этого код на Лиспе нормальным не становится. Даже
> поляки в 21 веке не используют польскую натацию.
А какой язык читать нормально? Lisp вполне соотносится с записью
некоторых вариантов лямбда-исчисления.

> Просто классических языках вроде С и Паскаля чтобы изменить синаксис

> языка надо было менять их компиляторы, а в Лиспе и Немерле для этого
> можно определить библиотеку. Это несомненный плюс, и это удобно, но это
> не делает из языка что-то оморфное.
Ну в каком-то смысле делает. Я уже, например, привык писать в Scheme (\
x -> x) вместо (lambda (x) x) .. Как-то мне показалось, что так лучше, и
был написан макрос.

> R> Но если считать её

> R>данностью — то грамматика весьма обширна.
>
> Вот и я о том же. Так что с одной стороны в Лисе ее вообще нет, а с
> другой она не меньше чем в любом другом языке.
Обширна, но просто устроена.

> R>Имеется много библиотек, позволяющих её вернуть при желании.

>
> Ага. Только зачем они нужны когда есть полноценные языки?
Полноценные? С готовой реализацией continuations со всеми вкусностями
(за которые правда приходится платить интерпретируемостью полной
реализации Scheme)?

> R> Не то,

> R>чтобы ими совсем не пользовались — пользуются, когда действительно надо.
> R>Потом опять бросают..
>
> Потому что геморрой.
Поставить одну строчку? Как же живут все языки, в которых надо писать
длинные заголовки у файлов?

> R>Преимуществом простота грамматики является для особо запутанных

> R>макросов. Их, действительно, довольно мало. Переходить с Lisp многие не
> R>хотят, скорее, из-за динамической типизации — если не считать её
> R>абсолютным злом, и пользоваться при необходимости синтаксисом (после
> R>небольшой привычки это не всегда удобнее), то фатальных недостатков нет,
> R>и начинают играть роль мелочи — припасённая библиотека своих и найденных
> R>функций, детали поведения макросистемы (вроде объявления макроса в том
> R>же файле, где он используется), в случае Scheme — привычное в деталях
> R>поведение полноценных continuations.
>
> Дык зачем к чему-то привыкать когда есть алтернатива?
У полных continuations — нет. Редко нужно, но всё же. К тому же речь о
тех, кто уже привык. Вы пытаетесь убедить людей перейти на язык с
единственной не до конца устоявшейся реализацией, пригодной не для всех
платформ с достаточной памятью с языков семейства с десятками реализаций
— со своими недостатками и достоинствами — и многолетними традициями
(непринятость не мешает существовать заметному community).

> Лисп не принят сообществом программистов. И это уже не исправить.

> Никакая популяризация ему уже не поможет. Он останется уделом тех, кто
> готов дресировать себя и ставить мозги раком ради приемуществ которые
Да ладно. К синтаксису привыкнуть можно меньше,чем за неделю. К
чудо-библиотекам люди привыкают дольше.. Причём в любом языке.

> дают макросы. Других приемуществ у Лиспа нет. Ну, а раз мы имеем

> альтернативу без недостатков Лиспа, но с его же достоинствами, то почему
> бы не поптатся ею пользоваться? Глядишь вторая попытка дойдет до мэйнстрима.
Вы меряете пропаганду Nemerle своим примером. У Вас не было ничего, в
чём есть нормальные макросы, и Вы работали на платформе .NET . Я
полностью согласен, что все, для кого .NET можно считать единственной
используемой платформой и кто никогда не пользовался теми вещами,
которых в Nemerle нет, выиграют от использования Nemerle. Вы же
занимаетесь перевербовкой. Ответ на вопрос "Почему не Nemerle?" для меня
прост — Scheme довольно мощна и стоит у меня и на ноутбуке, и на КПК, а
Nemerle на КПК не встанет, причём мне придётся — в виде бонуса —
переучивать названия стандартных ФВП (сейчас у меня имеется небольшая
библиотечка тех, которые мне нужны поверх Pocket Scheme. Ясно, что на
guile тоже работают. Одна из них использует извращение, которое на
Nemerle будет выглядеть уродливо; она, конечно, сама — извращённый
эксперимент, но обидно).
Posted via RSDN NNTP Server 2.1 beta
Re[18]: Ой, чо с D: подтянулся Александреску, начались пошло
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.01.07 18:38
Оценка:
Здравствуйте, raskin, Вы писали:

R>Ну это язык, сделанный, чтобы быть читаемым. А также аккуратным и

R>строгим. И добавление ООП, сделанное другими людьми и по пути
R>наименьшего сопротивления, его не загубило. Мне вот интересно, можно ли
R>человеку, хорошо пишущему на разных диалектах Паскаль, но не
R>испорченному С (Nemerle, Haskell, Scheme, J — допускаются), объяснить,
R>что такое Undefined behavior и зачем это вообще может компилироваться.

Юморист. UB в Паскале было сколько угодно. Возврати указатель на локальную переменную из процедуры и получи UB. А вот Nemerle и Haskell, действительно, UB нет by design.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Ой, чо с D: подтянулся Александреску, начались пошло
От: raskin Россия  
Дата: 27.01.07 18:49
Оценка:
VladD2 wrote:
> R>Ну это язык, сделанный, чтобы быть читаемым. А также аккуратным и
> R>строгим. И добавление ООП, сделанное другими людьми и по пути
> R>наименьшего сопротивления, его не загубило. Мне вот интересно, можно ли
> R>человеку, хорошо пишущему на разных диалектах Паскаль, но не
> R>испорченному С (Nemerle, Haskell, Scheme, J — допускаются), объяснить,
> R>что такое Undefined behavior и зачем это вообще может компилироваться.
>
> Юморист. UB в Паскале было сколько угодно. Возврати указатель на
> локальную переменную из процедуры и получи UB. А вот Nemerle и Haskell,
> действительно, UB нет by design.
Это всё же Access Violation. Это свойство памяти в run-time. Это вещь
общая для всех языков с возможностью игр с указателями. Что происходит,
понять можно. Такой эффект моделируется на ассемблере, если угодно. Даже
в некоторых Scheme, есть отдалённый аналог такого действия, правда, он
приведёт к понятному exception (ну, можно явно потребовать создать
структуру, допускающую GC своих элементов, и обратиться к элементу без
проверки, что его ещё не собрали). А вот что такое "++i = i++ + ++i;"
понять можно только изнутри всей С-шной системы синтаксиса. Остальные
поймут только заключение — "в общем, это извращение и так делать не
надо". Также как и глубокую идею, исходя из которой "if(a<b);" является
законным выражением.
Posted via RSDN NNTP Server 2.1 beta
Re[20]: Ой, чо с D: подтянулся Александреску, начались пошло
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.01.07 19:32
Оценка:
Здравствуйте, raskin, Вы писали:

>> Юморист. UB в Паскале было сколько угодно. Возврати указатель на

>> локальную переменную из процедуры и получи UB. А вот Nemerle и Haskell,
>> действительно, UB нет by design.
R>Это всё же Access Violation.

Не-а. Это чистое UB. Все будет зависеть от того как биты в стэке лягут.

R> Это свойство памяти в run-time. Это вещь

R>общая для всех языков с возможностью игр с указателями.

Отнюдь. Насколько я знаю в Обероне таких проблем нет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Ой, чо с D: подтянулся Александреску, начались пошло
От: raskin Россия  
Дата: 27.01.07 19:44
Оценка:
VladD2 wrote:
>>> Юморист. UB в Паскале было сколько угодно. Возврати указатель на
>>> локальную переменную из процедуры и получи UB. А вот Nemerle и Haskell,
>>> действительно, UB нет by design.
> R>Это всё же Access Violation.
> Не-а. Это чистое UB. Все будет зависеть от того как биты в стэке лягут.
При других непойманных проходах по памяти тоже может всё зависеть от
расклада. Я имел в виду AV как вид ошибки. То, что здесь конкретно она
не детектируется как таковая — неудача, но не отменяет того, что ошибка
вида ссылки на освобождённую память. А не вида "и как это поймёт
компилятор".

> R> Это свойство памяти в run-time. Это вещь

> R>общая для всех языков с возможностью игр с указателями.
>
> Отнюдь. Насколько я знаю в Обероне таких проблем нет.
Там нет возможности игр — только очень чётко регламентированные вещи,
поэтому динамический массив в библиотеке. Не то, чтобы это было особо плохо.
Posted via RSDN NNTP Server 2.1 beta
Re: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.02.07 09:13
Оценка: 43 (4)
Свежие вести с полей

Вышел D v.1.005, в котором появились очень интересные штуки: MixinStatements, MixinExpressions и MixinDeclarations.
Примеры MixinStatements из документации:
void main()
{
    int j;
    mixin("
    int x = 3;
    for (int i = 0; i < 3; i++)
        writefln(x + i, ++j);
    ");    // ok

    const char[] s = "int y;";
    mixin(s);  // ok
    y = 4;     // ok, mixin declared y

    char[] t = "y = 3;";
    mixin(t);  // error, t is not evaluatable at compile time

    mixin("y =") 4; // error, string must be complete statement

    mixin("y =" ~ "4;");  // ok
}

А это пример MixinExpression:
int foo(int x)
{
    return mixin("x + 1") * 7;  // same as ((x + 1) * 7)
}


Так же появились ImportExpression:
void foo()
{
    // Prints contents of file foo.txt
    writefln( import("foo.txt") );
}


Вот что по этому поводу в списке рассылки digitalmars.D.announce сказал Вальтер Брайт:

Kevin Bealer>It looks like one could write a few hundred line module that can pull in and do compile-time interpreting of a language of the complexity of say, Scheme. And the code in the module could be both readable and straightforward... And the results would be absorbed into the calling code as normal optimizable statements...

Walter Bright> The irony is that it only took 3 hours to implement, which shows the power of having the lexing, parsing, and semantic passes be logically distinct.

The idea is to enable the creation of DSLs (Domain Specific Languages) that don't have the crippling problem C++ expression templates have — that of being stuck with C++ operators and precedence.

To make this work, however, one must be able to manipulate strings at compile time. I've made a start on a library to do this, std.metastrings, based on earlier work by Don Clugston and Eric Anderton.

This is just the start of what's going to happen with D 2.0.

Kevin Bealer>Выглядит так, как будто можно написать несколько модуль из нескольких сотен строк который можно подключить и над которым выполнится интерпритация времени компиляции и все это на языке со сложностью, скажем, Scheme. И код в модуле будет и читаемым и простой... И результаты будут встроены в вызываемый код как нормальные, поддающиеся оптимизации выражения...

Walter Bright> Ирония в том, что реализация заняла всего три часа, что показывает мощь того, что лексический, синтаксический и семантический анализ логически разделены.

Идея в том, чтобы разрешить создание DSL которые не имеют проблемы деформирования, которая есть в шаблонах выражений в C++ -- следствие правил приоритетов C++ операторов.

Тем не менее, чтобы это работало, необходимо уметь манипулировать строками во время компиляции. Я начал делать библиотеку для этого, std.metastrings, базирующуюся на предыдущих работах Don Clugston и Eric Anderton.

И это только начало того, что произойдет в D 2.0.


Уж действительно, чой-то с D деется!


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[19]: Ой, чо с D: подтянулся Александреску, начались пошло
От: Трурль  
Дата: 06.02.07 09:35
Оценка: :))) :)
Здравствуйте, VladD2, Вы писали:


VD> Юморист. UB в Паскале было сколько угодно. Возврати указатель на локальную переменную из процедуры и получи UB.


В Паскале невозможно было возвратить указатель на локальную переменную. Но без UB не было счастья программистского. Поэтому появился Турбо-Паскаль.
Re[2]: Ой, чо с D деется-то!?
От: FR  
Дата: 06.02.07 10:14
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Свежие вести с полей


E>Уж действительно, чой-то с D деется!


Угу, очень интересно куда в конце концов кривая вывезет
Кто нибудь сможет предсказать как будет выглядеть D 3.0?
Re[20]: Ой, чо с D: подтянулся Александреску, начались пошло
От: Андрей Хропов Россия  
Дата: 06.02.07 20:07
Оценка:
Здравствуйте, Трурль, Вы писали:

VD>> Юморист. UB в Паскале было сколько угодно. Возврати указатель на локальную переменную из процедуры и получи UB.


Т>В Паскале невозможно было возвратить указатель на локальную переменную. Но без UB не было счастья программистского. Поэтому появился Турбо-Паскаль.


И не говори . Вот что на собеседовании спрашивать у человека по языку где даже нет UB .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Ой, чо с D: подтянулся Александреску, начались пошло
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.02.07 02:48
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>В Паскале невозможно было возвратить указатель на локальную переменную. Но без UB не было счастья программистского. Поэтому появился Турбо-Паскаль.


Исходный Паскль я не видел. Но вроде бы Вирт писал, про указатели. А раз они были, то явно можно было получить и UB. Это только в Обероне он все привел в логический порядок.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.02.07 12:37
Оценка: 23 (3)
Здравствуйте, eao197, Вы писали:

E>Уж действительно, чой-то с D деется!


Да на этом уже можно много чего наворотить, в общем текстовая compile time кодогенерация, я вроде нигде пока такого не видел
Попробовал для тренировки переделать вот этот Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
Автор: FR
Дата: 22.01.07
пример, получается компактнее и лучше и без внешних переменных:

import std.stdio;

template from(alias vA, char [] var)
{   
    alias  typeof(vA[0]) T;

    template where(char [] cond)
    {
        T[] select(char[] execs)()
        {
            T[] result;
            foreach(v; vA)
            {
                mixin(var ~ "= v;");
                if(mixin(cond)) 
                {
                    result ~= [mixin(execs)];
                }    
            }
            return result;
        }
    }
}


void main()
{
    auto numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];

    writefln(numbers);
    writefln();
    
    auto f = from!(numbers, "int x")
                .where!("x < 5")
                .select!("x + 1");
    
    writefln(f);
    
    auto f2 = from!(numbers, "int y")
                .where!("y % 2 == 1")
                .select!("y");
    
    writefln(f2);
    
}
Re[3]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.02.07 12:50
Оценка:
Здравствуйте, FR, Вы писали:

FR>Да на этом уже можно много чего наворотить, в общем текстовая compile time кодогенерация, я вроде нигде пока такого не видел

FR>Попробовал для тренировки переделать вот этот Re[44]: Как скрестить ужа и ежа или статическую и утиные тип
Автор: FR
Дата: 22.01.07
пример, получается компактнее и лучше и без внешних переменных:


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

a) импортировать в программу двоичные ресурсы (иконки, к примеру) во время компиляции;
b) парсить и обрабатывать в compile-time внешние DSL, которые не являются D-шным кодом.

В связи с этим я ему задал вопрос о том, какие же DSL он в этом случае имеет в виду и что будет, если DSL-ли будут не самыми тривиальными. Посмотрим, что ответит.

Лично мне кажется, что для поддержки серьезных DSL с отличным от D синтаксисом необходимо делать стадийную обработку исходного кода в процессе компиляции. Чтобы обработка текстовых mixin-ов осуществлялась не шаблонами в compile time, а обычным D-шным кодом со всей присущей ему мощностью. На одних static if-ах и рекурсивных шаблонах, имхо, далеко не уедешь.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.02.07 13:10
Оценка:
Здравствуйте, eao197, Вы писали:

E>В обсуждениях Вальтер Брайт пока говорит, что по его мнению, в текстовых mixin-ах нежелательно использовать D-шный код. Мол, они были придуманы для того, чтобы


E>a) импортировать в программу двоичные ресурсы (иконки, к примеру) во время компиляции;

E>b) парсить и обрабатывать в compile-time внешние DSL, которые не являются D-шным кодом.

Вот как раз парсить и обрабатывать станет значительно легче если использовать именно строки с D'шным кодом.

E>В связи с этим я ему задал вопрос о том, какие же DSL он в этом случае имеет в виду и что будет, если DSL-ли будут не самыми тривиальными. Посмотрим, что ответит.


Да интересно.

E>Лично мне кажется, что для поддержки серьезных DSL с отличным от D синтаксисом необходимо делать стадийную обработку исходного кода в процессе компиляции. Чтобы обработка текстовых mixin-ов осуществлялась не шаблонами в compile time, а обычным D-шным кодом со всей присущей ему мощностью. На одних static if-ах и рекурсивных шаблонах, имхо, далеко не уедешь.


Это конечно да, полноценный код был бы намного лучше.
Но уже эти текстовые миксины позволяют легко генерировать код, чего именно не хватает в шаблонах. То есть этого уже достаточно чтобы сделать достаточно навороченное метапрограммирование. Конечно нужны будут написанные под этот стиль мета библиотеки.
Re[4]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.02.07 14:22
Оценка:
Здравствуйте, eao197, Вы писали:

E>b) парсить и обрабатывать в compile-time внешние DSL, которые не являются D-шным кодом.


А если DSL не совсем внешние, и частично состоят из D кода? Например мне уже понятно что примерно такое:

auto func = lambda!("x -> x + 123", int);

auto rez = lambda!("x, y -> x - y")(1, 3);


вполне реально уже сделать, но довольно трудоемко так как нет библиотек для метапарсинга строк.
Re[5]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.02.07 14:26
Оценка: +2
Здравствуйте, FR, Вы писали:

E>>b) парсить и обрабатывать в compile-time внешние DSL, которые не являются D-шным кодом.


FR>А если DSL не совсем внешние, и частично состоят из D кода? Например мне уже понятно что примерно такое:


FR>
FR>auto func = lambda!("x -> x + 123", int);

FR>auto rez = lambda!("x, y -> x - y")(1, 3);
FR>


FR>вполне реально уже сделать, но довольно трудоемко так как нет библиотек для метапарсинга строк.


Что-то мне кажется, что это не есть правильно. Такие базовые вещи, как лямбды, должны быть частью языка. И пытаться имитировать их через строковые mixin-ы -- не правильно. Тем более, что в таких случаях мы лишаемся возможной поддержки IDE (для тех, кому это нужно).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.02.07 14:39
Оценка:
Здравствуйте, eao197, Вы писали:


E>Что-то мне кажется, что это не есть правильно. Такие базовые вещи, как лямбды, должны быть частью языка. И пытаться имитировать их через строковые mixin-ы -- не правильно. Тем более, что в таких случаях мы лишаемся возможной поддержки IDE (для тех, кому это нужно).


Я не имел в виду именно лямбды, а хотел показать что в таких DSL удобно частично использовать именно D'шный код, например зачем писать парсеры выражений для правой части этой же лямбды, когда можно просто подставить миксином.
Re[6]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.02.07 14:43
Оценка:
Здравствуйте, eao197, Вы писали:


E>Что-то мне кажется, что это не есть правильно. Такие базовые вещи, как лямбды, должны быть частью языка. И пытаться имитировать их через строковые mixin-ы -- не правильно. Тем более, что в таких случаях мы лишаемся возможной поддержки IDE (для тех, кому это нужно).


Насчет IDE почему лишаемся? Все же в compile time.
Еще эти миксины неплохо бы переделать чтобы то что в них передается было как-то без обычных строковых кавычек
Re[7]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.02.07 14:51
Оценка:
Здравствуйте, FR, Вы писали:

E>>Что-то мне кажется, что это не есть правильно. Такие базовые вещи, как лямбды, должны быть частью языка. И пытаться имитировать их через строковые mixin-ы -- не правильно. Тем более, что в таких случаях мы лишаемся возможной поддержки IDE (для тех, кому это нужно).


FR>Насчет IDE почему лишаемся? Все же в compile time.


Ну потому, что когда ты тыкаешь мышкой в строковый литерал:
auto func = lambda!("x -> x + 123", int);

и попадаешь, к примеру, на символ x, то IDE должна сообразить, что это не простой строковый литерал, а часть mixin-а. Затем попытаться его раскрыть (вызвав фоновую компиляцию), затем попробовать отыскать этот символ x в том, что получилось и только после этого выдать информацию о нем

FR>Еще эти миксины неплохо бы переделать чтобы то что в них передается было как-то без обычных строковых кавычек


Можно же использовать WYSIWYG литералы:
auto func = lambda!(`x -> x + 123`, int);


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.02.07 14:56
Оценка:
Здравствуйте, FR, Вы писали:

E>>Что-то мне кажется, что это не есть правильно. Такие базовые вещи, как лямбды, должны быть частью языка. И пытаться имитировать их через строковые mixin-ы -- не правильно. Тем более, что в таких случаях мы лишаемся возможной поддержки IDE (для тех, кому это нужно).


FR>Я не имел в виду именно лямбды, а хотел показать что в таких DSL удобно частично использовать именно D'шный код, например зачем писать парсеры выражений для правой части этой же лямбды, когда можно просто подставить миксином.


В оригинале Брайт сказал, дословно, следующее:

2) import code that's in DSL (Domain Specific Language), not D, form.

т.е. главной мыслью, на мой взгляд, было то, что строковые mixin и import не должны быть заменой C-шного include.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.02.07 16:52
Оценка:
Здравствуйте, eao197, Вы писали:

FR>>Насчет IDE почему лишаемся? Все же в compile time.


E>Ну потому, что когда ты тыкаешь мышкой в строковый литерал:

E>
E>auto func = lambda!("x -> x + 123", int);
E>

E>и попадаешь, к примеру, на символ x, то IDE должна сообразить, что это не простой строковый литерал, а часть mixin-а. Затем попытаться его раскрыть (вызвав фоновую компиляцию), затем попробовать отыскать этот символ x в том, что получилось и только после этого выдать информацию о нем

Вообще то вся информация что это часть миксина у комилятора (и наверно у парсера IDE тоже) есть
Хотя согласен IDE конечно не сможет понять смысл твоего DSL.

FR>>Еще эти миксины неплохо бы переделать чтобы то что в них передается было как-то без обычных строковых кавычек


E>Можно же использовать WYSIWYG литералы:

E>
E>auto func = lambda!(`x -> x + 123`, int);
E>


Спасибо, вертелось же в голове, что есть нечто подобное, но амнезия победила
Re[8]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.02.07 16:52
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>В оригинале Брайт сказал, дословно, следующее:

E>

E>2) import code that's in DSL (Domain Specific Language), not D, form.

E>т.е. главной мыслью, на мой взгляд, было то, что строковые mixin и import не должны быть заменой C-шного include.

В смысле макросов и include? Или вообще для метапрограмирования?
Ну мало ли чего он хочет, Страуструпу наверно и в страшных кошмарах не могло приснится как над шаблонами будут извращатся
Re[9]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.02.07 18:38
Оценка: 6 (1) :)))
Здравствуйте, FR, Вы писали:

E>>В оригинале Брайт сказал, дословно, следующее:

E>>

E>>2) import code that's in DSL (Domain Specific Language), not D, form.

E>>т.е. главной мыслью, на мой взгляд, было то, что строковые mixin и import не должны быть заменой C-шного include.

FR>В смысле макросов и include? Или вообще для метапрограмирования?


Я еще сам не понял, какое же мнение у Брайта по поводу роли строковых mixin-ов. Нужно подождать, пока все проясниться. Тем более, что у меня складывается впечатление, что это еще далеко не все, что грядет в D. Сегодня Александреску обмолвился, что в D через несколько месяцев грядет какая-то макросистема.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 07.02.07 22:39
Оценка: :)
Здравствуйте, FR, Вы писали:

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


E>>Свежие вести с полей


E>>Уж действительно, чой-то с D деется!


FR>Угу, очень интересно куда в конце концов кривая вывезет

FR>Кто нибудь сможет предсказать как будет выглядеть D 3.0?

Есои это приведет к нечто похожему на Nemerle будет версия Nemerle без вируальной машины
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 07.02.07 23:01
Оценка:
Здравствуйте, eao197, Вы писали:

E>Свежие вести с полей


E>Вышел D v.1.005, в котором появились очень интересные штуки: MixinStatements, MixinExpressions и MixinDeclarations.

E>Примеры MixinStatements из документации:

<skip>

Осталось только добавить классы для генерации кода из синтаксического дерева и будет счастье
Мне вот непонятно теперь в чем преимущества Template Mixin если они легко эмулируются через Mixin Expression:
class A(T)
{
 static const char[] v = "int a;";
 mixin(v);
}


Или так нельзя ?
Если нельзя то почему ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Ой, чо с D деется-то!?
От: FR  
Дата: 08.02.07 03:18
Оценка:
Здравствуйте, _nn_, Вы писали:

__><skip>


__>Осталось только добавить классы для генерации кода из синтаксического дерева и будет счастье


Даже без этого уже можно замутить очень мощную метасиситему

__>Мне вот непонятно теперь в чем преимущества Template Mixin если они легко эмулируются через Mixin Expression:


Мне кажется он просто вывел наружу механизм с помощью которого и были реализованны миксины.

__>
__>class A(T)
__>{
__> static const char[] v = "int a;";
__> mixin(v);
__>}
__>


__>Или так нельзя ?

__>Если нельзя то почему ?

Можно, плюс можно и рекурсивно создавать строку, что дает возможность генерировать к примеру структуры, хотя бы вот так:

template gen(L...)
{  
static if(L.length == 1)
    {
    const char[] gen = L[0].stringof ~ " x" ~ L.length.stringof ~ ";";
    }
else
    {
    const char[] gen = L[0].stringof ~ " x" ~ L.length.stringof ~ ";\n" ~ gen!(L[1 .. L.length]);    
    }    
}

struct S1
{
mixin(gen!(int, int, float));
}
Re[2]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.07 06:52
Оценка:
Здравствуйте, eao197, Вы писали:

E>Свежие вести с полей


E>Вышел D v.1.005, в котором появились очень интересные штуки: MixinStatements, MixinExpressions и MixinDeclarations.


Ну, что же. Поздравляю Ди. Это первый шаг к полноценным макросам.
Остается толоко добавить static while, static for, static... D
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.02.07 11:12
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Вышел D v.1.005, в котором появились очень интересные штуки: MixinStatements, MixinExpressions и MixinDeclarations.


VD>Ну, что же. Поздравляю Ди. Это первый шаг к полноценным макросам.

VD>Остается толоко добавить static while, static for, static... D

Ты опоздал с поздравлениями: Compile-time interpretation
Пока в очень начальном состоянии, но события развиваются весьма быстро.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.07 22:28
Оценка:
Здравствуйте, eao197, Вы писали:

E>Ты опоздал с поздравлениями: Compile-time interpretation


Ссылка битая?

E>Пока в очень начальном состоянии, но события развиваются весьма быстро.


Это видно. Вообще люди явно занимаются фигней.
Им бы почитать про системы метапрограммирования в ФЯ. Глидишь дошли бы до правильных решений раньше.

А то текстуальные конкатенации вместо квази-цитирования — это конечно лажа.
Плюс им нужны средства декомпозиции и анализа кода, обеспечения гигиены (и ее управляемого нарушения) и т.п.

Все конечно придумано до них, но боюсь они могут не понять идей так как сильно долеки от ФП (тут надежна на Александреску) или не принять этих по этой ричине
Автор: Lazy Cjow Rhrr
Дата: 12.02.07
.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.02.07 07:19
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Ты опоздал с поздравлениями: Compile-time interpretation


VD>Ссылка битая?


Нет, рабочая.

E>>Пока в очень начальном состоянии, но события развиваются весьма быстро.


VD>Это видно. Вообще люди явно занимаются фигней.

VD>Им бы почитать про системы метапрограммирования в ФЯ. Глидишь дошли бы до правильных решений раньше.

VD>А то текстуальные конкатенации вместо квази-цитирования — это конечно лажа.

VD>Плюс им нужны средства декомпозиции и анализа кода, обеспечения гигиены (и ее управляемого нарушения) и т.п.

Я вот не понимаю, зачем изобретать новый Nemerle?
Или единственный правильный путь -- это тот, который в данный момент нравится лично тебе?

Брайт развивает D так, как ему нравится и прислушивается ко мнению авторитетных для него людей. Во многом результат этого развития мне нравится. В чем-то, в том числе и compile-time interpritation, нет. Тем не менее, язык получается весьма удобным и он не заставляет обязательно использовать все имеющиеся в нем возможности. Например, мне вообще compile-time вычисления и преобразования DSL в D код с их помощью не нужны, а вот текстовые mixin-ы и новый import -- как раз оказались весьма удобными.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.07 19:00
Оценка:
Здравствуйте, eao197, Вы писали:

E>Нет, рабочая.


В прошлый раз не открылась.
ОК. Что я могу сказать. Это лучше чем в С++ где для МП нужно применять совсем другой и ограниченный язык. Но это неверный путь. В идеале не должно быть разницы в метаязыке и обычном языке. Лисп и Немерле отлично показывают как все должно быть и даже дают пути решения. К тому же интерпретация — это похое решение для статически типизированного и быстрого компилятора.

E>Я вот не понимаю, зачем изобретать новый Nemerle?


Я тоже. Потому и не интересуюсь Ди. Ведь он явно или прийдет к Немерле или окажется хуже. (выоды сделаны на основании наблюдения за действями автора и комьюнити).
Но польза от второго Немерле есть. Ведь Ди изначально компилируемый в нэйтив-код язык. Это может оказаться многим полезно.

E>Или единственный правильный путь -- это тот, который в данный момент нравится лично тебе?


Путь то может и не единственный. И вариаций может быть много. Но направление известно. То что сейчас сделано в Ди — это ошибочный дизайн. Ошибок много. Но надежда есть, так как авторы видят неполноценность своих решений и ищут лучшие пути. Мне кажется основная проблема авторов Ди заключается в том, что они не анализировали опыт других метасистем. Они зациклились на создании лучшего С++.

E>Брайт развивает D так, как ему нравится и прислушивается ко мнению авторитетных для него людей.


Проблема в том, что похоже он Блаб-программист и не видет решений за пределами своего кругозора.

E> Во многом результат этого развития мне нравится.


Кое-что мне тоже. Но мета-система некудышная.

E> В чем-то, в том числе и compile-time interpritation, нет.


+1

E> Тем не менее, язык получается весьма удобным и он не заставляет обязательно использовать все имеющиеся в нем возможности.


Откровенно говоря, на мой взгляд, он уже слишком сложный (много нюансов) и при этом проигрывает в варзительности более простым языкам. Что есть четкий признак ошибок.

E> Например, мне вообще compile-time вычисления и преобразования DSL в D код с их помощью не нужны, а вот текстовые mixin-ы и новый import -- как раз оказались весьма удобными.


Еще раз повторю, что это ошибки дизайна. Прошлый век. "Текстовые миксины" это недо квази-цитирование. То есть в нем еще не изобретен сплайсинг и гигиена. Боюсь, что автор языка просто пока не знаком с данными терминами. А import текстовых фвайлов вообще ошибка дизайна. Возврат к С. Остальс приделать дефайны к тексту и приплыли.

Могу подитожить свои мысли...

Итак на мой взгляд, в не зависимости от принятых решений, метасистема должа:
1. Позволять легкую копозицию кода.
2. Обеспечить контроль и отладку ошибок. Чем на более ранней стадии будет выявляться ошибка, тем лучше.
3. Использовать для создания метапрограмм тот же язык что и для обычных программ.
4. Обеспечить возожность анализа.
5. Обеспечить возожность модификации кода.
6. Обеспечить высокую производитльность метакода.
7. Разработать механизмы безсшовной интеграции мета-возможностей и основного языка. Это значит, что мета-реения должня быть естественными среди остального кода.
8. Обеспечить надежность метакода. Он не должен приводить к влетам компилятора. Ну, или свести такие возможности к минимуму.

Собственно у Немерла тоже не по всем пунктам все ОК. Так есть проблемы в отладке макросов и выдаче сообщиний об ошибках. Проблемы эти в основном из-за того, что что-то реализовано плохо, или вообще не реализовано, но все же они есть. Так же компилятор может вылетать от переполнения стека (но это уже скорее проблема МС).

Однако эти проблемы ничто по сравниню с проблемами Ди. Ведь в Ди проблемы идеологического плана. Плюс в Ди практически не паханное поле.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.03.07 10:09
Оценка: 33 (2)
Очередные вести с полей

В digitalmars.D был задан вопрос о том, получилось ли у Александреску и Брайта придумать что-нибудь в области улучшения модели const-объектов в D. Александреску дал интересный ответ о том, что планируются следующие модификаторы:

a) final — a simple storage class controlling the immutability of the
bits allocated for the symbol per se;

b) const — type qualifier meaning an immutable view of an otherwise
modifiable data. const does not control the bits of the object, only the
storage addressed indirectly by it (transitively);

c) "superconst" — denoted as "const!" or "super const": type qualifier
meaning that the data is genuinely unmodifiable.

чуть более подробные объяснения, что же это значит, и примеры можно посмотреть здесь

Так же Александреску сказал, что планируется добавить в D возможность помечать методы классов как const и даже делать методы, которые являются, как он выразился, const-transporting методы. Т.е., чтобы не приходилось писать, как в C++:
class Container {
  Data get() {}
  const Data get() const {}
}


Так что остается ждать выхода сильно обновленного языка, D 2.0.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 16.03.07 16:29
Оценка:
Здравствуйте, eao197, Вы писали:

<skip>

Это вместо того чтобы сделать все константами по умолчанию, а для изменяемых объектов свои префиксы ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.03.07 19:01
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Это вместо того чтобы сделать все константами по умолчанию, а для изменяемых объектов свои префиксы ?


Так ведь это же не функциональный язык, а улучшенный C++. И одна из задач разработчиков D -- сделать C++никам переход на D простым и комфортным. Пока у них получалось, но отсутствие внятной const-антности в языке до сих пор было одним из недостатков по сравнению с C++. Теперь этот недостаток планируют убрать. Может статься, что const-ы в D окажутся лучше const-в в C++, так же, как это произошло с шаблонами.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 16.03.07 19:31
Оценка:
Здравствуйте, eao197, Вы писали:

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


__>>Это вместо того чтобы сделать все константами по умолчанию, а для изменяемых объектов свои префиксы ?


E>Так ведь это же не функциональный язык, а улучшенный C++. И одна из задач разработчиков D -- сделать C++никам переход на D простым и комфортным. Пока у них получалось, но отсутствие внятной const-антности в языке до сих пор было одним из недостатков по сравнению с C++. Теперь этот недостаток планируют убрать. Может статься, что const-ы в D окажутся лучше const-в в C++, так же, как это произошло с шаблонами.


Неизменяемость объектов по умолчанию не говорит о том, что язык функциональный
Такой подход поможет упростить код, т.к. стремление в программе это больше неизменяемых объектов.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.07 02:26
Оценка:
Здравствуйте, eao197, Вы писали:

Это все игрушки. Лучше скажи что они там по поводу макросов думают?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.03.07 06:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Лучше скажи что они там по поводу макросов думают?


Подробной информации я пока не видел. У меня вообще сложилось впечатление, что Брайт в каком-то узком круге сначала определяет дизайн новой фичи, потом ее делает, потом уже предъявляет общественности в готовом виде. А потом переделывает. Аналогично и с макросами -- может где-то что-то и проскакивало в списках рассылки, но мне не попадалось. Буквально сегодня Брайт сказал буквально следующее:

D will get macros — but they won't be text processing macros, they'll be abstract syntax tree (AST) processing macros.



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.07 15:30
Оценка:
Здравствуйте, eao197, Вы писали:

E>Буквально сегодня Брайт сказал буквально следующее:

E>

E>D will get macros — but they won't be text processing macros, they'll be abstract syntax tree (AST) processing macros.


Ну, что же, направление мысли правуильное.

Тогда следующий вопрос (может задашь...).

Какие у него мысли по декомпозции кода? Без этого серьезная макросистема не мыслима.

В Немерле есть паттерн-матчиго, а АСТ организовано в виде алгеброических типов (идеальных для паттерн-матчинга). А как это будет выглядить в Ди?

Он вообще об этом думал?

Ну, и вытикающий отсюда вопрос. Не пора ли перепимать Ди на Ди? Глядишь тогда вопросы начнут рашаться побыстрее.

ЗЫ

И вот еще что. У Страуструпа в его "Дизайне и эволюции" сказана одна замечательная фраза. За точность не ручаюсь, но смысл примерно такой — "Людям не нужен лучший С++, им возможно нужен другой язык который предоставил бы значительно лучшие средства для решения те же проблем. С++ — этр не просто улученный С. С++ предоставляет программисту выбор новых парадигм.".

Понимает ли автор Ди, то что Ди это просто улучшеный С++? И не кажется ли ему, что Страуступ все же прав?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.03.07 16:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, и вытикающий отсюда вопрос. Не пора ли перепимать Ди на Ди? Глядишь тогда вопросы начнут рашаться побыстрее.


Объясни, пожалуйста, выделенное.

VD>ЗЫ


VD>И вот еще что. У Страуструпа в его "Дизайне и эволюции" сказана одна замечательная фраза. За точность не ручаюсь, но смысл примерно такой — "Людям не нужен лучший С++, им возможно нужен другой язык который предоставил бы значительно лучшие средства для решения те же проблем. С++ — этр не просто улученный С. С++ предоставляет программисту выбор новых парадигм.".


Имхо, D уже предоставляет значительно лучшие средства для решения тех же проблем.
Более того, глядя на свой C++ный код я понимаю, что на D он может быть портирован, а вот на другие языки (в первую очередь, Scala) -- только переписан.

PS. Что касается макросов, то сейчас Брайт начал приподнимать завесу над планирующейся макросистемой. Это будет что-то совершенно отличное от Nemerle-вого подхода. Но что именно я пока не понял.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.03.07 16:58
Оценка: :)
Здравствуйте, eao197, Вы писали:

VD>>Ну, и вытикающий отсюда вопрос. Не пора ли перепимать Ди на Ди? Глядишь тогда вопросы начнут рашаться побыстрее.


E>Объясни, пожалуйста, выделенное.


Переписать Ди на нем самом же.

VD>>И вот еще что. У Страуструпа в его "Дизайне и эволюции" сказана одна замечательная фраза. За точность не ручаюсь, но смысл примерно такой — "Людям не нужен лучший С++, им возможно нужен другой язык который предоставил бы значительно лучшие средства для решения те же проблем. С++ — этр не просто улученный С. С++ предоставляет программисту выбор новых парадигм.".


E>Имхо, D уже предоставляет значительно лучшие средства для решения тех же проблем.


Дык ты видимо не понял то что имел в виду Страуструп. Просто лучше никому не надо. Нужны новые парадигмы. Нужно качественно лучше, а не количественно.

E>Более того, глядя на свой C++ный код я понимаю, что на D он может быть портирован, а вот на другие языки (в первую очередь, Scala) -- только переписан.


А смысл портировать код? Он приципиально не изменится. С точки зрения поддержки все останется так же. Убьешь кучу времени и все. О том и речь.

E>PS. Что касается макросов, то сейчас Брайт начал приподнимать завесу над планирующейся макросистемой. Это будет что-то совершенно отличное от Nemerle-вого подхода. Но что именно я пока не понял.


Интересно. Но боюсь, что он блаб в этой области. То есть он понимает, что что-то такое нужно, но вот как оно должно выглядеть он не знает. По крайней меере идей по декомпозиции я пока не вижу. А это будет решающим. Работать просто с АСТ практически невозоможно. Это черезвычайно сложно. Так что у него два варианта. Сделать макросы крайне ограниченными (например, только для генерации нового кода, но не для декомпозции), все же ввести в язык нечто более мощьное чем if/switch.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.03.07 17:20
Оценка: +2 -2 :)
Здравствуйте, VladD2, Вы писали:

E>>Более того, глядя на свой C++ный код я понимаю, что на D он может быть портирован, а вот на другие языки (в первую очередь, Scala) -- только переписан.


VD>А смысл портировать код? Он приципиально не изменится. С точки зрения поддержки все останется так же. Убьешь кучу времени и все. О том и речь.


В моем понимании портирование от переписывания отличается тем, что для получения работающей реализации на новом языке вовсе не требуется убивания кучи времени. А вот смысл может оказаться в том, что более простой и удобный в использовании язык (каким выглядит D по сравнению с C++) позволит:
a) проще решать кадровую проблему при найме новых специалистов;
b) снизить затраты на разработку нового кода на основе уже существующих наработок.

Я знаю примеры систем, которые переписывались с Фортрана на C/C++ и тем самым получали вторую жизнь. Были даже системы, которые переписывались с Эльбрусовского автокода на C/C++ и начинали жить заново. Так там было действительно переписывание. По сравнению с ними плавный переход с C++ на D -- это вообще легкий променад.

VD>Интересно. Но боюсь, что он блаб в этой области. То есть он понимает, что что-то такое нужно, но вот как оно должно выглядеть он не знает. По крайней меере идей по декомпозиции я пока не вижу. А это будет решающим. Работать просто с АСТ практически невозоможно. Это черезвычайно сложно. Так что у него два варианта. Сделать макросы крайне ограниченными (например, только для генерации нового кода, но не для декомпозции), все же ввести в язык нечто более мощьное чем if/switch.


Ты можешь производить впечатление офигенного супер-пупер-профи и знатока во всех областях программирвания, и в области макросостроения в первую очередь. Более того, невозможно запретить тебе так думать про тебя самого.

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 17.03.07 18:02
Оценка: +2
Здравствуйте, eao197, Вы писали:

E>Я знаю примеры систем, которые переписывались с Фортрана на C/C++ и тем самым получали вторую жизнь. Были даже системы, которые переписывались с Эльбрусовского автокода на C/C++ и начинали жить заново. Так там было действительно переписывание.

Ты говоришь о переписывание с убогих недоязычков в полноценный язык.

E>По сравнению с ними плавный переход с C++ на D -- это вообще легкий променад.

А это переписывание с одного полноценного языка на друго. Пусть чуть болие удобный. Но лишь чуть. И это не даст скольнибудь заметных преимуществ.

E>Ты можешь производить впечатление офигенного супер-пупер-профи и знатока во всех областях программирвания, и в области макросостроения в первую очередь. Более того, невозможно запретить тебе так думать про тебя самого.

Знаешь чем Влад отличается от автора D? Тем что Влад уже написал собственную систему метапрограммирования и прошолся по всем граблям, а автор D еще нет.
И главная проблема в R# это ужасно сложная работа с AST. Именно по этому проект и заглох.
А на немерле макросы живут по тому что там работать с AST очень просто.
Соотвественно если автор D не предусмотрит удобную работу с AST то из этой затеи ничего не выдет.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.03.07 14:16
Оценка:
Здравствуйте, eao197, Вы писали:

E>В моем понимании портирование от переписывания отличается тем, что для получения работающей реализации на новом языке вовсе не требуется убивания кучи времени. А вот смысл может оказаться в том, что более простой и удобный в использовании язык (каким выглядит D по сравнению с C++) позволит:

E>a) проще решать кадровую проблему при найме новых специалистов;
E>b) снизить затраты на разработку нового кода на основе уже существующих наработок.

С кадрами — это мечты. Ты сейчас С++-ника найдешь влет, а вот знание Ди — экзотика. Но не о том речь.
Пиши себе новый код на Ди. Кто же мешает то? Зачем при этом старый портировать?

E>Я знаю примеры систем, которые переписывались с Фортрана на C/C++ и тем самым получали вторую жизнь.


Идиоты, что взять? Фортрановские модули можно подлиновывать к С/С++-проектам.

E> Были даже системы, которые переписывались с Эльбрусовского автокода на C/C++ и начинали жить заново.


Вот в этом смысл несоменно есть.

E> Так там было действительно переписывание. По сравнению с ними плавный переход с C++ на D -- это вообще легкий променад.


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

E>Ты можешь производить впечатление офигенного супер-пупер-профи и знатока во всех областях программирвания, и в области макросостроения в первую очередь. Более того, невозможно запретить тебе так думать про тебя самого.


Забавно. Сразу пошел переход на личности и оскорбления. Надо принимать меры чтобы повадно небыло.

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


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

ЗЫ

Кстати, на вопрос (о том планируется ли как-то решать проблему декомпозиции кода) ты так и не ответл.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.03.07 15:07
Оценка: -2
Здравствуйте, VladD2, Вы писали:

VD>С кадрами — это мечты. Ты сейчас С++-ника найдешь влет, а вот знание Ди — экзотика. Но не о том речь.


И об этом то же. У нас сейчас толкового C++ника найти уже не реально. Научить студента C++у -- одного года мало, проверено. Как более простой язык D дает надежду, что в течении года факультативных занятий студента 5-го курса можно научить прилично владеть языком программирования и после окончания ВУЗа придти на работу и писать нормальный код, который не будет нуждаться в еженедельном обязательном Code Review.

VD>Пиши себе новый код на Ди. Кто же мешает то? Зачем при этом старый портировать?


Например, чтобы к некоторым нашим системам дописывать новые модули на D, нужно иметь D-шные версии ряда библиотек. В первую очередь ObjESSty и SObjectizer. Вот эти библиотеки можно портировать, а не переписывать заново, как в случае со Scala, к примеру.

E>>Ты можешь производить впечатление офигенного супер-пупер-профи и знатока во всех областях программирвания, и в области макросостроения в первую очередь. Более того, невозможно запретить тебе так думать про тебя самого.


VD>Забавно. Сразу пошел переход на личности и оскорбления. Надо принимать меры чтобы повадно небыло.


Твое право, хрен отнимешь.

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


VD>Пока я сюда хожу, я буду говорить, то что думаю. И если мои слова критикуют некоторую личность или ее мысли, то не смотря на твое отношение к ней тебе прийдется это терпеть. В прочем тебя тут никто не держит. Но уж коли ты здесь, то будеть добр уважать чужое мнение.


Безусловно, высказывание твоего мнения -- это твое неотъемлимое право. Однако, поскольку ты говоришь о человеке, которого ты вообще не знаешь, не знаешь его целей и тех вариантов, которые он счел неприемлимые -- твое мнение нельзя считать вообще заслуживающим внимания. Попросту говоря -- это словестный понос, который только отнимает мое время в нашем с тобой разговоре. И моя просьба состоит в том, чтобы ты освободил меня от необходимости иметь дело с подобными вещами.

VD>ЗЫ


VD>Кстати, на вопрос (о том планируется ли как-то решать проблему декомпозиции кода) ты так и не ответл.


Не ответил, поскольку пока не имею этой информации.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Ой, чо с D деется-то!?
От: WolfHound  
Дата: 18.03.07 15:31
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>И об этом то же. У нас сейчас толкового C++ника найти уже не реально. Научить студента C++у -- одного года мало, проверено.

+1

E>Как более простой язык D дает надежду, что в течении года факультативных занятий студента 5-го курса можно научить прилично владеть языком программирования и после окончания ВУЗа придти на работу и писать нормальный код, который не будет нуждаться в еженедельном обязательном Code Review.

А вот это уже смешно. Для этого язык должен быть полностью типобезопасным и с полностью автоматическим управлением памятью. Ну как язык на букву N.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.03.07 16:40
Оценка:
Здравствуйте, WolfHound, Вы писали:

E>>Как более простой язык D дает надежду, что в течении года факультативных занятий студента 5-го курса можно научить прилично владеть языком программирования и после окончания ВУЗа придти на работу и писать нормальный код, который не будет нуждаться в еженедельном обязательном Code Review.

WH>А вот это уже смешно. Для этого язык должен быть полностью типобезопасным и с полностью автоматическим управлением памятью. Ну как язык на букву N.

Возможно. Надеюсь, что реальный опыт расставит все на свои места.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.03.07 18:06
Оценка:
Здравствуйте, eao197, Вы писали:

E>И об этом то же. У нас сейчас толкового C++ника найти уже не реально. Научить студента C++у -- одного года мало, проверено.


Сам Страуступ оценивает этот срок в 1.5-2 года.

E> Как более простой язык D дает надежду, что в течении года факультативных занятий студента 5-го курса можно научить прилично владеть языком программирования и после окончания ВУЗа придти на работу и писать нормальный код, который не будет нуждаться в еженедельном обязательном Code Review.


С чего бы Ди стал более простым в обучении? Количество сущьностей в нем больше. В конце концов в язык впихнули (по-моему, совершенно зря) библиотеки. Так что обучение ни как не будет быстрее.

Вот писать может быть будет по проще. Хотя указатели на месте. Небезопасноть тоже. Так что мест для граблей достаточно. Так что не факт, что уж так координально проще будет писать.

VD>>Пиши себе новый код на Ди. Кто же мешает то? Зачем при этом старый портировать?


E>Например, чтобы к некоторым нашим системам дописывать новые модули на D, нужно иметь D-шные версии ряда библиотек. В первую очередь ObjESSty и SObjectizer. Вот эти библиотеки можно портировать, а не переписывать заново, как в случае со Scala, к примеру.


Создать объвязочные библиотеки несравнимо проще чем все переписать на другом языке. Не находишь? К тому же это проблемы проектирования вашей системы. Если бы вы поддерживали скажем КОМ, то интеграция прошла бы в автоматическом режиме.

E>Безусловно, высказывание твоего мнения -- это твое неотъемлимое право.


Спасибо за понимание.

E> Однако, поскольку ты говоришь о человеке,


Я говорю о том что человек делает, а он лично мне глубого безразличен.

E> которого ты вообще не знаешь,


Что я не знаю? Я вижу результат и вижу куда все развивается. О чем и высказываюсь.

E> не знаешь его целей и тех вариантов, которые он счел неприемлимые -- твое мнение нельзя считать вообще заслуживающим внимания.


Мое мнение это мое мнение. То что ты не считашь его интересным или верным — это всего лишь твое мнение. С моей точки зрения ты никто и звать тебя никак, но я стараюсь не выражаться об этом, а говорить по сути вопроса. Вот такая силяви.

Как верно заметил Вольфхаунд в отличии от тебя, да и автора Ди я лично занимался вопросом встаивания метапрограммирования в ЯП. Другими словами я прошел то о чем рассуждаю. И не просто прошел, а сделал выводы. Ты же не толко не говришь ничего по теме, но и всячески пыташся оскорбить собеседника. Но вот именно это не взывает никакого уважения.

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

E> Попросту говоря -- это словестный понос, который только отнимает мое время в нашем с тобой разговоре. И моя просьба состоит в том, чтобы ты освободил меня от необходимости иметь дело с подобными вещами.


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

E>Не ответил, поскольку пока не имею этой информации.


Тогда к чему весь этот фонтан из дерьма?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.03.07 10:48
Оценка: :))) :)
Здравствуйте, VladD2, Вы писали:

E>> не знаешь его целей и тех вариантов, которые он счел неприемлимые -- твое мнение нельзя считать вообще заслуживающим внимания.


VD>Мое мнение это мое мнение. То что ты не считашь его интересным или верным — это всего лишь твое мнение. С моей точки зрения ты никто и звать тебя никак, но я стараюсь не выражаться об этом, а говорить по сути вопроса. Вот такая силяви.


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


VD>В общем, твое желание переводить обсуждение техничеких проблем в личностные мне не нравится. Предлагаю прекратить этим заниматься.


Извини, я действительно не учел твоего опыта и знаний в области метапрограммировании, полученных во время разработки R#. Без сомнения, твой опыт настолько богат и знания настолько объемны, что ты имеешь право называть незнакомых тебе людей блаб программистами. Действительно, для этого нет никаких препятствий, ведь мудрости "Не судите да не судимы будете" уже, как минимум, две тысячи лет и свою актуальность она давно потеряла. Да и программированию никогда не имела отношения.

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.03.07 11:35
Оценка: -1
Здравствуйте, eao197, Вы писали:

E>Так же я прошу не вступать в разговоры со мной. Поскольку с твоим высоким уровнем знаний и опыта ты не сможешь получить в общении со мной никакой полезной информации.


Вообще-то я спрашивал о том как обстаят дела у Ди которым ты явно интересушся больше чем я. Но не могу с тобой не согласиться. Уровень дерьма в тових ответах зачастую сильно перекрывает уровень информации. И разговаривать с тобой порой действительно противно и не конструктивно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Ой, чо с D деется-то!?
От: OCTAGRAM Россия http://octagram.name/
Дата: 28.03.07 12:26
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

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


АХ>>>Ну хорошо, выражусь по-другому: в системном языке должна быть возможность спуститься на низкий уровень и контролировать каждый бит. Все время это делать не надо, но, скажем, критические части ядра ОС по-другому не напишешь.

WH>>Ну загрузчик по любому нужно писать на асме. Тут даже С не подходит.
АХ>C + inline asm

GCC asm темплейты можно использовать не только в C.

Обёртка для rdtsc :

В файле спецификации :
   function x86Time return Long_Long_Integer;
   pragma Inline (x86Time);


В файле тела :
   function x86Time return Long_Long_Integer is
   begin
      return Time : Long_Long_Integer do
         Asm ("rdtsc", Volatile => True,
             Outputs => Long_Long_Integer'Asm_Output ("=A", Time));
      end return;
   end x86Time;


Результат — в листинге использование x86Time превращается в одну инструкцию.

Если инкапсулировать ненадёжный сам по себе код в надёжные обёртки, получаем
безопасность + низкоуровневость два в одном флаконе по той же цене.

Возможно, в GDC то же можно провернуть.

WH>>А вот то что пишут на С уже можно писать на чемто болие высокоуровневом.

АХ>Можно, но возможность спуститься на низкий уровень должна быть.
+1
Хотя... кому как. Просто фишка в том, что те, кому это надо, и те, кому это не надо,
программировали бы в пределах одного языка.

WH>>>>Все что нужно это value-типы, поддержка двоичных данных на уровне виртуальной машины и оптимизатор который умеет делать region-inference. Еще нужно иметь несколько различных алгоритмов сборщика мусора в том числе подсчет ссылок и вобще отсутствие сборщика мусора (работает только region-inference).

АХ>>>Не согласен.
АХ>>>Помимо этого должна быть возможность вообще не пользоваться сборщиком мусора,
WH>>Перечитай еще раз что я сказал.
АХ>region inference говоришь. И где-нибудь он реализован? Как это на практике работает?
АХ>Он все равно кажется не слишком предсказуемым. Это вроде статического GC как мне кажется или то что иногда называют memory pools.
В разных вариациях встречается в Cyclone и Аде.
В Cyclone это регионы.
Неплохой материал :
Safe and Flexible Memory Management in Cyclone
По их утверждению,

For MediaNet, using unique
and reference-counted pointers increased throughput by
up to 42% compared to relying entirely on conservative
garbage collection.





В Аде же — уровни доступа для типобезопасности и Storage Pools для выделения/освобождения памяти.
Storage Pool, вообще говоря, отвечает не за то, когда освобождать память, а как выделять и как освобождать. Аллокатор. С другой стороны, после своей финализации уничтожает и все объекты внутри себя, этим тоже можно пользоваться. В примере из Стандарта был Mark/Release на Storage Pool.
Обычно всё же стандартного Storage Pool хватает. Уровни доступа же чувствуются постоянно.

Пример альтернативного Storage Pool :
Memory Management with Storage Pools

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

WH>>Только для загрузчика. А для этого проще внешний язычек прикрутить.
АХ>А мне больше нравится встроенный асм, хотя бы потому что можно имена переменных те же использовать.
Да вот именно. Зачем внешний ассемблер?
Extended Asm в gcc — замечательная штука, грех не использовать.
Re[19]: Ой, чо с D деется-то!?
От: OCTAGRAM Россия http://octagram.name/
Дата: 28.03.07 14:10
Оценка:
Здравствуйте, prVovik, Вы писали:

V>А можно подробнее про "интерполяцию фактов" применительно к тому, что именно заставит Microsoft заменить свой теперешний флагман C# на немерле.


Ну зачем же обязательно Майкрософт? Вот если Новелл подсуетится, забодяжит Slim Binaries вместо этой каши под названием MSIL bytecode, и невзначай начнёт поддерживать Nemerle, без внимания общественности это не останется.

Главный двигатель эволюции в IT – конкурренция. Если .NET сужать до одного только Майкрософта, конкурренции, конечно, не будет.
Re[17]: Ой, чо с D деется-то!?
От: OCTAGRAM Россия http://octagram.name/
Дата: 28.03.07 19:07
Оценка: :)
Здравствуйте, Андрей Хропов, Вы писали:

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


АХ>>>2) Сам HotSpot отъедает ресурсы.

WH>>По мне так это вобще тупиковая идея.
АХ>А что лучше?


АХ>Порвать статический анализ под конкретную архитектуру (типа Intel C++) вроде теоретически можно только чем-то вроде HotSpotа, который в динамике отслеживает что и где можно заинлайнить и т.п.


Slim Binaries
A Tree-Based Alternative to Java Byte-Codes

In the second part, we introduce the concepts of dynamic runtime optimization and adaptive profiling. In
our system, a dynamic runtime optimizer performs code optimizations continuously, based on runtime
profile data. A background process regularly generates faster program versions that then replace earlier, less
optimal versions. Basing compilation on an adaptive profiler allows the code optimizer to make superior
optimization decisions, improving even the quality of already optimized code on subsequent re-optimization
iterations.




Теоретически нет преград и межпроцедурным оптимизациям тоже.
Re: TioPort и SWT
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.04.07 10:54
Оценка: 17 (2)
Очередная весть с полей.

На DSource развивается проект TioPort, целью которого является создание конвертера из Java в D. Сегодня этот проект достиг значимой вехи в своем развитии: опубликован порт SWT на D.

Насколько удобно будет пользоваться этим SWT.d и что из этого получится -- Но сам факт примечателен. Если, как говорит разработчик TioPort, конвертация происходила по большей части автоматически, то это открывает возможность портирования на D из Java и других библиотек. Что должно поспособствовать наполнению D хорошими и разными инструментами/библиотеками/фреймворками.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: Ой, чо с D деется-то!?
От: Cyberax Марс  
Дата: 11.04.07 11:59
Оценка:
Здравствуйте, OCTAGRAM, Вы писали:

OCT>

OCT>Теоретически нет преград и межпроцедурным оптимизациям тоже.
Как бы тебе сказать... Sun JVM такое уже лет 7 делает. Прочитай про механизм HotSpot.

Ну а Tree-based — это вообще ерунда, способ промежуточного представления байт-кодов особого значения не имеет.
Sapienti sat!
Re[9]: Ой, чо с D деется-то!?
От: FR  
Дата: 06.05.07 09:33
Оценка:
Здравствуйте, VladD2, Вы писали:


E>>Я знаю примеры систем, которые переписывались с Фортрана на C/C++ и тем самым получали вторую жизнь.


VD>Идиоты, что взять? Фортрановские модули можно подлиновывать к С/С++-проектам.


Кстати сишные модули также легко подлинковываются к D-шным. В то же codeblocks (с GDC компилятором) можно в проект добавлять как сишные так и D файлы и все нормально собирается и отладка также прозрачно работает.
Re[11]: Ой, чо с D деется-то!?
От: FR  
Дата: 06.05.07 09:41
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>И об этом то же. У нас сейчас толкового C++ника найти уже не реально. Научить студента C++у -- одного года мало, проверено.


VD>Сам Страуступ оценивает этот срок в 1.5-2 года.


E>> Как более простой язык D дает надежду, что в течении года факультативных занятий студента 5-го курса можно научить прилично владеть языком программирования и после окончания ВУЗа придти на работу и писать нормальный код, который не будет нуждаться в еженедельном обязательном Code Review.


VD>С чего бы Ди стал более простым в обучении? Количество сущьностей в нем больше. В конце концов в язык впихнули (по-моему, совершенно зря) библиотеки. Так что обучение ни как не будет быстрее.


С того что в нем гораздо меньше исключений из правил, UB, и неодназначностей чем в C++.

VD>Вот писать может быть будет по проще. Хотя указатели на месте. Небезопасноть тоже. Так что мест для граблей достаточно. Так что не факт, что уж так координально проще будет писать.


Реально намного проще писать. Мелочи типа auto, вложенных функций, делегатов уже многие вещи упрощают. Ну и человеческие шаблоны.
Re[12]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.05.07 11:01
Оценка:
Здравствуйте, FR, Вы писали:

FR>С того что в нем гораздо меньше исключений из правил, UB, и неодназначностей чем в C++.


Тода надо признать, что D все равно более сложный чем любой типобезопасный язык, так как доупскает массу UB.

Ну, а если серьезно, то отсуствие исключений из правил скорее более важно для использования, чем для обучения.

VD>>Вот писать может быть будет по проще. Хотя указатели на месте. Небезопасноть тоже. Так что мест для граблей достаточно. Так что не факт, что уж так координально проще будет писать.


FR>Реально намного проще писать. Мелочи типа auto, вложенных функций, делегатов уже многие вещи упрощают. Ну и человеческие шаблоны.


Для обучения это все только усложнение.

Что же до описанных тобой приемуществ, то опять повторюсь, что есть языки которые делают все тоже самое значительно лучше и при этом не имеют проблем D. Воти и возникает вопрос для кого этот язык? Для дебилов которые не в состоянии освоить что-то сильно отличное от С++? Ну, так им все эти лмябды по барабану.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Ой, чо с D деется-то!?
От: FR  
Дата: 06.05.07 11:24
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>С того что в нем гораздо меньше исключений из правил, UB, и неодназначностей чем в C++.


VD>Тода надо признать, что D все равно более сложный чем любой типобезопасный язык, так как доупскает массу UB.


С этой стороны да.
Но он позволяет в отличии от C++, реально писать на безопасном подмножестве языка. (Про необходимость ключика для комилятор я уже раньше говорил).

VD>Ну, а если серьезно, то отсуствие исключений из правил скорее более важно для использования, чем для обучения.


Для обучения тоже.

VD>>>Вот писать может быть будет по проще. Хотя указатели на месте. Небезопасноть тоже. Так что мест для граблей достаточно. Так что не факт, что уж так координально проще будет писать.


FR>>Реально намного проще писать. Мелочи типа auto, вложенных функций, делегатов уже многие вещи упрощают. Ну и человеческие шаблоны.


VD>Для обучения это все только усложнение.


Вряд ли усложнение, все это вместе по моему проще чем объяснить например типы и предназначние конструторов для C++

VD>Что же до описанных тобой приемуществ, то опять повторюсь, что есть языки которые делают все тоже самое значительно лучше и при этом не имеют проблем D. Воти и возникает вопрос для кого этот язык? Для дебилов которые не в состоянии освоить что-то сильно отличное от С++? Ну, так им все эти лмябды по барабану.


Пока язык для достаточно опытных программистов, которые "устали" от C++, но не хотели бы отказыватся от многих его возможностей. Дальше надеюсь что он станет хорошей альтернативой C++ вообще.
Про дебилов ты зря. Я знаю достаточно людей (включая и самого себя) которые в состоянии освоить вещи очень отличные от С++ и майнстрима вообще, но которым нравится и главное комфортно работать именно с С — С++, думаю многим из них и D понравится.
Re[14]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.05.07 16:30
Оценка: 1 (1)
Здравствуйте, FR, Вы писали:

FR>С этой стороны да.

FR>Но он позволяет в отличии от C++, реально писать на безопасном подмножестве языка. (Про необходимость ключика для комилятор я уже раньше говорил).

C++ тоже позволят писать на безопасном подмножестве. Вот только обычно это никто не делает. Как показали первые же примеры кода на D тоже никто так делать не будет.

FR>Вряд ли усложнение, все это вместе по моему проще чем объяснить например типы и предназначние конструторов для C++


С++ без паттернов извращенческого программирвания довольно простой ООЯ. Так что как раз изучать его не так сложно. Сложности начинаются при реальной работе когда кроме знания языка нужно еще знать море паттернов для совершенно повседневных и примитивных операций.

Но без них можно жить. Просто вместо одной простой и понятной строки будет куча кода (например цикл для поиска элемента в списке).

Другими словами простота синтаксиса С++ превращаетя в сложноть паттернов. Ну, и в купе с полнешей небезопастностью языка это выливается в горы геморроя.

FR>Пока язык для достаточно опытных программистов, которые "устали" от C++, но не хотели бы отказыватся от многих его возможностей.


У этого языка одна возможнсоть — создавать геморрой людям его использующим. И зачем нужна замена которая уменшает геморрой вместо его полного устранения я лично не понимаю.

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

FR> Дальше надеюсь что он станет хорошей альтернативой C++ вообще.


Если это будет так, то это будет четким доказателством, алогичности человеческой природы.

FR>Про дебилов ты зря.


Думаешь обидятся? Да они никогда не воспринимают критику на свой счет.

FR> Я знаю достаточно людей (включая и самого себя) которые в состоянии освоить вещи очень отличные от С++ и майнстрима вообще, но которым нравится и главное комфортно работать именно с С — С++, думаю многим из них и D понравится.


Ну, что же. Приношу свои соболезнования. Лично я в жизни не буду использовать ни С++, ни ди, если у меня будет хоть какой-то выбор. Это пешерное програмирование для людей не ценящих свое время и не желающих получать удовольствие от самого процесса программирования. А я, знаете ли, люблю получать от программирования удовольствие.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Ой, чо с D деется-то!?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.05.07 17:27
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Это пешерное програмирование для людей не ценящих свое время и не желающих получать удовольствие от самого процесса программирования. А я, знаете ли, люблю получать от программирования удовольствие.


Сдается мне, что процесс получения удовольствия слабо зависит от рода проблем, которые приходится решать. Кому то интереснее одно, кому то другое.
... << RSDN@Home 1.2.0 alpha rev. 675 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[15]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.05.07 04:51
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>С этой стороны да.

FR>>Но он позволяет в отличии от C++, реально писать на безопасном подмножестве языка. (Про необходимость ключика для комилятор я уже раньше говорил).

VD>C++ тоже позволят писать на безопасном подмножестве. Вот только обычно это никто не делает. Как показали первые же примеры кода на D тоже никто так делать не будет.


C++ реально не позволяет писать на безопасном подмножестве.
На D уже смогли в автоматическом режиме транслировать нетривиальную java библиотеку.

FR>>Вряд ли усложнение, все это вместе по моему проще чем объяснить например типы и предназначние конструторов для C++


VD>С++ без паттернов извращенческого программирвания довольно простой ООЯ. Так что как раз изучать его не так сложно. Сложности начинаются при реальной работе когда кроме знания языка нужно еще знать море паттернов для совершенно повседневных и примитивных операций.


Для меня изучить язык это значит научится реально на нем работать. А то что ты понимаешь под изучением это так ознакомится.

VD>Но без них можно жить. Просто вместо одной простой и понятной строки будет куча кода (например цикл для поиска элемента в списке).


Все равно будут сложности даже в базовых вещах.

VD>Другими словами простота синтаксиса С++ превращаетя в сложноть паттернов. Ну, и в купе с полнешей небезопастностью языка это выливается в горы геморроя.


Нет простота синтакиса совершено не причем. Скорее тут виновата непродуманость и противоречивость "модели языка", во многом из-за тотальной совместимости с си.

FR>>Пока язык для достаточно опытных программистов, которые "устали" от C++, но не хотели бы отказыватся от многих его возможностей.


VD>У этого языка одна возможнсоть — создавать геморрой людям его использующим. И зачем нужна замена которая уменшает геморрой вместо его полного устранения я лично не понимаю.


Полностью геморой ни один язык не устраняет, даже твой любимый сейчас язычок

VD>Для низкого уровня (возни с битами) вполне достаточно С++. Для прикладного программирования (влючая сервы и любой десктопный софт) придуманы гораздо более удобные и мощьные языки.


D практически содержит подмножество, в которое входит почти вся java и большая часть шарпа. Просто сейчас смотрю GUI библиотеки для D и что вижу: DWT полный клон явовской SWT, dfl который сделан по мотивам WinForms из NET.

FR>> Я знаю достаточно людей (включая и самого себя) которые в состоянии освоить вещи очень отличные от С++ и майнстрима вообще, но которым нравится и главное комфортно работать именно с С — С++, думаю многим из них и D понравится.


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


Да да конечно, только надо еще немного злобной функциональности добавить

Вот я недавно ковырял Рефал, получил много удовольствия, очень интересный и очень мощный язык (не смотря на то что он наверно самый примитивный из всех функциональных, даже лисп со схемой отдыхают), но программировать на нем реально вряд ли когда буду, так что удовольствие и работу вполне можно и разделять.
Ну а D вполне позволяет и с удовольствием программировать, и уже близок к рабочему языку.
Re[15]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 05:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>C++ тоже позволят писать на безопасном подмножестве. Вот только обычно это никто не делает. Как показали первые же примеры кода на D тоже никто так делать не будет.


Это какие-такие примеры?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: Ой, чо с D деется-то!?
От: c-smile Канада http://terrainformatica.com
Дата: 07.05.07 05:47
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Другими словами простота синтаксиса С++ превращаетя в сложноть паттернов. Ну, и в купе с полнешей небезопастностью языка это выливается в горы геморроя.


Эта неизбежность... она из личного опыта как я понимаю?
Re[2]: TioPort и SWT
От: c-smile Канада http://terrainformatica.com
Дата: 07.05.07 06:12
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Насколько удобно будет пользоваться этим SWT.d и что из этого получится -- Но сам факт примечателен. Если, как говорит разработчик TioPort, конвертация происходила по большей части автоматически, то это открывает возможность портирования на D из Java и других библиотек. Что должно поспособствовать наполнению D хорошими и разными инструментами/библиотеками/фреймворками.


Жень, скажи честно, ты сам в это веришь?

Java и D настолько большие разницы... Java и D — разные домены задач.
Java code нещадно экплуатирует GC которые в Java в принципе более эффективный чем в D. По определению.
Тупая конвертация практически любой библиотеки Java это смерть для D.

Гораздо более реальным является автоматический порт C -> D. Тем более что на C кода для домена D приложений
больше в разы написано. Но это нафиг никому не надо ибо C и так c D нативно общается.

И по поводу SWT... Как бы есть Native Eclipse. Сделан он компилятором Java -> native code. Что
тоже самое (если не лучше) что и Java -> D -> native code. Много людей счастливы от этого?

На D нужно писать именно думая на D и четко понимая его идею, только тогда толк будет.
Re[16]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 07.05.07 06:18
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Сдается мне, что процесс получения удовольствия слабо зависит от рода проблем, которые приходится решать. Кому то интереснее одно, кому то другое.


Для некоторых людей так и есть. Но есть немало людей, которые не получают никакого удовольствия от решения проблем, которые они создали себе своими же руками. По крайней мере — я надеюсь, что их немало. Но иногда после чтения форумов я начинаю в этом сомневаться
Re[3]: TioPort и SWT
От: FR  
Дата: 07.05.07 06:27
Оценка:
Здравствуйте, c-smile, Вы писали:


CS>На D нужно писать именно думая на D и четко понимая его идею, только тогда толк будет.


Можно про идею подробнее?
Просто смотрю сейчас разные исходники, и стили очень разные.
Re[3]: TioPort и SWT
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 07:50
Оценка: +1 -1
Здравствуйте, c-smile, Вы писали:

E>>Насколько удобно будет пользоваться этим SWT.d и что из этого получится -- Но сам факт примечателен. Если, как говорит разработчик TioPort, конвертация происходила по большей части автоматически, то это открывает возможность портирования на D из Java и других библиотек. Что должно поспособствовать наполнению D хорошими и разными инструментами/библиотеками/фреймворками.


CS>Жень, скажи честно, ты сам в это веришь?


CS>Java и D настолько большие разницы... Java и D — разные домены задач.

CS>Java code нещадно экплуатирует GC которые в Java в принципе более эффективный чем в D. По определению.
CS>Тупая конвертация практически любой библиотеки Java это смерть для D.

В то, что можно тупо перегнать исходники на Java в исходники на D и получить приличный результат я не верю.
Я надеюсь на то, что подобные преобразователи помогут выполнять большой объем рутинной работы, результаты которой затем можно будет дорабатывать напильником.

Имхо, все-таки для некоторых задач будет проще использовать сконвертированный Java код, чем писать его заново на D. Например, для Java есть библиотеки для работы с подписанным XML, с SOAP, с различными протоколами электронной коммерции. Я больше чем уверен, что существенный процент кода этих библиотек будет выглядеть практически одинаково что на Java, что на D, что на C#. Так зачем же этот одинаковый код руками переписывать.

Да, еще по поводу различия Java и D. Дело ведь не только в GC, например, есть еще и разные подходы к обработке строк на D и на Java. А еще в Java очень сильно любят использовать рефлексию (чего в D пока нет) и динамическую загрузку классов. Т.ч. более-менее сложный Java код все равно 1:1 в D не сконвертируется.

Что же до разных доменов задач, то вокруг происходят вещи, которые я понимаю, но смериться не могу. Вот, например, история масштабирования twitter. 8 Sun-ов для обработки 600 запросов в секунду
Я вот несколько раз наблюдал, что переписывание задачи с C++ на Java делало Java-вариант в несколько раз медленне, чем C++ный (правда не в Web-е, в других областях). Т.е. чтобы система обрабатывала такое же количество транзакций, как C++ вариант (либо, как в одном из случаев отрисовывала поступающие в soft-real-time данные) нужно было в 3(!) раза более мощное железо (более быстрый процессор, больше памяти).

Да, стоимость разработки на Java ниже, чем на C++. Причем здесь, имхо, 50% составляют особенности самого языка и еше 50% (а иногда и больше) библиотеки. Но в условиях, когда программу пишут, скажем 3 человека, а за эксплуатацию затем отвечают 6 администраторов, снижение стоимости разработки, имхо, затем компенсируется увеличением стоимости эксплуатации. Ведь обслуживать, к примеру, 3 машины на которых крутился C++ный вариант, проще, чем 9 машин, на которых должен будет крутиться Java вариант.

Или вот еще пример: тест хамелеоны
Автор: eao197
Дата: 01.05.07
, в котором от самого-то языка практически ничего не требуется, там вся нагрузка ложится на примитивы синхронизации нитей в ОС. И тем не менее, Scala-вариант на ровном месте работает в 3(!) раза медленее, чем D-шный. При том, что Scala работает поверх JVM (в моем случае 1.5), в оптимизатор которой Sun вбухала офигенные ресурсы, а D использует отимизатор, разрабатываемый одним человеком. Т.е. при одинаковой сложности и сравнимом объеме исходного кода D за просто так оказывается быстрее и намного быстрее. Не хочется сбрасывать такое преимущество со счетов. Скажем сейчас мне нужно написать обработку исходящих/входящих транзакций согласно некоторым сложным, задаваемым оператором правилам. При этом требуется, чтобы обработка показывала скорость порядка 1000 транзакций в секунду и затраты на эту обработку составляли порядка 10%-15% от всего времени обслуживания транзакции. Поскольку здесь вообще будет работать только сам язык, без использования I/O или средств ОС, то не хочется просто так отказываться от преимуществ в скорости, которые дает D или C++.

CS>Гораздо более реальным является автоматический порт C -> D. Тем более что на C кода для домена D приложений

CS>больше в разы написано. Но это нафиг никому не надо ибо C и так c D нативно общается.

Согласен.
Вот конвертер из C++ в D... Так это раз, и весь ACE есть в D, со всеми его реакторами, проакторами и прочими вкусностями А то пока Tango-писатели до этого доберуться?

CS>На D нужно писать именно думая на D и четко понимая его идею, только тогда толк будет.


Здесь, имхо, не так все просто. D, как и C++, мультипарадигменный язык. Поэтому в нем могут быть воплощены самые разные идеи. Начиная от обычного процедурного подхода, и заканчвая обобщенным программированием а-ля Boost.

И это хорошо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[16]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 14:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Это пешерное програмирование для людей не ценящих свое время и не желающих получать удовольствие от самого процесса программирования. А я, знаете ли, люблю получать от программирования удовольствие.


AVK>Сдается мне, что процесс получения удовольствия слабо зависит от рода проблем, которые приходится решать. Кому то интереснее одно, кому то другое.


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

FR>C++ реально не позволяет писать на безопасном подмножестве.


Вопросы к ПК и Страуструпу. Они говорят, что позволяет. И я им верю.

FR>На D уже смогли в автоматическом режиме транслировать нетривиальную java библиотеку.


Вот если бы было наоборот, то я ничего не сказал бы. А так. Код на более высокоуровневом язые всегда можно транслировать в код на менее высокоуровневом. Вот обртаное не врено.

FR>Для меня изучить язык это значит научится реально на нем работать. А то что ты понимаешь под изучением это так ознакомится.


Тогда у нас тобой разное понимание понятия изучить мязык. Я не вкладываю в это понятие еще и понятие "стать гуру в области программирования на этом языке".

VD>>Но без них можно жить. Просто вместо одной простой и понятной строки будет куча кода (например цикл для поиска элемента в списке).


FR>Все равно будут сложности даже в базовых вещах.


Сложност? Это как сказать. На данном языке будет сложнее создать сложное приложение. Но это верно для разработчика любого уровня. На С++ в принцие сложнее создать сложне приложение. Но начать писать на С++ пожалуй даже проще чем на Ди. По крайней мере есть куча хороших книг и примеров кода.

VD>>Другими словами простота синтаксиса С++ превращаетя в сложноть паттернов. Ну, и в купе с полнешей небезопастностью языка это выливается в горы геморроя.


FR>Нет простота синтакиса совершено не причем. Скорее тут виновата непродуманость и противоречивость "модели языка", во многом из-за тотальной совместимости с си.


И это тоже. Но и простота тоже делает свой, немалый, вклад.

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


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

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

FR>D практически содержит подмножество, в которое входит почти вся java


Это чушь. В Ди ЖЦ не основной инструмент управления памятью. Ди не только предоставляет возможность ползоваться голыми указателями, но и никак не уберегает от их использования.

К тому же ты прекрасно понимашь, что когда я говорю об более удобных языках я ни в коем случае не имею в виду Яву. Речь идет в худшем случае о C# 3.0. Ну, в в лучшем сам знаешь о чем (для остальных: Немерле и Скала). По сравнению с ними ди — это убогий мостадонт.

FR> и большая часть шарпа.


Что такое часть шарпа?

FR> Просто сейчас смотрю GUI библиотеки для D и что вижу: DWT полный клон явовской SWT, dfl который сделан по мотивам WinForms из NET.


Ну, что же подождем когда Ди доростет до WPF .

Кстати, для WinForms существует два нехилых визуальных дизайнера. Можно глянуть на их аналоги (пойдет даже альфа-версия)?

Что-то мне кажется, что на таком языке их будет очень не просто реализовать. Рефлексии ведь вроде нет и в помине?

FR>Да да конечно, только надо еще немного злобной функциональности добавить


В Ди-то? Что-то убого выходит. Хотя лучше чем в С++.

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


Разделяй. Только тогда зачем тебе Ди? Геморрой в лучшем виде создается на С++.

FR>Ну а D вполне позволяет и с удовольствием программировать, и уже близок к рабочему языку.


Ага. Если не видеть нормальных современных языков, то и на Ди можно программировать с удовольствием. Вот только после них на Ди смотреть противно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 14:04
Оценка:
Здравствуйте, eao197, Вы писали:

E>Это какие-такие примеры?


Реализация того же альфаблэнда. Сразу поперла адресная арефметика.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 14:04
Оценка: -1
Здравствуйте, c-smile, Вы писали:

CS>Эта неизбежность... она из личного опыта как я понимаю?


И из него тоже. И не надо мне рассказывать, что у тебя геморроя нет. Я знаю, что эти 20-сантиметровые наросты на заднице ты за них не считаешь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 14:14
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

FR>> Просто сейчас смотрю GUI библиотеки для D и что вижу: DWT полный клон явовской SWT, dfl который сделан по мотивам WinForms из NET.


VD>Ну, что же подождем когда Ди доростет до WPF .


VD>Кстати, для WinForms существует два нехилых визуальных дизайнера. Можно глянуть на их аналоги (пойдет даже альфа-версия)?


VD>Что-то мне кажется, что на таком языке их будет очень не просто реализовать. Рефлексии ведь вроде нет и в помине?


http://www.dprogramming.com/entice.php

Внизу страницы screen-shot-ы.

Нехилый визуальный дизайнер был у Qt для C++, хотя в C++ не было и нет рефликсии вообще.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 14:16
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Это какие-такие примеры?


VD>Реализация того же альфаблэнда. Сразу поперла адресная арефметика.


И где эта реализация?
А заодно и описание алгоритма (на всякий случай).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Ой, чо с D деется-то!?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.05.07 14:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Одному интересно рыать канавы лопатой, а другому бурить десяти километровые скважены.


Ну да.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[18]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 07.05.07 14:38
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Нехилый визуальный дизайнер был у Qt для C++, хотя в C++ не было и нет рефликсии вообще.


Нет, есть. В Qt для этого используют специальный компилятор — moc (Meta-object compiler).
Так что не надо сказки рассказывать.
Re[19]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 14:43
Оценка:
Здравствуйте, AndreiF, Вы писали:

E>>Нехилый визуальный дизайнер был у Qt для C++, хотя в C++ не было и нет рефликсии вообще.


AF>Нет, есть. В Qt для этого используют специальный компилятор — moc (Meta-object compiler).

AF>Так что не надо сказки рассказывать.

moc-компилятор QtDesigner-ом не используется. QtDesigner хранит все необходимые описания в XML-файле проекта (с расширением .ui). Ui-файлы преобразуются в .hpp/.cpp файлы, которые уже затем передаются на вход moc-компилятору с помощью специальной утилиты uic.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Ой, чо с D деется-то!?
От: FR  
Дата: 07.05.07 14:46
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>C++ реально не позволяет писать на безопасном подмножестве.


VD>Вопросы к ПК и Страуструпу. Они говорят, что позволяет. И я им верю.


Могу перефразировать, чтобы писать безопасно на C++ нужно быть очень опытным С++ программистом

FR>>На D уже смогли в автоматическом режиме транслировать нетривиальную java библиотеку.


VD>Вот если бы было наоборот, то я ничего не сказал бы. А так. Код на более высокоуровневом язые всегда можно транслировать в код на менее высокоуровневом. Вот обртаное не врено.


Не надо, код на любом тьюринг полном языке всегда можно транслировать на другой т — полный. Вот только на пратике это обычно только вручную получается, и мало зависит от уровней языков. (Даже нормальный си <-> паскаль трансляторов и то не видать)

FR>>Для меня изучить язык это значит научится реально на нем работать. А то что ты понимаешь под изучением это так ознакомится.


VD>Тогда у нас тобой разное понимание понятия изучить мязык. Я не вкладываю в это понятие еще и понятие "стать гуру в области программирования на этом языке".


"Стать гуру" и "научится работать" далеко не одно и тоже.


FR>>Все равно будут сложности даже в базовых вещах.


VD>Сложност? Это как сказать. На данном языке будет сложнее создать сложное приложение. Но это верно для разработчика любого уровня. На С++ в принцие сложнее создать сложне приложение. Но начать писать на С++ пожалуй даже проще чем на Ди. По крайней мере есть куча хороших книг и примеров кода.


Начать писать что на D что на C++ что на шарпе или java примерно одинаково сложно по моему. Вот дальше с C++ пойдут сложности, которых почти не будет в остальных.


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


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


У меня тоже и что?

VD>Конечно я не отказался бы если бы все стало проще, удобнее и быстрее. Но, к сожалени, пока что такого интрумента нет. Зато есть возможность улучшать имещийся инструмент (в отличии от С++ и даже Ди Немерле открыт для изменений, любой может повлиять на него).


А оно надо?
Если и надо то очень редко.
К тому же и N не позволяет улучшать инструмент неограничено. Попробуй например ввести туда объектную сиcтему из CLOS.

FR>>D практически содержит подмножество, в которое входит почти вся java


VD>Это чушь. В Ди ЖЦ не основной инструмент управления памятью.


При чем тут язык?
(При портировании конечно надо это учитывать)

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


Как это мешает портировнию из явы?

VD>К тому же ты прекрасно понимашь, что когда я говорю об более удобных языках я ни в коем случае не имею в виду Яву. Речь идет в худшем случае о C# 3.0. Ну, в в лучшем сам знаешь о чем (для остальных: Немерле и Скала). По сравнению с ними ди — это убогий мостадонт.


По сравнению с третим шарпом, D вполне на уровне.
N и S из другой песочницы.

FR>> и большая часть шарпа.


VD>Что такое часть шарпа?


Посмотри на dfl не удивлюсь если нектоые примеры и на шарпе скомпилируются.

FR>> Просто сейчас смотрю GUI библиотеки для D и что вижу: DWT полный клон явовской SWT, dfl который сделан по мотивам WinForms из NET.


VD>Ну, что же подождем когда Ди доростет до WPF .


Фигня, язык все это позволяет реализовать.

VD>Кстати, для WinForms существует два нехилых визуальных дизайнера. Можно глянуть на их аналоги (пойдет даже альфа-версия)?


Порд рукой нет но в dfl во многих примерах комментарии что код сформирован альфой редактора форм.

VD>Что-то мне кажется, что на таком языке их будет очень не просто реализовать. Рефлексии ведь вроде нет и в помине?


Ну конечно куча редакторов форм на дельфи, бейсике, C++, и даже на си, подтверждают эту твою мысль

FR>>Да да конечно, только надо еще немного злобной функциональности добавить


VD>В Ди-то? Что-то убого выходит. Хотя лучше чем в С++.


В твою речь

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


VD>Разделяй. Только тогда зачем тебе Ди? Геморрой в лучшем виде создается на С++.


Геморой он языконезависим

FR>>Ну а D вполне позволяет и с удовольствием программировать, и уже близок к рабочему языку.


VD>Ага. Если не видеть нормальных современных языков, то и на Ди можно программировать с удовольствием. Вот только после них на Ди смотреть противно.


Кому как, я не только шоколадом питаюсь но и кортошкой тоже не брезгую.
А вообще не смотри никто ни заставляет.
Re[20]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 07.05.07 14:55
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>moc-компилятор QtDesigner-ом не используется. QtDesigner хранит все необходимые описания в XML-файле проекта (с расширением .ui). Ui-файлы преобразуются в .hpp/.cpp файлы, которые уже затем передаются на вход moc-компилятору с помощью специальной утилиты uic.


Без разницы, что и в каком порядке создается. Главная цель редактора гуи — это возможность в конечном итоге получить рабочее приложение. Без moc рабочего приложения не будет — а редакторы, которые создают исключительно в эстетических целях, на этом форуме не рассматриваются.
Так что рефлексия в C++/Qt не только есть, но и очень активно используется.
Re[21]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 15:06
Оценка:
Здравствуйте, AndreiF, Вы писали:

E>>moc-компилятор QtDesigner-ом не используется. QtDesigner хранит все необходимые описания в XML-файле проекта (с расширением .ui). Ui-файлы преобразуются в .hpp/.cpp файлы, которые уже затем передаются на вход moc-компилятору с помощью специальной утилиты uic.


AF>Без разницы, что и в каком порядке создается. Главная цель редактора гуи — это возможность в конечном итоге получить рабочее приложение. Без moc рабочего приложения не будет — а редакторы, которые создают исключительно в эстетических целях, на этом форуме не рассматриваются.


Если вам доводилось программировать на Qt, то вы должны знать, что moc-компилятор там используется безотносительно к GUI. Кроме того, поскольку QtDesigner не использует moc-компилятор, а именно moc-компилятор, по вашим словам добавляет в C++ Qt-шную рефлексию, то и QtDesigner не использует Qt-ную рефлексию.

AF>Так что рефлексия в C++/Qt не только есть, но и очень активно используется.


Пожалуйста, укажите на раздел стандарта C++, хоть от 98-го, хоть от 2003-го года, где фиксируется понятие рефлексии в C++.

Qt-шная рефлексия такая же стандартная для C++, как и моя ObjESSty-сериализация.

Генерируемый moc-компилятором код вообще с очень большой натяжкой можно назвать поддержкой рефлексии, поскольку все, что в нем есть -- это:
* className,
* qt_cast и
* qt_property, который, к тому же изымается при помощи QT_NO_PROPERTIES.

А где поиск описателя класса по имени? Где инстанцирование объекта по имени класса? Где список методов и атрибутов объекта (или вам хватает пропертей)? Где вызов метода по имени?

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[22]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 07.05.07 16:50
Оценка: +1 -1 :)
Здравствуйте, eao197, Вы писали:

E>Если вам доводилось программировать на Qt, то вы должны знать, что moc-компилятор там используется безотносительно к GUI. Кроме того, поскольку QtDesigner не использует moc-компилятор, а именно moc-компилятор, по вашим словам добавляет в C++ Qt-шную рефлексию, то и QtDesigner не использует Qt-ную рефлексию.


Изначально речь шла про "рефлексии не было и нет", тему ты очень ловко перевел. Ладно, будем считать, что со своей ошибкой ты согласился. Теперь далее. Не использует moc... а результаты работы moc он тоже ни в каком виде не использует?

E>Qt-шная рефлексия такая же стандартная для C++, как и моя ObjESSty-сериализация.


Я и не говорю, что она стандартная. Но она есть.
Твоя самооценка крайне неадекватна. Qt используют многие тысячи программистов во всем мире, а твою библиотеку — хорошо, если десяток.

E>Генерируемый moc-компилятором код вообще с очень большой натяжкой можно назвать поддержкой рефлексии


Система конечно очень ограниченная, до полноценнной ей далеко. Но это всё равно система работы с метаданными, как ни крути.
Re[23]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 16:58
Оценка: +1 :)
Здравствуйте, AndreiF, Вы писали:

E>>Если вам доводилось программировать на Qt, то вы должны знать, что moc-компилятор там используется безотносительно к GUI. Кроме того, поскольку QtDesigner не использует moc-компилятор, а именно moc-компилятор, по вашим словам добавляет в C++ Qt-шную рефлексию, то и QtDesigner не использует Qt-ную рефлексию.


AF>Изначально речь шла про "рефлексии не было и нет", тему ты очень ловко перевел. Ладно, будем считать, что со своей ошибкой ты согласился. Теперь далее. Не использует moc... а результаты работы moc он тоже ни в каком виде не использует?


Афигеть!
1. До тех пор, пока вы не укажите пункты C++ стандарта, описывающие рефлексию, в C++ ее не было и нет.
2. QtDesigner не использует результатов работы moc.

E>>Qt-шная рефлексия такая же стандартная для C++, как и моя ObjESSty-сериализация.


AF>Я и не говорю, что она стандартная. Но она есть.

AF>Твоя самооценка крайне неадекватна. Qt используют многие тысячи программистов во всем мире, а твою библиотеку — хорошо, если десяток.

Меня очень устраивает то, что вы не используете ни Qt, ни ObjESSty.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[24]: Ой, чо с D деется-то!?
От: AndreiF  
Дата: 07.05.07 17:09
Оценка:
Здравствуйте, eao197, Вы писали:

E>1. До тех пор, пока вы не укажите пункты C++ стандарта, описывающие рефлексию, в C++ ее не было и нет.


Значит, "нехилого визуального дизайнера" у С++ тоже не было и нет.

E>2. QtDesigner не использует результатов работы moc.


Это надо понимать так, что QtDesigner сам написан не на Qt, а все свойства компонентов в редакторе свойств захардкодены? Не верю.
Re[18]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 17:12
Оценка:
Здравствуйте, eao197, Вы писали:

E>И где эта реализация?


Поиск у нас еще работает. Ты эту мему читал точно.

Кстати, еще один пример:
struct EnticePluginInfo
{
    align(1):
    char* name; // out
    void* gcHandle; // in
    uint flags; // inout
    ubyte curMajorVersion; // in - current plugin arch version.
    ubyte curMinorVersion; // in - ditto.
    ubyte thisMajorVersion; // inout - plugin arch version supported by this plugin.
    ubyte thisMinorVersion; // inout - ditto.
    char* desc; // out - warning: not always available.
}

это уже из "дизайнера" на который ты дал ссылку.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 17:12
Оценка:
Здравствуйте, eao197, Вы писали:

E>http://www.dprogramming.com/entice.php


E>Внизу страницы screen-shot-ы.


Очень похоже на хардкод. Хуже чем MFC-шный дизайнер. Как создать и добавить свой контрол я так и не понял.

Я все же говорил не о наколенных поделках вроде "дизайнера MFC" когда все захардкожено и прибито гвоздями к полу, а о расширяемой среде в которую можно лекго добавить новый контрол и т.п.

E>Нехилый визуальный дизайнер был у Qt для C++, хотя в C++ не было и нет рефликсии вообще.


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

FR>Могу перефразировать, чтобы писать безопасно на C++ нужно быть очень опытным С++ программистом


Так и есть. Причем нужно быть еще доволно фанатично преданным этому языку, так как куда проще его попросту сменить. Ну, или к этому должны принуждать обстоятельства (работадатель, например).

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


Заблуждаешся. Транслировать более низкоуровневый язык в более высокоуровневый практически невозможно. Это требует наличия ИИ. Ведь не все паттерны можно распознать. В более высокуровневом языке может просто небыть констуркций имеющихся в низкоуровневом. Попробуй ради хохмы транслировать на любой язык без указателей код основанный на адресной арифметике.

FR> Вот только на пратике это обычно только вручную получается, и мало зависит от уровней языков. (Даже нормальный си <-> паскаль трансляторов и то не видать)


Это и в теории, и на практике невозможно. Высокоуровневый в низкоуровневый нет проблем (точнее вся проблема в объеме работ). Обратно — хрен. Точнее можно только при условии, что высокоуровневый язык поддерживает работу на таком же низом уровне как и исходный низкоуровневый. Толко от такой трансляции обычно никакого толку нет.

FR>"Стать гуру" и "научится работать" далеко не одно и тоже.


Вот именно. Научиться писать — это значит освоить сам язык. А стать гуру — значит то, что ты как раз понимашь под обучением.

FR>У меня тоже и что?


У тебя только ощущение.

FR>А оно надо?


Мне — очень.

FR>Если и надо то очень редко.


Тебе? Возможно...

FR>К тому же и N не позволяет улучшать инструмент неограничено. Попробуй например ввести туда объектную сиcтему из CLOS.


Объектана система там уже мощьнее чем в CLOS.
Тет только мультиметодов и множественного наследования. И первое, и второе можно реализовать на макросах (собственно весь CLOS сделан на макросах), но никому не нужно.

FR>>>D практически содержит подмножество, в которое входит почти вся java


VD>>Это чушь. В Ди ЖЦ не основной инструмент управления памятью.


FR>При чем тут язык?


Да. Казалось бы причем тут язык? Я фигею.

FR>(При портировании конечно надо это учитывать)


Это невозможно учитывать. Код написанный на Яве рассчитан на то что помять всегда управляется ЖЦ. Произвести автоматическую конвертацию со сменой парадигмы невозможно. Точка.

FR>Как это мешает портировнию из явы?


Мешает никудышный результат. Ди не предназначин для написания кода в стиле Явы. Портированные приложения будут работать хже чем на яве.

FR>По сравнению с третим шарпом, D вполне на уровне.


И в подметки не годится. А Шарп довольно примитивный язык.

FR>N и S из другой песочницы.


Незнаю, что такое S и смутнро догадываюсь, что такое N, но точно знаю, что песочницы тут не причем. Дрова на D вряд ли будет кто писать. А все остальное можно писать на чем угодно.

FR>Посмотри на dfl не удивлюсь если нектоые примеры и на шарпе скомпилируются.


Начнем с подмены поняий. Я говорил о C# 3.0. Ты же сравнивашь какие-то бибилиотеки для ГУИ.

Ну, да ладно. ОК. Давай простой эксперемент. Вот примитивнеший код:
public class MyControl : System.Windows.Forms.TextBox
{
    public MyControl() { BackColor = System.Drawing.Color.Aqua; }
}

тут нам дали ссылку на дизанер форм для Ди
Автор: eao197
Дата: 07.05.07
. Ты там даже плюсик поставил.

Вот покажи, как этот код заработает в этом дизайнере.

Надеюсь не надо объяснять, что в случае с дотнетом достаточно добавить ссыклу на длл или проект?

VD>>Ну, что же подождем когда Ди доростет до WPF .


FR>Фигня, язык все это позволяет реализовать.


Без нормально то ЖЦ и рефлекшона? Гы-гы. Представляю себе это чудо.

VD>>Что-то мне кажется, что на таком языке их будет очень не просто реализовать. Рефлексии ведь вроде нет и в помине?


FR>Ну конечно куча редакторов форм на дельфи, бейсике, C++, и даже на си, подтверждают эту твою мысль


Ты или вообще не в теме, или откровенно лукавишь.
Дельфи и Васик обладают механизмами анлогичными рефлексии. К С++ ни одного полноценного редактора форм так и не сделано. Ну, за исключением С++Билдерного который создан не для С++, а для его расширения так же снабженного метаинформацией. Qt-ёвый редактор тоже эмулирует метаинформацию, да и сильно убог.

VD>>Разделяй. Только тогда зачем тебе Ди? Геморрой в лучшем виде создается на С++.


FR>Геморой он языконезависим


Да ладно тебе. Ты давно форум по С++ то читал? Сравни его с тем же дотентным. Погляди сколько вопросов там, и там.

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

FR>А вообще не смотри никто ни заставляет.

Ды что и делаю с большим удовольствием. Точнее посмотрел я на Ди, но второй раз уже не охота. Ну, не вижу в этом смысла.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 17:49
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>И где эта реализация?


VD>Поиск у нас еще работает. Ты эту мему читал точно.


Настолько, что ты даже не можешь им воспользоваться?
Подглючевает временами поиск-то, особенно если включена галка отдельного форума.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[19]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 17:52
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Нехилый визуальный дизайнер был у Qt для C++, хотя в C++ не было и нет рефликсии вообще.


VD>Для Qt был создано нехилое внешнее хранилище метаинформации и генератор кода ее обслуживающий. Причем получилось все равно убого.


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

Это нормально. А вот в Qt все убого. Аминь.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 18:44
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Еще один знаток, блин.


Ага. А что завидно?

E>Я вот, например, видел убогий Янус. На классном языке написанный, с дизайнером форм гибким.

E>Еще я вижу написанный на правильных управляемых платформах сайт, ложившися в даун раза четыре за последнее полгода.

Это что. Я вот слышал о Янусе на С++ и многое другое. Например, про SObjectizer (тм).
Про их надежность сказать ничего не могу. Потому как они как неуловимый Джо .

E>Это нормально. А вот в Qt все убого. Аминь.


Ну, убого, что тут поделаешь?

ЗЫ

А вообще, чья бы корова мычала. Ты сначала сам создай сайт который будет в режиме 24*7 работать и выдерживать нагрузку в 15 тысяч посетителей в день и 200 000+ обращений. Тогда по рассуждаешь, что кривое, что прямое. Сожешь за одно Шаридану помочь с С++-ным клоном Януса. А то Янус то уже поди как лет 5 живет, а этот проект все только в мыслях есть.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 18:44
Оценка:
Здравствуйте, eao197, Вы писали:

E>Настолько, что ты даже не можешь им воспользоваться?


Ну, мне оно не надо.

E>Подглючевает временами поиск-то, особенно если включена галка отдельного форума.


Ну, это к разработчикам Меты. Они его видимо на С++ писали .

А вобще, я тебе пример привел из продукта на который ты сам пальцем указал. Но ты это благополучно поскипал и до поиска докапался. Видмо тебе нужно просто тупо пофлэймить.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.05.07 19:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Например, про SObjectizer (тм).

VD>Про их надежность сказать ничего не могу. Потому как они как неуловимый Джо .

В это-то и вся разница: я говорю о том, чем пользовался. А ты о том, в чем не разбираешься.

VD>А вообще, чья бы корова мычала. Ты сначала сам создай сайт который будет в режиме 24*7 работать и выдерживать нагрузку в 15 тысяч посетителей в день и 200 000+ обращений. Тогда по рассуждаешь, что кривое, что прямое.


Т.е. у тебя такой сайт создать не удалось, предлагаешь мне попробовать?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[22]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.07 21:31
Оценка:
Здравствуйте, eao197, Вы писали:

E>В это-то и вся разница: я говорю о том, чем пользовался. А ты о том, в чем не разбираешься.


Вообще смешно слушать от полнешего блаба разглагольствующего о том в чем он ничего ровным счетом не понимает о том, что кто-то в чем-то не разбирается.

Ну, да считай, что хочешь. Твои проблемы.

E>Т.е. у тебя такой сайт создать не удалось,


Да, да. Уверяй себя в этом каждый раз когда заходишь на этот сайт.

E>предлагаешь мне попробовать?


Да ни в коем случае. Трепись и дальше о том что никогда не пробовал и ищи проблемы в чужой работе. Так прикольнее.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Ой, чо с D деется-то!?
От: FR  
Дата: 08.05.07 04:36
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>это уже из "дизайнера" на который ты дал ссылку.



Note that the plugin interface is quite ugly as it was done to
be used also with C. A nicer D wrapper will be provided in time.

Re[19]: Ой, чо с D деется-то!?
От: FR  
Дата: 08.05.07 05:04
Оценка: -1
Здравствуйте, VladD2, Вы писали:


FR>>Могу перефразировать, чтобы писать безопасно на C++ нужно быть очень опытным С++ программистом


VD>Так и есть. Причем нужно быть еще доволно фанатично преданным этому языку, так как куда проще его попросту сменить. Ну, или к этому должны принуждать обстоятельства (работадатель, например).


Не надо фанатизма, большинству хватает привычки.

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


VD>Заблуждаешся. Транслировать более низкоуровневый язык в более высокоуровневый практически невозможно. Это требует наличия ИИ. Ведь не все паттерны можно распознать. В более высокуровневом языке может просто небыть констуркций имеющихся в низкоуровневом. Попробуй ради хохмы транслировать на любой язык без указателей код основанный на адресной арифметике.


Вполне возможно. В высокоуровневом языке реализуешь модель памяти низкоуровнего и транслируешь на эту модель низкоуровневую работу с указателями:
class pointer;
class memory;
// и т. д.

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

FR>> Вот только на пратике это обычно только вручную получается, и мало зависит от уровней языков. (Даже нормальный си <-> паскаль трансляторов и то не видать)


VD>Это и в теории, и на практике невозможно. Высокоуровневый в низкоуровневый нет проблем (точнее вся проблема в объеме работ). Обратно — хрен. Точнее можно только при условии, что высокоуровневый язык поддерживает работу на таком же низом уровне как и исходный низкоуровневый. Толко от такой трансляции обычно никакого толку нет.


В теории возможно и доказано лет 70 назад.
На практике тоже в крайнем случае просто создав интерпретатор низкоуровнего языка на высокоуровневом.

FR>>"Стать гуру" и "научится работать" далеко не одно и тоже.


VD>Вот именно. Научиться писать — это значит освоить сам язык. А стать гуру — значит то, что ты как раз понимашь под обучением.


То что я понимаю под обучением лежит между твоим "ознокомится" и "стать гуру".


FR>>У меня тоже и что?


VD>У тебя только ощущение.


У тебя тоже


FR>>К тому же и N не позволяет улучшать инструмент неограничено. Попробуй например ввести туда объектную сиcтему из CLOS.


VD>Объектана система там уже мощьнее чем в CLOS.


Ну конечно


VD>Да. Казалось бы причем тут язык? Я фигею.


FR>>(При портировании конечно надо это учитывать)


VD>Это невозможно учитывать. Код написанный на Яве рассчитан на то что помять всегда управляется ЖЦ. Произвести автоматическую конвертацию со сменой парадигмы невозможно. Точка.


Ну так конкретную библиотеку уже портировали.

FR>>Как это мешает портировнию из явы?


VD>Мешает никудышный результат. Ди не предназначин для написания кода в стиле Явы. Портированные приложения будут работать хже чем на яве.


С этим в общем согласен.
Но сам то язык это позволяет, на С++ портировать гораздо сложнее.

FR>>По сравнению с третим шарпом, D вполне на уровне.


VD>И в подметки не годится. А Шарп довольно примитивный язык.


Голословное утверждение.

FR>>N и S из другой песочницы.


VD>Незнаю, что такое S и смутнро догадываюсь, что такое N, но точно знаю, что песочницы тут не причем. Дрова на D вряд ли будет кто писать. А все остальное можно писать на чем угодно.


Ну конечно.

FR>>Посмотри на dfl не удивлюсь если нектоые примеры и на шарпе скомпилируются.


VD>Начнем с подмены поняий. Я говорил о C# 3.0. Ты же сравнивашь какие-то бибилиотеки для ГУИ.


Мне кажется это уже ты запутался о чем говорили. Я говорил что GUI библиотеки на D из шарпа и явы легко портируютсяы на D.

VD>Ну, да ладно. ОК. Давай простой эксперемент. Вот примитивнеший код:

VD>
VD>public class MyControl : System.Windows.Forms.TextBox
VD>{
VD>    public MyControl() { BackColor = System.Drawing.Color.Aqua; }
VD>}
VD>

VD>тут нам дали ссылку на дизанер форм для Ди
Автор: eao197
Дата: 07.05.07
. Ты там даже плюсик поставил.


VD>Вот покажи, как этот код заработает в этом дизайнере.


VD>Надеюсь не надо объяснять, что в случае с дотнетом достаточно добавить ссыклу на длл или проект?


Будет все это со временем.


FR>>Ну конечно куча редакторов форм на дельфи, бейсике, C++, и даже на си, подтверждают эту твою мысль


VD>Ты или вообще не в теме, или откровенно лукавишь.

VD>Дельфи и Васик обладают механизмами анлогичными рефлексии. К С++ ни одного полноценного редактора форм так и не сделано. Ну, за исключением С++Билдерного который создан не для С++, а для его расширения так же снабженного метаинформацией. Qt-ёвый редактор тоже эмулирует метаинформацию, да и сильно убог.

Для редактора форм не нужна полноценная рефлексия. Того что уже есть в D (не меньше чем в delphi) вполне хватит.

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

FR>>А вообще не смотри никто ни заставляет.

VD>Ды что и делаю с большим удовольствием. Точнее посмотрел я на Ди, но второй раз уже не охота. Ну, не вижу в этом смысла.


Тогда не понял о чем мы тут беседуем-то?
Re[23]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.05.07 07:21
Оценка: :))
Здравствуйте, VladD2, Вы писали:

E>>Т.е. у тебя такой сайт создать не удалось,


VD>Да, да. Уверяй себя в этом каждый раз когда заходишь на этот сайт.


Зашел, удостоверился:


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Ой, чо с D деется-то!?
От: Klapaucius  
Дата: 08.05.07 07:55
Оценка: :))
Здравствуйте, FR, Вы писали:

VD>>это уже из "дизайнера" на который ты дал ссылку.

FR>

FR>Note that the plugin interface is quite ugly as it was done to
FR>be used also with C. A nicer D wrapper will be provided in time.


Будет и задаток. С течением времени.

И. Ильф, Е. Петров.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[24]: Ой, чо с D деется-то!?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 08.05.07 09:56
Оценка: -1
Здравствуйте, eao197, Вы писали:

E>Зашел, удостоверился:

E>

Кстати да. Колбасить его в последнее время начало частенько.

И еще, я не хочу умалять усилий его создателей (тратящих, как минимум, своё время), но, Влад, 200'000 хитов/24 часа для почти статического сайта это далеко не предел.
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[25]: Ой, чо с D деется-то!?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.05.07 10:38
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>200'000 хитов/24 часа для почти статического сайта


99% реальных запросов к rsdn динамические с обращением к БД.
... << RSDN@Home 1.2.0 alpha rev. 675>>
AVK Blog
Re[26]: Ой, чо с D деется-то!?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 08.05.07 10:49
Оценка:
Здравствуйте, AndrewVK, Вы писали:

ANS>>200'000 хитов/24 часа для почти статического сайта


AVK>99% реальных запросов к rsdn динамические с обращением к БД.


Ошибочно написал — не статического, а R/O. Или опять ошибся?
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[14]: Ой, чо с D: подтянулся Александреску, начались пошло
От: Arioch  
Дата: 08.05.07 15:11
Оценка:
R>Ну Mono хотел бы, кажется, за 100. Интересно, он есть под WM?

Делали DotGnu. Но кажется только .Net 1.x и кажется не доделали
Re[24]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.07 17:28
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Зашел, удостоверился:...


Это мне напоминает анекдот:

Старый арменин рассказывает своим детям...
— Во время войны — дети — нас поймали фашсты. Они нам сказали "Или ми надругаемся над вами по голубому, или убъёом!
— И что деда?
— Что, что? Надовсеми кроме меня надругались!
— А ты, деда?
— А я, дети, умер!


Так же и ты отвечаешь через тот самый форум и рассказываешь, что он не работает.

А ошибки... Мало ли чего бывает. Над сервером одновременно эксперементируют сразу несколько архаровцев. Тут что хочешь может случиться. Плюс еще бывают железные проблемы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Ой, чо с D деется-то!?
От: Cyberax Марс  
Дата: 08.05.07 18:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так же и ты отвечаешь через тот самый форум и рассказываешь, что он не работает.

Супер!
Sapienti sat!
Re: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.06.07 18:09
Оценка: 49 (9) +1
В понедельник, 18-го июня, в развитии языка D произошло очередное эпохальное событие: язык разделился на две ветви, D 1.0 и D 2.0.

Напомню хронологию событий. 2-го января 2007 года была выпущена "стабильная" версия 1.000. Слово "стабильная" взято в кавычки не зря. По некоторым слухам выпуск версии 1.000 был всего лишь попыткой обозначить тот факт, что после семи лет разработки язык D достиг некоторого значимого уровня. Вроде как Брайта достали пользователи языка вопросом "Ну когда же?", на что эти Брайт среагировал "Хотели? Получите!".

После этого в язык было добавлено еще несколько важных дополнений, например, версия 1.005: добавлены строковые mixin-ы (т.н. mixin statements, mixin expressions и mixin declarations) и импорт содержимого любых файлов (т.н. import expression); версия 1.006: поддержка исполнения некоторых фрагментов кода во время компиляции (т.н. compile time execution); версия 1.014: поддержка литералов для ассоциативных массивов. Плюс большое количество исправленных багов разной степени тяжести.

В это же самое время для языка D оказалось сразу две библиотеки, претендующих на звание стандартных: C-подобная библиотека Phobos, входящая в состав компилятора DMD (можно сказать де-юре стандарт) и альтернативная ей, полностью объектно-ориентированная Tango (имеющая все шансы стать де-факто стандартом). Причем Tango пока существует в виде второго релиз-кандидата, но финальной версии еще нет.

А второй D-шный компилятор, GDC, пока остановился на уровне DMD v.1.007 (речь о GDC v 0.23).

И вот в таких условиях, когда казалось бы, что жизнь начала налаживаться, что D достигнет достаточной степени стабильности, что GDC перестанет отставать от DMD, что Tango полностью заменит Phobos, что для D будут написаны необходимые руководства и, может быть, книги, начинают происходить, как мне казалось, странные вещи.

Сначала Брайт начал намекать, что у него есть идеи по добавлению в язык некоторой макросистемы. Какой -- никто из широкой публики не знает. Но в версию 1.011 даже было введено новое служебное слово macro.

Затем, с подачи Андрея Алексендреску, в D начали добавлять поддержку константности, даже большую, чем в C++.

В отличии от макросов, константность широко обсуждалась в news-группах digitalmars.D и digitalmars.D.announce. Из этих обсуждений стало понятно, что в рамки ветки 1.0 константность ну никак не ляжет. Поэтому и произошло выделение ветви 2.0. Первая альфа-версия DMD 2.000 с поддержкой константности и была опубликована 18-го июня. Версия 1.0 будет существовать как "стабильная" версия, последующие релизы в которой будут всего лишь баг-фиксами.

Что же представляет из себя константность в D 2.0? Подробнее об этом можно прочитать на сайте языка D, вот здесь. Если же говорить в двух словах, то в язык добавлены новые модификаторы:
* final, который указывает, что имя переменной не может быть связано с другим значением. Хотя, если переменная является указателем или ссылкой, то объект, на который указатель указывает, изменяться может. Например:
final int x = 0;
x = 3; // Ошибка! Имя x не может быть связано с другим значением.
int y = 0;
final int * py = &y;
*py = 0;   // Ok, изменяется не py, а значение, на которое py указывает.
py = null; // Ошибка, py не может принять новое значение.


* invariant, который указывает, что значение изменяться не может. Вообще. Поскольку такое значение не может изменяться, то оно либо может размещаться в ROM, либо вообще подставляться компилятором в место использования. Поэтому нельзя взять адрес инварианта:
invariant int x = 0;
x = 3;                   // Ошибка! Нельзя изменить инвариант.
invariant int * px = &x; // Ошибка! Нельзя взять адрес инварианта.


* const, который является аналогом const в C++. По сути, это объявление того, что через константную переменную нельзя изменить значение. Но значение может измениться через другие ссылки на него:
const int x = 0;
x = 3; // Ошибка! Нельзя изменить x.
int y = 0;
const(int *) py = &y;
*py = 3; // Ошибка!
y = 3;
assert( *py == 3 ); // *py изменилось через другую ссылку на значение.


Значение инварианта должно быть вычислимо во время компиляции. Неявно указатель к инварианту не приводится. Т.е. следующая конструкция не должна пройти:
int y = 0;
invariant(int *) p = &y; // Ошибка! Значение *p может быть изменено через y,
                         // а это нарушение инварианта.


Так же строковые литералы теперь имеют тип invariant(char)[], вместо char[]. Что делает нелегальной запись:
auto s = "Hello";
s ~= ", World"; // Ошибка, поскольку s нельзя изменять.


При сильном желании инвариантность и константность можно снять при помощи кастов. Сделано это для того, чтобы позволить программистам работать с левыми библиотеками, исправить которые мы не в состоянии. Например;
// An interface for some third-party library
// (which is probably written in some exotic language).
extern(C) void initSomeSubsystem(char * initializationString);
 
int main()
{
    invariant char * initString = "...";
    // Cast away invariantness of initString so we can pass it to the C
    // function; be it on your head if the function tries to change it!
    initSomeSubsystem( cast(char*)initString );
}


Главное отличие кастов в D от кастов в C++ в том, что в C++ разрешено использование результирующего значения после снятия константности:
const int * pc = ...;
int * p = const_cast< int * >( pc );
*p = 0; // Well-defined.

а в D подобная конструкция является undefined behaviour. Т.е. желающим оставлен способ отстрелить себе обе ноги и кое-что еще, если есть очень уж сильное желание.


Такие вот пироги. Существует вероятность, что константность еще притерпит некоторые изменения. И, возможно, вызовут еще некоторые изменения в языке. Т.е. в D начался очередной виток нестабильности в стремлении к совершенству.

С одной стороны, это хорошо. После C++ было тяжеловато привыкать к C++подобному языку без const-ов. Но с другой -- какой смысл сейчас что-то делать на D 1.0, если это уже тупиковая ветка и переход на D 2.0 все равно неизбежен? В digitalmars.D несколько человек, в том числе и я, уже высказались в том духе, что развитие -- это хорошо, но развиваться можно до бесконечности. Пора бы взять тайм-аут на пару-тройку лет и пописать на D, инструменты для него сделать, документацию, реальных проектов в разных проблемных областях. Но нас пока не слушают И караван идет...

Так что есть шансы, что C++0x появится раньше, чем D 2.0. Будем посмотреть


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: D1.0 и D2.0
От: . Великобритания  
Дата: 20.06.07 01:24
Оценка: :))) :)))
eao197 wrote:

> Так что есть шансы, что C++0x появится раньше, чем D 2.0. Будем посмотреть

Надо Владу срочно патентовать своё D2™.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: D1.0 и D2.0
От: Delight  
Дата: 20.06.07 03:18
Оценка: 1 (1) +3
Здравствуйте, eao197, Вы писали:

E>В понедельник, 18-го июня, в развитии языка D произошло очередное эпохальное событие: язык разделился на две ветви, D 1.0 и D 2.0...


Трудно с такими новостями воспринимать его как стабильный ЯП для коммерческой разработки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: D2.0: Here A Const, There A Const
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.06.07 07:35
Оценка: 1 (1)
Here A Const, There A Const -- статья от Вальтера Брайта, описывающая причины добавления константности в D.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 09:15
Оценка: :)))
Здравствуйте, eao197, Вы писали:

<skip>

E>Так что есть шансы, что C++0x появится раньше, чем D 2.0. Будем посмотреть


Напрашивается сделать D++ и решить все проблемы D
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.06.07 10:06
Оценка: 1 (1) +2
Здравствуйте, _nn_, Вы писали:

E>>Так что есть шансы, что C++0x появится раньше, чем D 2.0. Будем посмотреть


__>Напрашивается сделать D++ и решить все проблемы D


Имхо, у D сейчас одна проблема, которая описывается народной мудростью "Лучшее -- враг хорошего". D community настолько увлеклось созданием лучшего языка, что забывает, что язык -- это всего лишь инструмент. Отсутствие которого в нужном месте в нужное время делает его просто-напросто невостребованным.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 10:18
Оценка: :)
Здравствуйте, eao197, Вы писали:

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


E>>>Так что есть шансы, что C++0x появится раньше, чем D 2.0. Будем посмотреть


__>>Напрашивается сделать D++ и решить все проблемы D


E>Имхо, у D сейчас одна проблема, которая описывается народной мудростью "Лучшее -- враг хорошего". D community настолько увлеклось созданием лучшего языка, что забывает, что язык -- это всего лишь инструмент. Отсутствие которого в нужном месте в нужное время делает его просто-напросто невостребованным.


Что-то в этом есть.
На мой взляд надо выкинуть DMD и Phobos и сосредоточить разработку под GPL лицензией.

А серьезно, таким темпом разработки практического применение пока я не вижу.
С++ хоть и не идеал, но к сожалению D долек от идеала тоже. Тем более когда добавляют UB в язык осознанно

Поэтому единственный вариант это заняться разработкой идеального языка на благо всего RSDN-а
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.06.07 10:35
Оценка:
Здравствуйте, _nn_, Вы писали:

__>На мой взляд надо выкинуть DMD и Phobos и сосредоточить разработку под GPL лицензией.


Что-то в этом есть
Но это нереально
Сам факт того, что есть и Phobos и Tango, и не видно, чтобы Брайт отважился на выбрасывание Phobos и включение в свой дистрибутив Tango уже печален.

__>А серьезно, таким темпом разработки практического применение пока я не вижу.


Ну дык в том-то и дело.
Я уж начал небольшие программки на D для работы делать, на DMD 1.014 и Tango. Уже начали реализовываться планы были по портированию на D некоторых C++ библиотек. Думал, ну вот, пока я тут повожусь с портированием и Tango 1.0 выйдет и D от багов очистят... Редиски, короче.

И есть у меня подозрение, что D2.0 введением константности не ограничится. Слишком уж удобный момент, чтобы в язык еще что-нибудь втянуть. Макросы те же самые. А это означает, что стабильная версия 2.0 появится еще очень не скоро. А там горячие головы придумают что бы такого несовместимого в 3.0 добавить
Пока развитие D шло именно таким образом ((

__>С++ хоть и не идеал, но к сожалению D долек от идеала тоже. Тем более когда добавляют UB в язык осознанно


Ну пока на D, в отличии от C++, программировать приятней за счет:
* наличия вывода типов и ключевого слова auto (а ведь, оказывается, Страуструп мог ввести это в C++ еще в 1982(!), но тогда конструкция auto i = 0 была легальной конструкцией языка C, назначавшая переменной i тип int );
* наличия делегатов и lazy параметров;
* очень быстрой компиляции.

Вывод типов в C++0x уже добавили, есть еще надежда, что кто-нибудь из коммитета удобные лямбды в язык добавит. И получится тогда удобный C++, да еще совместимый с унаследованным C++ кодом. Неудел тогда вечно развивающийся D останется. Одной быстрой компиляцией и консервативным сборщиком мусора сыт не будешь.

__>Поэтому единственный вариант это заняться разработкой идеального языка на благо всего RSDN-а


Не-а, стар я уже для этого. Ericsson-ы вон свой отличный язык Erlang начали двадцать лет назад делать. И только сейчас он приобретает достаточную известность.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 11:05
Оценка:
Здравствуйте, eao197, Вы писали:

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


__>>На мой взляд надо выкинуть DMD и Phobos и сосредоточить разработку под GPL лицензией.


E>Что-то в этом есть

E>Но это нереально
E>Сам факт того, что есть и Phobos и Tango, и не видно, чтобы Брайт отважился на выбрасывание Phobos и включение в свой дистрибутив Tango уже печален.

__>>А серьезно, таким темпом разработки практического применение пока я не вижу.


E>Ну дык в том-то и дело.

E>Я уж начал небольшие программки на D для работы делать, на DMD 1.014 и Tango. Уже начали реализовываться планы были по портированию на D некоторых C++ библиотек. Думал, ну вот, пока я тут повожусь с портированием и Tango 1.0 выйдет и D от багов очистят... Редиски, короче.

Я не понимаю чем Брайт мотивирует.
Если он создает язык для практического применения пора подумать о практике.

E>И есть у меня подозрение, что D2.0 введением константности не ограничится. Слишком уж удобный момент, чтобы в язык еще что-нибудь втянуть. Макросы те же самые. А это означает, что стабильная версия 2.0 появится еще очень не скоро. А там горячие головы придумают что бы такого несовместимого в 3.0 добавить

E>Пока развитие D шло именно таким образом ((

О макросах там давно говорили.
Если их прикрутят в язык, то будет каша там.

__>>С++ хоть и не идеал, но к сожалению D долек от идеала тоже. Тем более когда добавляют UB в язык осознанно


E>Ну пока на D, в отличии от C++, программировать приятней за счет:

E>* наличия вывода типов и ключевого слова auto (а ведь, оказывается, Страуструп мог ввести это в C++ еще в 1982(!), но тогда конструкция auto i = 0 была легальной конструкцией языка C, назначавшая переменной i тип int );
E>* наличия делегатов и lazy параметров;
E>* очень быстрой компиляции.

E>Вывод типов в C++0x уже добавили, есть еще надежда, что кто-нибудь из коммитета удобные лямбды в язык добавит. И получится тогда удобный C++, да еще совместимый с унаследованным C++ кодом. Неудел тогда вечно развивающийся D останется. Одной быстрой компиляцией и консервативным сборщиком мусора сыт не будешь.


Вот-вот, к сожалению это не решаюшие факторы в выборе D вместо С++

__>>Поэтому единственный вариант это заняться разработкой идеального языка на благо всего RSDN-а


E>Не-а, стар я уже для этого. Ericsson-ы вон свой отличный язык Erlang начали двадцать лет назад делать. И только сейчас он приобретает достаточную известность.


Ну на RSDN много людей все так есть
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.06.07 11:15
Оценка:
Здравствуйте, _nn_, Вы писали:

__>>>А серьезно, таким темпом разработки практического применение пока я не вижу.


E>>Ну дык в том-то и дело.

E>>Я уж начал небольшие программки на D для работы делать, на DMD 1.014 и Tango. Уже начали реализовываться планы были по портированию на D некоторых C++ библиотек. Думал, ну вот, пока я тут повожусь с портированием и Tango 1.0 выйдет и D от багов очистят... Редиски, короче.

__>Я не понимаю чем Брайт мотивирует.

__>Если он создает язык для практического применения пора подумать о практике.

Я несколько раз ему это говорил и прямым текстом спрашивал, планируется ли вообще какая-нибудь пауза в развитии языка. Но мне он не отвечал. Зато он придерживается такой линии: есть типа стабильный D1.0 и для создания production кода и использования в реальных проектах нужно брать именно D1.0.

Его понять можно. Так же самая константность, точнее ее отсутствие -- это такой косяк, который хорошо бы исправить. И раз уж он решил добавить в язык константность, так пусть делает это раньше. Тем более, что многие из D community очень восторженно приветствуют такой ход событий и так же указывают: "мол чего народ баламутишь, есть D1.0, пользуйся им".

Радует, что я там не один такой, кто говорит, что пора бы уже заниматься продвижением D, а не развитием. Так что есть шансы, что к нам будут больше прислушиваться.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 11:29
Оценка:
Здравствуйте, eao197, Вы писали:

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


__>>>>А серьезно, таким темпом разработки практического применение пока я не вижу.


E>>>Ну дык в том-то и дело.

E>>>Я уж начал небольшие программки на D для работы делать, на DMD 1.014 и Tango. Уже начали реализовываться планы были по портированию на D некоторых C++ библиотек. Думал, ну вот, пока я тут повожусь с портированием и Tango 1.0 выйдет и D от багов очистят... Редиски, короче.

__>>Я не понимаю чем Брайт мотивирует.

__>>Если он создает язык для практического применения пора подумать о практике.

E>Я несколько раз ему это говорил и прямым текстом спрашивал, планируется ли вообще какая-нибудь пауза в развитии языка. Но мне он не отвечал. Зато он придерживается такой линии: есть типа стабильный D1.0 и для создания production кода и использования в реальных проектах нужно брать именно D1.0.


E>Его понять можно. Так же самая константность, точнее ее отсутствие -- это такой косяк, который хорошо бы исправить. И раз уж он решил добавить в язык константность, так пусть делает это раньше. Тем более, что многие из D community очень восторженно приветствуют такой ход событий и так же указывают: "мол чего народ баламутишь, есть D1.0, пользуйся им".


Ну константность, которая добавляенна увы не панацея.
Там UB на ровном месте с кастом из инварианта.
За что боролись на то и

На мой взгляд правильно если делать маршаллинг то делать его или нормально в языки или в виде библиотеке, но не с UB.

E>Радует, что я там не один такой, кто говорит, что пора бы уже заниматься продвижением D, а не развитием. Так что есть шансы, что к нам будут больше прислушиваться.


К сожалению не думаю, что Брайт серьезно к этому отнесется..
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[9]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.06.07 11:40
Оценка: +1
Здравствуйте, _nn_, Вы писали:

E>>Его понять можно. Так же самая константность, точнее ее отсутствие -- это такой косяк, который хорошо бы исправить. И раз уж он решил добавить в язык константность, так пусть делает это раньше. Тем более, что многие из D community очень восторженно приветствуют такой ход событий и так же указывают: "мол чего народ баламутишь, есть D1.0, пользуйся им".


__>Ну константность, которая добавляенна увы не панацея.

__>Там UB на ровном месте с кастом из инварианта.
__>За что боролись на то и

Здесь как раз все понятно. Ведь D -- это в первую очередь язык для околосистемного программирования, когда безопасность временами можно принести в жертву производительности. Если уж кому-то сильно приспичило снять константность -- пусть он будет сам себе злобным буратино. Без обеих ног.

Тем более, что use-case для снятия константности вполне понятный и прозрачный: когда приходится передавать указатели на D-шные объекты в строронюю библиотеку, поправить которую у тебя нет возможности. Ну, например, есть какой-нибудь генератор кода (вроде yacc-а, IDL-транслятора или ASN.1 компилятора), который генерирует декларации функций без константности. Выход тут либо в применении каких-то средств модификации сгенерированного этим инструментом кода, либо снятием константности в месте вызова.

При обсуждении этого use-case появилась идея сделать специальный вариант cast-а для таких случаев:
int * p = cast(break const)const_ptr;

чтобы такие касты были хорошо заменты в исходном коде.

__>На мой взгляд правильно если делать маршаллинг то делать его или нормально в языки или в виде библиотеке, но не с UB.


Я так понимаю, UB возникает только при изменении данных после снятия константности. Что, в общем-то и понятно. Если изменения данных не происходит, то нет и UB.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 16:44
Оценка:
Здравствуйте, eao197, Вы писали:

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


E>>>Его понять можно. Так же самая константность, точнее ее отсутствие -- это такой косяк, который хорошо бы исправить. И раз уж он решил добавить в язык константность, так пусть делает это раньше. Тем более, что многие из D community очень восторженно приветствуют такой ход событий и так же указывают: "мол чего народ баламутишь, есть D1.0, пользуйся им".


__>>Ну константность, которая добавляенна увы не панацея.

__>>Там UB на ровном месте с кастом из инварианта.
__>>За что боролись на то и

E>Здесь как раз все понятно. Ведь D -- это в первую очередь язык для околосистемного программирования, когда безопасность временами можно принести в жертву производительности. Если уж кому-то сильно приспичило снять константность -- пусть он будет сам себе злобным буратино. Без обеих ног.


E>Тем более, что use-case для снятия константности вполне понятный и прозрачный: когда приходится передавать указатели на D-шные объекты в строронюю библиотеку, поправить которую у тебя нет возможности. Ну, например, есть какой-нибудь генератор кода (вроде yacc-а, IDL-транслятора или ASN.1 компилятора), который генерирует декларации функций без константности. Выход тут либо в применении каких-то средств модификации сгенерированного этим инструментом кода, либо снятием константности в месте вызова.


E>При обсуждении этого use-case появилась идея сделать специальный вариант cast-а для таких случаев:

E>
E>int * p = cast(break const)const_ptr;
E>

E>чтобы такие касты были хорошо заменты в исходном коде.
+1

__>>На мой взгляд правильно если делать маршаллинг то делать его или нормально в языки или в виде библиотеке, но не с UB.


E>Я так понимаю, UB возникает только при изменении данных после снятия константности. Что, в общем-то и понятно. Если изменения данных не происходит, то нет и UB.


Угу.
Но в таком случае следует еще и предоставить вариант без UB в ущерб производительности.
Скажем:
f(cast(invariant char*)"abc");
f(cast(no ub invariant char*)"abc"); // тут будет копия и UB не будет никогда
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[11]: D1.0 и D2.0
От: . Великобритания  
Дата: 22.06.07 17:06
Оценка:
_nn_ wrote:

> f(cast(no ub invariant char*)"abc"); // тут будет копия и UB не будет никогда

А что это разве возможно, чтобы любой объект умел копироваться? А если только частный случай для строковых литералов, то
нафиг не надо.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[11]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.06.07 17:12
Оценка:
Здравствуйте, _nn_, Вы писали:

E>>Я так понимаю, UB возникает только при изменении данных после снятия константности. Что, в общем-то и понятно. Если изменения данных не происходит, то нет и UB.


__>Угу.

__>Но в таком случае следует еще и предоставить вариант без UB в ущерб производительности.
__>Скажем:
__>
__>f(cast(invariant char*)"abc");
__>f(cast(no ub invariant char*)"abc"); // тут будет копия и UB не будет никогда
__>


Все зависит от прототипа f(). Скажем, если он такой:
void f( invariant(char)[] str );

то следующий код будет корректным, т.к. строковые литералы имеют тип invariant(char)[]:
f( "abc" );

а вот код ниже будет некорректным:
char[] something = ...;
f( something ); // Error! char[] к инварианту не приводится!

Его нужно сменить на:
f( something.idup ); // Передается копия.


Если f() получает константный указать на char:
void f( const(char)[] str );

то нет проблем ни в одном из случаев:
f( "abc" ); // Инвариант неявно приводится к const.
f( something ); // char[] неявно приводится к const(char)[].

Если же нам нужно сделать копию, которую требуется передать в f(char[]) чтобы не было UB, то можно сделать тривиальный dup вместо кастинга:
f( "abc".dup );


Так что UB, имхо, можно легко избежать.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.06.07 17:17
Оценка:
Здравствуйте, ., Вы писали:

.>_nn_ wrote:


>> f(cast(no ub invariant char*)"abc"); // тут будет копия и UB не будет никогда

.>А что это разве возможно, чтобы любой объект умел копироваться? А если только частный случай для строковых литералов, то
.>нафиг не надо.

AFAIK, свойство dup есть только у векторов. При этом для вектора ссылок происходит лишь поверхностное копирование -- новый вектор со старыми ссылками внутри.

Если же речь идет о произвольном объекте, то вопрос усложняется очень серьезно.
Однако, снятие инвариантности/константности для произвольного объекта, имхо, это очень редкий случай. Ведь D-шная объектная модель ни с кем не интероперабельна, поэтому вероятностью передачи D-шного объекта в левую сторонюю библиотеку можно пренебречь. Следовательно, со снятием инвариантности/константности с произвольного D-шного объекта на практике можно и не встретиться.

А вот char[] или int[] -- совсем другое дело, ведь такими объектами можно с библиотеками на C/C++/Java/... обмениваться.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 17:21
Оценка:
Здравствуйте, ., Вы писали:

.>_nn_ wrote:


>> f(cast(no ub invariant char*)"abc"); // тут будет копия и UB не будет никогда

.>А что это разве возможно, чтобы любой объект умел копироваться? А если только частный случай для строковых литералов, то
.>нафиг не надо.

Здесь было конкретно про строки.
В любом случае "объекты" которые есть в функциях С они копируются, так что проблем с этим нет
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: D2.0: Here A Const, There A Const
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 17:24
Оценка:
Здравствуйте, eao197, Вы писали:

E>Here A Const, There A Const -- статья от Вальтера Брайта, описывающая причины добавления константности в D.


Думаю ссылку на эту страницу тоже неплохо было бы добавить.
Final Const and Invariant
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[12]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 17:26
Оценка:
Здравствуйте, eao197, Вы писали:

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


E>>>Я так понимаю, UB возникает только при изменении данных после снятия константности. Что, в общем-то и понятно. Если изменения данных не происходит, то нет и UB.


__>>Угу.

__>>Но в таком случае следует еще и предоставить вариант без UB в ущерб производительности.
__>>Скажем:
__>>
__>>f(cast(invariant char*)"abc");
__>>f(cast(no ub invariant char*)"abc"); // тут будет копия и UB не будет никогда
__>>


E>Все зависит от прототипа f(). Скажем, если он такой:

E>
E>void f( invariant(char)[] str );
E>

E>то следующий код будет корректным, т.к. строковые литералы имеют тип invariant(char)[]:
E>
E>f( "abc" );
E>

E>а вот код ниже будет некорректным:
E>
E>char[] something = ...;
E>f( something ); // Error! char[] к инварианту не приводится!
E>

E>Его нужно сменить на:
E>
E>f( something.idup ); // Передается копия.
E>


Я понимаю, что приведедния string -> invariant string не существует.
Вопрос почему?
И как тогда idup работает ?

E>Если f() получает константный указать на char:

E>
E>void f( const(char)[] str );
E>

E>то нет проблем ни в одном из случаев:
E>
E>f( "abc" ); // Инвариант неявно приводится к const.
E>f( something ); // char[] неявно приводится к const(char)[].
E>

E>Если же нам нужно сделать копию, которую требуется передать в f(char[]) чтобы не было UB, то можно сделать тривиальный dup вместо кастинга:
E>
E>f( "abc".dup );
E>


E>Так что UB, имхо, можно легко избежать.


В принципе dup это то что я и предлагал
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[13]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.06.07 17:44
Оценка: 1 (1)
Здравствуйте, _nn_, Вы писали:

__>Я понимаю, что приведедния string -> invariant string не существует.

__>Вопрос почему?
__>И как тогда idup работает ?

Потому что invariant гарантирует, что объект никогда не измениться. Если бы приведение string -> invariant string существовало, то можно было бы сделать так:
class ValueHolder {
  this( invariant(char)[] value ) {
    v_ = value;
  }
  invariant(char)[] value() { return v_; }

  private invariant(char)[] v_;
}

char[] str = "abcd";
auto v = new ValueHolder( str );
// Теперь v ожидает, что он всегда будет хранить ссылку на значение "abcd".
str ~= ", oops!";
// А на самом деле v.value теперь равен "abcd, oops!" вместо "abcd".


idup же возвращает копию, которая никогда не меняется. IIRC, кто-то в форуме digitalmars.D показал, что idup для одного значения всегда возвращает один и тот же указатель, т.е. лишнего копирования нет.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: D1.0 и D2.0
От: _nn_ www.nemerleweb.com
Дата: 22.06.07 17:52
Оценка:
Здравствуйте, eao197, Вы писали:

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


__>>Я понимаю, что приведедния string -> invariant string не существует.

__>>Вопрос почему?
__>>И как тогда idup работает ?

E>Потому что invariant гарантирует, что объект никогда не измениться. Если бы приведение string -> invariant string существовало, то можно было бы сделать так:

E>
E>class ValueHolder {
E>  this( invariant(char)[] value ) {
E>    v_ = value;
E>  }
E>  invariant(char)[] value() { return v_; }

E>  private invariant(char)[] v_;
E>}

E>char[] str = "abcd";
E>auto v = new ValueHolder( str );
E>// Теперь v ожидает, что он всегда будет хранить ссылку на значение "abcd".
E>str ~= ", oops!";
E>// А на самом деле v.value теперь равен "abcd, oops!" вместо "abcd".
E>


E>idup же возвращает копию, которая никогда не меняется. IIRC, кто-то в форуме digitalmars.D показал, что idup для одного значения всегда возвращает один и тот же указатель, т.е. лишнего копирования нет.


Вопросов нет
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[8]: D1.0 и D2.0
От: FR  
Дата: 01.07.07 03:20
Оценка:
Здравствуйте, eao197, Вы писали:


E>Я несколько раз ему это говорил и прямым текстом спрашивал, планируется ли вообще какая-нибудь пауза в развитии языка. Но мне он не отвечал. Зато он придерживается такой линии: есть типа стабильный D1.0 и для создания production кода и использования в реальных проектах нужно брать именно D1.0.


E>Его понять можно. Так же самая константность, точнее ее отсутствие -- это такой косяк, который хорошо бы исправить. И раз уж он решил добавить в язык константность, так пусть делает это раньше. Тем более, что многие из D community очень восторженно приветствуют такой ход событий и так же указывают: "мол чего народ баламутишь, есть D1.0, пользуйся им".


E>Радует, что я там не один такой, кто говорит, что пора бы уже заниматься продвижением D, а не развитием. Так что есть шансы, что к нам будут больше прислушиваться.


Кстати багфиксы вышли паралельно и для 1.x и для 2.x если и дальше так же будет, то 1.x вполне можно будет пользоватся.
Re[9]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 01.07.07 06:03
Оценка: +1
Здравствуйте, FR, Вы писали:

E>>Радует, что я там не один такой, кто говорит, что пора бы уже заниматься продвижением D, а не развитием. Так что есть шансы, что к нам будут больше прислушиваться.


FR>Кстати багфиксы вышли паралельно и для 1.x и для 2.x если и дальше так же будет, то 1.x вполне можно будет пользоватся.


Так в том-то и дело, что программирование в D1.0 будет сильно отличаться от программирования в D2.0. Поэтому при переходе с D1.0 на D2.0 придется сильно перерабатывать то, что будет написано на D1.0. И, если финальный D2.0 появится через годик-другой, то на D1.0 будет написано слишком много чтобы просто так заниматься портированием на D2.0.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: D1.0 и D2.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.07.07 22:37
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Поэтому единственный вариант это заняться разработкой идеального языка на благо всего RSDN-а


Это место уже занято .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: D1.0 и D2.0
От: Cyberax Марс  
Дата: 02.07.07 23:17
Оценка: :))) :))) :))) :)
Здравствуйте, VladD2, Вы писали:

__>>Поэтому единственный вариант это заняться разработкой идеального языка на благо всего RSDN-а

VD>Это место уже занято .
Причем Обероном.
Sapienti sat!
Re[10]: D1.0 и D2.0
От: FR  
Дата: 12.08.07 01:49
Оценка:
Здравствуйте, eao197, Вы писали:

E>Так в том-то и дело, что программирование в D1.0 будет сильно отличаться от программирования в D2.0. Поэтому при переходе с D1.0 на D2.0 придется сильно перерабатывать то, что будет написано на D1.0. И, если финальный D2.0 появится через годик-другой, то на D1.0 будет написано слишком много чтобы просто так заниматься портированием на D2.0.


D2 все интереснее становится, вот добавили практически compile time reflection: http://www.digitalmars.com/d/traits.html
Re[11]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 12.08.07 07:53
Оценка:
Здравствуйте, FR, Вы писали:

E>>Так в том-то и дело, что программирование в D1.0 будет сильно отличаться от программирования в D2.0. Поэтому при переходе с D1.0 на D2.0 придется сильно перерабатывать то, что будет написано на D1.0. И, если финальный D2.0 появится через годик-другой, то на D1.0 будет написано слишком много чтобы просто так заниматься портированием на D2.0.


FR>D2 все интереснее становится, вот добавили практически compile time reflection: http://www.digitalmars.com/d/traits.html


Там уже народ нашел несколько недочетов и неудобств. Так что можно ожидать, что со временем этот механизм traits станет еще мощнее. Да и будет переименован с __trait на что-то более "цивильное".


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: D1.0 и D2.0
От: FR  
Дата: 06.10.07 10:39
Оценка: 1 (1)
Здравствуйте, eao197, Вы писали:

D решил немного лицом к C++ повернутся http://www.digitalmars.com/d/cpp_interface.html
Re[13]: D1.0 и D2.0
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.10.07 11:06
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>D решил немного лицом к C++ повернутся http://www.digitalmars.com/d/cpp_interface.html


[:\/\/\/\/:]
Я раньше: http://www.rsdn.ru/forum/message/2683188.1.aspx
Автор: eao197
Дата: 06.10.07


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.10.07 07:35
Оценка:
Очередные вести с полей

В свежей статье Function Hijacking Mitigation Вальтер Брайт рассказал о новых подходах к разрешению перегрузки функций/методов, которые реализуются в D 2.0 (например, Overload Set поддерживаются в недавно вышедшей версии DMD 2.006).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: D1.0 и D2.0
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 19:14
Оценка:
Здравствуйте, FR, Вы писали:

FR>D2 все интереснее становится, вот добавили практически compile time reflection: http://www.digitalmars.com/d/traits.html


Ёоо!

С таким синтаксисом С++ и правда можно заткнуть за пояс. Ну, хотя бы в области шифрования исходников. Маразм крепчал.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Ой, чо с D деется-то!?
От: c-smile Канада http://terrainformatica.com
Дата: 23.10.07 03:29
Оценка: +2
Здравствуйте, eao197, Вы писали:

E>Очередные вести с полей


E>В свежей статье Function Hijacking Mitigation Вальтер Брайт рассказал о новых подходах к разрешению перегрузки функций/методов, которые реализуются в D 2.0 (например, Overload Set поддерживаются в недавно вышедшей версии DMD 2.006).


Вальтеру изменяет чувство меры... D по количеству фич превысил некий разумный предел. Честно говоря это уже новогодняя ёлка, а не язык.

Эта константность... может она конечно теоритичесмки полна но в общем-то простой C++::const вызывает недопонимание, а уж это фейрверк final, const and invariant ...

А scope(exit), scope(success) и scope(failure) вместе с try, catch and finally как-то с содроганием воспринимается ...

По моему мнению, конечно.
Re[3]: Ой, чо с D деется-то!?
От: alexeiz  
Дата: 23.10.07 04:04
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Вальтеру изменяет чувство меры... D по количеству фич превысил некий разумный предел. Честно говоря это уже новогодняя ёлка, а не язык.


CS>Эта константность... может она конечно теоритичесмки полна но в общем-то простой C++::const вызывает недопонимание, а уж это фейрверк final, const and invariant ...


CS>А scope(exit), scope(success) и scope(failure) вместе с try, catch and finally как-то с содроганием воспринимается ...


Согласен. У меня сложилось похожее впечатление. Хотя, если интересно, ты можешь сказать это Волтеру лично. Он сюда частенько заходит.
Re[3]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.10.07 05:14
Оценка:
Здравствуйте, c-smile, Вы писали:

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


E>>Очередные вести с полей


E>>В свежей статье Function Hijacking Mitigation Вальтер Брайт рассказал о новых подходах к разрешению перегрузки функций/методов, которые реализуются в D 2.0 (например, Overload Set поддерживаются в недавно вышедшей версии DMD 2.006).


CS>Вальтеру изменяет чувство меры... D по количеству фич превысил некий разумный предел. Честно говоря это уже новогодняя ёлка, а не язык.


+1
Более того, это елка, которую не перестают наряжать

CS>Эта константность... может она конечно теоритичесмки полна но в общем-то простой C++::const вызывает недопонимание, а уж это фейрверк final, const and invariant ...


Где-то месяца полтора назад, когда я еще пытался следить за обсуждениями D в news-группе digitalmars.D, Вальтер начал заводить разговор о том, что final -- это уже черезчур. Мол, как-то сложноватенько получается.

Но вообще мне вся эта бодяга с созданием все более и более лучшего языка уже надоела. Слежу за новыми релизами и анонсами, но не более того.

CS>А scope(exit), scope(success) и scope(failure) вместе с try, catch and finally как-то с содроганием воспринимается ...


CS>По моему мнению, конечно.


Твое мнение не слишком отличается от моего. Хотя scope(exit) мне лично нравился. Не нравились другие вещи: например, жесткое разделение на value и reference типы (из-за чего некоторые шаблоны представляют из себя сплошной static if).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.07 11:26
Оценка: +2
Здравствуйте, c-smile, Вы писали:

CS>Вальтеру изменяет чувство меры... D по количеству фич превысил некий разумный предел. Честно говоря это уже новогодняя ёлка, а не язык.


Это все от того, что у него изначально небыло концепции языка. Вместо этого он именно что занимается наряжением елки, т.е. добавлением фич. Когда язык проектируют под идеи, то фичи получаются сбалансированными и язык выглядящим целостно и не противоречиво. А когда фичи приклеивают к безидейному телу (главная идея Ди, как я понимаю, было создать С++ с человеческим лицом), то получается ёлка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.10.07 12:21
Оценка:
Здравствуйте, VladD2, Вы писали:

CS>>Вальтеру изменяет чувство меры... D по количеству фич превысил некий разумный предел. Честно говоря это уже новогодняя ёлка, а не язык.


VD>Это все от того, что у него изначально небыло концепции языка. Вместо этого он именно что занимается наряжением елки, т.е. добавлением фич. Когда язык проектируют под идеи, то фичи получаются сбалансированными и язык выглядящим целостно и не противоречиво. А когда фичи приклеивают к безидейному телу (главная идея Ди, как я понимаю, было создать С++ с человеческим лицом), то получается ёлка.


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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.10.07 13:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это все от того, что у него изначально небыло концепции языка. Вместо этого он именно что занимается наряжением елки, т.е. добавлением фич. Когда язык проектируют под идеи, то фичи получаются сбалансированными и язык выглядящим целостно и не противоречиво. А когда фичи приклеивают к безидейному телу (главная идея Ди, как я понимаю, было создать С++ с человеческим лицом), то получается ёлка.


Это, кстати, проблема не только конкретного компилятора, но еще и многих open source проектов.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re[5]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.07 14:51
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>По моим впечатлениям, идеи у Брайта есть и под них он свой язык и проектирует. Проблема в том, что идеи у него не кончаются и их все он пытается в язык запихнуть. Потому-то язык так еще ни разу стабильного состояния и не достиг. А все, что лично мне нужно было от D -- это стабилизации где-то на версии 1.007.


Ты меня уж извини, что я снова упомяну Немерле. Ладно?

Так вот давай сравним языки. Фактически, если отбросить работу с указателями, то Ди не имеет ничего что нельзя было бы сделать на Немерле. Причем почти всегда решение на Немерле будет красивее.

При этом все фичи Немерле были (в общем виде конечно) заложены еще при в работы над языком. Ди же подбирается к тем же "окопам" только сейчас.

На мой взгляд очевидно, что такое положение дел определяется тем, что общего видения у автора Ди не было. И то что называется Ди сейчас — это результат эволюции языка и роста знаний автора.

Возможно если он возьмется делать новый язык, ну, скажем E, то у него все плучится.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.07 14:51
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

AVK>Это, кстати, проблема не только конкретного компилятора, но еще и многих open source проектов.


Я бы сказал, что это вообще общея проблема многих проектов. Зачастую люди просто желают добра, но единой концепции у них нет (или знаний).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.10.07 15:07
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>На мой взгляд очевидно, что такое положение дел определяется тем, что общего видения у автора Ди не было. И то что называется Ди сейчас — это результат эволюции языка и роста знаний автора.


Я думаю, что видение у него было. В каждый конкретный момент времени свое . В начале он видел D, как улучшенный C++ без шаблоннов. Затем он увидел D с шаблонами, но без константности. Затем он увидел D с константностью. Затем он увидит D еще с чем-нибудь.

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

Мне, совершенно фиолетово, что Nemerle тебе кажется более стройным и красивым. Мне был нужен именно наследник C++ с возможностями C++, .NET просто как платформа идет лесом в моих текущих условиях. Посему все прелести Nemerle (реальные или кажущиеся тебе) идут вслед за .NET-ом. Но вот то, что несколько вспомогательных программок, которые я для себя на D написал мне приходилось исправлять под каждую новую версию Tango -- это для меня крест на практическом использовании языка.

VD>Возможно если он возьмется делать новый язык, ну, скажем E, то у него все плучится.


Язык E уже существует. И выглядит довольно симпатично.
А вот если Брайт начнет делать что-то вместо D, то и там может возникнуть такая же беда -- в погоне за возможностями легко забыть о настоящей цели.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ой, чо с D деется-то!?
От: c-smile Канада http://terrainformatica.com
Дата: 23.10.07 22:56
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Здравствуйте, c-smile, Вы писали:


CS>>Вальтеру изменяет чувство меры... D по количеству фич превысил некий разумный предел. Честно говоря это уже новогодняя ёлка, а не язык.


CS>>Эта константность... может она конечно теоритичесмки полна но в общем-то простой C++::const вызывает недопонимание, а уж это фейрверк final, const and invariant ...


CS>>А scope(exit), scope(success) и scope(failure) вместе с try, catch and finally как-то с содроганием воспринимается ...


A>Согласен. У меня сложилось похожее впечатление. Хотя, если интересно, ты можешь сказать это Волтеру лично. Он сюда частенько заходит.


Я ему лично это и говорил. И не раз.
Re[4]: Ой, чо с D деется-то!?
От: c-smile Канада http://terrainformatica.com
Дата: 24.10.07 05:14
Оценка:
Здравствуйте, eao197, Вы писали:

CS>>А scope(exit), scope(success) и scope(failure) вместе с try, catch and finally как-то с содроганием воспринимается ...


E>Твое мнение не слишком отличается от моего. Хотя scope(exit) мне лично нравился. Не нравились другие вещи: например, жесткое разделение на value и reference типы (из-за чего некоторые шаблоны представляют из себя сплошной static if).


Я ничего против собственно scope(exit) не имею. Само по себе наверное полезно как средство делать RAII руками.
Но проблема в том что концептуально scope(exit) ничего не дает кроме того что можно сделать в finally.
И этот scope(exit) появился в тот момент когда были другие проблемы.

Я помню что как раз перед scope(exit) D был almost there. Я бы лично в тот момент и остановился.
Re[5]: Ой, чо с D деется-то!?
От: alexeiz  
Дата: 24.10.07 06:57
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Я ему лично это и говорил. И не раз.


И что он ответил?
Re[5]: try-finally и scope(exit)
От: Пётр Седов Россия  
Дата: 24.10.07 09:13
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Но проблема в том что концептуально scope(exit) ничего не дает кроме того что можно сделать в finally.

Хоть try-finally и scope(exit) — эквивалентные механизмы, но иногда scope(exit) может быть удобнее. Сравните:
void Func1()
{
  Handle hResA = AllocResA(...);
  try
  {
    Handle hResB = AllocResB(...);
    try
    {
      Handle hResC = AllocResC(...);
      try
      {
        // использовать ресурсы A, B, C
        ...
      }
      finally
      {
        FreeResC(hResC);
      }
    }
    finally
    {
      FreeResB(hResB);
    }
  }
  finally
  {
    FreeResA(hResA);
  }
}

и:
void Func2()
{
  Handle hResA = AllocResA(...);
  scope(exit) FreeResA(hResA);

  Handle hResB = AllocResB(...);
  scope(exit) FreeResB(hResB);

  Handle hResC = AllocResC(...);
  scope(exit) FreeResC(hResC);

  // использовать ресурсы A, B, C
  ...
}

Кстати, при использовании scope(exit) легко «выключить» выделение ресурса:
void Func2()
{
  Handle hResA = AllocResA(...);
  scope(exit) FreeResA(hResA);

  //Handle hResB = AllocResB(...);
  //scope(exit) FreeResB(hResB);

  Handle hResC = AllocResC(...);
  scope(exit) FreeResC(hResC);

  // использовать ресурсы A, C
  ...
}


Это как в математике косинус и синус. Один тривиально выражается через другой, но они используются оба, так как это удобно.
Пётр Седов (ушёл с RSDN)
Re[6]: try-finally и scope(exit)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 24.10.07 10:17
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

<...примеры поскипаны...>

ПС>Это как в математике косинус и синус. Один тривиально выражается через другой, но они используются оба, так как это удобно.


Вообще-то RAII на scope-классах в D делают все это еще компактнее и удобнее.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.10.07 17:20
Оценка: +2
Здравствуйте, eao197, Вы писали:

E>Я думаю, что видение у него было. В каждый конкретный момент времени свое . В начале он видел D, как улучшенный C++ без шаблоннов. Затем он увидел D с шаблонами, но без константности. Затем он увидел D с константностью. Затем он увидит D еще с чем-нибудь.


Это все слова о том же самом, но другими словами.

E>Да, D эволюционирует вместе с его автором. И это для языка гибельно -- мощь языка вовсе не в фичах и красоте кода. Мощь -- она в реализованных на языке проектах. А проектов-то и нет, и не может их быть много, т.к. нет возможности перелопачивать код под каждое нововведение в язык, компилятор или стандартную библиотеку.


Мощь она или есть, или нет. И проекты тут не причем. У новго языка проектов нет по определению. Тот же С++ шел к своему триумфу в 2000-ом году долгие 15 лет.

E>Мне, совершенно фиолетово, что Nemerle тебе кажется более стройным и красивым. Мне был нужен именно наследник C++ с возможностями C++, .NET просто как платформа идет лесом в моих текущих условиях.


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

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

E> Посему все прелести Nemerle (реальные или кажущиеся тебе) идут вслед за .NET-ом. Но вот то, что несколько вспомогательных программок, которые я для себя на D написал мне приходилось исправлять под каждую новую версию Tango -- это для меня крест на практическом использовании языка.


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

VD>>Возможно если он возьмется делать новый язык, ну, скажем E, то у него все плучится.


E>Язык E уже существует.


Это не важно. Это образное название. Можешь назвать его Горшок.

E>А вот если Брайт начнет делать что-то вместо D, то и там может возникнуть такая же беда -- в погоне за возможностями легко забыть о настоящей цели.


Мне каежстя, что ты все же не прав. У него банально нехватало кругозора. Он из тех, кто чувствует, что что-то не так, но не знает, что именно. При этом учиться на чужом опыте он не хочет. В итоге мы имеем то что имеем.

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

Кстати, одна из проблем Ди — это то, что он пишется не на Ди, а на С++. Писался бы он на самом себе, и совместимость была ба по лучше. Вот в Немерле очень боятся разорвать обратную совместимость, так как компилятор будет не собрать. Даже менять АПИ компилятора и то страшно, ведь его уже использует Интеграция и другие утилиты.

Потом развитие на самом сбее увеличивает мативацию программиста. Он уже сам может оценить насколько новая фича востребована. Ну, и это подвигает архитектора делать язык более мощьным, ведь эта мощь упрощает развитие языка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: try-finally и scope(exit)
От: c-smile Канада http://terrainformatica.com
Дата: 24.10.07 23:07
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>
ПС>void Func2()
ПС>{
ПС>  Handle hResA = AllocResA(...);
ПС>  scope(exit) FreeResA(hResA);

ПС>  Handle hResB = AllocResB(...);
ПС>  scope(exit) FreeResB(hResB);

ПС>  Handle hResC = AllocResC(...);
ПС>  scope(exit) FreeResC(hResC);

ПС>  // использовать ресурсы A, B, C
ПС>  ...
ПС>}
ПС>


Извиняюсь, но функциональный эквивалент вышесказанного есть следующее:

void Func1()
{
  Handle hResA,hResB,hResC; 
  try
  {
     hResA = AllocResA(...);
     hResB = AllocResB(...);
     hResC = AllocResC(...);
     
     // использовать ресурсы A, B, C
     ... 
  }
  finally
  {
    FreeResA(hResA);
    FreeResB(hResB);
    FreeResC(hResC);
  }
}


Что несколько многословнее но gets job done.
Во вторых как сказал Сальватор Eao есть еще фенечка по имени auto (та которая stack based instance) — RAII и все такое.

Ну давай еще добавим on error resume next из VB, тоже в общем-то элегантное решение.
Я к тому что можно до чертиков чего напридумать но зачем лепить перекрывающиеся механизмы?
Re[8]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.10.07 05:50
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Да, D эволюционирует вместе с его автором. И это для языка гибельно -- мощь языка вовсе не в фичах и красоте кода. Мощь -- она в реализованных на языке проектах. А проектов-то и нет, и не может их быть много, т.к. нет возможности перелопачивать код под каждое нововведение в язык, компилятор или стандартную библиотеку.


VD>Мощь она или есть, или нет. И проекты тут не причем. У новго языка проектов нет по определению.


Доказательство по аналогии доказательством не является, однако: у грузовика может быть более мощный двигатель, чем у конкурентов, но успешным продуктом он может и не стать. Т.к. на успешность влияет и множество других факторов, например, надежность, потребление топлива, стоимость, усилия маркетинга и прочее. Однако, покупателей и продавцов грузовиков интересует, в первую очередь, совокупность всех этих факторов.

Аналогично и с языками программирования. Сама по себе выразительная мощь языка мало что значит для того, чтобы язык стал успешным и восстребованным. Для языка гораздо важнее наличие успешных проектов и солидная пользовательская база -- это удержит язык на плаву гораздо лучше. Сравни, например, OCaml или Haskell с Java.

Что же касается проектов для новых языков, то здесь история показывает хорошие примеры обратного:
SmallTalk: доказал свою состоятельность благодоря разработке ПО для первого персонального компьютера в Xerox;
C++: использовался в первую очередь своим автором и его коллегами для создания программ моделирования;
Oberon: ОС Oberon;
Erlang: где бы он был, если бы не AXD301?
Java: GreenProject, апплеты и server-side;
C#: как признание MS успешности Delphi и Java.

Как и любой продукт язык программирования должен быть восстребован сразу -- это дает необходимую обратную связь.

VD>Тот же С++ шел к своему триумфу в 2000-ом году долгие 15 лет.


Думаю, что триумф C++ начался, как минимум, на 7-8 лет раньше, году эдак в 1992-1993. Когда его реальными конкурентами были, разве что Ada (не объектно ориентированная даже) и Eiffel. В любом случае, в 1990-м, через четыре года после первого официального релиза C++, у C++ было гораздо больше пользователей и внедрений, чем сейчас у D.

E>>Мне, совершенно фиолетово, что Nemerle тебе кажется более стройным и красивым. Мне был нужен именно наследник C++ с возможностями C++, .NET просто как платформа идет лесом в моих текущих условиях.


VD>Дык я все конечно понимаю. Вот только это не оправдывает создателей Ди. Они могли сделать Скаланемерле с нэйтив кодогенератором, если конечно у них были бы нужные знания.


Попробуй обратить этот аргумент на себя: вместо создания R# ты мог бы заняться Немерле.ru раньше поляков.

VD>Ты уж извини, но вспомогательные то программки точно можно писать на базе дотнета или явы. Так что ты сам кузнец своего счасться.


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

E>>А вот если Брайт начнет делать что-то вместо D, то и там может возникнуть такая же беда -- в погоне за возможностями легко забыть о настоящей цели.


VD>Мне каежстя, что ты все же не прав. У него банально нехватало кругозора. Он из тех, кто чувствует, что что-то не так, но не знает, что именно. При этом учиться на чужом опыте он не хочет. В итоге мы имеем то что имеем.


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


К сожалению, не правым я оказываюсь гораздо чаще, чем хотелось бы. Но в данном конкретном случае я не согласен с твоей точкой зрения. Потому что Брайт создавал "правильный" C++. Для этого не нужно было иметь широкий кругозор, достаточно было более взвешено подойти к выбору того, что и так лежит на поверхности. В D был включен Design By Contract, включены unit-тесты как часть языка, сборщик мусора, делегаты и ленивые аргументы, в обработку исключений добавлено finally. Все эти возможности были опробованны во множестве языков до D. Они уже доказали свою состоятельность и здесь не было изобретения никаких велосипедов. Все это было достаточно хорошо соеденено в одном языке (да к тому же сохранившем основные черты C/C++).

Вот здесь бы дать этот инструмент разработчикам. Хотя бы в том виде, в котором он был, как сказал c-smile, до scope(exit). Ну или хотя бы в виде версии 1.000.

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

Так что я считаю, что проблема D не в узости кругозора его автора, а в отсутствии у автора чувства меры.

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


VD>Потом развитие на самом сбее увеличивает мативацию программиста. Он уже сам может оценить насколько новая фича востребована. Ну, и это подвигает архитектора делать язык более мощьным, ведь эта мощь упрощает развитие языка.


Для меня одной из проблем Nemerle является то, что он базируется на .NET. Для тебя лично это проблема?
Обе реализации D (DMD и GDC) используют готовую C/C++ базу (DMC и GCC) для кодогенерации. Отказ от этой базы остановил бы и развитие D и его перенос на другие платформы.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.10.07 09:59
Оценка:
Здравствуйте, eao197, Вы писали:

E>Доказательство по аналогии доказательством не является, однако: у грузовика может быть более мощный двигатель, чем у конкурентов, но успешным продуктом он может и не стать. Т.к. на успешность влияет и множество других факторов, например, надежность, потребление топлива, стоимость, усилия маркетинга и прочее. Однако, покупателей и продавцов грузовиков интересует, в первую очередь, совокупность всех этих факторов.


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

E>Аналогично и с языками программирования. Сама по себе выразительная мощь языка мало что значит для того, чтобы язык стал успешным и восстребованным. Для языка гораздо важнее наличие успешных проектов и солидная пользовательская база -- это удержит язык на плаву гораздо лучше. Сравни, например, OCaml или Haskell с Java.


Я не знаю кому там важны проекты. Мне вот нужен удобный язык, стабильный компилятор, поддержка IDE, документация и хоть какое-то комьюники в котором можно задать вопрос по непонятным вопросом или просто поделитьс мнением. А вот киллер-апликешонов мне не надо.

Вот на том же Шарпе не так много написано, но все используют его для собственны мало известных приложений. И в ус не дуют.

E>Что же касается проектов для новых языков, то здесь история показывает хорошие примеры обратного:

E>SmallTalk: доказал свою состоятельность благодоря разработке ПО для первого персонального компьютера в Xerox;
E>C++: использовался в первую очередь своим автором и его коллегами для создания программ моделирования;
E>Oberon: ОС Oberon;
E>Erlang: где бы он был, если бы не AXD301?
E>Java: GreenProject, апплеты и server-side;
E>C#: как признание MS успешности Delphi и Java.

Последнее вообще не понял. Но твои утверждения не сходятся с твоими же предпосылками. Oberon и SmallTalk — это провальные проекты. Кроме авторов ими пользуются еще горста маньяков. И так продолжается уже десятки лет. Так что наличие "серьезного" приложени не гарантирует успха.

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

Так что наличие приложения — это такая отмазкак от тех кто хочет использовать его отсуствие в качестве отмазки чтобы не пробовать...

E>Как и любой продукт язык программирования должен быть восстребован сразу -- это дает необходимую обратную связь.


Да язык то востребован. Вот толко есть еще куча проблем. Сеогодня только совсем уж старперы будут работать без IDE. Потом важна такая эфимерная вещь как гарантии большой конторы. Плюс кому-то платформы могут не нравиться. Одному нэйтив подавай. Другому дотнет. Третьему яву... Ну, а если язык является новогодней елкой и у него нет всего этого, то и говорить не о чем. Но к сожаелению даже гармонично спроектированные языки пробиться в мэйнстрим не могут по перечисленным причинам.

VD>>Тот же С++ шел к своему триумфу в 2000-ом году долгие 15 лет.


E>Думаю, что триумф C++ начался, как минимум, на 7-8 лет раньше, году эдак в 1992-1993.


Акстись. Тогда он был ни кем и звать его было никак. Его тогда только пробовали энтузиасты. Просто тогда ты был молодым энтузиастом. А теперь ты стал старым, умудренным опытом консерватором. Вот и все.

E> Когда его реальными конкурентами были, разве что Ada (не объектно ориентированная даже) и Eiffel. В любом случае, в 1990-м, через четыре года после первого официального релиза C++, у C++ было гораздо больше пользователей и внедрений, чем сейчас у D.


Реальным конкуренто могда был С. Он и занимал основное пространство. Ну, еще может Обж.Паскаль что-то стоил...

E>Попробуй обратить этот аргумент на себя: вместо создания R# ты мог бы заняться Немерле.ru раньше поляков.


Дык для этого нужно было иметь их опыт. К тому же я был фактически один. Сейчас бы я может и осилил пдобный проект. Но сейчас уже есть поляки и их проект. Я не гордый.

E>Ты, когда знакомишься с новым языком, пишешь на нем QuickSort.


В том числе.

E>Я в этом случае делаю на новом для себя языке необходимые мне в работе маленькие инструменты. Так лучше видно, ложится ли новый язык мне в руку или нет.


Я тоже. И тут мы опять возвращаемся к мысли, что платформа в таком раскладе ничегго не значит.

E>К сожалению, не правым я оказываюсь гораздо чаще, чем хотелось бы. Но в данном конкретном случае я не согласен с твоей точкой зрения. Потому что Брайт создавал "правильный" C++. Для этого не нужно было иметь широкий кругозор, достаточно было более взвешено подойти к выбору того, что и так лежит на поверхности.


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

E> В D был включен Design By Contract, включены unit-тесты как часть языка, сборщик мусора, делегаты и ленивые аргументы, в обработку исключений добавлено finally.


Ага. Это называется — свалка. Вот в язык Немерле не включены: Design By Contract, unit-тесты как часть языка и ленивые аргументы, но включены продуманные макросы на базе которых все это реализовано в лучшем виде.

Если бы Ди был редизайном С++, то все было бы сильно лучше и проще. Но это не так.

E> Все эти возможности были опробованны во множестве языков до D. Они уже доказали свою состоятельность и здесь не было изобретения никаких велосипедов. Все это было достаточно хорошо соеденено в одном языке (да к тому же сохранившем основные черты C/C++).


Ага. Но в Ди еще были превнесены недомакросы на строках, недомакросы на базе статик ифов и т.п. В общем, было превнесено что-то непродуманное на чем казалось бы и нужно было бы реализовывать все эти "Design By Contract, unit-тесты как часть языка и ленивые аргументы".

E>Вот здесь бы дать этот инструмент разработчикам. Хотя бы в том виде, в котором он был, как сказал c-smile, до scope(exit). Ну или хотя бы в виде версии 1.000.


Но это уже не был С++. Это был другой язык со своими решениями. И народ бы его уже не принял бы. Народ разумно спросил, а что мы можем на Ди, что не могли на С++? И в Ди начали включать все то чего не было в С++. Результат на лицо.

E>Так что я считаю, что проблема D не в узости кругозора его автора, а в отсутствии у автора чувства меры.


Ну, пример ты знашь. Он покрывает все фичи Ди за исключением ансэйфа (указателей и т.е.). При этом стабилен и не нуждается в широком добавлении фич. В тобщем, о то о чем мечтал автор Ди но так пока что и не смог этого достичь.

Желаение автор Ди понятны. Но желания эти не подкреплены базовыми знаниями, увением соеденить фичи в гормоничное решение и кончно отсуствием умения остановиться.

Но поледнее — это всего лишь одна из проблем.

E>Для меня одной из проблем Nemerle является то, что он базируется на .NET. Для тебя лично это проблема?


Для меня это приемущество. Те кто не любит МС поьзуются Моно. Он тоже довольно широко распространнен так как написан на смеси C и C#.

Не нравится Немерле? Есть Скала. По тормознее. Мкросов нет. Но язык тоже достойный. До его концептуальной целостности Ди еще лет 10 расти.

E>Обе реализации D (DMD и GDC) используют готовую C/C++ базу (DMC и GCC) для кодогенерации. Отказ от этой базы остановил бы и развитие D и его перенос на другие платформы.


Это не подтверждается реальным опытом. Языки созданные методом бутсртипа опередили Ди на много лет. Ди еще много-много лет будет мечтать о том, что есть в этих языках.

Scala, Nemerle и F# — все бутсрипятся. Отсуствие "готовой C/C++ базы (DMC и GCC) для кодогенерации" им никак не помешало. Так же и автор Ди мог бы взять только базовый код для генерации машинного кода (вместо аналогов для явы и дотнета), а сам компилятор написать на самом же Ди. Но он видимо не верит в свой язык. А это провал еде до старта.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.10.07 10:14
Оценка: 1 (1) +1
Здравствуйте, VladD2, Вы писали:

VD>>>Тот же С++ шел к своему триумфу в 2000-ом году долгие 15 лет.


E>>Думаю, что триумф C++ начался, как минимум, на 7-8 лет раньше, году эдак в 1992-1993.


VD>Акстись. Тогда он был ни кем и звать его было никак. Его тогда только пробовали энтузиасты.


Извини, после таких аргументов продолжать разговор нет ни возможности, ни желания.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.10.07 10:40
Оценка:
Здравствуйте, eao197, Вы писали:

E>>>Думаю, что триумф C++ начался, как минимум, на 7-8 лет раньше, году эдак в 1992-1993.


VD>>Акстись. Тогда он был ни кем и звать его было никак. Его тогда только пробовали энтузиасты.


E>Извини, после таких аргументов продолжать разговор нет ни возможности, ни желания.


Странная позиция. Ты дешь безопеляциогные заявления и потом фыркаешь. Ну, да мне тоже есть на что время таратить. Все равно говорить тут не о чем. Даже те кто рассматривал Ди как "мой следующий язык" начали понимать, то с ним не все в порядке. Это уже сомо по себе многое значит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.10.07 10:45
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>>>Думаю, что триумф C++ начался, как минимум, на 7-8 лет раньше, году эдак в 1992-1993.


VD>>>Акстись. Тогда он был ни кем и звать его было никак. Его тогда только пробовали энтузиасты.


E>>Извини, после таких аргументов продолжать разговор нет ни возможности, ни желания.


VD>Странная позиция. Ты дешь безопеляциогные заявления и потом фыркаешь.


Да, ты прав -- в споре самое главное обосрать собеседника и приписать ему собственные грехи. Жалко, что в данном случае ты меня опередил и уже сделал это.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Ой, чо с D деется-то!?
От: VoidEx  
Дата: 25.10.07 10:57
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Не нравится Немерле? Есть Скала. По тормознее. Мкросов нет. Но язык тоже достойный. До его концептуальной целостности Ди еще лет 10 расти.

Я бы даже сказал, никогда не дорасти. Концептуальная целостность в процессе обычно только разваливается, особенно когда пытаются впихнуть всякие фичи, которые эту целостность как раз и нарушают (иначе эти фичи скорее всего были бы заложены изначально).
Re[12]: Ой, чо с D деется-то!?
От: VoidEx  
Дата: 25.10.07 11:05
Оценка: 49 (4) +2
Здравствуйте, VladD2, Вы писали:

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


E>>>>Думаю, что триумф C++ начался, как минимум, на 7-8 лет раньше, году эдак в 1992-1993.


VD>>>Акстись. Тогда он был ни кем и звать его было никак. Его тогда только пробовали энтузиасты.


E>>Извини, после таких аргументов продолжать разговор нет ни возможности, ни желания.


VD>Странная позиция. Ты дешь безопеляциогные заявления и потом фыркаешь. Ну, да мне тоже есть на что время таратить. Все равно говорить тут не о чем. Даже те кто рассматривал Ди как "мой следующий язык" начали понимать, то с ним не все в порядке. Это уже сомо по себе многое значит.


Дизайн и эволюция Си++, стр. 174
"Примерное число пользователей Си++ (октябрь 1991г.): 400000"
стр. 175:
"Для подтверждения того, что они занижены, я могу сослаться на публичное заявление компании Borland — крупнейшего поставщика компилятора C++ — о том, что к октябрю 1991г. ими было продано 500 тыс. копий компилятора"
далее на той же странице:
"Опубликованные цифры говорят, что уже к концу 1992г. было продано свыше 1 млн. копий компилятора C++"
Вот уж точно никто и ничто.
Re[13]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.10.07 13:18
Оценка: -2
Здравствуйте, VoidEx, Вы писали:

VE>"Для подтверждения того, что они занижены, я могу сослаться на публичное заявление компании Borland — крупнейшего поставщика компилятора C++ — о том, что к октябрю 1991г. ими было продано 500 тыс. копий компилятора"

VE>далее на той же странице:
VE>"Опубликованные цифры говорят, что уже к концу 1992г. было продано свыше 1 млн. копий компилятора C++"
VE>Вот уж точно никто и ничто.

Ну, и какое отношение заявления о продажах имеют к популяронсти языка?

Если даже поверить борланду, то это один фиг ничего не значит. BC++ по началу использовался для компиляции С-кода. Да и С++-компилятором его в те времена было назвать можно толко с натяжкой. Он из стандарта добрую половину не реализовывал.

Популярность, по-моему, это когда о языке начинают говорить везде и повсеместно и большие конторы начинают его выпуск и использование.

Напомните мне когда там появился компилятор С++ у МС или Интела?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.10.07 14:01
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VE>>"Для подтверждения того, что они занижены, я могу сослаться на публичное заявление компании Borland — крупнейшего поставщика компилятора C++ — о том, что к октябрю 1991г. ими было продано 500 тыс. копий компилятора"

VE>>далее на той же странице:
VE>>"Опубликованные цифры говорят, что уже к концу 1992г. было продано свыше 1 млн. копий компилятора C++"
VE>>Вот уж точно никто и ничто.

VD>Ну, и какое отношение заявления о продажах имеют к популяронсти языка?


Самое прямое.

VD>Если даже поверить борланду, то это один фиг ничего не значит. BC++ по началу использовался для компиляции С-кода. Да и С++-компилятором его в те времена было назвать можно толко с натяжкой. Он из стандарта добрую половину не реализовывал.


Тогда стандарта не было, вообще.

VD>Популярность, по-моему, это когда о языке начинают говорить везде и повсеместно и большие конторы начинают его выпуск и использование.


VD>Напомните мне когда там появился компилятор С++ у МС или Интела?


http://en.wikipedia.org/wiki/Visual_C%2B%2B#History

Visual C++ 1.0, which included MFC 2.0, was the first version of Visual C++, released in 1992, available in both 16-bit and 32-bit versions.


Кстати, изначально C++ использовался на Unix-ах и самые продвинутые компиляторы C++ были вовсе не на PC, а на Unix-овых рабочих станциях.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.10.07 14:17
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>http://en.wikipedia.org/wiki/Visual_C%2B%2B#History

E>

E>Visual C++ 1.0, which included MFC 2.0, was the first version of Visual C++, released in 1992, available in both 16-bit and 32-bit versions.


E>Кстати, изначально C++ использовался на Unix-ах и самые продвинутые компиляторы C++ были вовсе не на PC, а на Unix-овых рабочих станциях.


Вот теперь подумай, исходя из этих данных, когда С++ рельно был в пике слав (испытал триумф). Это в лучшем случае 1995-ый, а то и 1998-ой.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Ой, чо с D деется-то!?
От: VoidEx  
Дата: 25.10.07 14:22
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Ну, и какое отношение заявления о продажах имеют к популяронсти языка?

Да никакого. Близко даже не стояло. Может, люди бинарники компилера на обоях печатали...

VD>Если даже поверить борланду, то это один фиг ничего не значит. BC++ по началу использовался для компиляции С-кода. Да и С++-компилятором его в те времена было назвать можно толко с натяжкой. Он из стандарта добрую половину не реализовывал.

Значит таки не бинарники печатали, а Си компилировали. Забавно.
Хотя, я вот тоже мобилу купил, чтоб с КПК в интернет выходить.

VD>Популярность, по-моему, это когда о языке начинают говорить везде и повсеместно и большие конторы начинают его выпуск и использование.

С таким определеним я не знаю ни одного ЯПа, бывшего хоть когда-то популярным.
А если потом ввести новое понятие больших компаний (типа "по-моему, большая компания — со штатом всех людей и расположенная везде"), тогда можно сразу сворачивать дискуссию.
Лучше все-таки пользоваться общепринятыми понятиями, чтобы не было потом такого, что у одного "яблоко" — это "яблоко", а у другого "апельсин", а они спорили непонятно о чем.
Даже заглянул в словарь:
"Популярный — Пользующийся большой известностью, широким признанием."
Хотя тут и не четкая формулировка, но явно не "везде/повсеместно".

VD>Напомните мне когда там появился компилятор С++ у МС или Интела?

А уж если вспомнить, когда он стал поддерживать весь стандарт Си++! Если память не изменяет, то в 2015-м. Почти вроде сделали, а там бац, новый стандарт
Re[16]: Ой, чо с D деется-то!?
От: VoidEx  
Дата: 25.10.07 14:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот теперь подумай, исходя из этих данных, когда С++ рельно был в пике слав (испытал триумф). Это в лучшем случае 1995-ый, а то и 1998-ой.

Я тут про "яблоко" и "апельсин" не зря сказал.
Причем тут "пик слав"? Тебе, так сказать, про Фому, а ты про Ерему.
Пик и начало — вещи разные. А уж "нигде и ничто" — это вообще резкое зявление.
Re[16]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.10.07 14:33
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>http://en.wikipedia.org/wiki/Visual_C%2B%2B#History

E>>

E>>Visual C++ 1.0, which included MFC 2.0, was the first version of Visual C++, released in 1992, available in both 16-bit and 32-bit versions.


E>>Кстати, изначально C++ использовался на Unix-ах и самые продвинутые компиляторы C++ были вовсе не на PC, а на Unix-овых рабочих станциях.


VD>Вот теперь подумай, исходя из этих данных, когда С++ рельно был в пике слав (испытал триумф). Это в лучшем случае 1995-ый, а то и 1998-ой.


С середины 90-х в мире начался медленный закат C++ -- его начали вытеснять такие языки, как Visual Basic и Java, а в дальнейшем и C#.

В 95-м Sun во всю пропагандировал Java как "правильно сделанный C++". Если бы C++ не был бы тогда на пике славы (как ты выражаешься), вряд ли стал противопоставлять Java какому-то там C++у.

Да и то, что вечно опаздывающая со стартом MS в 92-м выпустила C++ный компилятор говорит само за себя.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Ой, чо с D деется-то!?
От: c-smile Канада http://terrainformatica.com
Дата: 26.10.07 02:12
Оценка: :))
Здравствуйте, alexeiz, Вы писали:

A>Здравствуйте, c-smile, Вы писали:


CS>>Я ему лично это и говорил. И не раз.


A>И что он ответил?


Он было уже уговорился но тут подкатил тезка по фамилии Александреску и почалась сеча по новой...
Re[7]: try-finally и scope(exit)
От: Пётр Седов Россия  
Дата: 26.10.07 13:26
Оценка:
Здравствуйте, eao197, Вы писали:
E>Вообще-то RAII на scope-классах в D делают все это еще компактнее и удобнее.
Если классы одноразовые, то не компактнее и не удобнее. Я не люблю захламлять программу одноразовыми мелкими классами-обёртками. Сравните:
// RAII подход

class ResA // используется только в функции Func_RAII
{
  Handle m_Handle;

  this(...)
  {
    m_Handle = AllocResA(...);
  }

  ~this()
  {
    FreeResA(m_Handle);
  }
}

class ResB // используется только в функции Func_RAII
{
  Handle m_Handle;

  this(...)
  {
    m_Handle = AllocResB(...);
  }

  ~this()
  {
    FreeResB(m_Handle);
  }
}

class ResC // используется только в функции Func_RAII
{
  Handle m_Handle;

  this(...)
  {
    m_Handle = AllocResC(...);
  }

  ~this()
  {
    FreeResC(m_Handle);
  }
}

void Func_RAII(...)
{
  scope A = new ResA(...);
  scope B = new ResB(...);
  scope C = new ResC(...);
  // использовать ресурсы A, B, C
  ...
}

и:
// scope(exit) подход

void Func_ScopeExit(...)
{
  Handle hResA = AllocResA(...);
  scope(exit) FreeResA(hResA);

  Handle hResB = AllocResB(...);
  scope(exit) FreeResB(hResB);

  Handle hResC = AllocResC(...);
  scope(exit) FreeResC(hResC);

  // использовать ресурсы A, B, C
  ...
}

Bright пишет в статье «Exception Safe Programming»:

The RAII solution often requires the creation of an extra dummy class, which is both a lot of lines of code to write and a lot of clutter obscuring the control flow logic. This is worthwhile to manage resources that must be cleaned up and that appear more than once in a program, but it is clutter when it only needs to be done once.

The RAII approach involves the creation of dummy classes, and the obtuseness of moving some of the logic out of the abc() function.

Иногда RAII смотрится искусственно. Например, как назвать RAII-класс в следующих случаях?
glPushMatrix();
try
{
  glTranslated(...);
  glRotated(...);
  ...
}
finally
{
  glPopMatrix();
}

ListBox.DisableRepaint(); // WM_SETREDRAW wParam = FALSE
try
{
  for (100 раз)
  {
    ListBox.AddItem(...);
  }
}
finally
{
  ListBox.EnableRepaint(); // WM_SETREDRAW wParam = TRUE
}
Пётр Седов (ушёл с RSDN)
Re[8]: try-finally и scope(exit)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.10.07 13:48
Оценка: +1
Здравствуйте, Пётр Седов, Вы писали:

ПС>Здравствуйте, eao197, Вы писали:

E>>Вообще-то RAII на scope-классах в D делают все это еще компактнее и удобнее.
ПС>Если классы одноразовые, то не компактнее и не удобнее. Я не люблю захламлять программу одноразовыми мелкими классами-обёртками.

Ну дык если одноразовые, тогда может быть. Редко, правда, встречаются такие одноразовые.

Однако

ПС>Сравните:

ПС>
ПС>void Func_RAII(...)
ПС>{
ПС>  scope A = new ResA(...);
ПС>  scope B = new ResB(...);
ПС>  scope C = new ResC(...);
ПС>  // использовать ресурсы A, B, C
ПС>  ...
ПС>}
ПС>

ПС>и:
ПС>
ПС>// scope(exit) подход

ПС>void Func_ScopeExit(...)
ПС>{
ПС>  Handle hResA = AllocResA(...);
ПС>  scope(exit) FreeResA(hResA);

ПС>  Handle hResB = AllocResB(...);
ПС>  scope(exit) FreeResB(hResB);

ПС>  Handle hResC = AllocResC(...);
ПС>  scope(exit) FreeResC(hResC);

ПС>  // использовать ресурсы A, B, C
ПС>  ...
ПС>}
ПС>


Первую форму (со scope-классами) я предпочту второй. Поскольку в первой логика Func не захломляется низкоуровневыми деталями захвата/освобождения ресурсов. Сколько дополнительных определений нужно для Func -- это второй вопрос, он менее важен, чем компактность и прозрачность самой Func.

ПС>Иногда RAII смотрится искусственно. Например, как назвать RAII-класс в следующих случаях?

ПС>
ПС>glPushMatrix();
ПС>try
ПС>{
ПС>  glTranslated(...);
ПС>  glRotated(...);
ПС>  ...
ПС>}
ПС>finally
ПС>{
ПС>  glPopMatrix();
ПС>}
ПС>

ПС>
ПС>ListBox.DisableRepaint(); // WM_SETREDRAW wParam = FALSE
ПС>try
ПС>{
ПС>  for (100 раз)
ПС>  {
ПС>    ListBox.AddItem(...);
ПС>  }
ПС>}
ПС>finally
ПС>{
ПС>  ListBox.EnableRepaint(); // WM_SETREDRAW wParam = TRUE
ПС>}
ПС>


Это может решаться совсем другим способом, благо в D есть для этого соответствующие средства:
void soSomethingWithGl()
  {
    void pushAndDo( lazy void block ) {
      glPushMatrix();
      try { block; }
      finaly { glPopMatrix(); }
    }

    pushAndDo( {
      glTranslated(...);
      glRotated(...);
    } );
  }


Со временем, такие вот методы pushAndDo будут образовывать целые модули вспомогательных функций для повторного использования. И scope-классы здесь, опять же, смогут работать не менее успешно.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: try-finally и scope(exit)
От: Пётр Седов Россия  
Дата: 26.10.07 16:52
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Извиняюсь, но функциональный эквивалент вышесказанного есть следующее:

CS>…
CS>Что несколько многословнее но gets job done.
А что если ресурсы иерархические? Сравните:
void Func_TryFinally(...)
{
  Handle hResA = AllocResA(...);
  try
  {
    int CountA = GetCountA(hResA);
    for (int IndexA = 0; IndexA < CountA; IndexA++)
    {
      Handle hResB = AllocResB(... hResA ... IndexA ...);
      try
      {
        int CountB = GetCountB(hResB);
        for (int IndexB = 0; IndexB < CountB; IndexB++)
        {
          Handle hResC = AllocResC(... hResB ... IndexB ...);
          try
          {
            // использовать ресурс C
            ...
          }
          finally
          {
            FreeResC(hResC);
          }
        }
      }
      finally
      {
        FreeResB(hResB);
      }
    }
  }
  finally
  {
    FreeResA(hResA);
  }
}

и:
void Func_ScopeExit(...)
{
  Handle hResA = AllocResA(...);
  scope(exit) FreeResA(hResA);
  int CountA = GetCountA(hResA);
  for (int IndexA = 0; IndexA < CountA; IndexA++)
  {
    Handle hResB = AllocResB(... hResA ... IndexA ...);
    scope(exit) FreeResB(hResB);
    int CountB = GetCountB(hResB);
    for (int IndexB = 0; IndexB < CountB; IndexB++)
    {
      Handle hResC = AllocResC(... hResB ... IndexB ...);
      scope(exit) FreeResC(hResC);
      // использовать ресурс C
      ...
    }
  }
}

Такой код вполне может возникнуть при работе с каким-нибудь MSXML.

CS>Во вторых как сказал Сальватор Eao есть еще фенечка по имени auto (та которая stack based instance) — RAII и все такое.

Имеется в виду eao197? Я ему уже ответил — RAII не всегда удобен, иногда scope(exit) удобнее (по-моему).

CS>Ну давай еще добавим on error resume next из VB, тоже в общем-то элегантное решение.

С этой штукой не знаком .

CS>Я к тому что можно до чертиков чего напридумать но зачем лепить перекрывающиеся механизмы?

Эти механизмы технически эквивалентны, но идейно различаются:
* RAII — для многоразовых ресурсов.
* scope(exit) — для одноразовых ресурсов.
* try-finally — для временной смены состояния (например, glPushMatrix/glPopMatrix).
По-моему, все три механизма имеют право на жизнь. Кстати, Bright считает try-finally избыточным. В статье «Exception Safe Programming» он пишет:

When to use RAII, try-catch-finally, and Scope
RAII is for managing resources, which is different from managing state or transactions. try-catch is still needed, as scope doesn't catch exceptions. It's try-finally that becomes redundant.

Пётр Седов (ушёл с RSDN)
Re[8]: try-finally и scope(exit)
От: c-smile Канада http://terrainformatica.com
Дата: 26.10.07 21:03
Оценка: 12 (2) +2
Здравствуйте, Пётр Седов, Вы писали:

CS>>Извиняюсь, но функциональный эквивалент вышесказанного есть следующее:

CS>>…
CS>>Что несколько многословнее но gets job done.
ПС>А что если ресурсы иерархические? Сравните:

Я просто показал что приведенный тобой код для finally и scope() не эквивалентен.

ПС>Такой код вполне может возникнуть при работе с каким-нибудь MSXML.


У MSXML каждый node это refcounted object. В D (как и в любом другом GC environment) .
для работы с ним нужно нечто типа smart pointer т.е. RAII. Любой другой способ включая
scope(exit) это источник ошибок.

CS>>Во вторых как сказал Сальватор Eao есть еще фенечка по имени auto (та которая stack based instance) — RAII и все такое.

ПС>Имеется в виду eao197? Я ему уже ответил — RAII не всегда удобен, иногда scope(exit) удобнее (по-моему).

scope(exit) сделан Вальтером в ответ на претензии о том что для stack based struct нет ctor/dtor.
Т.е. это паллиатив а не решение. stack based объекты в C++ это мощная концепция и scope(exit) решает проблему только частично.


CS>>Ну давай еще добавим on error resume next из VB, тоже в общем-то элегантное решение.

ПС>С этой штукой не знаком .

CS>>Я к тому что можно до чертиков чего напридумать но зачем лепить перекрывающиеся механизмы?

ПС>Эти механизмы технически эквивалентны, но идейно различаются:
ПС>* RAII — для многоразовых ресурсов.
ПС>* scope(exit) — для одноразовых ресурсов.
ПС>* try-finally — для временной смены состояния (например, glPushMatrix/glPopMatrix).
ПС>По-моему, все три механизма имеют право на жизнь. Кстати, Bright считает try-finally избыточным. В статье «Exception Safe Programming» он пишет:
ПС>

ПС>When to use RAII, try-catch-finally, and Scope
ПС>RAII is for managing resources, which is different from managing state or transactions. try-catch is still needed, as scope doesn't catch exceptions. It's try-finally that becomes redundant.


Проблема со scope() состоит в том что scope делает недетерменированным (в о всяком случае явно) последовательность фрагментов
кода которые будут выполняться при выходе из блока.

И опять же если бы у struct были ctor/dtor то scope(exit) не был бы нужен. Соответсвенно и finally не нужен был тоже.
Вальтер всеми ногами упирается в то что struct ctor/dtor это зло и при этом плодит целый фонтан решений которые половинчаты и только засоряют всю картину.
Re[8]: Ой, чо с D деется-то!?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.10.07 22:24
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Потом развитие на самом сбее увеличивает мативацию программиста. Он уже сам может оценить насколько новая фича востребована.


Одно но — может так оказаться, что в итоге получится язык для написания компиляторов.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[8]: try-finally и scope(exit)
От: alexeiz  
Дата: 27.10.07 10:09
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Здравствуйте, eao197, Вы писали:

E>>Вообще-то RAII на scope-классах в D делают все это еще компактнее и удобнее.
ПС>Если классы одноразовые, то не компактнее и не удобнее. Я не люблю захламлять программу одноразовыми мелкими классами-обёртками. Сравните:
...

ПС>Bright пишет в статье «Exception Safe Programming»:

ПС>

ПС>The RAII solution often requires the creation of an extra dummy class, which is both a lot of lines of code to write and a lot of clutter obscuring the control flow logic. This is worthwhile to manage resources that must be cleaned up and that appear more than once in a program, but it is clutter when it only needs to be done once.
ПС>…
ПС>The RAII approach involves the creation of dummy classes, and the obtuseness of moving some of the logic out of the abc() function.


Про ScopeGuard слышал? http://www.ddj.com/cpp/184403758. Walter про него тоже не знал.
Re[9]: try-finally и scope(exit)
От: alexeiz  
Дата: 27.10.07 20:01
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>И опять же если бы у struct были ctor/dtor то scope(exit) не был бы нужен. Соответсвенно и finally не нужен был тоже.

CS>Вальтер всеми ногами упирается в то что struct ctor/dtor это зло и при этом плодит целый фонтан решений которые половинчаты и только засоряют всю картину.

Хм, интересно. Я про это не знал. Где-нибудь про его мотивацию почитать можно? И почему бы не использовать class, у которых есть деструкторы, вместо struct для выполнения соответствующих операций при выходе из scope'а?
Re[10]: try-finally и scope(exit)
От: c-smile Канада http://terrainformatica.com
Дата: 27.10.07 21:29
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

A>Здравствуйте, c-smile, Вы писали:


CS>>И опять же если бы у struct были ctor/dtor то scope(exit) не был бы нужен. Соответсвенно и finally не нужен был тоже.

CS>>Вальтер всеми ногами упирается в то что struct ctor/dtor это зло и при этом плодит целый фонтан решений которые половинчаты и только засоряют всю картину.

A>Хм, интересно. Я про это не знал. Где-нибудь про его мотивацию почитать можно? И почему бы не использовать class, у которых есть деструкторы, вместо struct для выполнения соответствующих операций при выходе из scope'а?


class wrapper {}
auto wrapper w = new wrapper();


Обрати внимание на new.

в c++ можно перекрывая оператор= сделать managed access к области памяти (shared_ptr например),
в D этого в принципе не сделать.
auto instances это просто еще один способ вызвать процедуру на выходе из блока (dtor). И все.

C++ в этом случае мощнее.
Re[9]: try-finally и scope(exit)
От: Пётр Седов Россия  
Дата: 27.10.07 21:54
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Про ScopeGuard слышал? http://www.ddj.com/cpp/184403758.

ScopeGuard — это слабое подобие D-шных scope(failure) и scope(exit). Например, в конце этой статьи Alexandrescu и Marginean приводят следующий C++-код:

{
    FILE* topSecret = fopen("cia.txt");
    ON_BLOCK_EXIT(std::fclose, topSecret);
    ... use topSecret ...
} // topSecret automagically closed

ON_BLOCK_EXIT says: "I want this action to be performed when the current block exists."

Аналогичный код на D элементарно пишется с помощью scope(exit), без шаблонных выкрутасов и макросов.

A>Walter про него тоже не знал.

Вряд ли. Насколько я знаю, Alexandrescu и Bright тесно общаются и Alexandrescu влияет на D. Также, Bright в конце статьи «Exception Safe Programming» ссылается первым делом на указанную Вами статью:

References:
1. Generic&lt;Programming&gt;: Change the Way You Write Exception-Safe Code Forever by Andrei Alexandrescu and Petru Marginean

Пётр Седов (ушёл с RSDN)
Re[10]: try-finally и scope(exit)
От: VoidEx  
Дата: 27.10.07 23:20
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>ScopeGuard — это слабое подобие D-шных scope(failure) и scope(exit). Например, в конце этой статьи Alexandrescu и Marginean приводят следующий C++-код:

ПС>

ПС>

ПС>{
ПС>    FILE* topSecret = fopen("cia.txt");
ПС>    ON_BLOCK_EXIT(std::fclose, topSecret);
ПС>    ... use topSecret ...
ПС>} // topSecret automagically closed
ПС>

ПС>ON_BLOCK_EXIT says: "I want this action to be performed when the current block exists."

ПС>Аналогичный код на D элементарно пишется с помощью scope(exit), без шаблонных выкрутасов и макросов.

Эм, данный пример только эквивалентность показывает, а не "слабое подобие".
Re[10]: try-finally и scope(exit)
От: alexeiz  
Дата: 27.10.07 23:12
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Здравствуйте, alexeiz, Вы писали:


A>>Про ScopeGuard слышал? http://www.ddj.com/cpp/184403758.

ПС>ScopeGuard — это слабое подобие D-шных scope(failure) и scope(exit). Например, в конце этой статьи Alexandrescu и Marginean приводят следующий C++-код:
ПС>

ПС>

ПС>{
ПС>    FILE* topSecret = fopen("cia.txt");
ПС>    ON_BLOCK_EXIT(std::fclose, topSecret);
ПС>    ... use topSecret ...
ПС>} // topSecret automagically closed
ПС>

ПС>ON_BLOCK_EXIT says: "I want this action to be performed when the current block exists."

ПС>Аналогичный код на D элементарно пишется с помощью scope(exit), без шаблонных выкрутасов и макросов.

Сравни ON_BLOCK_EXIT со своим первоначальным примером. Ты явно упустил из внимания ScopeGuard, когда придумывал аргументы за scope(exit). А теперь ты пытаешься доказать, что такой-же код можно написать на D. Чувствуешь разницу между "смотрите, как D круче: 10 строк C++ кода vs 1 строка D кода" и "на D можно писать код не уступающий C++"?

A>>Walter про него тоже не знал.

ПС>Вряд ли. Насколько я знаю, Alexandrescu и Bright тесно общаются и Alexandrescu влияет на D. Также, Bright в конце статьи «Exception Safe Programming» ссылается первым делом на указанную Вами статью:

Может и не знал, когда он придумывал свой scope(exit), а когда писал статью, уже знал. Но это не так интересно. Настоящая причина введения scope(exit) уже была раскрыта c-smile'ом.
Re[11]: try-finally и scope(exit)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 28.10.07 08:13
Оценка:
Здравствуйте, c-smile, Вы писали:

A>>Хм, интересно. Я про это не знал. Где-нибудь про его мотивацию почитать можно? И почему бы не использовать class, у которых есть деструкторы, вместо struct для выполнения соответствующих операций при выходе из scope'а?


CS>
CS>class wrapper {}
CS>auto wrapper w = new wrapper();
CS>


CS>Обрати внимание на new.


CS>в c++ можно перекрывая оператор= сделать managed access к области памяти (shared_ptr например),

CS>в D этого в принципе не сделать.
CS>auto instances это просто еще один способ вызвать процедуру на выходе из блока (dtor). И все.

CS>C++ в этом случае мощнее.


Начиная с какой-то версии (незадолго до выхода 1.0) для подобных переменных в D нужно использовать не auto, а scope:
class wrapper {};
scope wrapper w = new wrapper();

Ключевое слово auto используется для автоматического вывода типа переменных, что позволяет писать так:
class wrapper {};
auto scope w = new wrapper();


Но косяк в D со scope классами еще и в том, что если класс задекларирован как scope (т.е. требуется вызывать его деструктор при выходе из области видимости), то объекты этого класса нельзя возвращать из функции:
scope class SomeResourceHolder { ... };

// Так сделать не получится:
SomeResourceHolder lockResource() { ... }
auto resource = lockResource();


В этом плане C++ предлагает более логичные (на мой взгляд) подходы:
class SomeResourceHolder { ... };
typedef std::auto_ptr< SomeResourceHolder > ResourceHolderPtr;

// Так делать в C++ можно без проблем.
ResourceHolderPtr lockResource() { ... }
ResourceHolderPtr resource = lockResource();


Когда в C++0x появится вывод типов -- вообще лепота будет.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.10.07 15:50
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Одно но — может так оказаться, что в итоге получится язык для написания компиляторов.


Можно хотя бы один пример подобного? И за одно пояснить связть.

А то, я вот знаю С, С++, Паскаль, Лисп... Компиляторы которых писались на сомих себе.
А связи никакой не вижу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: try-finally и scope(exit)
От: Пётр Седов Россия  
Дата: 29.10.07 22:01
Оценка: 19 (1)
Здравствуйте, VoidEx, Вы писали:
VE>Эм, данный пример только эквивалентность показывает, а не "слабое подобие".
Например, есть D-код:
class View
{
  int m_ItemsLockCount;

  void Paint(bool LockItems)
  {
    if (LockItems) m_ItemsLockCount++;
    scope(exit) if (LockItems) m_ItemsLockCount--;
    // использовать Items
    ...
  }
}

Эквивалентный C++-код с использованием ScopeGuard:
#include "ScopeGuard.h" // ftp://ftp.cuj.com/pub/2000/cujdec2000.zip > alexandr.zip

class View
{
  int m_ItemsLockCount;

  void ConditionallyUnlockItems(bool LockItems) // вызывается динамически
  {
    if (LockItems) m_ItemsLockCount--;
  }

  void Paint(bool LockItems)
  {
    if (LockItems) m_ItemsLockCount++;
    ON_BLOCK_EXIT_OBJ(*this, &View::ConditionallyUnlockItems, LockItems); // здесь ScopeGuard
    // использовать Items
    ...
  }
};

В этом коде мне не нравится две вещи:
* Для маленького кусочка кода приходится городить отдельную функцию-член. Это неудобно.
* Функция-член ConditionallyUnlockItems вызывается динамически (operator.*). Хотя, теоретически, умный оптимизатор может сгенерировать статический вызов, здесь же всё на виду. Если заменить функцию-член на функтор, то можно добиться статического вызова:
#include "ScopeGuard.h"

class View
{
  int m_ItemsLockCount;

  class ConditionallyUnlockItems // функтор
  {
    View* m_pView;
    bool m_LockItems;
  public:
    ConditionallyUnlockItems(View* pView, bool LockItems)
    {
      m_pView = pView;
      m_LockItems = LockItems;
    }
    void operator()() // вызывается статически
    {
      if (m_LockItems) m_pView->m_ItemsLockCount--;
    }
  };
  friend class ConditionallyUnlockItems; // разрешить функтору доступ к View::m_ItemsLockCount

  void Paint(bool LockItems)
  {
    if (LockItems) m_ItemsLockCount++;
    ON_BLOCK_EXIT(ConditionallyUnlockItems(this, LockItems)); // здесь ScopeGuard
    // использовать Items
    ...
  }
};

Но это уже совсем неуклюжий код.
Подводя итог. D-шные scope(exit) и scope(failure) могут выполнить произвольный кусочек кода с контекстом (контекст — это например локальная переменная LockItems). C++-ный ScopeGuard может всего лишь вызвать функцию (динамически), функтор (статически) или функцию-член (динамически). Поэтому я и утверждаю, что C++-ный ScopeGuard — это слабое подобие D-шных scope(exit) и scope(failure).
Пётр Седов (ушёл с RSDN)
Re[11]: try-finally и scope(exit)
От: Пётр Седов Россия  
Дата: 30.10.07 00:57
Оценка: -1
Здравствуйте, alexeiz, Вы писали:

A>Сравни ON_BLOCK_EXIT со своим первоначальным примером.

Сравниваю. Мой первоначальный пример на D (здесь
Автор: Пётр Седов
Дата: 24.10.07
):

void Func2()
{
  Handle hResA = AllocResA(...);
  scope(exit) FreeResA(hResA);

  Handle hResB = AllocResB(...);
  scope(exit) FreeResB(hResB);

  Handle hResC = AllocResC(...);
  scope(exit) FreeResC(hResC);

  // использовать ресурсы A, B, C
  ...
}

Эквивалентный C++-код с использованием ScopeGuard:
#include "ScopeGuard.h"

void Func_ScopeGuard(...)
{
  Handle hResA = AllocResA(...);
  ON_BLOCK_EXIT(FreeResA, hResA); // здесь ScopeGuard

  Handle hResB = AllocResB(...);
  ON_BLOCK_EXIT(FreeResB, hResB); // здесь ScopeGuard

  Handle hResC = AllocResC(...);
  ON_BLOCK_EXIT(FreeResC, hResC); // здесь ScopeGuard

  // использовать ресурсы A, B, C
  ...
}

Код аналогичен. В C++-варианте функции FreeResA, FreeResB и FreeResC вызываются динамически, но это не страшно. Во-первых, освобождающие функции часто вызываются динамически в любом случае. Например, WinAPI-шная CloseHandle импортируется из динамической библиотеки kernel32.dll, а C-шная fclose обычно импортируется из динамической библиотеки msvcrt.dll. Во-вторых, время освобождения ресурса скорее всего гораздо больше чем время передачи управления.

A>Ты явно упустил из внимания ScopeGuard, когда придумывал аргументы за scope(exit).

C++-ный ScopeGuard не ослабляет аргументы за D-шный scope(exit). Эти механизмы — один и тот же стиль: написать завершающий код не отходя от кассы.

A>А теперь ты пытаешься доказать, что такой-же код можно написать на D.

D-шный scope(exit) мощнее чем C++-ный ScopeGuard. Например, D-шный scope(exit) позволяет легко использовать if-ы и локальные переменные из контекста.

A>Чувствуешь разницу между "смотрите, как D круче: 10 строк C++ кода vs 1 строка D кода" и "на D можно писать код не уступающий C++"?

У нас что, спор «D vs C++»? На D удобнее писать exception-safe-код чем на C++, так как в D помимо деструкторов ещё есть try-finally и scope(exit).
Пётр Седов (ушёл с RSDN)
Re[12]: try-finally и scope(exit)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.10.07 07:20
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

<...примеры поскипаны...>

ПС>Подводя итог. D-шные scope(exit) и scope(failure) могут выполнить произвольный кусочек кода с контекстом (контекст — это например локальная переменная LockItems). C++-ный ScopeGuard может всего лишь вызвать функцию (динамически), функтор (статически) или функцию-член (динамически). Поэтому я и утверждаю, что C++-ный ScopeGuard — это слабое подобие D-шных scope(exit) и scope(failure).


Я согласен, что D-шный scope мощнее, чем C++ная поделка ScopeGuard. Но я думаю, что оба эти механизма ведут к написанию не очень хорошего кода. Имхо, более разумно было бы объеденить логический признак и счетчик элементов в один объект:
class View {
  int m_ItemsLockCount;

  class ItemsLockCountIncrementer {
    bool m_NeedLock;
    int & m_LockCount;
  public :
    ItemsLockCountIncrementer( bool NeedLock, int & LockCount )
      : m_NeedLock( NeedLock ), m_LockCount( LockCount )
      {
        if( m_NeedLock ) ++m_LockCount;
      }
    ~ItemsLockCountIncrementer()
      {
        if( m_NeedLock ) --m_LockCount;
      }
  };

  void Paint( bool LockItems )
    {
      ItemsLockCountIncrementer ItemsLocker( LockItems, m_ItemsLockCount );
      ...
    }
};


На мой взгляд, качество реализации Paint() здесь повышается за счет того, что операции логического инкремента/декремента счетчика здесь записываются всего одной строкой. Это уже атомарная (с точки зрения логики) операция, которую нельзя будет при сопровождении разбавить еще каким-то действиями. В отличии от использования scope-конструкций:
// Так задумывал автор:
void Paint( bool LockItems )
  {
    if( LockItems ) m_ItemsLockCount++;
    scope(exit) m_ItemsLockCount--;
    ...
  }

// А вот так затем сделал майнтайнер:
void Paint( bool LockItems )
  {
    if( LockItems ) m_ItemsLockCount++;
    checkItemsLockCount();
    scope(exit) m_ItemsLockCount--;
    ...
  }

а потом выясниться, что в checkItemsLockCount() выскакивает исключение и управление до scope(exit) не доходит. Соответственно, в случае исключения в checkItemsLockCount значение m_ItemsLockCount окажется неправильным.

Поэтому scope-конструкция, на мой взгляд, больше провоцирует написание некачественного кода, чем традиционный RAII.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.07 15:02
Оценка: 11 (4)
Да, вот такая вот строчка в Change Log:

Full closure support added.


Подробнее об этом можно прочитать в разделе Functions (пункт Delegates, Function Pointers, and Closures):

A delegate can be set to a non-static nested function:

int delegate() dg;

void test()
{   int a = 7;
    int foo() { return a + 3; }

    dg = &foo;
    int i = dg();    // i is set to 10
}


The stack variables referenced by a nested function are still valid even after the function exits (this is different from D 1.0). This is called a closure. Returning addresses of stack variables, however, is not a closure and is an error.
int* bar()
{   int b;
    test();
    int i = dg();    // ok, test.a is in a closure and still exists
    return &b;        // error, bar.b not valid after bar() exits
}



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Full closures in DMD 2.007
От: _nn_ www.nemerleweb.com
Дата: 03.11.07 15:11
Оценка: :)
Здравствуйте, eao197, Вы писали:

Интересно.
Следующим шагом будет сопоставление паттернов ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Full closures in DMD 2.007
От: FR  
Дата: 11.11.07 09:35
Оценка:
Здравствуйте, _nn_, Вы писали:

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


__>Интересно.

__>Следующим шагом будет сопоставление паттернов ?

Угу, http://s3.amazonaws.com/dconf2007/WalterAndrei.pdf
Re[4]: Full closures in DMD 2.007
От: _nn_ www.nemerleweb.com
Дата: 13.11.07 18:58
Оценка: :)
Здравствуйте, FR, Вы писали:

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


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


__>>Интересно.

__>>Следующим шагом будет сопоставление паттернов ?

FR>Угу, http://s3.amazonaws.com/dconf2007/WalterAndrei.pdf


Ну может выйдет что-то вроде Nemerle без .Net

P.S.
Но вот это уже перебор:
invariant(char)[][invariant(char)[]] abbrev(invariant(char)[][] values);
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.11.07 16:27
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Интересно.

__>Следующим шагом будет сопоставление паттернов ?

Да, им еще до отказа от return-ов шагать и шагать .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.11.07 16:27
Оценка:
Здравствуйте, eao197, Вы писали:

E>Да, вот такая вот строчка в Change Log:

E>

E>Full closure support added.


Ну, таки это произошло?!

Как говорил Дуремар — еще 256 ведер и золотой ключик у нас в кормане.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 06:14
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


__>>Интересно.

__>>Следующим шагом будет сопоставление паттернов ?

VD>Да, им еще до отказа от return-ов шагать и шагать .


А нафига от них отказыватся, принципиально это ничего ни меняет.
Re[3]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 06:16
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>Да, вот такая вот строчка в Change Log:

E>>

E>>Full closure support added.


VD>Ну, таки это произошло?!


Угу, наконец-то, и судя по всему ни какиз коренных переделок не потребовалось, чего он так тянул не понятно.

VD>Как говорил Дуремар — еще 256 ведер и золотой ключик у нас в кормане.


Есть надежда что все таки наиграется и застабилизирует язык.
Re[5]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 09:09
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Да, им еще до отказа от return-ов шагать и шагать .


FR>А нафига от них отказыватся, принципиально это ничего ни меняет.


А вот когда откажутся ты сам мне об этом и расскажешь, а до тех мор ты Блаб и объяснить тебе ничего невозможно (вспоминаем отмазки по поводу полноценных замыканий).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 09:09
Оценка:
Здравствуйте, FR, Вы писали:

FR>Угу, наконец-то, и судя по всему ни какиз коренных переделок не потребовалось, чего он так тянул не понятно.


А что там делать то было? В C# 2.0 и Немерле реализации можно было подсмореть еще 3 года назад.
Вопрос только с контролем памяти. В упомянутых языках замыкания автоматически контролиуют время жизни всего на что они ссылаются. В D с этим могут быть проблемы (ручник в управлении памтью — это слишком большая жертава).

VD>>Как говорил Дуремар — еще 256 ведер и золотой ключик у нас в кормане.


FR>Есть надежда что все таки наиграется и застабилизирует язык.


Ага. Ща макросы доделает только...

Если серьезно, то дай Бог, так как движется он в правильном направлении, хотя и огородами.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 09:32
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Да, им еще до отказа от return-ов шагать и шагать .


FR>>А нафига от них отказыватся, принципиально это ничего ни меняет.


VD>А вот когда откажутся ты сам мне об этом и расскажешь, а до тех мор ты Блаб и объяснить тебе ничего невозможно (вспоминаем отмазки по поводу полноценных замыканий).


Влад не надо до маразма доходить
Есть return или нет абсолютно ни на что ни влияет.
А отмазки напомни, а то я всегда жалел что нормальных замыканий в D нет.
Re[5]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 09:33
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>Угу, наконец-то, и судя по всему ни какиз коренных переделок не потребовалось, чего он так тянул не понятно.


VD>А что там делать то было? В C# 2.0 и Немерле реализации можно было подсмореть еще 3 года назад.


Угу а в lispe 50 лет назад

VD>Вопрос только с контролем памяти. В упомянутых языках замыкания автоматически контролиуют время жизни всего на что они ссылаются. В D с этим могут быть проблемы (ручник в управлении памтью — это слишком большая жертава).


Вряд ли, только если найдутся буратины использующие new — delete в замыканиях

VD>>>Как говорил Дуремар — еще 256 ведер и золотой ключик у нас в кормане.


FR>>Есть надежда что все таки наиграется и застабилизирует язык.


VD>Ага. Ща макросы доделает только...


VD>Если серьезно, то дай Бог, так как движется он в правильном направлении, хотя и огородами.


Угу, нормальные герои всегда идут в обход
Re[7]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 11:12
Оценка:
Здравствуйте, FR, Вы писали:

FR>Влад не надо до маразма доходить

FR>Есть return или нет абсолютно ни на что ни влияет.

Ладно, извини за резкость, но то что я тебе сказал это грустная правда. Ты действительно не поймешь необходимость фичи пока не проникнешся ею на практике.

return не только делает код маленьких лямд необравданно длинее, он еще к тому же прерывает логику фунции в самом неожиданном месте. Код написанный без него читается несколько лучше. Через год жития без return-а понимаешь, что в общем-то он нужен раз в год по обещанию.

FR>А отмазки напомни, а то я всегда жалел что нормальных замыканий в D нет.


Ссылок не храню, но когда я в свое время делал замечания на то что локальные фунции в D не полноценны мне на сразу приводили тысячи аргументов в оправдание этому. Насколько я помню, ты был в числе зищитников.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 11:12
Оценка:
Здравствуйте, FR, Вы писали:

FR>Угу а в lispe 50 лет назад


Можно и в Лиспе, но в нем нет ООП, и он тогда был интерпретатором, что как бы накладывает специфику. А тут можно тырить решения прямиком.

VD>>Вопрос только с контролем памяти. В упомянутых языках замыкания автоматически контролиуют время жизни всего на что они ссылаются. В D с этим могут быть проблемы (ручник в управлении памтью — это слишком большая жертава).


FR>Вряд ли, только если найдутся буратины использующие new — delete в замыканиях


Видимо ты не понял. Вот тебе псевдокод:
def x = new SomeObj();
def localFunc() { x };
return localFunc;
...

Ну, и где-то зовем данную фунцию и пытаемся использовать ее результат.
А он, зараза, замкнут на x, а тот ссылается на SomeObj который мог быть
объявлен на стеке или уничтожен принудительно.
В языках с автоматическим управлением памятью проблем быть не может, так как в x будет лежать или ссылка которую контролирует GC, или х является вэйлью-типом и копируется по значению.
Внимание вопрос, что дудет в Ди?

FR>Угу, нормальные герои всегда идут в обход


Кстати, у Героя спрашивали видел ли он Немерле и не кажется ли ему, что он последние несколько лет движется от "Вандефул С++" к "Почти Немерле"? Еще интересно, что он отвечат на вопрос "Почему же все же Ди не написан на Ди?".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 11:45
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Влад не надо до маразма доходить

FR>>Есть return или нет абсолютно ни на что ни влияет.

VD>Ладно, извини за резкость, но то что я тебе сказал это грустная правда. Ты действительно не поймешь необходимость фичи пока не проникнешся ею на практике.


Но это не тот случай, например на том же питоне, на котором я активно писал, в лямбдах нет return.

VD>return не только делает код маленьких лямд необравданно длинее, он еще к тому же прерывает логику фунции в самом неожиданном месте. Код написанный без него читается несколько лучше. Через год жития без return-а понимаешь, что в общем-то он нужен раз в год по обещанию.


Мне без разницы абсолютно, могу и так и так, вообще вопрос ближе к стилевым и по моему непринипиальный.

FR>>А отмазки напомни, а то я всегда жалел что нормальных замыканий в D нет.


VD>Ссылок не храню, но когда я в свое время делал замечания на то что локальные фунции в D не полноценны мне на сразу приводили тысячи аргументов в оправдание этому. Насколько я помню, ты был в числе зищитников.


Насколько я помню там шел разговор что такие недолямбды абсолютно бесполезны, я же придерживался мнения что это лучше чем ничего
Re[7]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 12:01
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>Угу а в lispe 50 лет назад


VD>Можно и в Лиспе, но в нем нет ООП, и он тогда был интерпретатором, что как бы накладывает специфику. А тут можно тырить решения прямиком.


Ну в нем ООП поопней чем у большинства других

VD>>>Вопрос только с контролем памяти. В упомянутых языках замыкания автоматически контролиуют время жизни всего на что они ссылаются. В D с этим могут быть проблемы (ручник в управлении памтью — это слишком большая жертава).


FR>>Вряд ли, только если найдутся буратины использующие new — delete в замыканиях


VD>Видимо ты не понял. Вот тебе псевдокод:

VD>
VD>def x = new SomeObj();
VD>def localFunc() { x };
VD>return localFunc;
VD>...
VD>

VD>Ну, и где-то зовем данную фунцию и пытаемся использовать ее результат.
VD>А он, зараза, замкнут на x, а тот ссылается на SomeObj который мог быть
VD>объявлен на стеке или уничтожен принудительно.
VD>В языках с автоматическим управлением памятью проблем быть не может, так как в x будет лежать или ссылка которую контролирует GC, или х является вэйлью-типом и копируется по значению.
VD>Внимание вопрос, что дудет в Ди?

Сейчас уже будет нормально, раньше это было UB

FR>>Угу, нормальные герои всегда идут в обход


VD>Кстати, у Героя спрашивали видел ли он Немерле и не кажется ли ему, что он последние несколько лет движется от "Вандефул С++" к "Почти Немерле"? Еще интересно, что он отвечат на вопрос "Почему же все же Ди не написан на Ди?".


Это надо eao197 попросить чтобы спросил, он в D'шной коференции как дома
Re[9]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 13:06
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Насколько я помню там шел разговор что такие недолямбды абсолютно бесполезны, я же придерживался мнения что это лучше чем ничего


Я говорил, что они вредны, а не бесполезны.
Ошибки провацируют.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 13:06
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну в нем ООП поопней чем у большинства других


В Лиспе то? Ни разу не видел. Есть КЛОС, но он макро-библиотека, а стало быть тем кто реализует фичи языка на него внимания обращать нет нужды. Или прийдется обращать внимание на все макро-библиотеки.

VD>>Ну, и где-то зовем данную фунцию и пытаемся использовать ее результат.

VD>>А он, зараза, замкнут на x, а тот ссылается на SomeObj который мог быть
VD>>объявлен на стеке или уничтожен принудительно.
VD>>В языках с автоматическим управлением памятью проблем быть не может, так как в x будет лежать или ссылка которую контролирует GC, или х является вэйлью-типом и копируется по значению.
VD>>Внимание вопрос, что дудет в Ди?

FR>Сейчас уже будет нормально, раньше это было UB


Так что нормально то? Кто управляет временим жизни?

VD>>Кстати, у Героя спрашивали видел ли он Немерле и не кажется ли ему, что он последние несколько лет движется от "Вандефул С++" к "Почти Немерле"? Еще интересно, что он отвечат на вопрос "Почему же все же Ди не написан на Ди?".


FR>Это надо eao197 попросить чтобы спросил, он в D'шной коференции как дома


eao197... ау!!!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 13:19
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>Ну в нем ООП поопней чем у большинства других


VD>В Лиспе то? Ни разу не видел. Есть КЛОС, но он макро-библиотека, а стало быть тем кто реализует фичи языка на него внимания обращать нет нужды. Или прийдется обращать внимание на все макро-библиотеки.


Угу в клосе, но как пример для реализации да не очень

FR>>Сейчас уже будет нормально, раньше это было UB


VD>Так что нормально то? Кто управляет временим жизни?


GC управляет. Реализация такая же как в шарпе ( )

Delegates to non-static nested functions contain two pieces of data: the pointer to the stack frame of the lexically enclosing function (called the frame pointer) and the address of the function. This is analogous to struct/class non-static member function delegates consisting of a this pointer and the address of the member function. Both forms of delegates are interchangeable, and are actually the same type:


UB можно получить только если баловатся указателями на стековые переменные.
Re[8]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.11.07 13:32
Оценка: 5 (3)
Здравствуйте, FR, Вы писали:

VD>>Кстати, у Героя спрашивали видел ли он Немерле и не кажется ли ему, что он последние несколько лет движется от "Вандефул С++" к "Почти Немерле"? Еще интересно, что он отвечат на вопрос "Почему же все же Ди не написан на Ди?".


FR>Это надо eao197 попросить чтобы спросил, он в D'шной коференции как дома


Уже давно нет. Месяца три или четыре как отписался. Заглядываю иногда, когда новые релизы DMD выходят. Вот, например, здесь Брайт рассказывал, что могут замыкания в D, и как они устроены.

Про Nemerle в конференции D говорилось сразу как только Вальтер завел речь о макросах. И не только мной, там были и другие люди, упоминавшие Nemerle как образец мощных макросов. Я же высказывался в том смысле, что нехер D пытаться встраивать макросы в язык -- все равно за Nemerle не угонишься. По поводу макросов там и Lisp обсуждался. Так что не знаю, знаком ли Брайт с Nemerle, но по поводу макросов он говорил, что мол макросы нужны не для того, чтобы расширять язык и добавлять новые синтаксические конструкции, а для того, чтобы за стандартным синтаксисом D прятать сложные преобразования операций.

В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.

Так вот насколько я понял из объяснений Брайта, макросы D предназначаются для аналогичных целей. Мол, подключаешь макрос, пишешь:
a = b + c + d;

где a, b, c и d матрицы, а макрос это дело разворачивает в один цикл. Т.е. макросы будут служить тем же целям, что и expression templates в C++. Но это я так понял. Как оно будет на самом деле -- со временем увидим.

И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Full closures in DMD 2.007
От: cl-user  
Дата: 22.11.07 14:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В Лиспе то? Ни разу не видел. Есть КЛОС, но он макро-библиотека, а стало быть тем кто реализует фичи языка на него внимания обращать нет нужды. Или прийдется обращать внимание на все макро-библиотеки.


Извини — мысль не уловил... Какая нафиг разница — на макрах он или нет, если вопрос в его функциональности?
Re[10]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 15:30
Оценка:
Здравствуйте, FR, Вы писали:

FR>GC управляет. Реализация такая же как в шарпе ( )


Миннутточкуу... Я же специльно спросил о том, что будет если захватить в контексте нечто, что не управляется ЖЦ.

FR>

FR>Delegates to non-static nested functions contain two pieces of data: the pointer to the stack frame of the lexically enclosing function (called the frame pointer) and the address of the function. This is analogous to struct/class non-static member function delegates consisting of a this pointer and the address of the member function. Both forms of delegates are interchangeable, and are actually the same type:


Нифига себе? А если возвратить делегат из фунции, что будет? Стэк-фрэйм ведь разрушится...

FR>UB можно получить только если баловатся указателями на стековые переменные.


Вот боюсь, что не таолько. В прочем это тоже не очень приятно. Я бы на их месте сделал как в Шарпе — разрешил бы использовать указатели только в небезопастном контексте.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Full closures in DMD 2.007
От: FR  
Дата: 22.11.07 15:54
Оценка: 2 (2)
Здравствуйте, VladD2, Вы писали:

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


Переменные в кучу скопируются:

How do D closures work?

1) The compiler makes a distinction between a nested function that
'escapes' the scope, and one that does not. It uses a very simple, but
conservative, heuristic — did someone take the address of the function?
If yes, it assumes the function escapes.

2) The compiler logs all local variables that are referenced by any
nested function.

3) If any of those variables are referenced by an escaping nested
function, or a nested function that encloses an escaping function, then
upon function entry all the referenced variables are allocated on a
heap-allocated chunk of memory rather than on the stack. Any referenced
parameters are copied into that chunk. That chunk is linked into the
nested context frames rather than the stack frame.

4) Variables not referenced by nested functions are still allocated on
the stack.

Note you can see this at work by running obj2asm on the test code I posted.

It's not an optimal solution because the "does the function escape"
heuristic captures too many functions.



FR>>UB можно получить только если баловатся указателями на стековые переменные.


VD>Вот боюсь, что не таолько. В прочем это тоже не очень приятно. Я бы на их месте сделал как в Шарпе — разрешил бы использовать указатели только в небезопастном контексте.


Угу неплохо бы.
Но и так нормально.
Re[10]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.11.07 16:13
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>Извини — мысль не уловил... Какая нафиг разница — на макрах он или нет, если вопрос в его функциональности?


А вопрос как раз не в его фунциональности, а в его влиянии на происходящее при переписывании кода для дямбд. Так как КЛОС == макрос, то и учитывать его не надо, так как КЛОС — это стандартный код на Лиспе.

Понятно?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 22.11.07 22:24
Оценка: -1
Здравствуйте, VladD2, Вы писали:

<skip/>

Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.
Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно

На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[19]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.11.07 10:27
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.


Откуда дровишки? Я пару месяцев назад разглядывал исходники Дишного фронтэнда. Они были целиком на С++.

__>Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно


Вот этом мне совершенно по фигу.

__>На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии


Скала и Немерле по многим пунктам объодят Ди на годы и это не мешает им бутстрипиться на себе.
Весь смысл бутстрипа в том, что ты компилируешь новую версию компилятора на своей старой версии. Следующую версию уже можно компилировать на новой. Проблемы возникают только если происходят ломающие изменения. Ломающие изменения же — это очень плохо по любому, так как перестают работать многие программы написанные на языке. Причем сам компилятор обычно их переживает, так как ломают те что строют, а значит они заранее меняют в компиляторе то что сломается.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Phobos теперь на dsource
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.11.07 10:45
Оценка: 4 (1)
Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org

Вот здесь: http://www.dsource.org/projects/phobos


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Phobos теперь на dsource
От: _nn_ www.nemerleweb.com
Дата: 26.11.07 21:57
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org


E>Вот здесь: http://www.dsource.org/projects/phobos


А как же Tango?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[20]: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 26.11.07 22:13
Оценка:
Здравствуйте, VladD2, Вы писали:

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


__>>Фронт-энд D написан на D. Почему бек-энд не D, видимо чтобы использовать один бек-энд для DMC и DMD.


VD>Откуда дровишки? Я пару месяцев назад разглядывал исходники Дишного фронтэнда. Они были целиком на С++.

Это я перепутал, имел ввиду Phobos.

__>>Лучше спросить почему не разрабатывать фронт-энд только для GCC, там гляди и бек-энд его на D переписать можно


VD>Вот этом мне совершенно по фигу.

Кому как, а некоторым иногда нужен нэйтив.

__>>На мой взгляд язык меняется слишком динамично, чтобы можно было писать полностью весь компилятор на D, там придется переписывать его каждый раз с выходом новой версии


VD>Скала и Немерле по многим пунктам объодят Ди на годы и это не мешает им бутстрипиться на себе.

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

Я не буду спорить насчет бутсрапа. Если это приводит к более быстрому развитию я только за.
В любом случае это решение автора языка. Остается надеятся, что вместе с макросами он и доделает бустрап
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Phobos теперь на dsource
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 27.11.07 08:16
Оценка:
Здравствуйте, _nn_, Вы писали:

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


E>>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org


E>>Вот здесь: http://www.dsource.org/projects/phobos


__>А как же Tango?


А фиг его знает. Насколько я помню, после D Conference команда Tango обсуждала вопросы объединения Tango и Phobos для того, чтобы уйти от ситуации наличия двух "стандарных" библиотек. Но какого-то кардинального решения об отказе от какой из библиотек или об их слиянии достигнуто не было. Так что здесь вообще не понятно, что будет.

Есть еще проект Tangobos -- это реализация Phobos поверх Tango. Специально для тех проектов, который ориентированы на Tango, но вынуждены использовать что-то из Phobos-а.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.11.07 14:59
Оценка:
Здравствуйте, eao197, Вы писали:

E>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


Смешно, ей богу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 28.11.07 15:08
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


VD>Смешно, ей богу.


Кто бы говорил.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Phobos теперь на dsource
От: FR  
Дата: 28.11.07 17:27
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вальтер Брайт делает очередной шаг на пути к полностью OpenSource модели разработки языка D. Теперь стандартная библиотека языка D, Phobos, живет на dsource.org


E>Вот здесь: http://www.dsource.org/projects/phobos


Вышел D 2.008 и в основном как раз добавки — измения в фобосе.
Re[9]: Full closures in DMD 2.007
От: FR  
Дата: 28.11.07 17:43
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.


E>Так вот насколько я понял из объяснений Брайта, макросы D предназначаются для аналогичных целей. Мол, подключаешь макрос, пишешь:

E>
E>a = b + c + d;
E>

E>где a, b, c и d матрицы, а макрос это дело разворачивает в один цикл. Т.е. макросы будут служить тем же целям, что и expression templates в C++. Но это я так понял. Как оно будет на самом деле -- со временем увидим.


Мало ли он чего хочет, если они будут достаточно мощны их будут в первую очередь использовать для метапрограммирования, про текстовые миксины тоже говорили что они предназначены для реаализации DSL а не для метапрограммирования и открываем тот же фобос и что видим:

struct A
{
    int a;
    mixin(bitfields!(
        uint, "x",    2,
        int,  "y",    3,
        uint, "z",    2,
        bool, "flag", 1));
}


Re[9]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 06:41
Оценка:
Здравствуйте, eao197, Вы писали:

E>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.


Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают
В общем дело только за удобными библиотеками для метапрограммирования.
Re[2]: D1.0 и D2.0: const revisited :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 06:59
Оценка: 1 (1)
E>Затем, с подачи Андрея Алексендреску, в D начали добавлять поддержку константности, даже большую, чем в C++.

E>В отличии от макросов, константность широко обсуждалась в news-группах digitalmars.D и digitalmars.D.announce. Из этих обсуждений стало понятно, что в рамки ветки 1.0 константность ну никак не ляжет. Поэтому и произошло выделение ветви 2.0. Первая альфа-версия DMD 2.000 с поддержкой константности и была опубликована 18-го июня. Версия 1.0 будет существовать как "стабильная" версия, последующие релизы в которой будут всего лишь баг-фиксами.


E>Что же представляет из себя константность в D 2.0? Подробнее об этом можно прочитать на сайте языка D, вот здесь. Если же говорить в двух словах, то в язык добавлены новые модификаторы:

E>* final,...
E>* invariant,...
E>* const,...

По прошествии некоторого времени, в DMD v.2.008 константность в D была несколько пересмотрена.
Подробности этого дела обсуждаются здесь. В трех предложениях Брайт описал изменения так:

1) no more final for variables
2) no more 'head const' or 'tail const', it's all just 'const'
3) ditto (2) for invariant


Отсутствие final делает ситуацию с константностью несколько проще. Хотя транзитивность invariant и const -- это очень сомнительное решение, имхо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 07:09
Оценка: +2
Здравствуйте, FR, Вы писали:

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


E>>В свое время, когда в D появились текстовые миксины, некто Don Clugston, активный участник D-шных конференций, написал небольшую библиотеку compile-time функций, преобразующих векторные выражения в эффективный набор x86-ассемблерных инструкций. Народ тогда писал кипятком от восторга.


FR>Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают


В этом смысле D-шные mixin+ctfe очень похожи на метапрограммирование в Ruby. Хотя в Ruby, имхо, поприятнее.

Но тут есть мета-гуру метапрограммирования, которые вкладывают в этот термин гораздо больший смысл. И с их точки зрения это будет подобием метапрограммирования. Причем, они будут правы. Вещи типа bitfields, который ты привел в примере здесь
Автор: FR
Дата: 28.11.07
, имхо, такая же гадость, как Boost.Lambda в C++ -- вроде и пользоваться можно, но все какое-то страшненькое и убогонькое, и вовсе не лямбда в строгом смысле этого слова.

FR>В общем дело только за удобными библиотеками для метапрограммирования.


Касательно D, я думаю, что дело все-таки за:
— стабильным релизом D 2.0 и мараторием на добавление новых фич в язык в течении 2-3 последующих лет;
— объединением Phobos-а и Tango.

Пока D не будет готов к использованию в production пользы от его метапрограммирования или других интересных фишек ноль целых, ноль десятых.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 07:30
Оценка:
Здравствуйте, eao197, Вы писали:


FR>>Вообще те же текстовые миксины + compile time function уже практически полноценная система метапрограмирования, причем, языки целевой и мета совпадают


E>В этом смысле D-шные mixin+ctfe очень похожи на метапрограммирование в Ruby. Хотя в Ruby, имхо, поприятнее.


E>Но тут есть мета-гуру метапрограммирования, которые вкладывают в этот термин гораздо больший смысл. И с их точки зрения это будет подобием метапрограммирования. Причем, они будут правы. Вещи типа bitfields, который ты привел в примере здесь
Автор: FR
Дата: 28.11.07
, имхо, такая же гадость, как Boost.Lambda в C++ -- вроде и пользоваться можно, но все какое-то страшненькое и убогонькое, и вовсе не лямбда в строгом смысле этого слова.


С тем что страшненькое вполне согласен. С тем что убогое нет. С тем что гадость согласен наполовину
С C++ есть принципиальная разница, там метапрограмирование (здесь согласен с мета-гурами ) основано на побочных эффектах слишком сложных шаблонов, в D же вполне штатная возможность.
К тому же в отличии от C++ не нужно быть гуру чтобы нормально писать метапрограммы.

FR>>В общем дело только за удобными библиотеками для метапрограммирования.


E>Касательно D, я думаю, что дело все-таки за:

E>- стабильным релизом D 2.0 и мараторием на добавление новых фич в язык в течении 2-3 последующих лет;
E>- объединением Phobos-а и Tango.

E>Пока D не будет готов к использованию в production пользы от его метапрограммирования или других интересных фишек ноль целых, ноль десятых.


С этим согласен.
Re[11]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 12:21
Оценка:
Здравствуйте, eao197, Вы писали:

E>>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


VD>>Смешно, ей богу.


E>Кто бы говорил.


Я, а что?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 12:26
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>>>И по поводу переписывания D на D ему вопросы задавали. Последний ответ, который я видел, был в таком духе: сейчас нет смысла переписывать front-end компилятора D на D, поскольку оба основных D-ных компилятора (DMD и GDC) используют C-шные back-end-ы. И переписывание front-end-а только добавит проблем в интеграции front- и back-end-ов.


VD>>>Смешно, ей богу.


E>>Кто бы говорил.


VD>Я, а что?


Можно ли списочек разработанных тобой компиляторов универсальных языков программирования? Именно разработанных, с нуля.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 12:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я, а что?


Я вот вообще не понимаю почему ты придаешь такое значение этому вопросу. В общем то практически для любого языка можно написать такой компилятор.
Re[3]: D1.0 и D2.0: const revisited :)
От: FR  
Дата: 29.11.07 13:21
Оценка:
Здравствуйте, eao197, Вы писали:

E>Отсутствие final делает ситуацию с константностью несколько проще. Хотя транзитивность invariant и const -- это очень сомнительное решение, имхо.


Не понял final для переменных совсем уберут?
Сейчас в 2.008 без проблем проходит final x = 0;

Кстати тот же фобос все еще нужно много доводить, константность ладно, но много функций которые можно было бы сделать compile time, таковыми не являются (особенно раздражает модуль string)
Re[4]: D1.0 и D2.0: const revisited :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 13:25
Оценка:
Здравствуйте, FR, Вы писали:

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


E>>Отсутствие final делает ситуацию с константностью несколько проще. Хотя транзитивность invariant и const -- это очень сомнительное решение, имхо.


FR>Не понял final для переменных совсем уберут?

FR>Сейчас в 2.008 без проблем проходит final x = 0;

Вот, что по этому поводу Вальтер говорил в digitalmars.D:

>> 1) no more final for variables
>
> Is the keyword in this context now a syntax error?

It's just ignored.


FR>Кстати тот же фобос все еще нужно много доводить, константность ладно, но много функций которые можно было бы сделать compile time, таковыми не являются (особенно раздражает модуль string)


Да было бы вообще здорово Tango и Phobos таки объеденить. Все равно щас оба на dsource.org хостятся.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: D1.0 и D2.0: const revisited :)
От: FR  
Дата: 29.11.07 13:35
Оценка:
Здравствуйте, eao197, Вы писали:


FR>>Не понял final для переменных совсем уберут?

FR>>Сейчас в 2.008 без проблем проходит final x = 0;

E>Вот, что по этому поводу Вальтер говорил в digitalmars.D:


Разобрался, он игнорируется, то есть объявление final x = 0; эквивалентно auto x = 0;
В общем с константностью явно перемудрили, и вообще Андрей плохо влияет на Вальтера

FR>>Кстати тот же фобос все еще нужно много доводить, константность ладно, но много функций которые можно было бы сделать compile time, таковыми не являются (особенно раздражает модуль string)


E>Да было бы вообще здорово Tango и Phobos таки объеденить. Все равно щас оба на dsource.org хостятся.


Угу.
Re[6]: D1.0 и D2.0: const revisited :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 13:39
Оценка:
Здравствуйте, FR, Вы писали:

FR>В общем с константностью явно перемудрили, и вообще Андрей плохо влияет на Вальтера


С константностью перемудрили -- это точно. Осталось бы им еще от транзитивности константности отказаться.

На счет влияния Андрея -- не так все однозначно. Я так понимаю, что из-за подключения Александреску к разработке Phobos-а Phobos таки выполз на dsource.org.

А так же в подачи Александреску в D 2.008 добавлена такая штука, как typeof(return), которая должна облегчать написание обобщенных функций/методов.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 14:04
Оценка:
Здравствуйте, eao197, Вы писали:

E>Можно ли списочек разработанных тобой компиляторов универсальных языков программирования? Именно разработанных, с нуля.


Кто бы говорил. (с)

R#. Вот еще над Немерле работаю. Ранее не раз писал интерпретаторы и т.п. Но методом бутстрапинга были сделаны только R# и Nemerle.

Не ясно зачем мне работать над компиляторами с нуля, чтобы понять приемущества и недостатки бустрапинга.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 14:04
Оценка:
Здравствуйте, FR, Вы писали:

FR>Я вот вообще не понимаю почему ты придаешь такое значение этому вопросу.


Я уже не раз говорил об этом. Это не очевидно только для тех кто не хочет напрячся и понять это. В прочем, возможно многие не способны оценить то, что сами не пробовали.
Повторяюсь еще раз. Приемущуства следующие:
1. Компилятор лучше разрабатывать на более мощьном языке. При этом он получается более компактным, более понятным и банально быстрее. Исходя из этого глупо не использовать приемущества создаваемого языка.
2. Компилятор сам по себе огромный продукт. Компилируя его новой версией компилятора разработчики вынужденно тестируют сам компилятор. Кроме того у разработчиков намного реже возникает желание внести ломающие изменения, так как это приведет к изменению кода компилятора, а из самого кода компилятора можно узнать о наличии таких изменений.
3. Работая над компилятором на создаваемом языке разработчики получают больше практики работы на этом язке и могут более адкеватно оценивать предложения по его изменению и вносить собственные предожения.

FR> В общем то практически для любого языка можно написать такой компилятор.


В общем, нет. Точнее создать то можно, но если язык исходно не был предназначен для компиляции, то результат по любому будет хреновенький. Эрланг и Питон тому доказательство.
Но тут даже вопрос не в этом. Тут вопрос на чем его создавать. Но об этом я уже сказал (в 101-ый раз).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 14:12
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

VD>R#.


Это компилятор? Он же генерит исходники C#.
Компиляторы D генерят нативный код, да еще и с оптимизацией.

Так что по R# ты судишь далеко не о всех проблемах, с которыми сталкиваются разработчики компиляторов (особенно тех, кто генерирует нативный код для нескольких платформ).

VD>Не ясно зачем мне работать над компиляторами с нуля, чтобы понять приемущества и недостатки бустрапинга.


Может быть почуствовал бы тогда что к чему.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 14:27
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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


FR>>Я вот вообще не понимаю почему ты придаешь такое значение этому вопросу.


VD>Я уже не раз говорил об этом. Это не очевидно только для тех кто не хочет напрячся и понять это. В прочем, возможно многие не способны оценить то, что сами не пробовали.


Я думаю у тебя под влиянием функциональщины сильно ослабла способность адекватно оценивать собеседников
Думаю большинство твоих собеседников здесь все неплохо понимают. Но все таки отличают детали реализации от принципиальных вопросов.
Re[15]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 16:26
Оценка: +1
Здравствуйте, eao197, Вы писали:


E>Это компилятор? Он же генерит исходники C#.


К твоему сведению. Компилятор — это утилита преобразующая один язык в другой. Так компилятор C# и Nemerle преобразуют свои языки в MSIL (точнее в вызовы его АПИ).
Компилятор R# преобразовывает R# в C#.
Здесь главное, что R# использовал себя для собственной генерации.

E>Компиляторы D генерят нативный код, да еще и с оптимизацией.


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

E>Так что по R# ты судишь далеко не о всех проблемах, с которыми сталкиваются разработчики компиляторов (особенно тех, кто генерирует нативный код для нескольких платформ).


Перечисли, плиз, те проблемы о которых мне не известно.

VD>>Не ясно зачем мне работать над компиляторами с нуля, чтобы понять приемущества и недостатки бустрапинга.


E>Может быть почуствовал бы тогда что к чему.


А может быть и нет. Это разговор на уровене... эээ... на весьма странном уровне.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.11.07 16:26
Оценка:
Здравствуйте, FR, Вы писали:

FR>Я думаю у тебя под влиянием функциональщины сильно ослабла способность адекватно оценивать собеседников


Все может быть.

FR>Думаю большинство твоих собеседников здесь все неплохо понимают. Но все таки отличают детали реализации от принципиальных вопросов.


Вот в этом далеко не уверен.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Full closures in DMD 2.007
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 29.11.07 16:42
Оценка: +1
Здравствуйте, VladD2, Вы писали:

E>>Это компилятор? Он же генерит исходники C#.


VD>К твоему сведению. Компилятор — это утилита преобразующая один язык в другой. Так компилятор C# и Nemerle преобразуют свои языки в MSIL (точнее в вызовы его АПИ).

VD>Компилятор R# преобразовывает R# в C#.
VD>Здесь главное, что R# использовал себя для собственной генерации.

Ну если подходить к определению понятий, то:

The most common reason for wanting to translate source code is to create an executable program. The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language or machine language). A program that translates from a low level language to a higher level one is a decompiler. A program that translates between high-level languages is usually called a language translator, source to source translator, or language converter. A language rewriter is usually a program that translates the form of expressions without a change of language.


R# в большей степени language translator, чем compiler.
В отличии от того же DMD или GDC.

E>>Компиляторы D генерят нативный код, да еще и с оптимизацией.


VD>Вообще-то он это не делает. Он обращается к АПИ бэк-энда который уже что-там делает.


А удобство интеграции с back-end API -- это как, фигня?

VD>Но это не важно. Машинный код такой же язык как и другие. Суть компилятора от этого не исчезает.


Ну уж, а разные формы оптимизации для разных типов апаратных архитектур?

E>>Так что по R# ты судишь далеко не о всех проблемах, с которыми сталкиваются разработчики компиляторов (особенно тех, кто генерирует нативный код для нескольких платформ).


VD>Перечисли, плиз, те проблемы о которых мне не известно.


Оптимизация кода.
Генерация кода для отладочного режима с отладочной информацией и разные форматы объектных файлов в разных системах.

VD>>>Не ясно зачем мне работать над компиляторами с нуля, чтобы понять приемущества и недостатки бустрапинга.


E>>Может быть почуствовал бы тогда что к чему.


VD>А может быть и нет. Это разговор на уровене... эээ... на весьма странном уровне.


Тем не менее, ты позволяешь себе смеятся над словами человека, который проделывал в своем компиляторе гораздо больше работы, чем ты себе можешь вообразить.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[16]: Full closures in DMD 2.007
От: FR  
Дата: 29.11.07 16:44
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>Я думаю у тебя под влиянием функциональщины сильно ослабла способность адекватно оценивать собеседников


VD>Все может быть.


Я вот лечусь большими порциями корявого кода на C++

FR>>Думаю большинство твоих собеседников здесь все неплохо понимают. Но все таки отличают детали реализации от принципиальных вопросов.


VD>Вот в этом далеко не уверен.


Так большинство спорных вопросов сильно субъективны, так что все зависит от точки зрения.
Re[7]: Bootstrapping
От: Пётр Седов Россия  
Дата: 29.11.07 16:58
Оценка: -1
Здравствуйте, VladD2, Вы писали:
VD>Еще интересно, что он отвечат на вопрос "Почему же все же Ди не написан на Ди?".
Насколько я понимаю, bootstrapping (в русскоязычной книге дракона – раскрутка) использовали в стародавние времена, когда просто выбора другого не было (например, из-за отсутствия Internet-а). Сейчас, по-моему, bootstrapping приносит мало пользы, зато добавляет лишние сложности. Например, я пишу компилятор и хочу использовать C++-библиотеку LLVM (low-level virtual machine) в качестве back-end-а, а там классы и STL. Если я пишу компилятор на C++, то нет проблем. А если bootstrapping, то что делать?
И ещё bootstrapping напоминает мне барона Мюнхгаузена, который сам себя за волосы вытащил из болота .
Пётр Седов (ушёл с RSDN)
Re[4]: Phobos теперь на dsource
От: naryl  
Дата: 30.11.07 09:00
Оценка:
__>>А как же Tango?

E>А фиг его знает. Насколько я помню, после D Conference команда Tango обсуждала вопросы объединения Tango и Phobos для того, чтобы уйти от ситуации наличия двух "стандарных" библиотек. Но какого-то кардинального решения об отказе от какой из библиотек или об их слиянии достигнуто не было. Так что здесь вообще не понятно, что будет.


Существует экспериментальная ветка Tango, постепенно становящаяся совместимой с Phobos. А Runtime Phobos'а в D2 получает багфиксы из Tango.
Вполне возможно, что было достигнуто соглашение о слиянии библиотек, но никто об этом не знает.
Re[8]: Bootstrapping
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.11.07 15:00
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Насколько я понимаю, bootstrapping (в русскоязычной книге дракона – раскрутка) использовали в стародавние времена, когда просто выбора другого не было (например, из-за отсутствия Internet-а). Сейчас, по-моему, bootstrapping приносит мало пользы, зато добавляет лишние сложности.


Это чистой воды заблуждение.

ПС> Например, я пишу компилятор и хочу использовать C++-библиотеку LLVM (low-level virtual machine) в качестве back-end-а, а там классы и STL. Если я пишу компилятор на C++, то нет проблем. А если bootstrapping, то что делать?


Я не знаком с LLVM, но не думаю, что для нет возможностей взаимодействовать с этим делом из других языков. Там есть свой низкоуровневый язык, и как минимум, всегда можно написать АПИ для записи программ на этом языкп с последующей генерацией машинного кода.

ПС>И ещё bootstrapping напоминает мне барона Мюнхгаузена, который сам себя за волосы вытащил из болота .


Тебе конечно виднее. Вот только большинство серьезных языков таки бутсрапятся. В том числе С, С++, Ява, ОКамл, F#, Nemerle, Scala, Lisp. Delphi и C#, правда написаны на С++, но команда C#, насколько мне известно, очень хотела бы переписать компилятор на C#, однако менеджеры не дают пока.

Насколько я понимаю ты об этом судишь чисто теоритически. Или ты пробовал сам писать битстрап-компиляторы?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Bootstrapping
От: FR  
Дата: 30.11.07 17:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Тебе конечно виднее. Вот только большинство серьезных языков таки бутсрапятся. В том числе С, С++, Ява, ОКамл, F#, Nemerle, Scala, Lisp. Delphi и C#, правда написаны на С++, но команда C#, насколько мне известно, очень хотела бы переписать компилятор на C#, однако менеджеры не дают пока.


Ты самый бустраписты язык упустил Forth

VD>Насколько я понимаю ты об этом судишь чисто теоритически. Или ты пробовал сам писать битстрап-компиляторы?


Я кстати писал, а ты?
Re[9]: Bootstrapping
От: Пётр Седов Россия  
Дата: 01.12.07 10:01
Оценка: -3
Здравствуйте, VladD2, Вы писали:

VD>Я не знаком с LLVM, но не думаю, что для нет возможностей взаимодействовать с этим делом из других языков. Там есть свой низкоуровневый язык, и как минимум, всегда можно написать АПИ для записи программ на этом языкп с последующей генерацией машинного кода.

Да, можно обернуть LLVM в C-шный интерфейс и использовать LLVM через эту обёртку, но именно это я и называю «лишние сложности».
А если LLVM сгенерировал неправильный ассемблерный код и я хочу в отладчике пройтись по исходникам LLVM и посмотреть, что он там делает? С bootstrapping-ом так не получится, придётся усеивать код LLVM отладочными печатями (отладка в стиле printf), и это я тоже называю «лишние сложности».

VD>Вот только большинство серьезных языков таки бутсрапятся. В том числе С, С++,

С этими языками понятно: серьёзную программу имеет смысл писать на C/C++, в том числе если эта программа – компилятор C/C++.

VD>Ява, ОКамл, F#, Nemerle, Scala, Lisp.

А эти bootstrapping-овые компиляторы – оптимизирующие? Если компилятор оптимизирующий, то он сложный, а значит больше вероятность ошибиться. А искать ошибку, думаю, будет очень тяжело, учитывая несколько стадий bootstrapping-а (для получения оптимизирующего компилятора) и отсутствие среды разработки с интегрированным отладчиком.

VD>Delphi и C#, правда написаны на С++,

Насколько я знаю, компиляторы Delphi и C++ Builder имеют общий back-end (оптимизирующий). Думаю, это одна из причин того, что компилятор Delphi написан на C++.

VD>но команда C#, насколько мне известно, очень хотела бы переписать компилятор на C#, однако менеджеры не дают пока.

Если компилятор C# напишут на C#, то кому и какая от этого будет польза? Будет ли новый компилятор быстрее старого?

VD>Насколько я понимаю ты об этом судишь чисто теоритически. Или ты пробовал сам писать битстрап-компиляторы?

Я не писал серьёзных компиляторов, тем более с помощью bootstrapping-а.

Ваши аргументы
Автор: VladD2
Дата: 29.11.07
за bootstrapping:

1. Компилятор лучше разрабатывать на более мощьном языке. При этом он получается более компактным, более понятным и банально быстрее. Исходя из этого глупо не использовать приемущества создаваемого языка.

Здесь почти согласен. Действительно, хочется писать на новом языке как можно скорее. Сомневаюсь только по поводу «быстрее». Что, компилятор, написанный на Java, будет быстрее чем компилятор, написанный на C++? И что, Java – более мощный язык, чем C++?

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

Тестировать компилятор, по-моему, лучше не самим собой, а тестами. А то, что bootstrapping ограничивает свободу авторов языка – скорее минус, чем плюс. Вряд ли можно заранее всё предусмотреть, поэтому в молодом языке скорее всего будет много ломающих изменений (у меня сложилось такое впечатление от книги Страуструпа «Дизайн и эволюция C++»). Да и в немолодом языке иногда есть смысл сделать ломающее изменение. В C++ это были:
* Область видимости for-переменной (раньше до конца охватывающего блока, теперь в рамках for-а).
* Время жизни временных объектов (раньше до конца блока, теперь «до точки с запятой»). Правда, ломает только плохой код, например:
string GetName()
{
  ...
}

void Load(...)
{
  const char* pName = GetName().c_str();
  ...
}

* Неудачный new (раньше возвращал NULL, теперь бросает исключение).

По-моему, ломающие изменения в языке – не такая уж страшная вещь. Особенно если доступна старая версия компилятора (никто же не заставляет ставить новую версию). Вот переход на другую платформу – это да, тут действительно много кода «ломается».
Boost FAQ про ломающие изменения:

How can the Boost libraries be used successfully for important projects? Many of the Boost libraries are actively maintained and improved, so backward compatibility with prior version isn't always possible. Deal with this by freezing the version of the Boost libraries used by your project. Only upgrade at points in your project's life cycle where a bit of change will not cause problems. Individual bug fixes can always be obtained from the CVS repository.

Boost – не компилятор, но разумное зерно в этих словах есть.

3. Работая над компилятором на создаваемом языке разработчики получают больше практики работы на этом язке и могут более адкеватно оценивать предложения по его изменению и вносить собственные предожения.

Чтобы получить серьёзный опыт программирования на новом языке необязательно использовать bootstrapping.
Пётр Седов (ушёл с RSDN)
Re[8]: Bootstrapping
От: Andrei F.  
Дата: 03.12.07 09:34
Оценка: +1
Здравствуйте, Пётр Седов, Вы писали:

ПС>И ещё bootstrapping напоминает мне барона Мюнхгаузена, который сам себя за волосы вытащил из болота .


Именно оттуда это название и пошло, если кто не в курсе.

И еще — надо всегда помнить про принцип dogfood. Если разработчик делает "самый лучший в мире язык", а сам критически важные части своего проекта пишет на совсем другом языке, то это многое говорит о качестве этого языка.
Re[17]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.07 13:22
Оценка:
Здравствуйте, eao197, Вы писали:

E>Ну если подходить к определению понятий, то:

E>

E>The most common reason for wanting to translate source code is to create an executable program. The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language or machine language). A program that translates from a low level language to a higher level one is a decompiler. A program that translates between high-level languages is usually called a language translator, source to source translator, or language converter. A language rewriter is usually a program that translates the form of expressions without a change of language.


E>R# в большей степени language translator, чем compiler.

E>В отличии от того же DMD или GDC.

Ты как всегда выдрал фразу из контекста и интерпретировал ее как тебе было угодно. Прочти, плиз, начало этой статьи. А потом еще поинтересуйся значением "most common".

В любом случае ты как всегда докапался до терминалогии и как всегда же посторался уйти от сути проблемы.

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

Говорить с людьми ведущими дискуссию таки образом я не намерен. Научишся говорить по существу — подходи. А пока, пока.

ЗЫ

Сообщение я твое прочел. Твои слова четко подтверждают то, что ты не в зуб ногой в данной проблеме.
Что касается "позволяешь себе смеятся над словами человека, который проделывал", то я не смеялся над ним. Я просто говорил, что его отмазки смехотворны.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Full closures in DMD 2.007
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.07 13:22
Оценка:
Здравствуйте, FR, Вы писали:

FR>Так большинство спорных вопросов сильно субъективны, так что все зависит от точки зрения.


Большинство вопросов объективны. Суждения субъективный, к сожалению...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Bootstrapping
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.07 13:22
Оценка:
Здравствуйте, FR, Вы писали:

FR>Я кстати писал, а ты?


И я, кстати.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Bootstrapping
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.07 13:22
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Да, можно обернуть LLVM в C-шный интерфейс и использовать LLVM через эту обёртку, но именно это я и называю «лишние сложности».


Это нормальная практика. Как раз ненормальная практика предоставлять АПИ к универсальным библиотекам на С++.

ПС>А если LLVM сгенерировал неправильный ассемблерный код и я хочу в отладчике пройтись по исходникам LLVM и посмотреть, что он там делает? С bootstrapping-ом так не получится, придётся усеивать код LLVM отладочными печатями (отладка в стиле printf), и это я тоже называю «лишние сложности».


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

VD>>Вот только большинство серьезных языков таки бутсрапятся. В том числе С, С++,

ПС>С этими языками понятно: серьёзную программу имеет смысл писать на C/C++, в том числе если эта программа – компилятор C/C++.

А, ну, если "серьзную", тогда конечно. Вот только, извини, но это несерьезный разговор. Ты просто плохо знаешь другие языки. Компиляторы уж точно удобнее писать на языках поддерживающих ФП, а это как раз почти весь список приведенный мной за исключением как раз таки С и С++, ну, и Ява, конечно.

VD>>Ява, ОКамл, F#, Nemerle, Scala, Lisp.

ПС>А эти bootstrapping-овые компиляторы – оптимизирующие?

ОКамла — да. Лисп — это вообще динамический язык с аля JIT-компиляцией. У Лиспа имются нехилые оптимизирующие компиляторы. Языкам вроде Ява, F#, Nemerle и Scala реализовывать оптимизации на уровне фронтэнда смысла особого не имеет, так как они генерируют промежуточный код (байткод Явы для Ява и Scala и MSIL для F# и Nemerle. Однако почти все эти языки делают рад оптимизаций требуемый для ФП. Так они обязательно заменяют концевую рекурсию на циклы. В С++ это не гаранируется, хотя без этого о поддержке ФП можно говорить только с натяжкой.

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

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


Сложные оптимизации обычно делают на уровне промежуточного кода. А это уже прераготива бэкэнда. Тут же речь идет о фронтэнде. Читайте теорию компиляторостроения .

ПС> А искать ошибку, думаю, будет очень тяжело, учитывая несколько стадий bootstrapping-а (для получения оптимизирующего компилятора) и отсутствие среды разработки с интегрированным отладчиком.


1. Отсутствие IDE никак не связана с тем бутстрапится компилятор или нет. Скажем, для Немерле и С++ среды есть, хотя языки бутстрапятся, а для Ди полноценной среды нет, хотя она и на С++ пишется.
2. Я лично не раз искал ошибки в бутсрамном компиляторе. Никаких проблем с этим нет. Есть проблема связанная с тем, что скомпилровавшийся компилятор может не собрать сам сбея из исходников. Но для ее предотвращения испоьзуется простой прием. Вводится несколько стадий компиляции и если они все не прошли, то компилятор не заливается в систему храения версий, а если кто-то залил по недомыслию, то откатывается (или правится, если это можно сделать).

VD>>Delphi и C#, правда написаны на С++,

ПС>Насколько я знаю, компиляторы Delphi и C++ Builder имеют общий back-end (оптимизирующий).

Это не имеет никакого отношения к делу. Бэкэнд может быть любой. Скажем, тот же Delphi в качестве бэкэнда использует в том числе и дотнет.

ПС> Думаю, это одна из причин того, что компилятор Delphi написан на C++.


Нет. Причина была озвучина — Delphi было просто неудобно писать на Delphi. Первая версия как раз была написана на Обжект Паскле.

VD>>но команда C#, насколько мне известно, очень хотела бы переписать компилятор на C#, однако менеджеры не дают пока.

ПС>Если компилятор C# напишут на C#, то кому и какая от этого будет польза?

1. Польза будет самим разработчикам компилятора, так как его попросту будет проще правит и развивать.
2. Поьза будет пользователям, так как в компилятор можно будет очень просто встроить систему событий (как в современном компиляторе Явы) которая позволит делать некоторые приятные вещи вроде инструментирования кода, дополнительных проверок и т.п. Сейчас для подобной фичи прийдется писать море оберточного кода.

ПС>Будет ли новый компилятор быстрее старого?


Может и не будет. Главное чтобы особо медленее не был. Но это больше зависит не от того на чем написан компилятор, а от того как он написан.

ПС>Здесь почти согласен. Действительно, хочется писать на новом языке как можно скорее. Сомневаюсь только по поводу «быстрее». Что, компилятор, написанный на Java, будет быстрее чем компилятор, написанный на C++? И что, Java – более мощный язык, чем C++?


"Быстрее" — не значит, что компилятор будет быстрее. "Быстрее" значит, что сам компилятор будет получен быстрее, т.е. его будет быстрее писать.

Пример: Компиляторы Немерле и Скалы пишутся меньшее время чем компилятор Ди, но при сравнивом объеме реализуют больше более сложных фич.

ПС>Тестировать компилятор, по-моему, лучше не самим собой, а тестами.


Тесты тестами. Но они а) всегда будут сентетическими (далекими от реальной жизни), б) никогда не покроют 100% случаев использования. Так что тесты тестами, но наличие больших проектов всегда положительный фактор. В начале жизни языка его компилятор всегда будет евляеться самым большим и всегда живым проектом.

ПС>А то, что bootstrapping ограничивает свободу авторов языка – скорее минус, чем плюс.


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

ПС> Вряд ли можно заранее всё предусмотреть, поэтому в молодом языке скорее всего будет много ломающих изменений (у меня сложилось такое впечатление от книги Страуструпа «Дизайн и эволюция C++»).


1. Все нужно проектировать. Чем тщательнее это сделать, тем логичнее будет язык. Так что знание того, что ты бутстрапишся подстегивает к более грамотному проектированию. Отсуствие качественной стратегии — это главный бич Ди.
2. Все конечно не придусморишь, но это не повод ломать то что есть. Большинство новшеств можно вносить не меняя сам язык, арасширяя его. Опять же хорошо видно на Скала и Немерле.

ПС> Да и в немолодом языке иногда есть смысл сделать ломающее изменение.


Ага. Вот в С++ никак не могут решиться, хотя ой как нужно...

ПС> В C++ это были:

ПС>* Область видимости for-переменной (раньше до конца охватывающего блока, теперь в рамках for-а).

Это не правда. Фор был определен стандартом еще в 98-ом. Это ты путаешь С++ и его реализацию в MC VC. Стандарт не изменялся.

ПС>* Время жизни временных объектов (раньше до конца блока, теперь «до точки с запятой»). Правда, ломает только плохой код, например:

ПС>
ПС>string GetName()
ПС>{
ПС>  ...
ПС>}

ПС>void Load(...)
ПС>{
ПС>  const char* pName = GetName().c_str();
ПС>  ...
ПС>}
ПС>

ПС>* Неудачный new (раньше возвращал NULL, теперь бросает исключение).

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

У С++ есть только один стандарт, появившийся в 98-ом, но принятый только в 91-вом (есл не ошибаюсь). Так что ломающих изменений тут и быть не могло пока что. Ну, разве что если говорить о жизни языка до стандарта. Там их было не мало. Но тем не мнее Страуструп переписал компилятор сам не себе же и не пожалел об этом.

ПС>По-моему, ломающие изменения в языке – не такая уж страшная вещь.


Для самого компилятора — нет, так как каждая версия языка учитывает их. А вот для софта написанного на нем — это геморой. Помнится когда VC приводили в соответствие со стандартом, я убил пару месяцев на то чтобы изменить свои проекты. И это еще мне нужно было очень... А многие тупо забивают на новую версию и живут на старой. В итоге получается, что код который ты нашел в Интернете нельзя скомпилировать на современной версии компилятора.

ПС>Boost – не компилятор, но разумное зерно в этих словах есть.


Наверно есть. К теме только отношения не имеет.


ПС>

ПС>3. Работая над компилятором на создаваемом языке разработчики получают больше практики работы на этом язке и могут более адкеватно оценивать предложения по его изменению и вносить собственные предожения.

ПС>Чтобы получить серьёзный опыт программирования на новом языке необязательно использовать bootstrapping.

Не обязательно. Но работа над языком требует много времени, и писать еще один проекто чтобы попробовать свое творение оказывается слишком затратно. А тут ты и компилятор развивашь, и пишешь на новом языке. По любому опыта получается больше. Иначе язык получается слишком надуманным. Он делается не для себя, а для галочки.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Bootstrapping
От: FR  
Дата: 03.12.07 14:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD> Однако почти все эти языки делают рад оптимизаций требуемый для ФП. Так они обязательно заменяют концевую рекурсию на циклы. В С++ это не гаранируется, хотя без этого о поддержке ФП можно говорить только с натяжкой.


Практически все современные C++ компиляторы заменяют хвостовую рекурсию. D тоже.

VD>К сведению, фронтэнд компилятора Ди так же не делает много оптимизаций, да и те что делает, делает скорее потому, что бэкэнды их не делают.


Судя по скорости работы программок скомпилированных g++ против gdc, D делает их или чуть лучше или чуть больше
Re[12]: Bootstrapping
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.07 15:15
Оценка:
Здравствуйте, FR, Вы писали:

VD>> Однако почти все эти языки делают рад оптимизаций требуемый для ФП. Так они обязательно заменяют концевую рекурсию на циклы. В С++ это не гаранируется, хотя без этого о поддержке ФП можно говорить только с натяжкой.


FR>Практически все современные C++ компиляторы заменяют хвостовую рекурсию. D тоже.


Почти не считается.

VD>>К сведению, фронтэнд компилятора Ди так же не делает много оптимизаций, да и те что делает, делает скорее потому, что бэкэнды их не делают.


FR>Судя по скорости работы программок скомпилированных g++ против gdc, D делает их или чуть лучше или чуть больше


Оптимизации делаются в основном бэкэндами. Ди использует те же бэкэнды. Так что не придумывай.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Bootstrapping
От: FR  
Дата: 03.12.07 16:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Почти не считается.


Считается
Так как я не пользуюсь теми что не подерживают

VD>>>К сведению, фронтэнд компилятора Ди так же не делает много оптимизаций, да и те что делает, делает скорее потому, что бэкэнды их не делают.


FR>>Судя по скорости работы программок скомпилированных g++ против gdc, D делает их или чуть лучше или чуть больше


VD>Оптимизации делаются в основном бэкэндами. Ди использует те же бэкэнды. Так что не придумывай.


Я тестировал:

http://www.gamedev.ru/flame/forum/?id=66154&amp;page=13#183
http://www.gamedev.ru/flame/forum/?id=66154&amp;page=17#249

около 10% вполне уже ощутимо.

Притом там был тупой в лоб перевод сишного алгоритма
Re[9]: Bootstrapping
От: Delight  
Дата: 04.12.07 05:37
Оценка:
Здравствуйте, Andrei F., Вы писали:

AF>Именно оттуда это название и пошло, если кто не в курсе.


Мюнхаузен вроде не при чём:

to pull oneself up by one's bootstraps — (idiomatic) To begin an enterprise or recover from a setback without any outside help; to succeed only on one's own effort or abilities.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re[10]: Bootstrapping
От: Andrei F.  
Дата: 04.12.07 06:23
Оценка: 2 (2)
Здравствуйте, Delight, Вы писали:

D>Мюнхаузен вроде не при чём:


D>to pull oneself up by one's bootstraps — (idiomatic) To begin an enterprise or recover from a setback without any outside help; to succeed only on one's own effort or abilities.


Это в русском переводе он себя вытаскивает за волосы, а в оригинале — за ремешки на обуви (bootstraps). Оттуда выражение и пошло.

PS
кстати, еще одно выражение с забавным происхождением — это little/big endian, в смысле — порядок следования байтов в слове. Так вот это выражение происходит из "приключений Гулливера" Свифта, там где были люди которые спорили, с какой стороны надо правильно разбивать яйцо (в русском переводе — остроконечники и тупоконечники)
Re[11]: Bootstrapping
От: Пётр Седов Россия  
Дата: 04.12.07 10:20
Оценка:
Здравствуйте, Andrei F., Вы писали:
AF>кстати, еще одно выражение с забавным происхождением — это little/big endian, в смысле — порядок следования байтов в слове. Так вот это выражение происходит из "приключений Гулливера" Свифта, там где были люди которые спорили, с какой стороны надо правильно разбивать яйцо (в русском переводе — остроконечники и тупоконечники)
А PDP-endian
Автор: Пётр Седов
Дата: 03.12.07
– это с какой стороны яйцо разбивать ?
Пётр Седов (ушёл с RSDN)
Re[12]: Bootstrapping
От: anton_t Россия  
Дата: 04.12.07 13:53
Оценка: :))
Здравствуйте, Пётр Седов, Вы писали:

ПС>Здравствуйте, Andrei F., Вы писали:

AF>>кстати, еще одно выражение с забавным происхождением — это little/big endian, в смысле — порядок следования байтов в слове. Так вот это выражение происходит из "приключений Гулливера" Свифта, там где были люди которые спорили, с какой стороны надо правильно разбивать яйцо (в русском переводе — остроконечники и тупоконечники)
ПС>А PDP-endian
Автор: Пётр Седов
Дата: 03.12.07
– это с какой стороны яйцо разбивать ?


Проглотить не разбивая
Re: Александреску собирается писать книгу о D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.12.07 06:06
Оценка: 9 (3) :))) :)
На сайте Андрея Александреску появилась информация, что он собирается в октябре 2008 года выпустить книгу "The D Programming Language":

Of possible interest:

Andrei is working on "The D Programming Language" book, slated to hit the shelves in October 2008. His interest in the D programming language stems from Andrei's active participation in the design of D 2.0 as a close collaborator of D's creator, Walter Bright.


Брайт говорит, что в ней будет описываться D2.0.

Поэтому появляется надежда, что к этому времени D 2.0 будет стабилизирован и не начнется работа над D 3.0, разрушающем совместимость с D 2.0 (как это произошло с D1).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Александреску собирается писать книгу о D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.12.07 19:40
Оценка: 1 (1)
E>Поэтому появляется надежда, что к этому времени D 2.0 будет стабилизирован и не начнется работа над D 3.0, разрушающем совместимость с D 2.0 (как это произошло с D1).

Вот, что мне ответил Брайт по этому поводу:

> Could we expect that D 2.0 will be stable enough at Oct 2008 and there won't be new compatibility-breaking changes in the language?

Yes.



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Александреску собирается писать книгу о D
От: Кодёнок  
Дата: 08.12.07 08:05
Оценка: +1 :))) :)))
Здравствуйте, eao197, Вы писали:

E>Вот, что мне ответил Брайт по этому поводу:

>> Could we expect that D 2.0 will be stable enough at Oct 2008 and there won't be new compatibility-breaking changes in the language?

E>Yes.


Это «Yes, you can expect» или «Yes, it will be stable?»
Re[4]: Александреску собирается писать книгу о D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.12.07 08:22
Оценка: :))
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, eao197, Вы писали:


E>>Вот, что мне ответил Брайт по этому поводу:

>>> Could we expect that D 2.0 will be stable enough at Oct 2008 and there won't be new compatibility-breaking changes in the language?

E>>Yes.


Кё>Это «Yes, you can expect» или «Yes, it will be stable?»


Или даже "Yes, there won't be new changes"

Брайт уже оговорился, что на горизонте маячит D 3.0 с поддержкой элементов функционального программирования, чтобы хорошо встретить приближающуюся многоядерность процессоров:

It's far too early to make plans, but I expect 3.0 would be a push to support functional programming and other things for multicore programming.



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Александреску собирается писать книгу о D
От: alexeiz  
Дата: 08.12.07 10:32
Оценка:
Здравствуйте, Кодёнок, Вы писали:

E>>Yes.


Кё>Это «Yes, you can expect» или «Yes, it will be stable?»


What part of yes don't you understand?
Re: Книга о D
От: naryl  
Дата: 08.12.07 11:33
Оценка: 45 (3)
Появилась информация об уже написанной книге о D.
"Learning to Tango with D" By Kris Bell, Lars Ivar Igesund, Sean Kelly, Michael Parker

В этой книге описывается основной синтаксис, обьектно-ориентированный подход к разработке на D и библиотека Tango.

Пост на блоге Michael Parker
А здесь книгу можно купить за $13.59.
Re[5]: Александреску собирается писать книгу о D
От: FR  
Дата: 09.12.07 13:25
Оценка:
Здравствуйте, eao197, Вы писали:

E>Брайт уже оговорился, что на горизонте маячит D 3.0 с поддержкой элементов функционального программирования, чтобы хорошо встретить приближающуюся многоядерность процессоров:


Главное чтобы он сюда http://all-technology.com/eigenpolls/dwishlist/ не заглянул

Хотя есть там и нужные вещи, например те же продолжения http://all-technology.com/eigenpolls/dwishlist/index.php?it=141 хотя бы в виде yield а лучше полноценные как в схеме не помешали бы.
Re[2]: Книга о D
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.01.08 08:18
Оценка: 6 (2)
Здравствуйте, naryl, Вы писали:

N>Появилась информация об уже написанной книге о D.

N>"Learning to Tango with D" By Kris Bell, Lars Ivar Igesund, Sean Kelly, Michael Parker

N>В этой книге описывается основной синтаксис, обьектно-ориентированный подход к разработке на D и библиотека Tango.


N>Пост на блоге Michael Parker

N>А здесь книгу можно купить за $13.59.

Сегодня в digitalmars.D.announce был сделан официальный аннонс этой книги. Электронная версия доступна уже сейчас, бумажную обещают в течении 3-х недель.

http://www.apress.com/book/view/9781590599600
http://www.amazon.com/Learn-Tango-D-Kris-Bell/dp/1590599608
http://www.dsource.org/projects/tango/wiki/LearnToTangoWithD


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Ходят слухи
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.02.08 07:23
Оценка: :)
что в Microsoft разрабатывается новый язык под рабочим названием D

Microsoft declares its modeling love with a new language, ‘D’


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ходят слухи
От: FR  
Дата: 11.02.08 07:48
Оценка:
Здравствуйте, eao197, Вы писали:

E>что в Microsoft разрабатывается новый язык под рабочим названием D


Надеюсь Вальтер их засудит
Re[2]: Ходят слухи
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.02.08 23:23
Оценка:
Здравствуйте, eao197, Вы писали:

E>что в Microsoft разрабатывается новый язык под рабочим названием D


Это не слухи, это правда, я ссылку почти три месяца назад постил — Новый продукт от МС
Автор: AndrewVK
Дата: 29.11.07
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[3]: Ходят слухи
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 12.02.08 06:57
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


E>>что в Microsoft разрабатывается новый язык под рабочим названием D


AVK>Это не слухи, это правда, я ссылку почти три месяца назад постил — Новый продукт от МС
Автор: AndrewVK
Дата: 29.11.07


Под "слухами" я имел в виду не то, что новый продукт создается, а то, что его D называют


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Ходят слухи
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.02.08 10:02
Оценка:
Здравствуйте, eao197, Вы писали:

E>Под "слухами" я имел в виду не то, что новый продукт создается, а то, что его D называют


D это внутреннее имя.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[5]: Ходят слухи
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 12.02.08 10:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


E>>Под "слухами" я имел в виду не то, что новый продукт создается, а то, что его D называют


AVK>D это внутреннее имя.


Вот и забавно: когда крутишься рядом с D, то кажется, что о нем все знают. А тут выясняется, что не все, раз такое "раскрученное" название используют в качестве внутреннего имени нового проекта.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Ходят слухи
От: naryl  
Дата: 13.02.08 16:58
Оценка: :)
Walter Bright Wrote:
> Today I talked with some Microsoft insiders, and they assured me that
> there would be no forthcoming official product from Microsoft named
> "D".
>
> Here's the official Microsoft position:
>
> "For any existing work on languages currently under development, we have
> no plans to use the name 'D' as a final product brand." -- Microsoft
>
> And that closes the matter.

And, with that, I look forward to the imminent release of D# ...
Re: FP is comming...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.04.08 09:49
Оценка: 3 (1)
Язык D продолжает развиваться. Как здесь уже говорилось, к разработке дизайна языка и его стандартных библиотек подключился Андрей Александреску. Вскоре после этого появилась версия D2.0, в которой в язык была добавлена константность. В течении прошедшего с тех пор времени реализация константности в D2 менялась. Но, по последним заявлениям Брайта, сейчас ее вид близок к тому, что Брайту и Александреску хотелось бы иметь.

Вот свежая презентация от Александреску о том, какие цели ставятся перед константностью в D2 и почему константность именно такая, какая она сейчас есть:
Grafting Functional Support on Top of an Imperative Language (PDF, 132K, 37 слайдов).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: FP is comming...
От: FR  
Дата: 08.04.08 06:11
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вот свежая презентация от Александреску о том, какие цели ставятся перед константностью в D2 и почему константность именно такая, какая она сейчас есть:

E>Grafting Functional Support on Top of an Imperative Language (PDF, 132K, 37 слайдов).

То есть практически получается что у D будет чисто функциональное подмножество используя которое можно писать гарантировано без побочных эффектов?
Если так то очень интерсно.
Re[3]: FP is comming...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 08.04.08 07:43
Оценка: :)
Здравствуйте, FR, Вы писали:

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


E>>Вот свежая презентация от Александреску о том, какие цели ставятся перед константностью в D2 и почему константность именно такая, какая она сейчас есть:

E>>Grafting Functional Support on Top of an Imperative Language (PDF, 132K, 37 слайдов).

FR>То есть практически получается что у D будет чисто функциональное подмножество используя которое можно писать гарантировано без побочных эффектов?

FR>Если так то очень интерсно.

Да, насколько я понимаю цели Брайта и Александреску -- именно этого они и добиваются. Для этого в язык недавно было введено ключевое слово pure. И у меня сложилось впечатление, что в одной из ближайших версий D2 оно уже будет задействованно. По крайней мере, в какой-то конференции Брайт сказал "pure is comming"


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Ой, чо с D деется-то!?
От: gloomy rocker Россия  
Дата: 05.05.08 21:16
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Так что пусть он конечно будет. Это будет как минимум хорошим упреком Страуструпу. Но хватсаться его убогими фичами явно не стоит. Иначе все время будете получать в пример языки в которых тоже самое и намного больше реализовано куда лучше и уже работает. И снова будете злиться и кричать "а причем тут Немерле?".


FR>Мне кажется Немерле с такими горе агитаторами может оказатся в полной ж...

FR>В общем ничего кроме медвежьей услуги таким спамом не по теме вы Немерле не оказываете.
FR>Кстати где модераторы, раньше злобных функциональщиков за такое же поведение банили.

А по мне так в целом вполне нормальная реклама. Я писал на C++, C#, C#2.0, C#3.0, Nemerle. И я не случайно выстроил их именно в таком порядке — это нормальный прогрессивный процесс эволюции языков программирования.
Так держать! Любые выпады в сторону Немерле только добавят ему популярности, чему я только рад
... << RSDN@Home 1.2.0 alpha 4 rev. 1088>>
Скука — двигатель прогресса.
Re[12]: Ой, чо с D деется-то!?
От: FR  
Дата: 06.05.08 09:05
Оценка: 1 (1) +3
Здравствуйте, gloomy rocker, Вы писали:

GR>А по мне так в целом вполне нормальная реклама. Я писал на C++, C#, C#2.0, C#3.0, Nemerle. И я не случайно выстроил их именно в таком порядке — это нормальный прогрессивный процесс эволюции языков программирования.

GR>Так держать! Любые выпады в сторону Немерле только добавят ему популярности, чему я только рад

Популярность она разная бывает, здешний рассцвет культа ничего кроме оталкивания многих вменяемых людей по моему ни принес.
Re[12]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.05.08 11:03
Оценка: +1 :))) :)
Здравствуйте, gloomy rocker, Вы писали:

GR>А по мне так в целом вполне нормальная реклама. Я писал на C++, C#, C#2.0, C#3.0, Nemerle. И я не случайно выстроил их именно в таком порядке — это нормальный прогрессивный процесс эволюции языков программирования.


Ну ёпть! Уже давно и не сомневается никто, поскольку есть только две абсолютные вещи: ".NET -- наше все" и "нет жизни за пределами МКАД".


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: Ой, чо с D деется-то!?
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.05.08 11:20
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, gloomy rocker, Вы писали:


GR>>А по мне так в целом вполне нормальная реклама. Я писал на C++, C#, C#2.0, C#3.0, Nemerle. И я не случайно выстроил их именно в таком порядке — это нормальный прогрессивный процесс эволюции языков программирования.


E>Ну ёпть! Уже давно и не сомневается никто, поскольку есть только две абсолютные вещи: ".NET -- наше все" и "нет жизни за пределами МКАД".

Угу. А вот нормальный процесс эволюции программиста: "Березовская — Новосибирск — Зеленоград — Москва — Дармштадт — Ванкувер — Сан-Франциско — Карибский бассейн". Ты что-то рано финал обозначил.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Ой, чо с D деется-то!?
От: anton_t Россия  
Дата: 06.05.08 12:23
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


E>>Здравствуйте, gloomy rocker, Вы писали:


GR>>>А по мне так в целом вполне нормальная реклама. Я писал на C++, C#, C#2.0, C#3.0, Nemerle. И я не случайно выстроил их именно в таком порядке — это нормальный прогрессивный процесс эволюции языков программирования.


E>>Ну ёпть! Уже давно и не сомневается никто, поскольку есть только две абсолютные вещи: ".NET -- наше все" и "нет жизни за пределами МКАД".

S>Угу. А вот нормальный процесс эволюции программиста: "Березовская — Новосибирск — Зеленоград — Москва — Дармштадт — Ванкувер — Сан-Франциско — Карибский бассейн". Ты что-то рано финал обозначил.

А можно из Новосибирска сразу в Карибский бассейн?
Re[15]: Ой, чо с D деется-то!?
От: dr.Chaos Россия Украшения HandMade
Дата: 06.05.08 12:52
Оценка:
Здравствуйте, anton_t, Вы писали:

E>>>Ну ёпть! Уже давно и не сомневается никто, поскольку есть только две абсолютные вещи: ".NET -- наше все" и "нет жизни за пределами МКАД".

S>>Угу. А вот нормальный процесс эволюции программиста: "Березовская — Новосибирск — Зеленоград — Москва — Дармштадт — Ванкувер — Сан-Франциско — Карибский бассейн". Ты что-то рано финал обозначил.

_>А можно из Новосибирска сразу в Карибский бассейн?


Думаю можно, но есть сомнения что ЗП при этом значительно изменится.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[2]: FP is comming...
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.05.08 19:33
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вот свежая презентация от Александреску о том, какие цели ставятся перед константностью в D2 и почему константность именно такая, какая она сейчас есть:

E>Grafting Functional Support on Top of an Imperative Language (PDF, 132K, 37 слайдов).

Что же Ди движется в нужном направлении. Фичу вроде pure должен иметь любой гибридный язык (поддерживающий ФП и ИП). Не помешала бы она и в Немерле. Сейчас может от этого толку и мало, но в будущем эта подсказка компилятору способна решить многие проблемы.

Вопрос можно ли дойти до логической полноты двигаясь так поступательно. Язык еще не вышел, а уже весь погряз в эволюционном процессе. В конце концов введение ограничений далеко не самое нужное для хорошей поддержки ФП. На мой взгляд им нужно обратить внимание на более важные аспекты: уменьшить шум при описании локальных функций и лямбд, ввести паттерн-матчинг и поддержку алгебраических типов данных, создать набор стандартных функций (fold, map, и т.п.).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: FP is comming...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 13.05.08 06:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>...создать набор стандартных функций (fold, map, и т.п.).


std.algorithm.map, std.algorithm.reduce, std.algorithm.filter...


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
d phobos algorithm
Re[14]: Ой, чо с D деется-то!?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.08 20:13
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

S>Угу. А вот нормальный процесс эволюции программиста: "Березовская — Новосибирск — Зеленоград — Москва — Дармштадт — Ванкувер — Сан-Франциско — Карибский бассейн".


Или Редмонд-Гавайи. МС тут офис на Гавайях открыл ... И даже MVP один имеется.
... <<RSDN@Home 1.2.0 alpha 4 rev. 1082 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[4]: FP is comming...
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.06.08 23:54
Оценка:
Здравствуйте, eao197, Вы писали:

VD>>...создать набор стандартных функций (fold, map, и т.п.).


E>std.algorithm.map, std.algorithm.reduce, std.algorithm.filter...


ОК, но это один из 3 пунктов. К тому же не ясно почему строки вместо выражений и зачем нужно было вводить вторые скобки. Сравни сам.
D:
int[] arr = [ 1, 2, 3, 4, 5 ];
// Sum all elements
auto sum = reduce!("a + b")(0, arr);
assert(sum == 15);

Nemerle:
def arr = array[1, 2, 3, 4, 5];
// Sum all elements
def sum = arr.Fold(0, _ + _);
assert(sum == 15);

Причем этот код скопмпилируется только последними версиями D в то время как в Немерле это было с рождения (2004-ом году).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: FP is comming...
От: Critical Error ICQ: 123736611
Дата: 04.06.08 02:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>ОК, но это один из 3 пунктов. К тому же не ясно почему строки вместо выражений и зачем нужно было вводить вторые скобки. Сравни сам.

VD>D:
VD>
int[] arr = [ 1, 2, 3, 4, 5 ];
VD>// Sum all elements
VD>auto sum = reduce!("a + b")(0, arr);
VD>assert(sum == 15);
VD>

VD>Nemerle:
VD>
def arr = array[1, 2, 3, 4, 5];
VD>// Sum all elements
VD>def sum = arr.Fold(0, _ + _);
VD>assert(sum == 15);
VD>

VD>Причем этот код скопмпилируется только последними версиями D в то время как в Немерле это было с рождения (2004-ом году).

"a + b" как я понимаю mixin. Это ограничение языка, ничего уж тут не поделаешь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: FP is comming...
От: FR  
Дата: 04.06.08 04:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>ОК, но это один из 3 пунктов.


Остальные в работе, обещали к осени вместе с релизом второй версии. Шум с лямбдами скорее всего останется, паттерн матчинг будет (довольно ограниченно) подерживатся в макросах, варианты скорее всего можно будет в более — менее удобоваримом виде соорудить на макросах.

VD>К тому же не ясно почему строки вместо выражений и зачем нужно было вводить вторые скобки. Сравни сам.


Это миксины, которые как говорил Вальтер нельзя использовать для таких целей, но пришел Александреску и все испортил
По сравнению с немерли вполне нормально, для "улучшенного C++"

VD>Причем этот код скопмпилируется только последними версиями D в то время как в Немерле это было с рождения (2004-ом году).


Было бы удивительно если этого не было в потомке Окамла
Re[6]: FP is comming...
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.06.08 06:37
Оценка:
Здравствуйте, FR, Вы писали:

FR>Это миксины, которые как говорил Вальтер нельзя использовать для таких целей, но пришел Александреску и все испортил




FR>По сравнению с немерли вполне нормально, для "улучшенного C++"


По сравнению с Немерле грязновато. Насколько я помню в бустре были очень похожие вещи. Тоже грязненько, но как-то работает. Так что могу согласиться только с тем, что это в духе С++.

FR>Было бы удивительно если этого не было в потомке Окамла


А кто мешал перед созданием "улучшенного C++" изучить не только С++, но еще и тот самый ОКамл? Даже Степанов это проделал. Не в его силах, конечно, было улучшить С++, чтобы получилось красиво, но тем не менее STL получился весьма функциональным (насколько это возможно в С++).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: FP is comming...
От: FR  
Дата: 24.06.08 03:39
Оценка:
Здравствуйте, VladD2, Вы писали:


FR>>По сравнению с немерли вполне нормально, для "улучшенного C++"


VD>По сравнению с Немерле грязновато. Насколько я помню в бустре были очень похожие вещи. Тоже грязненько, но как-то работает. Так что могу согласиться только с тем, что это в духе С++.


Нет не в духе, в духе C++ нужно было бы сделать на трехэтажных шаблонах, и получилось бы намного кривее
С бустом не сравнить, там шаг влево шаг вправо расстрел. Здесь все работает нормально а не как-то.

FR>>Было бы удивительно если этого не было в потомке Окамла


VD>А кто мешал перед созданием "улучшенного C++" изучить не только С++, но еще и тот самый ОКамл? Даже Степанов это проделал. Не в его силах, конечно, было улучшить С++, чтобы получилось красиво, но тем не менее STL получился весьма функциональным (насколько это возможно в С++).


А обязательно все делать функциональным?
Re[8]: FP is comming...
От: OCTAGRAM Россия http://octagram.name/
Дата: 26.06.08 08:23
Оценка:
(repost)
FR пишет:
>
> А обязательно все делать функциональным?

Сдаётся мне, чистое ФП будет такой же ерундой, как сейчас чистое ООП.
По–хорошему нужен смешанный подход. Но и не так, что "мы вам дали лямбды
— всё, теперь есть ФП".

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[9]: FP is comming...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.06.08 08:28
Оценка:
Здравствуйте, OCTAGRAM, Вы писали:

OCT>(repost)

OCT>FR пишет:
>>
>> А обязательно все делать функциональным?

OCT>Сдаётся мне, чистое ФП будет такой же ерундой, как сейчас чистое ООП.

OCT>По–хорошему нужен смешанный подход. Но и не так, что "мы вам дали лямбды
OCT>— всё, теперь есть ФП".

Для того, чтобы в D было ФП там делаются не только лямбды, но и иммутабельные типы, и специальный модификатор pure для определения функций/методов без побочных эффектов.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: FP is comming...
От: Курилка Россия http://kirya.narod.ru/
Дата: 26.06.08 08:37
Оценка:
Здравствуйте, OCTAGRAM, Вы писали:

OCT>(repost)

OCT>FR пишет:
>>
>> А обязательно все делать функциональным?

OCT>Сдаётся мне, чистое ФП будет такой же ерундой, как сейчас чистое ООП.

OCT>По–хорошему нужен смешанный подход. Но и не так, что "мы вам дали лямбды
OCT>— всё, теперь есть ФП".

Ну если по-честному, то если к лямбдам (полноценному лямбда-исчислению) добавить механизмы ввода-вывода, то собственно это всё, что нужно для программирования
Правда это всё дело ещё надо наложить как-то хотябы на х86 (и вообще на архитектуру фон Неймана), плюс механизмы I/O должны покрывать туеву хучу оборудовния
P.S. Не хотелось бы флейма на эту тему, это просто одна из возможных точек зрения.
P.P.S. На вопрос FR яб ответил так: конечно не обязательно, только введение импертивной составляющей делает reasoning (блин, не знаю как это по-русски сказать) по поводу кода гораздо более сложным, если не нереальным, хотя и на императивных языках есть средства улучшения качества кода (модульность вроде как сильно от функциональности/императивности не зависит, когда реализована нормально)
Re[10]: FP is comming...
От: OCTAGRAM Россия http://octagram.name/
Дата: 26.06.08 11:44
Оценка:
Курилка пишет:
>
> Ну если по-честному, то если к лямбдам (полноценному лямбда-исчислению)
> добавить механизмы ввода-вывода, то собственно это всё, что нужно для
> программирования
> Правда это всё дело ещё надо наложить как-то хотябы на х86 (и вообще на
> архитектуру фон Неймана)

Да, вот я об этом. У меня субъективное чувство, что современные попытки
скрестить ФП с императивным — это постановка телеги впереди лошади.
Вроде нужно? — нужно — и добавляются деревья, но за этими деревьями не
видно леса.

У меня несколько раз было так, что я сначала, отталкиваясь от проблемы,
вижу очертания решения, и обнаруживаю, что решение существует. Логично
ожидать, что это и сейчас так. Что касается ФП, то я тут ещё слишком
слеп, но мои представления о том, как всё должно быть устроено, таковы:

Императивные куски и функциональные существуют как бы перпендикулярно.
Здесь
Автор: OCTAGRAM
Дата: 22.05.08

я оставил без внимания причину собственно пересчётов. Пересчёты делались
как бы сами собой. Так, конечно, не пойдёт, поэтому эта модель должна
быть дополнена чем–то императивным, и именно этот императивный кусок
должен быть причиной (пере)вычисления функций. Т. е. функциональная
часть — это лабиринт, а императивная часть — это описание, куда по этому
лабиринту идти.

Надо посмотреть, как в Haskell императивные приёмы выглядят. Буду
созревать пока что.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[11]: FP is comming...
От: Курилка Россия http://kirya.narod.ru/
Дата: 26.06.08 12:05
Оценка: +1
Здравствуйте, OCTAGRAM, Вы писали:

OCT>Курилка пишет:

>>
>> Ну если по-честному, то если к лямбдам (полноценному лямбда-исчислению)
>> добавить механизмы ввода-вывода, то собственно это всё, что нужно для
>> программирования
>> Правда это всё дело ещё надо наложить как-то хотябы на х86 (и вообще на
>> архитектуру фон Неймана)

OCT>Да, вот я об этом. У меня субъективное чувство, что современные попытки

OCT>скрестить ФП с императивным — это постановка телеги впереди лошади.
OCT>Вроде нужно? — нужно — и добавляются деревья, но за этими деревьями не
OCT>видно леса.

OCT>У меня несколько раз было так, что я сначала, отталкиваясь от проблемы,

OCT>вижу очертания решения, и обнаруживаю, что решение существует. Логично
OCT>ожидать, что это и сейчас так. Что касается ФП, то я тут ещё слишком
OCT>слеп, но мои представления о том, как всё должно быть устроено, таковы:

OCT>Императивные куски и функциональные существуют как бы перпендикулярно.

OCT>Здесь
Автор: OCTAGRAM
Дата: 22.05.08

OCT>я оставил без внимания причину собственно пересчётов. Пересчёты делались
OCT>как бы сами собой. Так, конечно, не пойдёт, поэтому эта модель должна
OCT>быть дополнена чем–то императивным, и именно этот императивный кусок
OCT>должен быть причиной (пере)вычисления функций. Т. е. функциональная
OCT>часть — это лабиринт, а императивная часть — это описание, куда по этому
OCT>лабиринту идти.

Знаешь, императивность/функциональность — есть по сути просто 2 взгляда на одно то же.
Представления у тебя какие-то очень туманные, честно скажу "не осилил", моё субъективное впечатление — за кучей разных слов ты в итоге сам себя запутываешь. Как говорил по-моему Цезарь "разделяй и властвуй", у тебяж всё в одну кучу "свалено".
Реально у тебя задача там описана вполне функциональная — преобразовать А в Б, фактически тебе нужна функция А->Б.
Безусловно это дело можно императивно решить. Выбор по сути дела за тобой, что конкретно тебе удобно, правда функциональное решение, скорее всего дало бы некоторое число полезных "фенечек", как возможность композиции функций, независимость по ссылкам и т.п.
Только вот потребует она также "перестройки сознания" чтоли, которая, вполне возможно, нафиг не нужна, если уже есть вполне хорошее решение.

OCT>Надо посмотреть, как в Haskell императивные приёмы выглядят. Буду

OCT>созревать пока что.
Может не нужны тебе эти монады, а?
Re[12]: FP is comming...
От: OCTAGRAM Россия http://octagram.name/
Дата: 26.06.08 13:24
Оценка:
Курилка пишет:

> Реально у тебя задача там описана вполне функциональная — преобразовать

> А в Б, фактически тебе нужна функция А->Б.

Фактически мне нужно, чтобы функция не только вычислялась, но и
перевычилялась. Чтобы при изменении А можно было бы отобразить эти
изменения на Б. Как раз здесь и появляется состояние архитектуры фон
Неймана. Состояние программы описывается содержимым промежуточных
вычислений и их вычисленностью. В конечном результате может вдруг
отпасть необходимость. А, может быть, делая перевычисление, нужно
сохранять и прошлый результат, потому что он ещё где–то нужен. Этим
управляет императивная часть.

> Безусловно это дело можно императивно решить. Выбор по сути дела за

> тобой, что конкретно *тебе *удобно

> Только вот потребует она также "перестройки сознания" чтоли, которая,

> вполне возможно, нафиг не нужна, если уже есть вполне хорошее решение.

За решить проблема не стала. Хочется формализовать неявные зависимости.

> OCT>Надо посмотреть, как в Haskell императивные приёмы выглядят. Буду

> OCT>созревать пока что.

> Может не нужны тебе эти монады, а?


А может, наоборот, это ключевой момент?

> моё субъективное впечатление — за кучей разных слов ты в итоге сам

> себя запутываешь

Возможно, это слабо изведанная территория, первопроходцам тяжело.
До Erlang был PLEX, и в нём были изъяны, но это выяснилось уже после.
Вот и сейчас, быть может, в мире FP есть только ФПшные PLEX'ы.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[13]: FP is comming...
От: Курилка Россия http://kirya.narod.ru/
Дата: 26.06.08 13:41
Оценка: 2 (1)
Здравствуйте, OCTAGRAM, Вы писали:

OCT>Курилка пишет:


>> Реально у тебя задача там описана вполне функциональная — преобразовать

>> А в Б, фактически тебе нужна функция А->Б.

OCT>Фактически мне нужно, чтобы функция не только вычислялась, но и

OCT>перевычилялась. Чтобы при изменении А можно было бы отобразить эти
OCT>изменения на Б. Как раз здесь и появляется состояние архитектуры фон
OCT>Неймана. Состояние программы описывается содержимым промежуточных
OCT>вычислений и их вычисленностью. В конечном результате может вдруг
OCT>отпасть необходимость. А, может быть, делая перевычисление, нужно
OCT>сохранять и прошлый результат, потому что он ещё где–то нужен. Этим
OCT>управляет императивная часть.

Ну вот тут-то и нужна тебе перестройка сознания. Ты думаешь что она нужна, т.к. не можешь себе представить варианта, как это может быть выражено без императивности. Чисто для затравки глянь вон на бумеранг к примеру, хотя, может быть это будет слишком жёстко.
Ну а так вообще имхо у тебя задача по сути состоит в манипулировании графами, а уж этого добра в ФП выше крыши.

OCT>За решить проблема не стала. Хочется формализовать неявные зависимости.

Если ты хочешь чёткие зависимости, то придётся имхо копать всёж в сторону ФП, правда для начала надо это дело на бумажке и в голове формализовать, прежде чем кодить

>> OCT>Надо посмотреть, как в Haskell императивные приёмы выглядят. Буду

>> OCT>созревать пока что.

>> Может не нужны тебе эти монады, а?


OCT>А может, наоборот, это ключевой момент?

Ну попробуй разберись, вон Кирпичев новый монадный туториал выложил, может тебе поможет.

>> моё субъективное впечатление — за кучей разных слов ты в итоге сам

>> себя запутываешь

OCT>Возможно, это слабо изведанная территория, первопроходцам тяжело.

OCT>До Erlang был PLEX, и в нём были изъяны, но это выяснилось уже после.
OCT>Вот и сейчас, быть может, в мире FP есть только ФПшные PLEX'ы.

Про плексы ничего не знаю, поэтму врать не буду. В мире же ФП есть только лямбды, а остальное лишь настройки над ними.
Re[14]: FP is comming...
От: OCTAGRAM Россия http://octagram.name/
Дата: 26.06.08 19:02
Оценка:
Курилка пишет:
>
> Ну вот тут-то и нужна тебе перестройка сознания. Ты думаешь что она
> нужна, т.к. не можешь себе представить варианта, как это может быть
> выражено без императивности.

Продемонстрирую, что я имел в виду на примере Пролога:

В Прологе есть предикат concat(A, B, C). У него

Собственно, конкатенация. (напрямую)
Проверить, является ли C конкатенацией A и B.
Проверить, начинается/заканчивается ли одна строка на другую.
Перебор разбиений строки в последующих предикатах.

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

Вот также и здесь, функциональное описание позволит не только
использование функций напрямую (вычисления), но и делать перевычисления.

> Чисто для затравки глянь вон на бумеранг

За линк спасибо

> к примеру, хотя, может быть это будет слишком жёстко.

танки грязи не боятся

>

> OCT>Возможно, это слабо изведанная территория, первопроходцам тяжело.
> OCT>До Erlang был PLEX, и в нём были изъяны, но это выяснилось уже после.
> OCT>Вот и сейчас, быть может, в мире FP есть только ФПшные PLEX'ы.
>
> Про плексы ничего не знаю, поэтму врать не буду.

PLEX — это предшественник Эрланга. В "History of Erlang" критиковалась
невозможность обработать сообщения не в том порядке, в каком они
приходили. Когда делался Erlang, было написано много строк кода на PLEX,
но когда не было ни самого PLEX, ни кода на нём, это неудобство не могло
быть очевидно создателям PLEX.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[15]: FP is comming...
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.06.08 05:34
Оценка:
Здравствуйте, OCTAGRAM, Вы писали:

OCT>Продемонстрирую, что я имел в виду на примере Пролога:


OCT>В Прологе есть предикат concat(A, B, C). У него


OCT>Собственно, конкатенация. (напрямую)

OCT>Проверить, является ли C конкатенацией A и B.
OCT>Проверить, начинается/заканчивается ли одна строка на другую.
OCT>Перебор разбиений строки в последующих предикатах.

OCT>И из таких многофункциональных конструкций строятся более сложные

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

Чтот чем дальше, тем больше у меня ощущение, что ты "плаваешь" в предмете.
Пролог — это не функциональный язык, а логический, парадигма там несколько другая, поэтому не стоит смешивать.
В функциональных языках перебор ты будешь задавать более или менее явно (хотя никто не мешает создать eDSL как некий аналог Пролог-машины, на хаскеле вроде не один пример есть, но это и на имеративе можно сделать).
А программисты не всегда помнят как обрабатывается программа (иначе бы багов вообще не было ), ну и оптимизаторы есть везде, императивность/функциональщина тут особо не при чём (тот же ГЦ по сути есть оптимизатор нацеленный на то чтоб программер "забил" на ручное управление памятью).
Что такое "многофункциональные конструкции" я вообще как-то не понимаю.
В ФП функция — вещь однозначная и 1 функция выполняет ровно 1 функцию, пусть возможно и не особо тривиальную.
Термин "перевычисления" тоже как-то мне непонятен (если речь про перебор, то это, повторюсь не ФП).
Ну и на ФП нет предикатов и такая задача будет решаться каким-нибудь аналогом императивных алгоритмов сравнения. А функция перебора (если таковая нужна) будет вызывать вот эту функцию сравнения. Ну тупо "разделяй и властвуй", каждая единица программы должна выполнять чётко ограниченную свою функцию (по-моему это универсальный принцип вменяемого программирования)

>> Чисто для затравки глянь вон на бумеранг

OCT>За линк спасибо
Обращайся, у меня их много

>> к примеру, хотя, может быть это будет слишком жёстко.

OCT>танки грязи не боятся
Ну там по-честному ещё много жести (кроме линз ещё всякие бананы, колючая проволока и т.п., можешь в "декларативном" поискать, там обсуждений вроде должно быть достаточно, а по сути это очень употребительные "огрызки" теории категорий), хотя я с этим бумерангом не ковырялся толком, как-то узкозаточенным мне показался и не особо нужным мне по моим задачам.

>>

>> OCT>Возможно, это слабо изведанная территория, первопроходцам тяжело.
>> OCT>До Erlang был PLEX, и в нём были изъяны, но это выяснилось уже после.
>> OCT>Вот и сейчас, быть может, в мире FP есть только ФПшные PLEX'ы.
>>
>> Про плексы ничего не знаю, поэтму врать не буду.

OCT>PLEX — это предшественник Эрланга. В "History of Erlang" критиковалась

OCT>невозможность обработать сообщения не в том порядке, в каком они
OCT>приходили. Когда делался Erlang, было написано много строк кода на PLEX,
OCT>но когда не было ни самого PLEX, ни кода на нём, это неудобство не могло
OCT>быть очевидно создателям PLEX.

Об этом-то я читал, только вот из таких фактов и без наличия самого PLEX или хотяб спецификации я бы побоялся делать какие-либо выводы.
Для эрланга же есть компилятор/интерпретатор/рантайм, достаточно полная документация и даже спеки какие-то были. Сравнивать "тёплое с мягким" я как-то не вижу смысла, учитывая многолетний успешный опыт использования Эрланга по миру (включая не очень серъёзный собственный опыт). Тем более на прошлой работе я фактически участвовал в написании аналога эрлангового рантайма на Яве и знаю не по наслышке разницу между относительно простыми отработанными решениями эрланговыми и по сути "самопальными" (хоть и под эгидой JSR) решениями.
Re[10]: FP is comming...
От: FR  
Дата: 03.09.08 18:59
Оценка: 20 (1)
Здравствуйте, eao197, Вы писали:

E>Для того, чтобы в D было ФП там делаются не только лямбды, но и иммутабельные типы, и специальный модификатор pure для определения функций/методов без побочных эффектов.


Похоже для противовеса теперь решили и к стороне C++ подтянуть http://www.digitalmars.com/d/2.0/struct.html#Struct-Constructor похоже станет "D'шные струкуры" == "С++ классы"
Re[11]: FP is comming...
От: FR  
Дата: 21.10.08 12:54
Оценка: 17 (1)
Для компенсации теперь в D 2.020 реализовали immutable http://www.digitalmars.com/d/2.0/changelog.html#new2_020
Re[12]: FP is comming...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 21.10.08 13:00
Оценка: +1
Здравствуйте, FR, Вы писали:

FR>Для компенсации теперь в D 2.020 реализовали immutable http://www.digitalmars.com/d/2.0/changelog.html#new2_020


И в очередной раз нарушили совместимость для написанного ранее кода за счет разделения на druntime и phobos Это я не к поддержке ФП, а к стремности использования D в чем-то серьезном.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: FP is comming...
От: FR  
Дата: 04.11.08 16:12
Оценка:
Здравствуйте, eao197, Вы писали:

E>И в очередной раз нарушили совместимость для написанного ранее кода за счет разделения на druntime и phobos Это я не к поддержке ФП, а к стремности использования D в чем-то серьезном.


Угу жаль что он никак ни народится
Тут недавно был разговор про выразительность, и там всплыл неэффективный qsort на хаскеле, который вроде из-за этого бессмысленен, но мне в голову пришло что он вполне применим для compile-time метапрограммирования на шаблонах, решил попробовать на D сделать, оказалось на удивление просто:

Сначала вспомогательные вещи:

template filter(alias F, alias Arr) if(Arr.length < 1)
{
    const filter = Arr;
}           

template filter(alias F, alias Arr) if(Arr.length >= 1)
{
    static if(F(Arr[0]))
        const filter = [Arr[0]] ~ filter!(F, Arr[1 .. $]);
    else 
        const filter = filter!(F, Arr[1 .. $]);
}           

bool less_n(int N)(int x)
{
    return x < N;
}

bool not_less_n(int N)(int x)
{
    return x >= N;
}


Теперь сам qsort:

template qsort(alias Arr) if(Arr.length < 2)
{
    const qsort = Arr;
}

template qsort(alias Arr) if(Arr.length >= 2)
{
    const qsort = 
        qsort!(filter!(less_n!(Arr[0]), Arr[1 .. $]))
        ~ [Arr[0]] ~
        qsort!(filter!(not_less_n!(Arr[0]), Arr[1 .. $]));
}


На C++ я не рискну повторить
Re[14]: FP is comming...
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.11.08 16:30
Оценка:
Здравствуйте, FR, Вы писали:

FR>Тут недавно был разговор про выразительность, и там всплыл неэффективный qsort на хаскеле, который вроде из-за этого бессмысленен, но мне в голову пришло что он вполне применим для compile-time метапрограммирования на шаблонах, решил попробовать на D сделать, оказалось на удивление просто:


[cut]

А теперь попробуй в 2 словах пояснить, что за тильды, алиасы и факториалы?
Как-то по ходу D от си/плюсов далеко ушёл
Или может это я тупой
Re[15]: FP is comming...
От: FR  
Дата: 04.11.08 16:46
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А теперь попробуй в 2 словах пояснить, что за тильды, алиасы и факториалы?

К>Как-то по ходу D от си/плюсов далеко ушёл
К>Или может это я тупой

Тильды просто конатекция массивов, у автора языка вжик на тему что "+" для этого не
годится
Факториалы это инстанцирование шаблонов
Алиасам аналогов в C++ нет в общем это ссылочный параметр в шаблонах http://www.digitalmars.com/d/2.0/template.html#aliasparameters
Re[8]: FP is comming...
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.08 04:36
Оценка:
Здравствуйте, FR, Вы писали:

VD>>А кто мешал перед созданием "улучшенного C++" изучить не только С++, но еще и тот самый ОКамл? Даже Степанов это проделал. Не в его силах, конечно, было улучшить С++, чтобы получилось красиво, но тем не менее STL получился весьма функциональным (насколько это возможно в С++).


FR>А обязательно все делать функциональным?


Нет. Но ФП-фичи, будучи грамотно встроенными в язык, дают реальное увеличение его мощности. Это дает возможность выбирать реализацию отталкиваясь от своих предпочтений, а не от ограничений и расположения граблей вокруг тебя.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: FP is comming...
От: FR  
Дата: 26.11.08 04:35
Оценка:
Здравствуйте, eao197, Вы писали:

E>И в очередной раз нарушили совместимость для написанного ранее кода за счет разделения на druntime и phobos Это я не к поддержке ФП, а к стремности использования D в чем-то серьезном.


В 2.021 продолжили начатое нарушение совместимости, this в структурах стал ссылкой, и дальнейшие изменения в runtime.
Зато ввели флажок -safe
Re[14]: FP is comming...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 26.11.08 07:58
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>В 2.021 продолжили начатое нарушение совместимости, this в структурах стал ссылкой, и дальнейшие изменения в runtime.

FR>Зато ввели флажок -safe

Блин, Брайту нужно объяснить смысл пословицы "Лучшее враг хорошего".


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: FP is comming...
От: FR  
Дата: 16.02.09 06:07
Оценка:
Здравствуйте, eao197, Вы писали:

E>Блин, Брайту нужно объяснить смысл пословицы "Лучшее враг хорошего".


Смотрю я на последнюю http://www.digitalmars.com/d/2.0/changelog.html#new2_025 версию и вижу что ничего ни добавили, начинает появлятся надежда
Re[16]: FP is comming...
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.02.09 07:21
Оценка:
Здравствуйте, FR, Вы писали:

E>>Блин, Брайту нужно объяснить смысл пословицы "Лучшее враг хорошего".


FR>Смотрю я на последнюю http://www.digitalmars.com/d/2.0/changelog.html#new2_025 версию и вижу что ничего ни добавили, начинает появлятся надежда


С другой стороны, вместо того, чтобы завершить работу над спецификацией языка D2.0 добавили в DMD частичную поддержку Max OSX... (Walter Bright: Expect bugs. Thread local storage isn't working on OSX, neither are sockets and memory mapped files (for unknown reasons).)


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.02.09 09:37
Оценка:
Тема разрослась и читать ее стало очень тяжело. Хорошо бы давать новые анонсы в отдельной теме.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.09 10:10
Оценка:
Прошу прощения, что еще раз поднимаю эту тему. Но произошло действительно знаменательное событие: теперь DMD распространяется с полными исходными текстами компилятора (как front-end, так и back-end-а).

http://www.digitalmars.com/d/2.0/changelog.html#new2_026


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D деется-то!?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.03.09 12:38
Оценка:
Здравствуйте, eao197, Вы писали:

E>Прошу прощения, что еще раз поднимаю эту тему. Но произошло действительно знаменательное событие: теперь DMD распространяется с полными исходными текстами компилятора (как front-end, так и back-end-а).


E>http://www.digitalmars.com/d/2.0/changelog.html#new2_026


Здорово! Но заведи в следующий раз новую тему. Эта уже очень велика для чтения ее из броузера.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.09 12:48
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здорово! Но заведи в следующий раз новую тему. Эта уже очень велика для чтения ее из броузера.


Хорошо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D деется-то!?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 07.03.09 14:25
Оценка:
Здравствуйте, eao197, Вы писали:

E>Прошу прощения, что еще раз поднимаю эту тему. Но произошло действительно знаменательное событие: теперь DMD распространяется с полными исходными текстами компилятора (как front-end, так и back-end-а).


А где можно скачать спеку для последней версии?
Re[3]: Ой, чо с D деется-то!?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.09 14:36
Оценка:
Здравствуйте, nikov, Вы писали:

E>>Прошу прощения, что еще раз поднимаю эту тему. Но произошло действительно знаменательное событие: теперь DMD распространяется с полными исходными текстами компилятора (как front-end, так и back-end-а).


N>А где можно скачать спеку для последней версии?


Если под спекой понимается спецификация языка, то ее, как я подозреваю, нет в природе. Язык развивается по велению Вальтера Брайта достаточно непредсказуемым образом.
Вся имеющаяся информация по языку содержится на сайте Digital Mars:
по версии 1.*: http://www.digitalmars.com/d/1.0/lex.html -- отсюда и далее по ссылкам,
по версии 2.*: http://www.digitalmars.com/d/2.0/lex.html -- отсюда и далее по ссылкам.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.