Здравствуйте, VladD2, Вы писали:
VD>А апологеты С++, в том числе автор и комитет, все бются над задачей доказательства ненужности этого и самодостаточности С++.
IMHO В условиях когда компилятор и среда исполнения неконтролирует время жизни и удаление объектов, делегаты могут проявлять неадекватную реакцию на команды программиста.
Выполнять функции в которых выполняются уже заделеченные объекты могут не приводить к ошибке, а приводить к бардаку при исполнении кода. Вобщем, по моему, вероятность что ошибки будут более доканывать программиста чем полезности этой фичи.
С уважением, Gleb.
Re[19]: Лекция Вирта в политехническом - впечатления
Здравствуйте, 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]: Лекция Вирта в политехническом - впечатления
Здравствуйте, AndrewVK, Вы писали:
СГ>>Кстати, Гуткнехт собирается Zonnon на нее перенести (потом). А то под .Net активные абъекты Zonnon-а уж очень не эффективно реализуются, под BlueBottle же всё "летать" будет.
AVK>А не проще к стандартному CLR Host green threads подцепить?
Извините я не знаю что это такое, но если это как-то зависит от платформы, то такой вариант не подойдет. Ведь дело-то в чем: либо делать компилятор чисто под .Net генерирующий только safe модули и, стало быть, программы будут работать везде где есть .Net; либо нафиг наплевать на это .Net и сделать всё по своему, т.е. под Aos Bluebottle, где активности реализованы сразу поверх железа. Промежуточный вариант не особо-то нужен.
Здравствуйте, Cyberax, Вы писали:
C>Ну так по-вашему эксаваторы и подъемные краны — не нужны и C>незначительны. Их доля ведь оооочень маленькая среди остальных машин.
По-моему, аналогии умеснтны только при объяснених. А в спорах идоказательствах — это является нечестным приемом ведения беседы.
>> http://www.hotlog.ru/hlpub.shtml?view=22
C>Домен .ru, однако.
А ты из Африки?
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Лекция Вирта в политехническом - впечатления
> 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]: Лекция Вирта в политехническом - впечатления
Здравствуйте, Pzz, Вы писали:
Pzz>Если бы он это делал, в языке не было бы такой глупости, как то, что Pzz>вызов функции без параметров записывается без скобок после имени функции.
Pzz>T.e. запись
Pzz> x ::= foo;
Pzz>может быть как присваиванием иксу значения переменной foo, так и вызовом Pzz>функции без параметров, что уже мило.
Pzz>Далее, там, где требуется указатель на функцию (например, функция может Pzz>быть передана как параметр другой функции), никакого специального значка Pzz>перед именем функции не требуется.
Pzz>Теперь вопрос, как в таком синтаксисе описать функцию без параметров, Pzz>возвращающую указатель на функцию? Никак, потому что при ее Pzz>использовании невозможно будет понять по контексту, имеется ли в виду Pzz>она сама, или возвращаемое ей значение.
Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!).
Функция без параметров, следовательно, сама по себе является константой. Контекст однозначный
Во-вторых, это можно рассматривать как ленивое вычисление.
Если язык полноценно поддерживает ленивые вычисления, то контексту должно быть безразлично, ленивое ли данное значение или полностью вычисленное.
Среда сама будет форсировать вычисления там, где надо.
Некое подобие этого можно наблюдать в языках, где есть перегрузка приведения типов. Что-то вроде
Здравствуйте, Donz, Вы писали:
D>по мне лучше использовать слова, чем значки, тем более, что эти значки не очень связаны по смыслу с их словесными аналогами.
+
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Лекция Вирта в политехническом - впечатления
VladD2,
> ПК>Если я правильно помню грамматику Паскаля, там, вообще, присваивание не является expression, а является statement — т.е. о возвращаемом значении вообще говорить вообще бессмысленно, так же как о возвращаемом значении for или while (в Паскале — в некоторых других языках это вполне может иметь смысл). Внутри if, естественно, statement быть не может, только expression... > > VC6 вроде вообще не делал.
VC6 умел компилировать Паскаль?.. В Си++ в if определения могли быть очень давно, и VC++6 это поддерживал.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[20]: Лекция Вирта в политехническом - впечатления
Здравствуйте, Кодт, Вы писали:
К>Во-первых, функция с полным комплектом параметров есть константа (а побочные эффекты — нафиг!). К>Функция без параметров, следовательно, сама по себе является константой. Контекст однозначный
Возьмем, например, генератор случайных чисел:
unsigned int rand(void);
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[19]: Лекция Вирта в политехническом - впечатления
Здравствуйте, 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]: Лекция Вирта в политехническом - впечатления
Здравствуйте, Cyberax, Вы писали:
C>Это одновременно высокоуровневый и низкоуровневый язык.
Если о Си, то не понимаю, как может считаться высокоуровневым язык, в котором нет строк?
Здравствуйте, AndrewVK, Вы писали:
AVK>Ну если в компайл тайме неизвестна сигнатура функции, то единственный способ создать на нее делегат это рефлекшен.
По-моему, о сигнатуре вызова речи не шало. Человек не очень внятно, но вроде как намекал на точ то в С++ можно отностельно легко задать список ссылок на методы классов известных во время компиляции, но не так-то просто задать ссылку на метод класса который появляется в рантайме. У делегатов таких проблем нет.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Лекция Вирта в политехническом - впечатления
Здравствуйте, Сергей Губанов, Вы писали:
AVK>>А не проще к стандартному CLR Host green threads подцепить?
СГ>Извините я не знаю что это такое, но если это как-то зависит от платформы, то такой вариант не подойдет. Ведь дело-то в чем: либо делать компилятор чисто под .Net генерирующий только safe модули и, стало быть, программы будут работать везде где есть .Net; либо нафиг наплевать на это .Net и сделать всё по своему, т.е. под Aos Bluebottle, где активности реализованы сразу поверх железа. Промежуточный вариант не особо-то нужен.
1. Зеленые потоки/файберы/легкие поток (в общем, как их не называй) присутствуют во втором фрэймворке.
2. Ансэйф не делает код непереносимым. Просто он небезопасен и позволяет вручную управлять памятью.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
SilverCloud wrote:
> C>Это *одновременно* высокоуровневый и низкоуровневый язык. > Если о Си, то не понимаю, как может считаться высокоуровневым язык, в > котором нет *строк*?
А в чем проблемы? Вообще-то в С строки есть.
Нет удобной поддержки строковых операций? Ну так делаем ее: