Контроль типов в С++ и в 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?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.