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