Re[12]: Контроль типов в С++ и в Object pascal
От: AKh  
Дата: 11.05.07 08:38
Оценка: :)
Здравствуйте, OdesitVadim, Вы писали:

V>>3/2 — это деление двух целых

OV>Да, но скажи это в школе или институте. Они пальчиком у виска покрутят. Только Сипрограммеры и им подобные понимают эту "особенность"
OV>Ведь если 3 яблока на двоих делить, то куда ещё одно денеться?
OV>Получается, что (3/2)*2!=3 явное нарушение законов математики. Вот где одна из собак языка Си/Си++ порылась. В Паскале всё нормально — математика выполняется.

Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.
Re[14]: Контроль типов в С++ и в Object pascal
От: AKh  
Дата: 11.05.07 08:57
Оценка: +1
Здравствуйте, OdesitVadim, Вы писали:

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


AKh>>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.

OV>Ок. вот я и не понимаю: зачем плодить сущности?

Как сказал Саттер с Александреску "Предпочитайте минимальные классы монолитным".

Моя точка зрения такая (попробую быть последовательным):
Оператор деления языка можно "отнаследовать" от математического, т.к. он выполняет те же функции. Но имеет уточнение — а именно предметная область пременения — программирование. А в этой области есть особенность — в компьютере нет непрерывной линейки чисел. Поэтому, есстественным выглядит, разделение на типы: целые и иммитация дробных. В зависимости от предметной области использование одного из этих типов будет выгоднее использование другого. Таким образом, и использование операции деления с одним типом будет выгоднее операции деления с другим. Это и является обоснованием рациональности ввода 2-х типов операций деления.
Контроль типов в С++ и в Object pascal
От: Vitaliy_www  
Дата: 11.05.07 07:08
Оценка:
Народ, мне нужно написать о разнице в контроле типов в етих двух языках, где лутше... где хуже, чем ето лутше, чем хуже... выскажыте свои мнения об етом! Спасибо!
Re: Контроль типов в С++ и в Object pascal
От: MasterZiv СССР  
Дата: 11.05.07 07:16
Оценка:
Vitaliy_www пишет:
> Народ, мне нужно написать о разнице в контроле типов в етих двух языках,
> где лутше... где хуже, чем ето лутше, чем хуже... выскажыте свои мнения
> об етом! Спасибо!

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

А кстати, Vitaliy, вы какой Object Pascal имеете в виду ?
Из два вообще-то. Борландовый и апловский.
Posted via RSDN NNTP Server 2.1 beta
Re: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:17
Оценка:
Здравствуйте, Vitaliy_www, Вы писали:

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

Если идёт речь о неуправляемом Object Pascal, то всё просто: уровень контроля типов одинаковый. Оба языка проверяют типы во время компиляции, имеют средства динамического приведения типов с проверкой и средства динамического приведения без проверки.
Re[2]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:19
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Vitaliy_www пишет:

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

MZ>Они одинаковые. Оба строго типизированные языки.

MZ>Вот не помню только, есть ли в Паскале RTTI.
MZ>По идее, должно быть, как же борланда, да без RTTI.

MZ>А кстати, Vitaliy, вы какой Object Pascal имеете в виду ?

MZ>Из два вообще-то. Борландовый и апловский.

По поводу строгой типизации Object Pascal-a (бормановского)
есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?
Re[3]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:20
Оценка:
Здравствуйте, vasmann, Вы писали:

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


MZ>>Vitaliy_www пишет:

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

MZ>>Они одинаковые. Оба строго типизированные языки.

MZ>>Вот не помню только, есть ли в Паскале RTTI.
MZ>>По идее, должно быть, как же борланда, да без RTTI.

MZ>>А кстати, Vitaliy, вы какой Object Pascal имеете в виду ?

MZ>>Из два вообще-то. Борландовый и апловский.

V>По поводу строгой типизации Object Pascal-a (бормановского)

V>есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?

И в добавок компилер не то чтобы ворнинг на худой конец сказать, он даже хинта не скажет.
Re[3]: Контроль типов в С++ и в Object pascal
От: MasterZiv СССР  
Дата: 11.05.07 07:22
Оценка:
vasmann пишет:
> По поводу строгой типизации Object Pascal-a (бормановского)
> есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и
> Pointer (любой) и как не странно String — о какой жесткой типизации (по
> крайней мере бормановской реализации) можно говорить?

У них все объекты наследуются принудительно и неявно от TObject.
Так что все в порядке ( с точки зрения борладна ).
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:24
Оценка:
V>По поводу строгой типизации Object Pascal-a (бормановского)
V>есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?
На C++ тоже можно наваять аналогичную FreeAndNil. Это уже проблемы не языка, а библиотеки.
Re[4]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:25
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>vasmann пишет:

>> По поводу строгой типизации Object Pascal-a (бормановского)
>> есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и
>> Pointer (любой) и как не странно String — о какой жесткой типизации (по
>> крайней мере бормановской реализации) можно говорить?

MZ>У них все объекты наследуются принудительно и неявно от TObject.

MZ>Так что все в порядке ( с точки зрения борладна ).

Шутить изволите?
String это не TObject
Pointer — это не TObject
Элементарное подтверждение — отработатйе функцию FreeAndNil на обьекте этого типа и вы получите такой Undefined Behavior!
Re: Контроль типов в С++ и в Object pascal
От: Vitaliy_www  
Дата: 11.05.07 07:26
Оценка:
Меня интересует именно сравнение с DELPHI, и интересно нащет RTTI в ДЕЛФИ..,

Также там есть разница насколько я знаю в присвоениях указателей..
Re[4]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:28
Оценка:
MZ>У них все объекты наследуются принудительно и неявно от TObject.
MZ>Так что все в порядке ( с точки зрения борладна ).
Pointer может указывать на всё что угодно, не обязательно на объект. FreeAndNil эти pointer-ы принимает за милую душу. Здесь конечно борланды накосячили, могли бы добавить поддержку FreeAndNil в компилятор, чтобы давал варнинги или ошибки.
Re[4]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:30
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:


V>>По поводу строгой типизации Object Pascal-a (бормановского)

V>>есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?
SS>На C++ тоже можно наваять аналогичную FreeAndNil. Это уже проблемы не языка, а библиотеки.
Буду признателен за пример
Требования
Есть иерархия классов, пусть наследванных от
class Object
{
virtual ~Object()
{
}
};


И сделать так (без reinterpret_cast-ов) чтобы эта функция приняла как char*, void*, так и Object* при этом чтобы вызвался деструктор Object, хотя тут проще, достаточно просто вызвать delete но в любом случае то что описал я НИКАК НЕ ПЛЮС Object Pascal от бормана (кстати он давно официально называется Делфи)

Еще пусть есть функция proceudre(const obj: TMyObject);
и у этого самого TMyObject есть функция котороя может модифицировать внтуреннее состояние обьекта, так вот вы ее вызовите и тоже не получите банального ворнинга, не говоря уже о С++ отказе компилить этот бред.
Re[2]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:33
Оценка:
Здравствуйте, Vitaliy_www, Вы писали:

V_>Меня интересует именно сравнение с DELPHI, и интересно нащет RTTI в ДЕЛФИ..,

RTTI в Delphi более подробное. Почти как reflection для .net, но только для published свойств.

V_>Также там есть разница насколько я знаю в присвоениях указателей..

Интерсно, какая же разница?
Re[3]: Контроль типов в С++ и в Object pascal
От: Vitaliy_www  
Дата: 11.05.07 07:38
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

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


V_>>Меня интересует именно сравнение с DELPHI, и интересно нащет RTTI в ДЕЛФИ..,

SS>RTTI в Delphi более подробное. Почти как reflection для .net, но только для published свойств.

V_>>Также там есть разница насколько я знаю в присвоениях указателей..

SS>Интерсно, какая же разница?

В С++ указатели можно напрямую присваивать, а в Делфи как то через Pointer..
Re[4]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:39
Оценка:
Здравствуйте, Vitaliy_www, Вы писали:

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


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


V_>>>Меня интересует именно сравнение с DELPHI, и интересно нащет RTTI в ДЕЛФИ..,

SS>>RTTI в Delphi более подробное. Почти как reflection для .net, но только для published свойств.

V_>>>Также там есть разница насколько я знаю в присвоениях указателей..

SS>>Интерсно, какая же разница?

V_>В С++ указатели можно напрямую присваивать, а в Делфи как то через Pointer..

В С++ присвоить указатели разных типов куда сложнее чем в Делфи и это минус Делфи и + С++!!!!
Re[5]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:41
Оценка:
V>
V>class Object
V>{
V>virtual ~Object()
V>{
V>}
V>};
V>


V>И сделать так (без reinterpret_cast-ов) чтобы эта функция приняла как char*, void*, так и Object* при этом чтобы вызвался деструктор Object

Без reinterpret_cast-ов (и C-style-cast-ов) никак. Бормандовская FreeAndNil использует паскалевский reinterpret_cast:

procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj); // тут
Pointer(Obj) := nil; // и тут
Temp.Free;
end;

V>Еще пусть есть функция proceudre(const obj: TMyObject);

V>и у этого самого TMyObject есть функция котороя может модифицировать внтуреннее состояние
Да, в паскале нет обоих понятий: "константный указатель" и "указательнь на константу". Есть поддержка только первого понятия. По моему, это не относится к контролю типов. В .net вообще нет константности, при этом контроль типов в нём на высоте.
А вообще я согласен, что FreeAndNil и ограниченная поддержка константности — это минусы Delphi.
Re[5]: Контроль типов в С++ и в Object pascal
От: Vitaliy_www  
Дата: 11.05.07 07:44
Оценка:
Здравствуйте, vasmann, Вы писали:

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


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


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


V_>>>>Меня интересует именно сравнение с DELPHI, и интересно нащет RTTI в ДЕЛФИ..,

SS>>>RTTI в Delphi более подробное. Почти как reflection для .net, но только для published свойств.

V_>>>>Также там есть разница насколько я знаю в присвоениях указателей..

SS>>>Интерсно, какая же разница?

V_>>В С++ указатели можно напрямую присваивать, а в Делфи как то через Pointer..

V>В С++ присвоить указатели разных типов куда сложнее чем в Делфи и это минус Делфи и + С++!!!!

Я был бы очень признателен если написали бы несколько примеров типа присвоение указателей на с++, и на Делфи. А то я об етом только поверхносно знаю..
Re[5]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:46
Оценка:
V_>>В С++ указатели можно напрямую присваивать, а в Делфи как то через Pointer..
V>В С++ присвоить указатели разных типов куда сложнее чем в Делфи и это минус Делфи и + С++!!!!

Не вижу принципиальной разницы:
// C++
A* a;
void* p;

a = (A*)b;
p = a;

// Pascal
var
A a;
Pointer p;

a := A(b);
p := a;
Re[6]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:48
Оценка:
SS>// Pascal
SS>var
SS>A a;
SS>Pointer p;

Имел в виду:
var
  a: A;
  p: Pointer;
Re[6]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:49
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>
V>>class Object
V>>{
V>>virtual ~Object()
V>>{
V>>}
V>>};
V>>


V>>И сделать так (без reinterpret_cast-ов) чтобы эта функция приняла как char*, void*, так и Object* при этом чтобы вызвался деструктор Object

SS>Без reinterpret_cast-ов (и C-style-cast-ов) никак. Бормандовская FreeAndNil использует паскалевский reinterpret_cast:

SS>procedure FreeAndNil(var Obj);

SS>var
SS> Temp: TObject;
SS>begin
SS> Temp := TObject(Obj); // тут
SS> Pointer(Obj) := nil; // и тут
SS> Temp.Free;
SS>end;

V>>Еще пусть есть функция proceudre(const obj: TMyObject);

V>>и у этого самого TMyObject есть функция котороя может модифицировать внтуреннее состояние
SS>Да, в паскале нет обоих понятий: "константный указатель" и "указательнь на константу". Есть поддержка только первого понятия. По моему, это не относится к контролю типов. В .net вообще нет константности, при этом контроль типов в нём на высоте.
SS>А вообще я согласен, что FreeAndNil и ограниченная поддержка константности — это минусы Delphi.

Да виноват, думал что функция FreeAndNil описана как procedure FreeAndNil(var obj: TObject) и чего то не совсем понятно почему так и не сделали.
Но в любом случае помимо миносов с константами не нормально (с моей точки зрения) что TObject без дополнительных усилий програмера приведится к TObject-у и наоборот. Я считю, что не должно быть чего то неявного (уж такой неявности точно не нужно), что если хочешь привести тип — сделай это сам, а еще чтобы это было не так уж просто (достаточно просто), но и приводило бы к тому что бы вы задумались — а нужно ли здесь приведение?
Re[6]: Контроль типов в С++ и в Object pascal
От: Vitaliy_www  
Дата: 11.05.07 07:50
Оценка:
a = (A*)b;
p = a;

вот ето так и должно быть? (А*)b?
Re[7]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:53
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

SS>>// Pascal

SS>>var
SS>>A a;
SS>>Pointer p;

SS>Имел в виду:

SS>
SS>var
SS>  a: A;
SS>  p: Pointer;
SS>

Поправка 2
type
  AAAA=class
  end;
...
var
  a: AAAA;
  p: Pointer;
begin
  a := p;
  p := a;
....
end;


И приведение типа в С++ в стиле С — это дурной тон, хотя и очень простой. Я им не пользовался с момента когда узнал о
static_cast, reinterpret_cast, const_cast dynamic_cast — даже с усложнением написания этого самого приведения — жизнь стала легче.
Re[7]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 07:54
Оценка:
V>Да виноват, думал что функция FreeAndNil описана как procedure FreeAndNil(var obj: TObject) и чего то не совсем понятно почему так и не сделали.
Потому что было бы неудобно пользоваться
var
  m: TButton;
begin
  FreeAndNil(m); // error: types of actual and formal var parameters must be identical
end

Нужно было добавлять поддержку в язык.


V>... что TObject без дополнительных усилий програмера приведится к TObject-у и наоборот.

Не понял глубокой мысли
Re[8]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:56
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:


V>>Да виноват, думал что функция FreeAndNil описана как procedure FreeAndNil(var obj: TObject) и чего то не совсем понятно почему так и не сделали.

SS>Потому что было бы неудобно пользоваться
SS>
SS>var
SS>  m: TButton;
SS>begin
SS>  FreeAndNil(m); // error: types of actual and formal var parameters must be identical
SS>end
SS>

SS>Нужно было добавлять поддержку в язык.


V>>... что TObject без дополнительных усилий програмера приведится к TObject-у и наоборот.

SS>Не понял глубокой мысли
И снова прошу прощения — мысли спереди слов летят.
Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
Re[8]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 07:58
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:


V>>Да виноват, думал что функция FreeAndNil описана как procedure FreeAndNil(var obj: TObject) и чего то не совсем понятно почему так и не сделали.

SS>Потому что было бы неудобно пользоваться
SS>
SS>var
SS>  m: TButton;
SS>begin
SS>  FreeAndNil(m); // error: types of actual and formal var parameters must be identical
SS>end
SS>

SS>Нужно было добавлять поддержку в язык.

Вообще смысла в этой функции нет, я не вижу по крайней мере.
Если он в том чтобы использовать одну и туже переменную два раза — не использую простите
а что бы изменилось от того если бы вы прсото написали
m.free?
Re[8]: Контроль типов в С++ и в Object pascal
От: Vitaliy_www  
Дата: 11.05.07 07:58
Оценка:
тоисть должно быть отак:




// C++
A* a;
void* p;

a = (A*)b;
p = a;

// Pascal
var
a: A;
p: Pointer;

type
AAAA=class
end;
...
var
a: AAAA;
p: Pointer;
begin
a := p;
p := a;
....
end;
Re[9]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:00
Оценка:
Здравствуйте, Vitaliy_www, Вы писали:

V_>тоисть должно быть отак:





V_>// C++

V_>A* a;
V_>void* p;

V_>a = (A*)b;

V_>p = a;

V_>// Pascal

V_>var
V_> a: A;
V_> p: Pointer;

V_>type

V_> AAAA=class
V_> end;
V_>...
V_>var
V_> a: AAAA;
V_> p: Pointer;
V_>begin
V_> a := p;
V_> p := a;
V_>....
V_>end;

Так вообще быть не должно.
Если есть приведение типов — нужно задуматься почему оно есть? А не тупо приводить
Re[10]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:04
Оценка:
Но раз уж на то пошло, то должно быть что то типа такого

C++
class A
{
...
};

void* p;
A* a;
...

{
  p = reinterpret_cast<void*>(a);
  a = reinterpret_cast<A*>(p); //Чувсвуете силу - такое писать не сильно хочется, а надо.
}

Delphi
type
  AAAA=class
  end;
  ...
  var
    a: AAAA;
    p: Pointer;
  begin
    a := p;
    p := a;
  end;
Re[11]: Контроль типов в С++ и в Object pascal
От: Vitaliy_www  
Дата: 11.05.07 08:07
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Но раз уж на то пошло, то должно быть что то типа такого


V>C++

V>
V>class A
V>{
V>...
V>};

V>void* p;
V>A* a;
V>...

V>{
V>  p = reinterpret_cast<void*>(a);
V>  a = reinterpret_cast<A*>(p); //Чувсвуете силу - такое писать не сильно хочется, а надо.
V>}
V>

V>Delphi
V>
V>type
V>  AAAA=class
V>  end;
V>  ...
V>  var
V>    a: AAAA;
V>    p: Pointer;
V>  begin
V>    a := p;
V>    p := a;
V>  end;
V>


Я понимаю, ето мне просто на Курсовую, мне нужно написать разницу между етими языками, я один из пунктов ето про контроль типов! Спасибо!
Re[8]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 08:11
Оценка:
V>Поправка 2
V>

V>type

V> AAAA=class
V> end;
V>...
V>var
V> a: AAAA;
V> p: Pointer;
V>begin
V> a := p;
V> p := a;
V>....
V>end;
V>

Да, согласен a := p; — это отличие от C++, связанное с контролем типов.

V>И приведение типа в С++ в стиле С — это дурной тон, хотя и очень простой. Я им не пользовался с момента когда узнал о

Изначально шла речь, о том, можно ли легко присвоить указатели. В обоих языках МОЖНО и одинаково легко. Другое дело, что лучше этого не делать, но это к языку не отностился.

Что касается, специальных XXX_cast-ов в С++, то можно зафиксировать ещё одно маленькое отличие: в C++ есть более полная поддержка для разных приведений типов
C++                 Delphi
(T)v                   T(v)
static_cast<T>(v)      T(v)
reinterpret_cast<T>(v) T(v)
const_cast<T>(v)       T(v)
dynamic_cast<T>(v)     v as T

т.е. в Delphi есть только спец. синтаксис для dynamic cast, в остальных случаях программист не может явно выразить свои намерения. Это конечно минус Delphi.
Re[9]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 08:15
Оценка:
Здравствуйте, vasmann, Вы писали:

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

Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4.

to all:
А вот создателей Си/С++ за результат выражения 3/2 расстрелял. очень сложно логике здравой поддаётся. (ну мож на процессорах и понятно, но в нормальной жизни...)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:21
Оценка:
OV>to all:
OV>А вот создателей Си/С++ за результат выражения 3/2 расстрелял. очень сложно логике здравой поддаётся. (ну мож на процессорах и понятно, но в нормальной жизни...)
Все очень здраво — свои намерения выражайте явно а не неявно
3/2 — это деление двух целых
3.0f/2 это деление числа плавающей точкой на целое... дальше думаю не стоит приводить примеров.
Re[9]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 08:24
Оценка:
SS>>Потому что было бы неудобно пользоваться
SS>>
SS>>var
SS>>  m: TButton;
SS>>begin
SS>>  FreeAndNil(m); // error: types of actual and formal var parameters must be identical
SS>>end
SS>>

SS>>Нужно было добавлять поддержку в язык.

V>Вообще смысла в этой функции нет, я не вижу по крайней мере.

V>Если он в том чтобы использовать одну и туже переменную два раза — не использую простите
V>а что бы изменилось от того если бы вы прсото написали
V>
V>m.free?
V>

Если m — это поле, а не локальная переменная, то оно с большей вероятностью использоваться повторно. Даже в пределах функции для обнуления локальной переменной можно найти смысл: упрщение при написании кода обработки исключений. Пример:
var
  m: TFileStream;
begin
  m = TFileStream.Create(fname, fmCreate); // create and lock file
  try
    WriteFile(m);
    FreeAndNil(m); // release file here
    UseFile(fname);
  finally
    m.Free();
  end;
end;

Если FreeAndNil заменить на
m.Free(); 
m = nil;

то при исключении в m.Free() произойёт access vioaltion в finally.
Re[7]: Контроль типов в С++ и в Object pascal
От: Sergei I. Gorelkin Россия  
Дата: 11.05.07 08:25
Оценка:
Здравствуйте, vasmann, Вы писали:

<skipped>


V>Да виноват, думал что функция FreeAndNil описана как procedure FreeAndNil(var obj: TObject) и чего то не совсем понятно почему так и не сделали.


Если бы так сделали, то она принимала бы только TObject (т.к. для аргументов, передаваемых по ссылке, язык требует точного совпадения типа), наследники
от TObject не принимались бы. Это гораздо неудобнее того, что есть сейчас.
Re[8]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:27
Оценка:
Здравствуйте, Sergei I. Gorelkin, Вы писали:

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


SIG><skipped>



V>>Да виноват, думал что функция FreeAndNil описана как procedure FreeAndNil(var obj: TObject) и чего то не совсем понятно почему так и не сделали.


SIG>Если бы так сделали, то она принимала бы только TObject (т.к. для аргументов, передаваемых по ссылке, язык требует точного совпадения типа), наследники

SIG>от TObject не принимались бы. Это гораздо неудобнее того, что есть сейчас.

Я этой функцией вообще не пользуюсь (оговорочка: около года) и чувствую себя прекрасно.
Re[10]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 08:28
Оценка:
V>>Здравствуйте, SuhanovSergey, Вы писали:
OV>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
OV>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4.
Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!
Re[11]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 08:31
Оценка:
Здравствуйте, vasmann, Вы писали:

OV>>to all:

OV>>А вот создателей Си/С++ за результат выражения 3/2 расстрелял. очень сложно логике здравой поддаётся. (ну мож на процессорах и понятно, но в нормальной жизни...)
V>Все очень здраво — свои намерения выражайте явно а не неявно
V>3/2 — это деление двух целых
Да, но скажи это в школе или институте. Они пальчиком у виска покрутят. Только Сипрограммеры и им подобные понимают эту "особенность"
Ведь если 3 яблока на двоих делить, то куда ещё одно денеться?
Получается, что (3/2)*2!=3 явное нарушение законов математики. Вот где одна из собак языка Си/Си++ порылась. В Паскале всё нормально — математика выполняется.
V>3.0f/2 это деление числа плавающей точкой на целое... дальше думаю не стоит приводить примеров.
а смысл?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:32
Оценка:
а чт омешает сделать так?
var
  m: TFileStream;
  ..
begin
  m = TFileStream.Create(fname, fmCreate); // create and lock file
  try
    WriteFile(m);
  finally
    m.free;
  end;
  m = TFileStream.Create(fname, fmCreate); // create and lock file
  try
    UseFile(m);
  finally
    m.free;
  end;
end;


Плюс вообще можно два отдельных логических участка WriteFile и UseFile разделить на отдельные функции с приемом имени файла?

Я не спорю — все это искуственные примеры, но вот в течении порядка года я обхожусь без FreeAndNil и никак об этом не жалею и не чувсвую дискомфорта. Ладно это дело вкуса каждого.
Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.
Re[11]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 08:39
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

SS>Если так рассуждать, то все укзатели — это по сути целые числа.

А как оригинально вы основываясь на количестве байт, пришли к неверному выводу.Хотя в компах всё числа. Давайте не будем кота называть собакой, несмотря на то, что у них по 4 лапы, хвос и шерсть.
SS> Давайте тогда разрешим свободно приводить их в Integer!
Уж извените. Одинаковое количество байт ещё ничего не говорит. Целое число и объект — разные вещи. Просто в С++ существуют классы в стеке и в куче. В делфи только в куче. Здесь есть свои плюсы и минусы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:40
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

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

OV>>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
OV>>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4.
SS>Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!

Это просто слова человека который не наступал на грабли связанных с неявным приведением типа.
Я приведу пример из реальной жизни. Писалось клиент/сервер приложение, из сокета читались данные, так вот для дебага мне было удобнее читать в строка (заранее установив ее размер в нужное значение) и смотреть на контент, потому как простой перевод указателья в PChar не помогал — наличие хотябы одного нуля в контенте приводил к показанию конца строки и это понятно, так что было вот удобно строкой, в релизе используется свой класс, который кеширует память — короче отдельный обьект, совсем другого типа, так вот была проблема в нарушении протокола — контент левый ехал, искал почему, и вернул строку и ЗАБЫЛ закоментировать FreeAndNil(buffer) (buffer был описан как buffer: TMyObject, а я его заменил на String) как вы догодались, проблему в протоколе я нашол быстро, а вернуть обратно забыл — конец дня, нужно отдать на тестирование — короче в режиме "быстронах и срочнонах", поверьте я минут 30 искал в чем проблема, даже с наличием WinMerge просто по той причине что я положился на систему типов и думал что FreeAndNil строке никогда не сделаешь...
Все это мой опыт, моя не внимательность — знаю — вина была полностью на мне я даже и не спорю, но ВЕДЬ ЭТО МОГ УВИДЕТЬ КОМПИЛЯТОР и дать хотя бы гнусненький хинт, не говоря о ворнинге или вообще откозаться компилить.
Re[13]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 08:44
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.

Ок. вот я и не понимаю: зачем плодить сущности?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:45
Оценка:
Здравствуйте, AKh, Вы писали:

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


V>>>3/2 — это деление двух целых

OV>>Да, но скажи это в школе или институте. Они пальчиком у виска покрутят. Только Сипрограммеры и им подобные понимают эту "особенность"
OV>>Ведь если 3 яблока на двоих делить, то куда ещё одно денеться?
OV>>Получается, что (3/2)*2!=3 явное нарушение законов математики. Вот где одна из собак языка Си/Си++ порылась. В Паскале всё нормально — математика выполняется.

AKh>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.


И в дополнение мы не в школе и не в институте, а решаем задачи программирования на языке программирования со своими правилами. А как гвоорится со своими уставами в чужой монастырь... Так что все просто либо вы принимаете правила и пишите на С++ (могу поверить что вас моугт заставить), либо нет и пишите на другом языке.
Я пишу и на том и на том, дискомфорта не чувствую, В Делфи (мое мнение) нужно помнить больше того что должне знать компилер.
Re[11]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 08:46
Оценка:
V>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.
Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает".
В контексте же темы ветки существенных отличий нет.
Re[12]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:50
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.

SS>Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает".
SS>В контексте же темы ветки существенных отличий нет.
Для вас const не существенно? Для меня очень существенно. Потому как то что константно — то должно им и оставаться (естественно если вы намеренно не хотите снять константность), и за этим следить должен в первую очередь программер (он вообще за всем следить должен) а помогать за этой слеэкой компилер.
То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?
Re[12]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 08:58
Оценка:
V>>>>Здравствуйте, SuhanovSergey, Вы писали:
OV>>>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
OV>>>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4.
SS>>Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!

V>Я приведу пример из реальной жизни. Писалось клиент/сервер приложение...

Интресно, как эта поучительная история связана с моим злорадным замечанием к мнению о корректсности приведения Pointer-ов TObject-у.
Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.
Re[12]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:02
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.

SS>Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает".
SS>В контексте же темы ветки существенных отличий нет.

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

И тот и тот языки хороши, докозательство тому — тонны приложений написаных как на плюсах так и на делфе. И я не являюсь ярым приверженцем плюсов или делфы и ярым противником обратного, для лбой задачи нужно выбирать оптимальные средства ее решения.
Re[13]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:04
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

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

OV>>>>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
OV>>>>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4.
SS>>>Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!

V>>Я приведу пример из реальной жизни. Писалось клиент/сервер приложение...

SS>Интресно, как эта поучительная история связана с моим злорадным замечанием к мнению о корректсности приведения Pointer-ов TObject-у.
SS>Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.

Нет, посто относился не к вам, а к тому кому отвечали вы постом выше о как замучено.
Re[14]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:07
Оценка:
SS>>Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.

Не только FreeAndNil вообще не типизированый тип (var Data) это ЗЛО во всех его проявлениях, уж лучше поинтер.
Re[12]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 09:10
Оценка:
SS>>Если так рассуждать, то все укзатели — это по сути целые числа.
OV>А как оригинально вы основываясь на количестве байт, пришли к неверному выводу.
Дак это вы же начали основываться на количестве байт для своих выводов! Моя реплика — это была "гипербола". Я преувеличил, чтобы показать, ваш такой подход неверен.

Вы утверждали, что приведение TObject в Pointer и обратно — это правильно и хорошо. Я и создатели C++ не согласны. TObject является указателем, но наоборот. Поэтому приведение TObject -> pointer пртензий не вызывает, pointer -> TObject по идее не должно быть неявным.
Re[5]: Контроль типов в С++ и в Object pascal
От: MasterZiv СССР  
Дата: 11.05.07 09:12
Оценка:
vasmann пишет:

> MZ>У них все объекты наследуются принудительно и неявно от TObject.

> MZ>Так что все в порядке ( с точки зрения борладна ).
>
> Шутить изволите?
> String это не TObject
> Pointer — это не TObject

Ладно, хорошо. На самом деле это не делает Object Pascal языком
без строгой типизации. Ну а то что борланды делают все что
им вздумается с их языком — это их дело.

Кстати я бы наверное сравнивал тогда не с Object Pascal,
которого как языка и не было (стандарта не было потому что),
а с языком Pascal, который все же как язык был, хотя стандарта
его тоже вроде бы не было.
Posted via RSDN NNTP Server 2.1 beta
Re[15]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:15
Оценка:
Здравствуйте, AKh, Вы писали:

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


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


AKh>>>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.

OV>>Ок. вот я и не понимаю: зачем плодить сущности?

AKh>Как сказал Саттер с Александреску "Предпочитайте минимальные классы монолитным".

Непонял, причем это здесь
AKh>Моя точка зрения такая (попробую быть последовательным):
AKh>Оператор деления языка можно "отнаследовать" от математического, т.к. он выполняет те же функции.
Как кто то с класиков тоже сказал, унаследованный класс не должен изменять сущность базового. Кто то на этом форуме с сишников кричал мне что наследование — ужос.
AKh>Но имеет уточнение — а именно предметная область пременения — программирование. А в этой области есть особенность — в компьютере нет непрерывной линейки чисел.
А в обычной математике разве не так? Вы помните о делении на рациональные и иррациональные числа. Просто в эти множества немного разные для компа и обычного математика. По моему, (могу ошибаться) но множество рациональных чисел, которые использует комп входят в множество рациональных чисел математика. Но не наоборот.

AKh>Поэтому, есстественным выглядит, разделение на типы: целые и иммитация дробных.

Иммитация — это супер!
AKh>В зависимости от предметной области использование одного из этих типов будет выгоднее использование другого. Таким образом, и использование операции деления с одним типом будет выгоднее операции деления с другим.
Согласен.
AKh>Это и является обоснованием рациональности ввода 2-х типов операций деления.
Но я бы оставил для целого деления симпол "\" и всё. Тоесть

3/2 = 1.5
3\2 = 1
3.0/2 = 1.5
3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
таким образом всё было бы по местам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:18
Оценка:
OV>Иммитация — это супер!
Тоесть для вас они дробные на промежутке -бесконечность..+бесконечность, ну ну

OV>3/2 = 1.5

OV>3\2 = 1
OV>3.0/2 = 1.5
OV>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>таким образом всё было бы по местам.

Не переживайте, кому нужно, запинают, что целочисленное деление дает целый меньший результат, а дробное делене дает максимально приближенный дробный результат, это правиль за два повторения в уме, и 2-3 примерами увиденных в дебагере.
Re[13]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 09:20
Оценка:
V>То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?
Просто я смотрю на C++ и Delphi как языки одной группы: unmanaged. На фоне олтличий от Java, C# или даже Delphi.NET обсуждаемые отличия кажутся какими-то несерьёзными.
Re[13]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:20
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

SS>>>Если так рассуждать, то все укзатели — это по сути целые числа.

OV>>А как оригинально вы основываясь на количестве байт, пришли к неверному выводу.
SS>Дак это вы же начали основываться на количестве байт для своих выводов! Моя реплика — это была "гипербола". Я преувеличил, чтобы показать, ваш такой подход неверен.
Я просто показал, что переменная объект — указатель.
SS>Вы утверждали, что приведение TObject в Pointer и обратно — это правильно и хорошо.
Я не утверждал что это хорошо. Я просто сказал, что это законно. Законно!=хорошо. Аккуратно выводите мысль.
SS> Я и создатели C++ не согласны. TObject является указателем, но наоборот. Поэтому приведение TObject -> pointer пртензий не вызывает, pointer -> TObject по идее не должно быть неявным.
так приведения pointer -> TObject только явное. Просто паскаль допускает создание параметров без указания типа. Это другое дело. И компилятор смотрит. ведь посмотрите определение параметров FreeAndNil — (var Obj)
Если её обявить как (var Obj:TObject) то указатели не пройдут.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:25
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?

SS>Просто я смотрю на C++ и Delphi как языки одной группы: unmanaged. На фоне олтличий от Java, C# или даже Delphi.NET обсуждаемые отличия кажутся какими-то несерьёзными.
Да в том то и дело, кому то не нравится что в С++ 3/2 дает 1, когда это вовсе не противоречит стандарту а даже им указано, я бы понял если бы на 3 из 6 машинах это работало так, а на других не так, причем в независимости от компилятора — духовная связ так сказать — да это была бы проблема.
И в принципе тему можно было бы давно закрыть, т.к. автор темы давно в курсак себе впишет то что было сказано давно, а мы тут просто поддержали разговор .
Re[14]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 09:27
Оценка:
OV> так приведения pointer -> TObject только явное.
Это работает:
var
  p: Pointer;
  m: TButton;
begin
  m := p;
end;
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:27
Оценка:
Здравствуйте, vasmann, Вы писали:

OV>>Иммитация — это супер!

V>Тоесть для вас они дробные на промежутке -бесконечность..+бесконечность, ну ну

OV>>3/2 = 1.5

OV>>3\2 = 1
OV>>3.0/2 = 1.5
OV>>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>>таким образом всё было бы по местам.

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

Да вот 3 месяца пишу на чистом Си, свык. Но слава Богу, мой компилятор хоть жорсткий. Он кричит на меня по каждой мелочи. Например,
char t[10];
printf("%d",t);

компилятор пишет о серёзной ошибке и отказывается компилить. Не говоря о других вещах.
Когда к MS VC2005++ пришёл, то его вольностям я был в шоке. Мне нужно было передать в процеру масив, и как я не передавал его, компилятор пропускал (а я случайно описался и амперсанд забыл дописать, а потом, когда понял, просто уже "игрался" и смотрел как компилятор глотает откровенный бред)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:30
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


OV>>>Иммитация — это супер!

V>>Тоесть для вас они дробные на промежутке -бесконечность..+бесконечность, ну ну

OV>>>3/2 = 1.5

OV>>>3\2 = 1
OV>>>3.0/2 = 1.5
OV>>>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>>>таким образом всё было бы по местам.

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

OV>Да вот 3 месяца пишу на чистом Си, свык. Но слава Богу, мой компилятор хоть жорсткий. Он кричит на меня по каждой мелочи. Например,
OV>
OV>char t[10];
OV>printf("%d",t);
OV>

OV>компилятор пишет о серёзной ошибке и отказывается компилить. Не говоря о других вещах.
OV>Когда к MS VC2005++ пришёл, то его вольностям я был в шоке. Мне нужно было передать в процеру масив, и как я не передавал его, компилятор пропускал (а я случайно описался и амперсанд забыл дописать, а потом, когда понял, просто уже "игрался" и смотрел как компилятор глотает откровенный бред)
Какое отношение бред пропущенный компилером 2005 относится к стандарту языка по поводу опереатора / для целых и с плавающей точкой чисел. Вообще бред который пропускает компилер марки HZ не означает что это ошибка стандарта языка.
Re[15]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:41
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:


OV>> так приведения pointer -> TObject только явное.

SS>Это работает:
SS>
SS>var
SS>  p: Pointer;
SS>  m: TButton;
SS>begin
SS>  m := p;
SS>end;
SS>


А вы все настройки варнингов включили? там почему то по умолчанию UnSafe операции не отмечены. Для меня варнинги — ошибки, так как это потенциальные ошибки.
В младших версиях за такое сразу получал по шапке. Куда мир котиться. Жаль по рукой нет 3 делфи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Контроль типов в С++ и в Object pascal
От: AKh  
Дата: 11.05.07 09:41
Оценка:
Здравствуйте, OdesitVadim, Вы писали:
AKh>>>>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.
OV>>>Ок. вот я и не понимаю: зачем плодить сущности?
AKh>>Как сказал Саттер с Александреску "Предпочитайте минимальные классы монолитным".
OV>Непонял, причем это здесь

У меня "сущность" автоматически ассоциировалась с классом.

AKh>>Моя точка зрения такая (попробую быть последовательным):

AKh>>Оператор деления языка можно "отнаследовать" от математического, т.к. он выполняет те же функции.
OV> Как кто то с класиков тоже сказал, унаследованный класс не должен изменять сущность базового. Кто то на этом форуме с сишников кричал мне что наследование — ужос.

Да, должна быть композиция.

[...]

AKh>>Это и является обоснованием рациональности ввода 2-х типов операций деления.

OV>Но я бы оставил для целого деления симпол "\" и всё. Тоесть

Как вариант. Но это уже другая тема — синтаксис языка.

OV>3/2 = 1.5

OV>3\2 = 1
OV>3.0/2 = 1.5
OV>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>таким образом всё было бы по местам.

Думаю, расстановкой приоритетов (тип аргументов или тип оператора) эти проблемы бы решились.

А можно, кстати, не расстановкой приоритетов, а вернуться к вопросу о преобразовании типов, с которого это началось. Если считать, что типом результата должнен руководить оператор, то 3.0\2 = 1 останется однозначно верным. Но встает другой ворос, а 1 — это int или long? Тогда типом результата должен быть один из операторов. Логично взять делимое. Тогда 3.0\2 = 1.0 — верно. Неявное преоразование типов отсутсвует (на расширения (int*int=long) не будем обращать внимание).

Что же делает С++? Неявное преобразование типов отсутсвует. Даже, если взять пример 3/2 = 1.5. Здесь целый аргумент преобразуется в вещественный, что не способствует точности отсутсвия неявного преобразования. С++ как раз решает эту проблему. Так что на счет примера неявного преобразования
Автор: OdesitVadim
Дата: 11.05.07
вы все таки не правы.
Re[16]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:49
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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



OV>>> так приведения pointer -> TObject только явное.

SS>>Это работает:
SS>>
SS>>var
SS>>  p: Pointer;
SS>>  m: TButton;
SS>>begin
SS>>  m := p;
SS>>end;
SS>>


OV>А вы все настройки варнингов включили? там почему то по умолчанию UnSafe операции не отмечены. Для меня варнинги — ошибки, так как это потенциальные ошибки.

OV>В младших версиях за такое сразу получал по шапке. Куда мир котиться. Жаль по рукой нет 3 делфи.

Буду благодарен если скажите где это найти, ибо искал долго, но судя повсему плохо искал. Также жалею что в Делфе нету опции интерпретировать ворнинг как ошибку.
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:56
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>А можно, кстати, не расстановкой приоритетов, а вернуться к вопросу о преобразовании типов, с которого это началось. Если считать, что типом результата должнен руководить оператор, то 3.0\2 = 1 останется однозначно верным. Но встает другой ворос, а 1 — это int или long? Тогда типом результата должен быть один из операторов. Логично взять делимое. Тогда 3.0\2 = 1.0 — верно. Неявное преоразование типов отсутсвует (на расширения (int*int=long) не будем обращать внимание).

согласен. Где то так и я мыслю.
AKh>Что же делает С++? Неявное преобразование типов отсутсвует. Даже, если взять пример 3/2 = 1.5. Здесь целый аргумент преобразуется в вещественный, что не способствует точности отсутсвия неявного преобразования. С++ как раз решает эту проблему. Так что на счет примера неявного преобразования
Автор: OdesitVadim
Дата: 11.05.07
вы все таки не правы.

подождите, в С++ 3/2 = 1.5???
Только что проверял на компиляторе — нет, 1, так как и положено языку. Или Великий Стандарт думает по другому уже и компилятор не показатель???
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: AKh  
Дата: 11.05.07 10:04
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

AKh>>Что же делает С++? Неявное преобразование типов отсутсвует. Даже, если взять пример 3/2 = 1.5. Здесь целый аргумент преобразуется в вещественный, что не способствует точности отсутсвия неявного преобразования. С++ как раз решает эту проблему. Так что на счет примера неявного преобразования
Автор: OdesitVadim
Дата: 11.05.07
вы все таки не правы.

OV>подождите, в С++ 3/2 = 1.5???
OV>Только что проверял на компиляторе — нет, 1, так как и положено языку. Или Великий Стандарт думает по другому уже и компилятор не показатель???

Вы меня не правельно поняли. 3/2 = 1.5, как и предыдущий пример взят из вашего контекста (с оператором \). Я даже отметил, что здесь "аргумент преобразуется в вещественный", а "С++ как раз решает эту проблему", т.е. в С++ все как и было спланировано (т.е. у него, в данном случае, получается, что тип результата — тип делимого).

Извенясь, если не достаточно подробно изложил.
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 10:07
Оценка:
Здравствуйте, vasmann, Вы писали:

OV>>А вы все настройки варнингов включили? там почему то по умолчанию UnSafe операции не отмечены. Для меня варнинги — ошибки, так как это потенциальные ошибки.

OV>>В младших версиях за такое сразу получал по шапке. Куда мир котиться. Жаль по рукой нет 3 делфи.

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

Вот как интерпретировать ворнинг как ошибку я не знаю. Я просто привык убирать все ворнинги и хинты. Полностью. Даже хинт — потенциальный глюк в будущем. Но бывают случаи, когда я всё таки не согласен с компилятором. Тогда я явно ставлю Отключение ворнингов на данную строку с припиской почему.
Это у меня выглядит так:
{$WARNINGS OFF}//обяснения, почему здесь. обычно это TODO.
//Палённая строка
{$WARNINGS ON}

Включить дополнительные варнинги надо так.
Project-Options...-Compiler messages должны все галочки стоять, кроме "Default"
Вкладка Compiler. "Typed @ operator" — сразу забудет о многих странных преобразованиях.
"Assignable type constants" должна быть снята.
"Stack frame" лучше поставить — преобразования это не исправит, но для отладки — очень помогает — отладчик начинает видеть значения параметров в окне "Call stack"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 10:09
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>Вы меня не правельно поняли. 3/2 = 1.5, как и предыдущий пример взят из вашего контекста (с оператором \). Я даже отметил, что здесь "аргумент преобразуется в вещественный", а "С++ как раз решает эту проблему", т.е. в С++ все как и было спланировано (т.е. у него, в данном случае, получается, что тип результата — тип делимого).


AKh>Извенясь, если не достаточно подробно изложил.

А я уже испугался, что стандарт поменяли.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 10:11
Оценка:
Спасибо.
Не знаю чего, но вот Complier-messages это наверно единственное куда я не лазил — и как окозалось зря.
Еще раз спасибо.
Re[19]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 10:23
Оценка:
V>Не знаю чего, но вот Complier-messages это наверно единственное куда я не лазил — и как окозалось зря.
Что-то я не могу найти такую вкладку. Delphi6.
Re[12]: Контроль типов в С++ и в Object pascal
От: Кодт Россия  
Дата: 11.05.07 11:10
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>>>А вот создателей Си/С++ за результат выражения 3/2 расстрелял. очень сложно логике здравой поддаётся. (ну мож на процессорах и понятно, но в нормальной жизни...)

V>>Все очень здраво — свои намерения выражайте явно а не неявно
V>>3/2 — это деление двух целых
OV>Да, но скажи это в школе или институте. Они пальчиком у виска покрутят. Только Сипрограммеры и им подобные понимают эту "особенность"

В каждом языке свой устав. Некоторые покрутят пальчиком у скрепыша в экселе: почему 2+2*2 = 6, когда на калькуляторе получается 8?

OV>Ведь если 3 яблока на двоих делить, то куда ещё одно денеться?


А в Хаскелле результат 3/2 — это Frac a => a. Попытка скормить Int или Integer в любую часть выражения — компилятор надаёт по рукам. И правильно: делить можно только то, что делится. Яблоки — можно (ножом). Болты — нельзя (даже ножовкой: это уже будут не болты, а металлолом).
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[12]: Контроль типов в С++ и в Object pascal
От: . Великобритания  
Дата: 11.05.07 12:17
Оценка:
OdesitVadim wrote:

> Да, но скажи это в школе или институте. Они пальчиком у виска покрутят.

А что скажешь насчёт sqrt(-5)?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[13]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 12:32
Оценка:
Здравствуйте, ., Вы писали:

.>OdesitVadim wrote:


>> Да, но скажи это в школе или институте. Они пальчиком у виска покрутят.

.>А что скажешь насчёт sqrt(-5)?
В фортране (язык математиков?) всё было просто. там это работало, если указать что числа комплексные.

В Си/Паскале во время выполнения выскочит ошибка, которую можно перевести как "Не знаю как это сделать.". Согласитесь, это разные вещи, когда программа говорит, что она не знает/не умеет и когда она по "дивным" правилам (по "дивным", потомучто одним они просты, другим — дики, третим совсем непонятно, но все более-менее смирились)

Но и в Си++, и в Делфи (начиная с 2005) можно обявить свой тип а ля TComplex, определить для него действия и вуаля. Всё так как ожидается (потому что сам определял
Кстати, для делфи такой модуль почти в стандартной поставке.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 12:35
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


.>>OdesitVadim wrote:


>>> Да, но скажи это в школе или институте. Они пальчиком у виска покрутят.

.>>А что скажешь насчёт sqrt(-5)?
OV>В фортране (язык математиков?) всё было просто. там это работало, если указать что числа комплексные.

OV>В Си/Паскале во время выполнения выскочит ошибка, которую можно перевести как "Не знаю как это сделать.". Согласитесь, это разные вещи, когда программа говорит, что она не знает/не умеет и когда она по "дивным" правилам (по "дивным", потомучто одним они просты, другим — дики, третим совсем непонятно, но все более-менее смирились)


OV>Но и в Си++, и в Делфи (начиная с 2005) можно обявить свой тип а ля TComplex, определить для него действия и вуаля. Всё так как ожидается (потому что сам определял

OV>Кстати, для делфи такой модуль почти в стандартной поставке.

Только вот беда, нет перегруженных операторов. И по этому вместо привычных +-*/ нужно писать дивные не математические фразы
add, sub, mult, div... Вы сами своим словам противоречите.
В одном месте вам не привычно, а другом то что не привычно — привычно — определитесь уже.
Re[15]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 12:44
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Только вот беда, нет перегруженных операторов. И по этому вместо привычных +-*/ нужно писать дивные не математические фразы

V>add, sub, mult, div... Вы сами своим словам противоречите.
Отстали от жизни. Всё есть.
V>В одном месте вам не привычно, а другом то что не привычно — привычно — определитесь уже.
Различайте моё отношение и отношение других. Мне чудно, но привык. Другим это абсолютно нормально. Другим нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 12:50
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


V>>Только вот беда, нет перегруженных операторов. И по этому вместо привычных +-*/ нужно писать дивные не математические фразы

V>>add, sub, mult, div... Вы сами своим словам противоречите.
OV>Отстали от жизни. Всё есть.

В делфе можно перегужать операторы? Или это фича только для комплексных? Если последнее — мне это не представляет никакой ценности, ибо комплексные числа не нужны (мне, пока что

V>>В одном месте вам не привычно, а другом то что не привычно — привычно — определитесь уже.

OV>Различайте моё отношение и отношение других. Мне чудно, но привык. Другим это абсолютно нормально. Другим нет.
А в чем проблема? Ну чудно? Ну нормально? Что тут не так? Мы ж документацию читаем на английском и не лезем им в их язык с заявками типа — чудной у вас язык, нет, в чем проблема тогда с языками программирования? Выучил правила, и все, не волнует тебе чудно или нет — применяй свои знания. Не нравится — велкам туда — где не чудно. Проще нужно относиться к жизни.

Блин, вообще тема ушла в жесткий оффтоп — зато прикольно.
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:05
Оценка:
Здравствуйте, vasmann, Вы писали:

V>В делфе можно перегужать операторы? Или это фича только для комплексных? Если последнее — мне это не представляет никакой ценности, ибо комплексные числа не нужны (мне, пока что

Можно. +-/* точно можно. Нужно просто обявить новую запись (record) и добавить процедуры, которые будут собственно осуществлять действия.
я думаю это развеит ваши неведанья.
type
  TComplex = packed record
  strict private
    procedure Defuzz;
  private
    class procedure Init; static;
  public
    var
      Real, Imaginary: Double;
    class var
      Symbol: string;                 // defaults to 'i'
      SymbolBeforeImaginary: Boolean; // defaults to false
      DefuzzAtZero: Boolean;          // defaults to true
    class operator Round(const AValue: TComplex): Int64;
    class operator Trunc(const AValue: TComplex): Int64;
    class operator Equal(const Left, Right: TComplex): Boolean;
    class operator NotEqual(const Left, Right: TComplex): Boolean;
    class operator LessThan(const Left, Right: TComplex): Boolean;
    class operator LessThanOrEqual(const Left, Right: TComplex): Boolean;
    class operator GreaterThan(const Left, Right: TComplex): Boolean;
    class operator GreaterThanOrEqual(const Left, Right: TComplex): Boolean;
    class operator Add(const Left, Right: TComplex): TComplex;
    class operator Subtract(const Left, Right: TComplex): TComplex;
    class operator Multiply(const Left, Right: TComplex): TComplex;
    class operator Divide(const Left, Right: TComplex): TComplex;
    class operator Negative(const AValue: TComplex): TComplex;

    // Note: currently Implicit operators work like Explicit operators in Win32,
    // i.e. they need an explicit type-cast
    class operator Implicit(const AValue: Double): TComplex;
    class operator Implicit(const AValue: Integer): TComplex;
    class operator Implicit(const AValue: Int64): TComplex;
    class operator Implicit(const AValue: Variant): TComplex;
    class operator Explicit(const AValue: TComplex): Double;
    class operator Explicit(const AValue: TComplex): Integer;
    class operator Explicit(const AValue: TComplex): Int64;
  end;


И как пример, реализация некоторых из них.
class function TComplex.From(const AReal, AImaginary: Double): TComplex;
begin
  Result.Real := AReal;
  Result.Imaginary := AImaginary;
  if DefuzzAtZero then
    Result.Defuzz;
end;

class operator TComplex.Add(const Left, Right: TComplex): TComplex;
begin
  Result := From(Left.Real + Right.Real, Left.Imaginary + Right.Imaginary);
end;

class operator TComplex.Subtract(const Left, Right: TComplex): TComplex;
begin
  Result := From(Left.Real - Right.Real, Left.Imaginary - Right.Imaginary);
end;

class operator TComplex.Multiply(const Left, Right: TComplex): TComplex;
begin
  Result := From((Left.Real * Right.Real) - (Left.Imaginary * Right.Imaginary),
                 (Left.Real * Right.Imaginary) + (Left.Imaginary * Right.Real));
end;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:12
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


V>>В делфе можно перегужать операторы? Или это фича только для комплексных? Если последнее — мне это не представляет никакой ценности, ибо комплексные числа не нужны (мне, пока что

OV>Можно. +-/* точно можно. Нужно просто обявить новую запись (record) и добавить процедуры, которые будут собственно осуществлять действия.
OV>я думаю это развеит ваши неведанья.
OV>
OV>type
OV>  TComplex = packed record
OV>  strict private
OV>    procedure Defuzz;
OV>  private
OV>    class procedure Init; static;
OV>  public
OV>    var
OV>      Real, Imaginary: Double;
OV>    class var
OV>      Symbol: string;                 // defaults to 'i'
OV>      SymbolBeforeImaginary: Boolean; // defaults to false
OV>      DefuzzAtZero: Boolean;          // defaults to true
OV>    class operator Round(const AValue: TComplex): Int64;
OV>    class operator Trunc(const AValue: TComplex): Int64;
OV>    class operator Equal(const Left, Right: TComplex): Boolean;
OV>    class operator NotEqual(const Left, Right: TComplex): Boolean;
OV>    class operator LessThan(const Left, Right: TComplex): Boolean;
OV>    class operator LessThanOrEqual(const Left, Right: TComplex): Boolean;
OV>    class operator GreaterThan(const Left, Right: TComplex): Boolean;
OV>    class operator GreaterThanOrEqual(const Left, Right: TComplex): Boolean;
OV>    class operator Add(const Left, Right: TComplex): TComplex;
OV>    class operator Subtract(const Left, Right: TComplex): TComplex;
OV>    class operator Multiply(const Left, Right: TComplex): TComplex;
OV>    class operator Divide(const Left, Right: TComplex): TComplex;
OV>    class operator Negative(const AValue: TComplex): TComplex;

OV>    // Note: currently Implicit operators work like Explicit operators in Win32,
OV>    // i.e. they need an explicit type-cast
OV>    class operator Implicit(const AValue: Double): TComplex;
OV>    class operator Implicit(const AValue: Integer): TComplex;
OV>    class operator Implicit(const AValue: Int64): TComplex;
OV>    class operator Implicit(const AValue: Variant): TComplex;
OV>    class operator Explicit(const AValue: TComplex): Double;
OV>    class operator Explicit(const AValue: TComplex): Integer;
OV>    class operator Explicit(const AValue: TComplex): Int64;
OV>  end;
OV>


OV>И как пример, реализация некоторых из них.

OV>
OV>class function TComplex.From(const AReal, AImaginary: Double): TComplex;
OV>begin
OV>  Result.Real := AReal;
OV>  Result.Imaginary := AImaginary;
OV>  if DefuzzAtZero then
OV>    Result.Defuzz;
OV>end;

OV>class operator TComplex.Add(const Left, Right: TComplex): TComplex;
OV>begin
OV>  Result := From(Left.Real + Right.Real, Left.Imaginary + Right.Imaginary);
OV>end;

OV>class operator TComplex.Subtract(const Left, Right: TComplex): TComplex;
OV>begin
OV>  Result := From(Left.Real - Right.Real, Left.Imaginary - Right.Imaginary);
OV>end;

OV>class operator TComplex.Multiply(const Left, Right: TComplex): TComplex;
OV>begin
OV>  Result := From((Left.Real * Right.Real) - (Left.Imaginary * Right.Imaginary),
OV>                 (Left.Real * Right.Imaginary) + (Left.Imaginary * Right.Real));
OV>end;
OV>

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

На самом деле, лично для мен Система Типов стоит важнее кастрированных операторов.
Re[19]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:15
Оценка:
Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.
Re[19]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:18
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Круто, хоть что-то чем нечего .

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

V>На самом деле, лично для мен Система Типов стоит важнее кастрированных операторов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:20
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.

Мое мнение — все грабли растут из референсной модели. И даже чего т омне кажется что сделали ее не из-за того что она какие то плюсы несет в себе (ну вот хоть убейте, не вижу я преимущества в том что мне в каждой функции писать такое:
begin
  myFavoriteObject := TMyFavoriteObject.Create(args);
  try
    .....
  finally
    myFavoriteObject.free;  
  end;


Мне все больше кажется что эту модель выбрали просто насло С++ — типа хоть чемто будет отличаться, в то время как в С++ мы имеем все механизмы нам необходимые
нужна ссылка? Получите &.
нужен поинтер на обеькт — получите и распишитесь
нужен обьект который урет при разрушении стека — получите.
И отсюда ж сколько прелестей вытекает.
Re[20]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:24
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


V>>Круто, хоть что-то чем нечего .

OV>Ну а вы так хотели, что бы у нас было на уровне 90.
А вы считаете граблявое, костылявое решение лучше заранее заложенного элегантного в язык?
Я нет.
Вы считаете что та перегрузка операторов которую смогли вкрутить/ввертеть борманци в делфи это та перегрузка которую дает стандарт С++? Не смешите.
Как я уже отписался выше — все кривости растут из референсной модели которая ничего, не то чтобы ничего а ВООБЩЕ НИЧЕГО положительно в себе не несет, кроме как гемороя. Но это ж раздел уже священных воин.
И главное — с этим можно жить и как не странно можно програмить.
Re: Контроль типов в С++ и в Object pascal
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 11.05.07 13:27
Оценка:
Здравствуйте, Vitaliy_www, Вы писали:

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


И С++ и Pascal статически-типизированы.
В то же время Pascal в большей степени сильно-типизированный язык (но не в такой степени, как Java, Python или С#).
C++ же в большей степени слабо-типизированный язык (хотя и не в такой степени, как C).
-- Андрей
Re[2]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:29
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

АК>Здравствуйте, Vitaliy_www, Вы писали:


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


АК>И С++ и Pascal статически-типизированы.

АК>В то же время Pascal в большей степени сильно-типизированный язык (но не в такой степени, как Java, Python или С#).
АК>C++ же в большей степени слабо-типизированный язык (хотя и не в такой степени, как C).
Вот это заявочки среди голивуда .
Re[20]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:35
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.

Шаблоны обещают, я уже видел синтакисис. Правда Они ещё не пришли к единой идее, как их правильно обявить.
ЗЫ. Отвечать самому себе — прикольно!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[21]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:42
Оценка:
OV>ЗЫ. Отвечать самому себе — прикольно!
Это да, редактировать я не научился .

V>>Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.

OV>Шаблоны обещают, я уже видел синтакисис. Правда Они ещё не пришли к единой идее, как их правильно обявить.

Можно глянуть на синтаксис этих шаблонов. Неужели они тоже будут для рекордов? Если да, то может они наконец прикрутят к рекордам конструкторы/деструкоторы? Дадут возможность для рекорда обьявлять член-функции? Дадут модификаторы прав private/public/protected — вообще старнный и не понятный для меня? И тогда будет Селфи++ ?
Я в восторге. Или они предложат рядом с рекордами делать свободные функции, которые на вход будут принимать первым параметром указатель на рекорд? . Мдя. Смешно.
Re[21]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:42
Оценка:
Здравствуйте, vasmann, Вы писали:

убейте, не вижу я преимущества в том что мне в каждой функции писать такое:
V>
V>begin
V>  myFavoriteObject := TMyFavoriteObject.Create(args);
V>  try
V>    .....
V>  finally
V>    myFavoriteObject.free;  
V>  end;
V>

А как по мне — так большая чувствительность за кодом. А для Си++ специально понаделывали разным чекеров, а то разработчик забыл случайно уничтожить переменную или создал в стеке и возвратил return'ом
V>Мне все больше кажется что эту модель выбрали просто насло С++ — типа хоть чемто будет отличаться, в то время как в С++ мы имеем все механизмы нам необходимые
V>нужна ссылка? Получите &.
в делфи тоже никто не мешает — @ и всё
V>нужен поинтер на обеькт — получите и распишитесь
тоже никто не мешает
V>нужен обьект который урет при разрушении стека — получите.
мне никто не мешает это через интерфейсы намутить.
V>И отсюда ж сколько прелестей вытекает.
И скоко же гадости.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[22]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:47
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


OV>убейте, не вижу я преимущества в том что мне в каждой функции писать такое:

V>>
V>>begin
V>>  myFavoriteObject := TMyFavoriteObject.Create(args);
V>>  try
V>>    .....
V>>  finally
V>>    myFavoriteObject.free;  
V>>  end;
V>>

OV>А как по мне — так большая чувствительность за кодом. А для Си++ специально понаделывали разным чекеров, а то разработчик забыл случайно уничтожить переменную или создал в стеке и возвратил return'ом
V>>Мне все больше кажется что эту модель выбрали просто насло С++ — типа хоть чемто будет отличаться, в то время как в С++ мы имеем все механизмы нам необходимые
V>>нужна ссылка? Получите &.
OV>в делфи тоже никто не мешает — @ и всё
V>>нужен поинтер на обеькт — получите и распишитесь
OV>тоже никто не мешает
V>>нужен обьект который урет при разрушении стека — получите.
OV>мне никто не мешает это через интерфейсы намутить.
V>>И отсюда ж сколько прелестей вытекает.
OV>И скоко же гадости.

Можно о гадостях?
Также фраза понравилась "интерфейсами намутить" — потому как именно намутить, и сами интерфейсы намученыб костылями вкручены в язык.
Про обьект который забыли удалить? — Смарт поинтер спасет.
В общем я не хочу с вами спорить, серьезно, у меня есть мое мнение на эту тему, оно мое, и навязывать доказывать — я не хочу. Я знаю что могу решить задачу эффективнее на С++ -я решу, на Делфе — решу, на питоне — тоже решу, не проблема эта. Просто в любом языке есть свои + и -, меня единственное что сдерживает в Делфи = то что считается что в Делфе быстрее разрабатывать — ха ха — ГУЙ — вот что быстро разрабатывать и ВСЕ, это все его преимущества.
Серьезно. Прошу меня простить за то что начал спорить с вами, не хочу войн, не хочу ссор и отстаиваний своих точек зрения — мне удобно и там и там и там, хочется большего и лучшего — и никто ж этого не запрещает.
Спасибо.
Re[21]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:48
Оценка:
Здравствуйте, vasmann, Вы писали:

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


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


V>>>Круто, хоть что-то чем нечего .

OV>>Ну а вы так хотели, что бы у нас было на уровне 90.
V>А вы считаете граблявое, костылявое решение лучше заранее заложенного элегантного в язык?
V>Я нет.
То что оно плохое — ваше мнение. А на данный момент сказано, "ребята, мы тут фичу новую прикрутили. Потестите, отпишитесь. А потом введём как новую возможность языка".
V>Вы считаете что та перегрузка операторов которую смогли вкрутить/ввертеть борманци в делфи это та перегрузка которую дает стандарт С++? Не смешите.
О святой стандарт. почти ни один компилятор не следует ему. Вот нашёл к примеру пакость, хочу узнать почему так. Смотрю в стандарт. Там написано что то. А на самом деле разработчики "незаметили" или "истолковали по своему". Ну и зачем стандарт???
К тому же стандарт пишет горстка людей. А вдруг они ошибаются?
V>Как я уже отписался выше — все кривости растут из референсной модели которая ничего, не то чтобы ничего а ВООБЩЕ НИЧЕГО положительно в себе не несет, кроме как гемороя. Но это ж раздел уже священных воин.
Ваше надуманое мнение и термин.
V>И главное — с этим можно жить и как не странно можно програмить.
На си тоже. И странно, даже это делают.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[22]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 13:53
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


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


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


V>>>>Круто, хоть что-то чем нечего .

OV>>>Ну а вы так хотели, что бы у нас было на уровне 90.
V>>А вы считаете граблявое, костылявое решение лучше заранее заложенного элегантного в язык?
V>>Я нет.
OV>То что оно плохое — ваше мнение. А на данный момент сказано, "ребята, мы тут фичу новую прикрутили. Потестите, отпишитесь. А потом введём как новую возможность языка".
V>>Вы считаете что та перегрузка операторов которую смогли вкрутить/ввертеть борманци в делфи это та перегрузка которую дает стандарт С++? Не смешите.
OV>О святой стандарт. почти ни один компилятор не следует ему. Вот нашёл к примеру пакость, хочу узнать почему так. Смотрю в стандарт. Там написано что то. А на самом деле разработчики "незаметили" или "истолковали по своему". Ну и зачем стандарт???
OV>К тому же стандарт пишет горстка людей. А вдруг они ошибаются?
V>>Как я уже отписался выше — все кривости растут из референсной модели которая ничего, не то чтобы ничего а ВООБЩЕ НИЧЕГО положительно в себе не несет, кроме как гемороя. Но это ж раздел уже священных воин.
OV>Ваше надуманое мнение и термин.
V>>И главное — с этим можно жить и как не странно можно програмить.
OV>На си тоже. И странно, даже это делают.

Стандард лучше тем — что он есть, чего нет в Делфе. Это тоже для меня не мало важно. Я не хочу следовать принципу — мне тут бабка нашептала — на заборах х.. тоже пишут, но это ж ничего не значит.
И я так и не услышал минусов не референсной модели.
Re[22]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 13:54
Оценка:
Здравствуйте, vasmann, Вы писали:

OV>>ЗЫ. Отвечать самому себе — прикольно!

V>Это да, редактировать я не научился .

V>>>Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.

OV>>Шаблоны обещают, я уже видел синтакисис. Правда Они ещё не пришли к единой идее, как их правильно обявить.

V>Можно глянуть на синтаксис этих шаблонов.

Найду ссылку, не забуду -отпишу. Но всё равно раскритикуете, потому что они либо будут похожи на С++ (тогда "нагло содрали") либо непохожи (тогда "это же ужос, лучше бы сделали похожими на С++")
V>Неужели они тоже будут для рекордов? Если да, то может они наконец прикрутят к рекордам конструкторы/деструкоторы?
К рекордам врядли. Они просто добавлят класам перегрузку операторов.
V>Дадут возможность для рекорда обьявлять член-функции? Дадут модификаторы прав private/public/protected — вообще старнный и не понятный для меня? И тогда будет Селфи++ ?
Вы на С++ классы никогда не писали? там всё это есть — private/public/protected.
V>Я в восторге. Или они предложат рядом с рекордами делать свободные функции, которые на вход будут принимать первым параметром указатель на рекорд? . Мдя. Смешно.
почём трава, где брали???
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 14:00
Оценка:
Здравствуйте, vasmann, Вы писали:


V>Можно о гадостях?

я написал. Утечки памяти, которые можно только отладчиком, да и то не всегда отследить.
Я писал выше. Читайте.
V>Также фраза понравилась "интерфейсами намутить" — потому как именно намутить, и сами интерфейсы намученыб костылями вкручены в язык.
Как по мне то нормально сделаны. а "намутить" — потому что так никогда не делают. Ну не нужно оно в делфи — идиология другая.
V>Про обьект который забыли удалить? — Смарт поинтер спасет.
Костыль?
V>В общем я не хочу с вами спорить, серьезно, у меня есть мое мнение на эту тему, оно мое, и навязывать доказывать — я не хочу. Я знаю что могу решить задачу эффективнее на С++ -я решу, на Делфе — решу, на питоне — тоже решу, не проблема эта. Просто в любом языке есть свои + и -, меня единственное что сдерживает в Делфи = то что считается что в Делфе быстрее разрабатывать — ха ха — ГУЙ — вот что быстро разрабатывать и ВСЕ, это все его преимущества.
V>Серьезно. Прошу меня простить за то что начал спорить с вами, не хочу войн, не хочу ссор и отстаиваний своих точек зрения — мне удобно и там и там и там, хочется большего и лучшего — и никто ж этого не запрещает.
V>Спасибо.
Простите и меня за спор(?). И пусть модераторы не обижаются на нас.
Нас учили не спорить, а вести дискусию. Хотя разница между ними мала.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 14:00
Оценка:
Здравствуйте, vasmann, Вы писали:

V>Стандард лучше тем — что он есть, чего нет в Делфе. Это тоже для меня не мало важно. Я не хочу следовать принципу — мне тут бабка нашептала — на заборах х.. тоже пишут, но это ж ничего не значит.

Мы ещё диспутируем?
Страндарт нужно соблюдать. Для делфи он тоже в хелпе описан.
V>И я так и не услышал минусов не референсной модели.
Мне непонятен этот термин. И какая же модель в С++. И какие есть вообще.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 14:02
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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


OV>>>ЗЫ. Отвечать самому себе — прикольно!

V>>Это да, редактировать я не научился .

V>>>>Я не удивлюсь если они прикрутят еще "недо-шаблоны" к Делфе, это будет нечто.

OV>>>Шаблоны обещают, я уже видел синтакисис. Правда Они ещё не пришли к единой идее, как их правильно обявить.

V>>Можно глянуть на синтаксис этих шаблонов.

OV>Найду ссылку, не забуду -отпишу. Но всё равно раскритикуете, потому что они либо будут похожи на С++ (тогда "нагло содрали") либо непохожи (тогда "это же ужос, лучше бы сделали похожими на С++")
То что они нагло содрали — меня это никак не будет волновать, ибо будет практичным. (если будет конечно)
V>>Неужели они тоже будут для рекордов? Если да, то может они наконец прикрутят к рекордам конструкторы/деструкоторы?
OV>К рекордам врядли. Они просто добавлят класам перегрузку операторов.
К классам? Классно. А как же референсная модель? А как быть в случае если опереатор должен вернуть ссылку на обьект класса? Тот же оператор сложения "+", должен вернуть ссылку на результат, что подразумевает что внутри этого опереатора будет создавастья новый обьект, и все бы ничего, если бы не одно но
 
  type
    TMyClass=class
    private: 
      //private members
    public
      class operator add(left, right: TMyClass) : TMyClass;
    end
..
class operator TMyClass.add(left, right: TMyClass) : TMyClass;
begin 
  Result := TMyClass.Create; //ВАЖНО
end;

//и теперь где то в коде имеем

var
  a, b, c, d: TMyClass;
...
begin
  ...
  a := b + c + d; //Имеем лик, ах да, вы можете посоветовать вкрутить костыль с подсчетом ссылк  :)))  :))) Ню ню, а травка действительно хороша
  ...
end;

V>>Дадут возможность для рекорда обьявлять член-функции? Дадут модификаторы прав private/public/protected — вообще старнный и не понятный для меня? И тогда будет Селфи++ ?
OV>Вы на С++ классы никогда не писали? там всё это есть — private/public/protected.
Я говорил про модификаторы для рекордов, это конечно если внимаетльно читали.
V>>Я в восторге. Или они предложат рядом с рекордами делать свободные функции, которые на вход будут принимать первым параметром указатель на рекорд? . Мдя. Смешно.
OV>почём трава, где брали???
Re[24]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 14:07
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

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



V>>Можно о гадостях?

OV>я написал. Утечки памяти, которые можно только отладчиком, да и то не всегда отследить.
OV>Я писал выше. Читайте.
V>>Также фраза понравилась "интерфейсами намутить" — потому как именно намутить, и сами интерфейсы намученыб костылями вкручены в язык.
OV>Как по мне то нормально сделаны. а "намутить" — потому что так никогда не делают. Ну не нужно оно в делфи — идиология другая.
V>>Про обьект который забыли удалить? — Смарт поинтер спасет.
OV>Костыль?
V>>В общем я не хочу с вами спорить, серьезно, у меня есть мое мнение на эту тему, оно мое, и навязывать доказывать — я не хочу. Я знаю что могу решить задачу эффективнее на С++ -я решу, на Делфе — решу, на питоне — тоже решу, не проблема эта. Просто в любом языке есть свои + и -, меня единственное что сдерживает в Делфи = то что считается что в Делфе быстрее разрабатывать — ха ха — ГУЙ — вот что быстро разрабатывать и ВСЕ, это все его преимущества.
V>>Серьезно. Прошу меня простить за то что начал спорить с вами, не хочу войн, не хочу ссор и отстаиваний своих точек зрения — мне удобно и там и там и там, хочется большего и лучшего — и никто ж этого не запрещает.
V>>Спасибо.
OV>Простите и меня за спор(?). И пусть модераторы не обижаются на нас.
OV>Нас учили не спорить, а вести дискусию. Хотя разница между ними мала.
Давайте уж в одном месте дискутировать.
Re[22]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 14:10
Оценка:
OV>А как по мне — так большая чувствительность за кодом.
чувствительность за кодом — это новое понятие такое?
расширяемость, сопровождаемость, чувствительность

А для Си++ специально понаделывали разным чекеров, а то разработчик забыл случайно уничтожить переменную или создал в стеке и возвратил return'ом
В Delphi тоже можно забыть удалить переменную или вернуть указатель на локальную record.

V>>нужен обьект который урет при разрушении стека — получите.

OV>мне никто не мешает это через интерфейсы намутить.
Получится через одно место. Задача интерфейсов — это поддержка COM. Они не очень предназначены для другого использования. Требует наследования от TInterfacedObject или ручной реализации IUnknown.
Re[24]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 14:11
Оценка:
Еще сам себе отвечу )
Я не ярый противник Делфи и приверженец С++, и также не на оборот. Я лояльно отношусь к тому и другому. С++ я вижу практичнее и удобнее в плане понимания языка, потому как на С++ можно говорить а не писать, на делфе увы нужно писать и понимать что пишешь, о разговоре можно забыть (это естесвенно все абстракции).
Re[24]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 14:17
Оценка:
Здравствуйте, vasmann, Вы писали:

V>К классам? Классно. А как же референсная модель? А как быть в случае если опереатор должен вернуть ссылку на обьект класса? Тот же оператор сложения "+", должен вернуть ссылку на результат, что подразумевает что внутри этого опереатора будет создавастья новый обьект, и все бы ничего, если бы не одно но

V>
 
V>  type
V>    TMyClass=class
V>    private: 
V>      //private members
V>    public
V>      class operator add(left, right: TMyClass) : TMyClass;
V>    end
V>..
V>class operator TMyClass.add(left, right: TMyClass) : TMyClass;
V>begin 
V>  Result := TMyClass.Create; //ВАЖНО
V>end;

V>//и теперь где то в коде имеем

V>var
V>  a, b, c, d: TMyClass;
V>...
V>begin
V>  ...
V>  a := b + c + d; //Имеем лик, ах да, вы можете посоветовать вкрутить костыль с подсчетом ссылк  :)))  :))) Ню ню, а травка действительно хороша
V>  ...
V>end;

V>


Интересненький пример. Но они умные, что нибуть придумают. Например так
class operator TMyClass.add(right: TMyClass) : TMyClass;
begin 
  Result := TMyClass.Create; //ВАЖНО? Уже не надо
end;

Хотя не знаю. Увидим что они придумают.
V>>>Дадут возможность для рекорда обьявлять член-функции? Дадут модификаторы прав private/public/protected — вообще старнный и не понятный для меня? И тогда будет Селфи++ ?
OV>>Вы на С++ классы никогда не писали? там всё это есть — private/public/protected.
V>Я говорил про модификаторы для рекордов, это конечно если внимаетльно читали.
А я же написал, что теперь в делфи между класами и рекордами разница незначительная. Просто в си для рекордов (извените, структур) видимость всегда одна — public.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 14:24
Оценка:
V>>>>Дадут возможность для рекорда обьявлять член-функции? Дадут модификаторы прав private/public/protected — вообще старнный и не понятный для меня? И тогда будет Селфи++ ?
OV>>>Вы на С++ классы никогда не писали? там всё это есть — private/public/protected.
V>>Я говорил про модификаторы для рекордов, это конечно если внимаетльно читали.
OV>А я же написал, что теперь в делфи между класами и рекордами разница незначительная. Просто в си для рекордов (извените, структур) видимость всегда одна — public.
Неправда. Она по-умолчанию public. Но можно и так написать:
struct T
{
    int A, B;
private:
    int C;
};
Re[25]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 14:26
Оценка:
OV>Интересненький пример. Но они умные, что нибуть придумают. Например так
OV>
OV>class operator TMyClass.add(right: TMyClass) : TMyClass;
OV>begin 
OV>  Result := TMyClass.Create; //ВАЖНО? Уже не надо
OV>end;
OV>

OV>Хотя не знаю. Увидим что они придумают.

Вот именно — они будут думать что придумать в этом случае, как бы его прикрутить, и будет тот же маразм что и с интерфесами (IUnknown)
V>>>>Дадут возможность для рекорда обьявлять член-функции? Дадут модификаторы прав private/public/protected — вообще старнный и не понятный для меня? И тогда будет Селфи++ ?
OV>>>Вы на С++ классы никогда не писали? там всё это есть — private/public/protected.
V>>Я говорил про модификаторы для рекордов, это конечно если внимаетльно читали.
OV>А я же написал, что теперь в делфи между класами и рекордами разница незначительная. Просто в си для рекордов (извените, структур) видимость всегда одна — public.

Не нужно путать тему, тема была ... С++ и Делфи — заметьте не Си а Си++ — это два разных языка со схожим синтаксисом. И Очень важно не путать их вместе.
В Си++
struct/class одно и тоже с одним различием struct по умолчанию член-данные public; class — private все — это все отличие.
Как может быть не значительная разница между обьектами за временем жизни которого следит компилятор по средствам стека (рекорды в делфе) или программер через удаление обьекта из кучи (естественно если его там создали), и программер через прямой целенаправленного вызова деструктора? Я схожести не вижу.
Думаю если сделают рекорды в делфе полноценными классами — от этого никто не пострадает, даже выиграют, если сделают нормальный синтаксис — то может наконец люди поймут что С++ НЕ ЗЛО , и плюнут на Делфи и пойдут в том направлении (С++) в котором уже не один 10 лет люди кропотливо настраивают язык под цели и программиста .
В общем возможна ситуация что делфи сама себя и похоронит с равноправием рекорда и обьекта . Это мое мнение. Но плюсов в этом будет больше чем минусов — если это сделают нормально.
Re[26]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 14:35
Оценка:
И еще один ответ на свой же вопрос
Ну вы приведете минусы не референсной модели?
Поясню — в делфи рефернсная модель — любой обьект представляется только ссылкой, за временем жизни следит только программист (исключение составляют классы реализующие интерфейс IUnknown, там зависит от того как сделал программер что делать в случае обнуления кол-ва ссылок, да и вообще считал ли он эти ссылки — короче жалкое подобие смарт поинтеров).
Не рефернсная модель — это С++.
За временем жизни следит либо компилятор либо программер в зависимости от создания обьекта (либо в стеке либо в куче) — небольшая вольность, развязывающая руки и демонстрирующая колосальную мощь — я могу решать как погибнет обьект, от моей руки или от руки компилятора .
Это элемнтарнейшее сравнение.
Re[24]: Контроль типов в С++ и в Object pascal
От: . Великобритания  
Дата: 11.05.07 15:03
Оценка:
OdesitVadim wrote:

> V>Стандард лучше тем — что он есть, чего нет в Делфе. Это тоже для меня

> не мало важно. Я не хочу следовать принципу — мне тут бабка нашептала —
> на заборах х.. тоже пишут, но это ж ничего не значит.
> Мы ещё диспутируем?
> Страндарт нужно соблюдать. Для делфи он тоже в хелпе описан.
Делфи выпускается одной конторой, а С++ стандарт выпущен одной конторой, а туева хуча реализаций этого стандарта
различными конторами. Такая проблема есть практически во всех продуктах жизнедеятельности информационных технологий,
созданием которых занимается несколько контор.
Если уж сравнивать с делфи, то надо сравнивать не С++, а, скажем, MSVC, "стандарт" которого очень хорошо расписан в msdn
и поддерживается на ура.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[27]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 15:11
Оценка:
У нас есть ещё строки. Там за всем следит компилятор.
>>С++ и Делфи — заметьте не Си а Си++ — это два разных языка со схожим синтаксисом. И Очень важно не путать их вместе.
Я с этой разницей тоже воюю. Многие люди к примеру считают, что в Си можно в любом месте переменные обявлять. Но я не насколько большой специалист в си/С++. Могу иногда смазать. Но я идею пытался выдать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 15:19
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>У нас есть ещё строки. Там за всем следит компилятор.

А у нас этих классов строк как собак нерезанных И за большинством из них обязательно следит компилятор.
В C++builder-е например есть AnsiString — точная копия встроенного в Delphi string. AnsiString реализован исключительно средствами C++, без поддержки компилятора.
Re[3]: Контроль типов в С++ и в Object pascal
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 11.05.07 15:36
Оценка:
Здравствуйте, vasmann, Вы писали:

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


АК>>Здравствуйте, Vitaliy_www, Вы писали:


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


АК>>И С++ и Pascal статически-типизированы.

АК>>В то же время Pascal в большей степени сильно-типизированный язык (но не в такой степени, как Java, Python или С#).
АК>>C++ же в большей степени слабо-типизированный язык (хотя и не в такой степени, как C).
V>Вот это заявочки среди голивуда .

Что именно?
-- Андрей
Re[3]: Контроль типов в С++ и в Object pascal
От: wallaby  
Дата: 13.05.07 08:27
Оценка:
Здравствуйте, vasmann, Вы писали:

V>По поводу строгой типизации Object Pascal-a (бормановского)

V>есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?

Уточнение. Не FreeAndNil(obj: TObject), а FreeAndNil(var Obj);

procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;


Так что язык тут не причём — компилятору ясно сказано, что на вход можно подавать всё что угодно. А сделали так потому, что в строгом варианте

procedure FreeAndNil(var Obj: TObject);
var
  Temp: TObject;
begin
  Temp := Obj;
  Obj := nil;
  Temp.Free;
end;


процедура становится бесполезной — она примет только объекты класса TObject, а не его наследников, поскольку аргумент передаётся по ссылке (var).

Object Pascal (Delphi) позволяет придерживаться строгой типизации, а если она мешает — обойти её явным приведением типа. Как и C++.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re[4]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 14.05.07 05:33
Оценка:
Здравствуйте, wallaby, Вы писали:

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


V>>По поводу строгой типизации Object Pascal-a (бормановского)

V>>есть функция FreeAndNil(obj: TObject) так вот она легко примет на вход и Pointer (любой) и как не странно String — о какой жесткой типизации (по крайней мере бормановской реализации) можно говорить?

W>Уточнение. Не FreeAndNil(obj: TObject), а FreeAndNil(var Obj);


W>
W>procedure FreeAndNil(var Obj);
W>var
W>  Temp: TObject;
W>begin
W>  Temp := TObject(Obj);
W>  Pointer(Obj) := nil;
W>  Temp.Free;
W>end;
W>


W>Так что язык тут не причём — компилятору ясно сказано, что на вход можно подавать всё что угодно. А сделали так потому, что в строгом варианте


W>
W>procedure FreeAndNil(var Obj: TObject);
W>var
W>  Temp: TObject;
W>begin
W>  Temp := Obj;
W>  Obj := nil;
W>  Temp.Free;
W>end;
W>


W>процедура становится бесполезной — она примет только объекты класса TObject, а не его наследников, поскольку аргумент передаётся по ссылке (var).


W>Object Pascal (Delphi) позволяет придерживаться строгой типизации, а если она мешает — обойти её явным приведением типа. Как и C++.



Это уже давно обговорили и я принес свои извенения за FreeAndNil.
Re[20]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 14.05.07 19:09
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>Не знаю чего, но вот Complier-messages это наверно единственное куда я не лазил — и как окозалось зря.

SS>Что-то я не могу найти такую вкладку. Delphi6.
Там её нет. Переходите на 7, как минимум. Фишки с Unsafe кодом только с 7 появились.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re[4]: Контроль типов в С++ и в Object pascal
От: Аноним  
Дата: 15.05.07 19:25
Оценка:
В Object Pascal можно написать


type
  MyInt = type integer;


теперь переменные типа MyInt НЕ могут быть приравнены к integer и наоборот. Т.е. это теперь два разных типа, пусть и совпадающих по размеру. Попробуйте добиться такого штатными средствами от C++ (без всяких там бустов).
Re[5]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 16.05.07 06:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В Object Pascal можно написать



А>
А>type
А>  MyInt = type integer;
А>


А>теперь переменные типа MyInt НЕ могут быть приравнены к integer и наоборот. Т.е. это теперь два разных типа, пусть и совпадающих по размеру. Попробуйте добиться такого штатными средствами от C++ (без всяких там бустов).


Сейчас начнется мерение пис..ми. Могу прривести тонну примеров которые штатными/нештатными средствами делфи не сделаете НИКОГДА, и что с этого?

Да кстати
type
  MyInt = type integer;

procedure some(i: MyInt);
begin
end;

procedure some2;
var
  index: Integer;
  ii: MyInt;
begin
  ii := 0;
  index := 0;
  index := ii;
  some(index);
end;


Ни одного ворнинга, даже хинта, не говоря об "разных" типах. Един6ственное когда отказывается компилить — когда я в функцию принимающюю MyInt через var передаю Integer — это мне очеень полезно и важно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.