Re[17]: Лекция Вирта в политехническом - впечатления
От: GlebZ Россия  
Дата: 17.10.05 08:29
Оценка:
Здравствуйте, VladD2, Вы писали:

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

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

С уважением, Gleb.
Re[19]: Лекция Вирта в политехническом - впечатления
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 17.10.05 08:48
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>может быть как присваиванием иксу значения переменной foo, так и вызовом

Pzz>функции без параметров, что уже мило.

Пожалуйста, не путайте Виртовский Паскаль 1970-года и творчество компании Borland не имеющего к Вирту ни какого отношения.

Вирт исправил ошибки Паскаля создав язык Modula-2 (1979), а затем Oberon (1987).

(* Modula/Oberon *)

TYPE
  Proc = PROCEDURE (): INTEGER;

  PROCEDURE foo (): INTEGER;
  BEGIN
    RETURN 2718;
  END foo;

VAR 
  x, y, z: INTEGER;
  f, g: Proc;
BEGIN
  x := foo(); (* Вызов процедуры-функции foo и присвоение результата переменной x *)
  f := foo;   (* Присвоение значения процедурной переменной f равного значению процедурной константы foo *)
  y := f();   (* Вызов процедуры-функции связанной с f и присвоение результата переменной x *)
  g := f;     (* Присвоение значения одной (процедурной) переменной значению другой (процедурной) переменной *)
  z := g();
...
Re[11]: Лекция Вирта в политехническом - впечатления
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 17.10.05 08:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:

СГ>>Кстати, Гуткнехт собирается Zonnon на нее перенести (потом). А то под .Net активные абъекты Zonnon-а уж очень не эффективно реализуются, под BlueBottle же всё "летать" будет.


AVK>А не проще к стандартному CLR Host green threads подцепить?


Извините я не знаю что это такое, но если это как-то зависит от платформы, то такой вариант не подойдет. Ведь дело-то в чем: либо делать компилятор чисто под .Net генерирующий только safe модули и, стало быть, программы будут работать везде где есть .Net; либо нафиг наплевать на это .Net и сделать всё по своему, т.е. под Aos Bluebottle, где активности реализованы сразу поверх железа. Промежуточный вариант не особо-то нужен.
Re[15]: Массивы и указатели в C
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.10.05 09:35
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Где выделение памяти, где возврат значения в Init?


Блин, включи фантазию.

int* Init()
{
    int* a = (int*)mallac(5 * sizeof(int));
    int i;
    
    for (i = 0; i < 5; i++)
        a[i] = i;
    
    return a;
}

int* a = Init();
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Лекция Вирта в политехническом - впечатления
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.10.05 09:35
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Ну так по-вашему эксаваторы и подъемные краны — не нужны и

C>незначительны. Их доля ведь оооочень маленькая среди остальных машин.

По-моему, аналогии умеснтны только при объяснених. А в спорах идоказательствах — это является нечестным приемом ведения беседы.

>> http://www.hotlog.ru/hlpub.shtml?view=22


C>Домен .ru, однако.


А ты из Африки?
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Лекция Вирта в политехническом - впечатления
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.10.05 11:12
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Делегаты + рефлекшен


VD>Нафига тут рефлекшен?


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

... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
AVK Blog
Re[16]: Массивы и указатели в C
От: Павел Кузнецов  
Дата: 17.10.05 12:58
Оценка:
VladD2,

>
> int* Init()
> {
>     int* a = (int*)mallac(5 * sizeof(int));
>     int i;
>     
>     for (i = 0; i < 5; i++)
>         a[i] = i;
>     
>     return a;
> }
>
> int* a = Init();
>


Собственно, что и ожидалось. Это совсем не то же, что в оригинальном примере:
int a[5] = { 0, 1, 2, 3, 4 };

  • По меньшей мере, память не там выделяется.
  • Кроме того, в первом случае используется static initialization, а в твоем -- dynamic initialization, что для global/namespace scope принципиально из-за порядка инициализации.
  • Ну и, естественно, в C это работать не будет, только в C++.
    Posted via RSDN NNTP Server 2.0 beta
  • Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 17.10.05 14:55
    Оценка:
    Здравствуйте, Pzz, Вы писали:

    Pzz>Если бы он это делал, в языке не было бы такой глупости, как то, что

    Pzz>вызов функции без параметров записывается без скобок после имени функции.

    Pzz>T.e. запись


    Pzz> x ::= foo;


    Pzz>может быть как присваиванием иксу значения переменной foo, так и вызовом

    Pzz>функции без параметров, что уже мило.

    Pzz>Далее, там, где требуется указатель на функцию (например, функция может

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

    Pzz>Теперь вопрос, как в таком синтаксисе описать функцию без параметров,

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

    Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!).
    Функция без параметров, следовательно, сама по себе является константой. Контекст однозначный

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

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

    С++
    typedef function< double(*)(void) > numfunc;
    double itself(double x) { return x; }
    
    class LazyNum
    {
      numfunc fx;
    public:
      LazyNum(double x) : fx( bind(itself,x) ) {}
      LazyNum(numfunc f) : fx(f) {}
    
      operator double() const { return fx(); }
    };


    или какого-нибудь скриптового
    function force(x)
    {
      return isFunction(x) ? x() : x;
    }


    Но это плохо вяжется с механизмом выведения типов (кроме случая, когда язык полностью ленивый).
    Перекуём баги на фичи!
    Тоже "птичьи языки" не люблю!
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 17.10.05 17:07
    Оценка:
    Здравствуйте, Donz, Вы писали:

    D>по мне лучше использовать слова, чем значки, тем более, что эти значки не очень связаны по смыслу с их словесными аналогами.

    +
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: Павел Кузнецов  
    Дата: 17.10.05 18:12
    Оценка:
    VladD2,

    > ПК>Если я правильно помню грамматику Паскаля, там, вообще, присваивание не является expression, а является statement — т.е. о возвращаемом значении вообще говорить вообще бессмысленно, так же как о возвращаемом значении for или while (в Паскале — в некоторых других языках это вполне может иметь смысл). Внутри if, естественно, statement быть не может, только expression...

    >
    > VC6 вроде вообще не делал.

    VC6 умел компилировать Паскаль?.. В Си++ в if определения могли быть очень давно, и VC++6 это поддерживал.
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: AVC Россия  
    Дата: 17.10.05 18:42
    Оценка:
    Здравствуйте, Кодт, Вы писали:

    К>Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!).

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

    Возьмем, например, генератор случайных чисел:
    unsigned int rand(void);

    Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

    Хоар
    Re[19]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 17.10.05 20:37
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>

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


    И?
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Лекция Вирта в политехническом - впечатления
    От: Кодт Россия  
    Дата: 17.10.05 20:47
    Оценка:
    Здравствуйте, AVC, Вы писали:

    К>>Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!).

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

    AVC>Возьмем, например, генератор случайных чисел:

    AVC>unsigned int rand(void);

    AVC>

    У этой функции есть скрытый параметр-монада. Если писать на чистом функциональном языке, то он тут же станет явным и обязательным

    Ну а если говорить на С++, то
    struct Rand
    {
      operator int() const { return rand(); }
    };
    
    const Rand r;      // константа :)
    const Rand rr = r; // опять константа
    assert(memcmp(&r, &rr, sizeof(Rand))==0); // они одинаковы до последнего байта!
    int x = rr, y = rr, z = rr; // и прекрасно вычисляются
    Перекуём баги на фичи!
    Re[20]: Лекция Вирта в политехническом - впечатления
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 17.10.05 20:52
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>И?


    Ну если в компайл тайме неизвестна сигнатура функции, то единственный способ создать на нее делегат это рефлекшен.
    ... << RSDN@Home 1.2.0 alpha rev. 615 on Windows XP 5.1.2600.131072>>
    AVK Blog
    Ты о Си или о Плюсах?
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 18.10.05 16:04
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Это одновременно высокоуровневый и низкоуровневый язык.

    Если о Си, то не понимаю, как может считаться высокоуровневым язык, в котором нет строк?
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Нет...
    От: SilverCloud Россия http://rodonist.wordpress.com
    Дата: 18.10.05 16:04
    Оценка: -1
    Здравствуйте, Пацак, Вы писали:

    П>Ужас ИМХО. И все из-за того, что кому-то пришло в голову сделать оператор присваивания, возвращающий значение.


    Нет, всё из-за того, что кому-то вздумалось сделать оператор присваивания похожим на оператор проверки на равенство
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[21]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.10.05 19:18
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Ну если в компайл тайме неизвестна сигнатура функции, то единственный способ создать на нее делегат это рефлекшен.


    По-моему, о сигнатуре вызова речи не шало. Человек не очень внятно, но вроде как намекал на точ то в С++ можно отностельно легко задать список ссылок на методы классов известных во время компиляции, но не так-то просто задать ссылку на метод класса который появляется в рантайме. У делегатов таких проблем нет.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[21]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.10.05 20:05
    Оценка:
    Здравствуйте, AVC, Вы писали:

    AVC>Возьмем, например, генератор случайных чисел:

    AVC>
    AVC>unsigned int rand(void);
    AVC>

    AVC>

    Это как раз пример использования побочного эффекта. Ее можно заменить на ленивую функцию возвращающую списко "случайных" чисел.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[12]: Лекция Вирта в политехническом - впечатления
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 18.10.05 20:05
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    AVK>>А не проще к стандартному CLR Host green threads подцепить?


    СГ>Извините я не знаю что это такое, но если это как-то зависит от платформы, то такой вариант не подойдет. Ведь дело-то в чем: либо делать компилятор чисто под .Net генерирующий только safe модули и, стало быть, программы будут работать везде где есть .Net; либо нафиг наплевать на это .Net и сделать всё по своему, т.е. под Aos Bluebottle, где активности реализованы сразу поверх железа. Промежуточный вариант не особо-то нужен.


    1. Зеленые потоки/файберы/легкие поток (в общем, как их не называй) присутствуют во втором фрэймворке.
    2. Ансэйф не делает код непереносимым. Просто он небезопасен и позволяет вручную управлять памятью.
    ... << RSDN@Home 1.2.0 alpha rev. 618>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: Ты о Си или о Плюсах?
    От: Cyberax Марс  
    Дата: 19.10.05 06:21
    Оценка: 4 (1)
    SilverCloud wrote:

    > C>Это *одновременно* высокоуровневый и низкоуровневый язык.

    > Если о Си, то не понимаю, как может считаться высокоуровневым язык, в
    > котором нет *строк*?

    А в чем проблемы? Вообще-то в С строки есть.

    Нет удобной поддержки строковых операций? Ну так делаем ее:

    Делаем раз:
    typedef struct tagString
    {
        size_t length;
        char *data;
    } String;


    Делаем два:
    String createString(const char *str)
    {
        String res;
        res.length=strlen(str);
        res.data=strdup(str);
        return res;
    }
    void deleteString(String *str)
    {
        res->length=0;
        free(res->data);
    }
    void appendString(String *dst,String *src)
    {
        dst->length+=src->length;
        char *tmp=calloc(dst->length+1);
        strcat(tmp,dst->data);
        strcat(tmp,src->data);
        free(dst->data); dst->data=tmp;
    }


    Делаем три:
    String str;
    
    str=createString("This is a string");
    deleteString(str);

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

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

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 2.0 beta
    Sapienti sat!
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.