Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменить синтаксис паскаля(делфи) 
:(
    Опции темы
Burka
Дата 30.5.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



А можно ли изменить сам синтаксис языка в компиляторе или где нить там ? smile 
 я вот например хочу поменять begin на {, а end на }. (а коментарии сделать так : /*...*/ )
Реальноли это? если да, то где это менять? 

Это сообщение отредактировал(а) Burka - 30.5.2008, 15:19


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
Bose
Дата 30.5.2008, 15:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: нет
Всего: 51



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

Нагуглил парочку:
1) Deex
2) http://andy.jgknet.de/dlang
PM MAIL WWW Skype   Вверх
Burka
Дата 30.5.2008, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



Спасибо, попробовал Deex, но че то результат не порадовал, не удобно очень, компилировать постоянно через батник.


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
Snowy
Дата 30.5.2008, 22:57 (ссылка) |   (голосов:15) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 9
Всего: 484



Ну это не С++
Паскаль - язык строгий. Вольностей не позволяет.
Так что только через внешний препроцессор, компиляция сторонняя, проверка синтаксиса отсутствует.
Паскаль не терпит подобных извращений.
Он от рождения строг и консервативен.
Как английский лорд обязан говорить на безупречном британском, так и программист на языках Вирта должен создавать чёткий, недвусмысленный код.
Такова суть строгих языков - не допускаются никакие разночтения.
А все кустарные поделки - кустарно и работают.
Если хочется лепить что попало и как угодно - это вам к плюсам.
Дельфи вольностей не допускает. Это строгий и чёткий язык.
PM MAIL   Вверх
Exai1e
Дата 30.5.2008, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



извращенство, и вообще не понятно зачем это нужно


Цитата(Snowy @  30.5.2008,  23:57 Найти цитируемый пост)
Если хочется лепить что попало и как угодно - это вам к плюсам.
Дельфи вольностей не допускает. Это строгий и чёткий язык. 

 smile  smile  smile 


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
mr.Anderson
Дата 30.5.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Snowy, точно, и в этом плюс Паскаля! smile 

Я подобными извратами занимался на Сях. Там это дело легко решается макросами. smile А ща привык и begin-end нравятся даже больше...


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
aktuba
Дата 31.5.2008, 00:03 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Изменять синтаксис Delphi на синтаксис C++ - бред... Синтаксис Delphi - один из главных плюсов перед С++!
Хочешь использовать Delphi с синтаксисом плюсов - Borland C++.

А вообще - для мазохистов есть отдельные форумы.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Burka
Дата 31.5.2008, 00:41 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



Snowy, в каждой строчке одно и тоже написано  smile 

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

А ни у кого нет исходников компилятора делфи?  smile 


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
aktuba
Дата 31.5.2008, 01:10 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(Burka @  31.5.2008,  01:41 Найти цитируемый пост)
Snowy, в каждой строчке одно и тоже написано  smile 

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

А ни у кого нет исходников компилятора делфи?  smile  


Эх... Нарываешся на минуса...
begin...end - это то, что удобно программистам Delphi. Не нравится - используй Borland C++. И хватит тут бред писать!


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Burka
Дата 31.5.2008, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



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


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
Mayk
Дата 31.5.2008, 05:35 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Со скобками есть проблема. При компиляции сторонних .pas файлов могут возникнуть Серьезные Проблемы из-за того что {комменты} будут третироваться как код.

Цитата(Burka @  31.5.2008,  04:41 Найти цитируемый пост)
А ни у кого нет исходников компилятора делфи?  smile  

Ищи free pascal compiler или gnu pascal compiler. 

Можешь ещё попробовать настроить Текстовой Редактор чтобы по нажатию на { вставлялось begin и по нажатитю на } - end.
Правда удалять их одной клавишей затрундительно.

ps. В мире есть ровно два Тектстовых Редактора: это vi(ныне его отпрыск vim) и emacs. Остальное - 
Цитата(Snowy @  31.5.2008,  02:57 Найти цитируемый пост)
кустарные поделки


[flame mode]
Цитата(aktuba @  31.5.2008,  04:03 Найти цитируемый пост)
Синтаксис Delphi - один из главных плюсов перед С++!

Как жалок язык что синтаксис является его одним из главных плюсов перед с++. БУГАГАГА.  
[/flame mode]

Это сообщение отредактировал(а) Mayk - 31.5.2008, 05:50


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
aktuba
Дата 31.5.2008, 08:24 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Цитата(Mayk @  31.5.2008,  06:35 Найти цитируемый пост)
Как жалок язык что синтаксис является его одним из главных плюсов перед с++. БУГАГАГА.  

Жалок не язык, а тот кто не умеет им пользоваться по назначению, пытаясь переделать, либо тот, кто не понимает плюсов языка. БУГАГАГА.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 31.5.2008, 10:10 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(aktuba @  30.5.2008,  23:03 Найти цитируемый пост)
Синтаксис Delphi - один из главных плюсов перед С++!

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 31.5.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Господа паскалисты, что вы понимаете под "строгостью" синтаксиса. Просто я впервые вижу? что-бы данный эпитет применялся к синтаксису языка. smile 
С++ - язык со статической строгой типизацией, все проверяется в compile time, причем даже такие мелочи как возможное несоответстие размера указателя размеру переменной в которую его записывают в случае перехода на 64х битную платформу. smile

Добавлено через 29 секунд
Цитата(Alexeis @  31.5.2008,  10:10 Найти цитируемый пост)
Я тоже не согласен. Delphi язык более высокого уровня абстракции, потому за синтаксисом стоят горы невидимого кода, который генериться автоматически. Синтаксис лишь уменьшает число ошибок за счет своей строгости.  

 smile 
PM MAIL Skype GTalk   Вверх
JackYF
Дата 31.5.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(Alexeis @  31.5.2008,  09:10 Найти цитируемый пост)
Delphi язык более высокого уровня абстракции

Аналог boost::lambda уже появился? smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Lazin
Дата 31.5.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Alexeis, ты не отвечаешь на мой ответ © , у тебя разрыв?
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 31.5.2008, 13:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Lazin @  31.5.2008,  10:06 Найти цитируемый пост)
Alexeis, ты не отвечаешь на мой ответ © , у тебя разрыв? 

  Я что маньяк круглые сутки сидеть на форуме  smile .

Хочешь пример?
Код

#define false true


  Попробуй после это скомпилировать любую программу. Синтаксис не просто может меняться, его можно превратить во что угодно, так что потом не найдешь концов. 
Потом посмотри чего можно замутить в операторе if . Это ж форменное безобразие! Таких опасных фич. в синтаксисе десятки. Например структуры. Нет ни какой гарантии что они будут бинарно совместимы с чем нибудь. По правилам структуру можно пронаследовать от класса  smile 
  Сравни с Delphi Record! Структура без возможности наследования, безо всяких виртуальных функций и деструкторов, чистые бинарные данные в строгом порядке. Можно создавать в стеке, по дефолту ни чем не инициализируется. Все четко и по делу. 
  На счет фигурных скобок, опять же они мелкие и плохо заметные, постоянно путаешься какая скобка от какого блока. Посмотри на синтаксис switch, не дай бог забыть break после очередного case. Идем дальше операторы цикла while. На кой черт он вообще сдался в С++  если есть цикл for, который его заменяет на 100%, намного лучше его и логичнее, включает в себя секцию инициализаций, секцию условий и секцию для пост операций преимущественно для инкремента счетчиков.
  Макросы - еще одно жуткое изобретение при наличии инлайн функций. Какое количество трудноанализируемых ошибок можно сделать на них!
  Межмодульное связывание extern smile . Что с чем связывается? Где объявление? При том синтаксис допускает ЛОКАЛЬНОЕ связывание extern переменных. Ужоснах просто. Просто кладезь случайных ошибок. 
  Объявление функций классов. Можно запросто объявить функцию и ни где ее не реализовать. И это будет правильно. 

  Я согласен, что все это можно не использовать когда программу пишешь сам, но реальность такова, что помимо написания новых программ нужно осуществлять поддержку старых написанных другими людьми с их естественной кривизной рук. Уверяю тебя такого безобразия на Delphi встретить нельзя.
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 31.5.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



ну во первых, вся эта чертовщина унаследована от С, во вторых иногда это бывает нужно

Цитата(Alexeis @  31.5.2008,  13:30 Найти цитируемый пост)
#define false true

эдакое самоубийство smile 

Цитата(Alexeis @  31.5.2008,  13:30 Найти цитируемый пост)
Потом посмотри чего можно замутить в операторе if . Это ж форменное безобразие! Таких опасных фич. в синтаксисе десятки. Например структуры. Нет ни какой гарантии что они будут бинарно совместимы с чем нибудь. По правилам структуру можно пронаследовать от класса

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


Цитата(Alexeis @  31.5.2008,  13:30 Найти цитируемый пост)
синтаксис switch, не дай бог забыть break после очередного case

а что если он там и не нужен?

Код

switch(i)
{
 case 1:
 case 2:
   ............
 break;
 case 3:
   ............
 break;
 //etc....
};



Цитата(Alexeis @  31.5.2008,  13:30 Найти цитируемый пост)
Идем дальше операторы цикла while. На кой черт он вообще сдался в С++  если есть цикл for, который его заменяет на 100%, намного лучше его и логичнее, включает в себя секцию инициализаций, секцию условий и секцию для пост операций преимущественно для инкремента счетчиков.

Код


//true - успешная инициализация
bool Initialized();

while( not Initialized() ) {Sleep(10000);}



Цитата(Alexeis @  31.5.2008,  13:30 Найти цитируемый пост)
Межмодульное связывание extern smile . Что с чем связывается? Где объявление? При том синтаксис допускает ЛОКАЛЬНОЕ связывание extern переменных. Ужоснах просто. Просто кладезь случайных ошибок. 

я им пользовался за всю жизнь 2 раза

Цитата(Alexeis @  31.5.2008,  13:30 Найти цитируемый пост)
Объявление функций классов. Можно запросто объявить функцию и ни где ее не реализовать. И это будет правильно. 

зато пользователь класса видит только интерфейс класса, а не реализацию, намного меньше зависимостей в коде, например

foo.h
Код

#include <все что нужно для реализации bar>
class Foo
{
void bar()
{
  //реализация bar
}
};


или

foo.h
Код

class Foo
{
void bar();
};


foo.cpp
Код

#include <все что нужно для реализации bar>
#include <foo.h>

void Foo::bar()
{
  //реализация bar
}


пользователь подключает только Foo.h, но в первом случае он неявно подключает кучу других заголовочных файлов. во втором случае можно забыть реализовать ф-ю, но эту ошибку легко найти
Цитата(Alexeis @  31.5.2008,  13:30 Найти цитируемый пост)
Уверяю тебя такого безобразия на Delphi встретить нельзя.

а как-же славные традиции писать программу в обработчиках событий  smile  

Это сообщение отредактировал(а) Lazin - 31.5.2008, 14:45
PM MAIL Skype GTalk   Вверх
nerezus
Дата 31.5.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

опять же они мелкие и плохо заметные, постоянно путаешься какая скобка от какого блока.
 А чем begin..end путается хуже? ))
лезть в этот разговор не хотел, но прямо таки интересно стало )

P.S. ну раз все равно залез, то:
C++ - это гибкость.
Pascal - это строгость.

Естественно гибкий язык имеет бОльшие возможности, но строгость - тоже хорошо.

Например мне нравится делфи во всем, кроме синтаксиса паскалеподобного. Именно за строгость и однозначность.

Цитата

а как-же славные традиции писать программу в обработчиках событий
 Везде такая традиция. Но только у нубов либо в программах уровня "хеллоуорлд".

Цитата

#define false true
 Кто это написал - тот дурак либо западлостроитель. Не ставь в пример дураков.


Цитата

Уверяю тебя такого безобразия на Delphi встретить нельзя.
 Уверяю тебя, можно. Я в универе учился, у одногруппников такое видел =\
Причем везде. Самое сложное - это не разгребать код, а алгоритм. Сложно сть несоизмерима ;)
Так что разбор кода будем считать меньше погрешности.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Mayk
Дата 31.5.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(JackYF @  31.5.2008,  14:50 Найти цитируемый пост)
Аналог boost::lambda уже появился? smile 

надеюсь что нет smile 
Если это появится раньше полноценных замыканий/лямбд в дельфи (кстати как с этим в дельфи.нет?)  то это смерти подобно

Добавлено через 59 секунд
Жестокой! Беспощадной! Безжалостной смерти!

Добавлено через 9 минут и 48 секунд
А может разделим эту эпическую тему и половину выкинем нафик в релвойну к подобному треду?



Цитата(Alexeis @  31.5.2008,  17:30 Найти цитируемый пост)
Уверяю тебя такого безобразия на Delphi встретить нельзя.

На дельфи полно другого безобразия. 
Из запомненго мною локальные ф-ции, которые должны были быть ф-циями класса. 

Код

procedure Class.Method1;
var ...
  procedure innerProcedure;
  .... {пара десятков строк}
  end {of innerProcedure}; 
...

procedure Class.Method2;
var ...
  procedure innerProcedure;
  .... {пара десятков строк таких же как и в Class.Metod1.InnerProcedure}
  end {of innerProcedure}; 
...



И конечно же наименования элементов на форме(такая же феерия и на builder c++, да)
Код

if CheckBox3.Enabled  then
begin
    CheckBox1.Enabled := LineEdit1.Enabled;
    CheckBox2.Enabled := LineEdit1.Enabled;
    CheckBox3.Enabled := LineEdit1.Enabled
else
    CheckBox1.Enabled := LineEdit2.Enabled;
    CheckBox2.Enabled := CheckBox5.Enabled;
    CheckBox3.Enabled := LineEdit2.Enabled
end;




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 31.5.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Код

bool Initialized();
while( not Initialized() ) {Sleep(10000);}


Код


for(;not Initialized();) 
{
  Sleep(10000);
}


Цитата(Lazin @  31.5.2008,  13:42 Найти цитируемый пост)
а что если он там и не нужен?

  Если он не нужен, то должна быть команда сквозного прохода. В С++ любят так делать. Фича используется в 1% случаев, а предусматривать обход нужно в остальных 99% случаев. 
 
Цитата(Lazin @  31.5.2008,  13:42 Найти цитируемый пост)
я им пользовался за всю жизнь 2 раза

  А мне приходиться дорабатывать софт где такие экстерны исчисляются десятками. 
 
Цитата(Lazin @  31.5.2008,  13:42 Найти цитируемый пост)
эдакое самоубийство

  Это не самоубийство а пример того как опасны средства С++. Понятно что это вырожденный пример, но вред такого характера могут нести макросы. 

На счет возможностей языка. 
  Попробуйте на С++ создать класс у которого будут 2е виртуальные функции с одним именем и одинаковым перечнем параметров или реализовать интерфейс без использования виртуальных методов, попробуйте делегировать реализацию интерфейса объекту члену класса. Или создать объект по его строковому имени. Можно ли в С++ вызвать функцию зная только ее имя (строка). Может ли статическая функция быть виртуальной? В Delphi можно реализовать полноценный Singleton вообще не создавая экземпляра класса.
  Как видите тонкими механизмами делфи не обделен тонкими механизмами, при этом он более логичен.
  Взять хотя бы циклы. Из 3х циклов нет ни одного лишнего. Цикл for только для целых и перечисляемых типов, цикл While с предусловием цикл Repeat с постусловием. Оператор выбора простой и очевидный. Если это функция так она и называется функцией, процедура называется процедурой. Если объявляется переменная, то будь добр пиши var, перешел к объявлению типа пиши type. А то объявил переменную фиг знает где, потом скопипастил код и закрыл имя переменной из внешней области. 
  Теперь пройдусь по массивам. В С++ некоторые вместо нормального a[i] умудряются писать *(a + 1), плюс в сочетании. Массив - указатель палка о двух концах. В функции никак не возможно определить что тебе передали массив или указатель. В Delphi строго, если передаешь указатель, то это указатель, если массив, то это массив. 

  Так что строгости в любом случае больше.

Добавлено через 4 минуты и 2 секунды
Цитата(Mayk @  31.5.2008,  14:56 Найти цитируемый пост)
Из запомненго мною локальные ф-ции, которые должны были быть ф-циями класса. 

  Это механизм аналогичный блокам в С++. В каждой локальной функции могут быть свои локальные переменные, при этом она видит переменные из внешней функции. 
Просто это блоки определенные до их использования. Вполне себе рабочий механизм, правда в ООП уже малоэффективен.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
  Дата 31.5.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Alexeis @  31.5.2008,  16:13 Найти цитируемый пост)
Попробуйте на С++ создать класс у которого будут 2е виртуальные функции с одним именем и одинаковым перечнем параметров

это как? как компилятор будет определять какую из них вызывать?
Код

class A
{
  public:
  virtual void aaa() {}
  virtual void aaa() {}
};

A& var ( new A() );
var.aaa();//<--- Alexis, что здесь вызывать?


Цитата(Alexeis @  31.5.2008,  16:13 Найти цитируемый пост)
реализовать интерфейс без использования виртуальных методов

на то нам и дан паттерн NVI smile 
Цитата(Alexeis @  31.5.2008,  16:13 Найти цитируемый пост)
попробуйте делегировать реализацию интерфейса объекту члену класса

легко

Код

class A
{
  public:
  void do_work()  {.....};
};

class B
{
  A state_;
  public:
  void do_work()
  {
    state_.do_work();
  }
};


Цитата(Alexeis @  31.5.2008,  16:13 Найти цитируемый пост)
Или создать объект по его строковому имени. Можно ли в С++ вызвать функцию зная только ее имя (строка).

да, рефлексии у нас нет

Цитата(Alexeis @  31.5.2008,  16:13 Найти цитируемый пост)
Может ли статическая функция быть виртуальной?

 smile как это можно использовать
Цитата(Alexeis @  31.5.2008,  16:13 Найти цитируемый пост)
Как видите тонкими механизмами делфи не обделен тонкими механизмами, при этом он более логичен.

ну просто ты привык к нему, вот он и кажется логичным, мне например не понятно, почему функция и процедура, это разные вещи...
Да, в С++ много чего нет, но...
что-бы было если бы у бабушки был член... 
наверное она бы была не бабушкой а дедушкой smile 
так и здесь, будь в с++ рефлешн, интерфейсы и прочие фишки делфи, то это был бы другой язык
PM MAIL Skype GTalk   Вверх
nerezus
Дата 31.5.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

В Delphi можно реализовать полноценный Singleton вообще не создавая экземпляра класса.
  Это как?  smile 


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Alexeis
Дата 31.5.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Lazin @  31.5.2008,  16:44 Найти цитируемый пост)
это как? как компилятор будет определять какую из них вызывать?

  В таком как в примере это никому и не нужно. При наследовании виртуальной функции, можно запретить предкам начиная с определенного колена вызывать виртуальную функцию того класса, который реально создан. Т.е. в одном из наследников вводиться новый виртуальный метод, точно такой же как и прежний, но с директивой reintroduce, после чего в таблицу VMT вводиться новая запись, а старая остается. Т.о. можно добиться разных действий, в зависимости от того к какому из предков был приведен объект. Довольно тонкий механизм, но в VCL используется.
  Статические виртуальные функции используются при приведении классов наследников к классам предов (не путать с приведением объектов). Фактически для класса создается своя таблица VMT. 
  На счет синглтона. В Delphi каждая статическая функция получает один неявный параметр как и обычная, но это не указатель на объект, а указатель на класс, т.е. ведет себя точно также как и обычная, можно определять статические поля, виртуальные статические функции, которые в наследнике перекрываются. Класс может иметь свои свойства, точно также как объект. Можно создать сколько угодно переменных класса и при этом это всегда будет тот же самый класс. Объявляется тип класса точно также как и обычный.
Код

type 
  TObjClass = class of TObject;
var
  cls : TObjClass;

При этом он является классом обычных объектов, в том смысле, что создает объекты и объекты этого класса имеют доступ ко всем статическим полям и функциям.


Цитата(Lazin @  31.5.2008,  16:44 Найти цитируемый пост)
ну просто ты привык к нему, вот он и кажется логичным, мне например не понятно, почему функция и процедура, это разные вещи...

  Смотри при выходе из процедуры в Delphi ты пишешь exit, т.е. выхожу, в С++ тоже самое действие будет называться "возвращаю ничего".

  Код Delphi самоописателен. Чисто виртуальная функция пишется и директивой abstract, перекрыл функцию пиши override. Вызываешь виртуальный метод предка из перекрытого пишешь Inherited. Это по любому более читабельно, чем если ничего не писать.

Мне кажется совместимость с C сильно испортила язык С++.  Можно было обойтись раздельной компиляцией. Билдер, например, может скомпилировать код делфи, код C++ и слинковать в один исполняемый файл. И ни каких проблем.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 1.6.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Alexeis
1. в Delphi объекты классов можно создать в стеке?
2. можно ли определить свой аллокатор для класса? (аналог перегрузки new в С++)
3. есть ли аналог спецификатора volatile?
4. есть ли аналог элипсисов? (оператор ...)
5. можно ли создать массив в стеке с неконстантным значением числа элементов? (типа int array[count], где count - не константа)
6. есть ли аналог объединений? (union)
7. есть ли аналог mutable-полей?
8. есть ли возможность метапрограммирования?
9. есть ли аналог виртуального наследования?
10. есть ли встроенная поддержка комплексной арифметики?
11. есть ли аналог спецификатора restrict?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 1.6.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



12. есть ли аналог ссылок
13. есть ли аналог модификатора const для параметров функций
14. есть ли спецификации исключений
15. какие возможности управления временем жизни объектов в стеке
16. можно-ли на Delphi реализовать функтор
17. можно-ли реализовать смарт-поинтер
18. можно-ли реализовать сборку мусора, используя только возможности стандартных библиотек

как уже задолбал этот холивар, Delphi-программисты не понимают что дают возможности языка С++, какие паттерны можно реализовать и тд. 
например идиома RAII, без нее очень сложно пользоваться исключениями... но в паскале это невозможно, так как там объекты классов не создаются в стеке, можно конечно сделать то-же самое с помощью finaly(наверное???), но это уже совсем не то, ведь это делается вручную а компилятор С++ делает такие вещи сам.
Конечно делфи для чего-то то-же хорош, наверное, но для чего конкретно я не знаю  smile 


PM MAIL Skype GTalk   Вверх
Alexeis
Дата 1.6.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  1.6.2008,  10:44 Найти цитируемый пост)
1. в Delphi объекты классов можно создать в стеке?

Только классические паскалевские (не VCL ские)
Цитата(MAKCim @  1.6.2008,  10:44 Найти цитируемый пост)
2. можно ли определить свой аллокатор для класса? (аналог перегрузки new в С++)

  Угу.
Цитата(MAKCim @  1.6.2008,  10:44 Найти цитируемый пост)
3. есть ли аналог спецификатора volatile?

  Не знаю че за хрень
4. есть ли аналог элипсисов? (оператор ...)
  Тоже ни знаю че такое
Цитата(MAKCim @  1.6.2008,  10:44 Найти цитируемый пост)
6. есть ли аналог объединений? (union)

  угу
Цитата(MAKCim @  1.6.2008,  10:44 Найти цитируемый пост)
7. есть ли аналог mutable-полей?

  Не знаю че это такое
Цитата(MAKCim @  1.6.2008,  10:44 Найти цитируемый пост)
8. есть ли возможность метапрограммирования?

  Аналогично, звучит как-то абстрактно
Цитата(MAKCim @  1.6.2008,  10:44 Найти цитируемый пост)
9. есть ли аналог виртуального наследования?

  Тоже не слышал че такое
...
  Бр... надоело ты бы пояснял хоть что это такое, а то ведь термины могут отличаться.

Цитата(Lazin @  1.6.2008,  11:32 Найти цитируемый пост)
как уже задолбал этот холивар, Delphi-программисты не понимают что дают возможности языка С++, какие паттерны можно реализовать и тд. 


  Не я его начал. Ты бы видел как изящно реализуются многие паттерны на Delphi. С++ просто нервно курит в сторонке.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 1.6.2008, 13:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
Не знаю че за хрень

грубо говоря
запрет кэширования переменной
Код

extern volatile int variable;
...
fo (int i = 0; i < variable; ++i) {
...
}

компилятор не будет использовать регистр для хранения variable в цикле, т. е на каждой итерации будет осуществляться чтение variable


Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
Тоже ни знаю че такое

функции с переменным числом параметров
Код

void f(const char * list, ...) {
}



Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
Не знаю че это такое

поля класса, которые можно изменять для константного объекта


Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
Аналогично, звучит как-то абстрактно

можно ли в Delphi вычислить факториал константы во время компиляции?

Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
Тоже не слышал че такое

Код

class A {
};

class B: public A {
};

class C: public A {
};


требуется создать класс D, унаследованный от B, C, и при этом B, C, D будут использовать один и тот же объект A

Добавлено через 3 минуты и 19 секунд
Цитата(Lazin @  1.6.2008,  12:32 Найти цитируемый пост)
можно-ли реализовать сборку мусора, используя только возможности стандартных библиотек

перегрузка глобального new и boost threads?
(хотя boost threads вроде пока не стандартная)

Добавлено через 7 минут и 37 секунд
Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
Только классические паскалевские (не VCL ские)

плохо
да и вообще, как-то паскаль и делфи не сильно со стеком дружат


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 1.6.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  1.6.2008,  12:13 Найти цитируемый пост)
компилятор не будет использовать регистр для хранения variable в цикле, т. е на каждой итерации будет осуществляться чтение variable

  Это вообще, не имеет отношения к языку. Скорее директива определенного компилятора.

Цитата(MAKCim @  1.6.2008,  12:13 Найти цитируемый пост)
функции с переменным числом параметров

  Делается, но несколько иным образом через array of const, при этом число параметров получается автоматически. Кстати в С++ нельзя получить число элементов динамического массива, типа High(mas)   smile 
 
Цитата(MAKCim @  1.6.2008,  12:13 Найти цитируемый пост)
поля класса, которые можно изменять для константного объекта

  В этом смысле существует несколько другой механизм. Механизм ReadOny и WriteOnly свойств, ограничивающих возможность изменения состояния объекта.

Цитата(MAKCim @  1.6.2008,  12:13 Найти цитируемый пост)
требуется создать класс D, унаследованный от B, C, и при этом B, C, D будут использовать один и тот же объект A

  Класс будет использовать объект  smile . Чета тут перемудрили ИМХО.

Цитата(MAKCim @  1.6.2008,  12:13 Найти цитируемый пост)
плохо
да и вообще, как-то паскаль и делфи не сильно со стеком дружат

  Очень деже неплохо, стековые объекты нарушают концепцию безопасности ООП в Delphi. Этот механизм неэффективен для больших объектов, а маленькие стековые объекты есть, это Record. Все четко разделено. Объект маленький - делай Record это будет быстро  + копирование по значению, большой - делай в куче.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
W4FhLF
Дата 1.6.2008, 14:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
 Это вообще, не имеет отношения к языку.


Часть стандарта. 

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
 Делается, но несколько иным образом через array of const, при этом число параметров получается автоматически.


Можно пример? Мне кажется, что использование массивов к эллипсису никакого отношения не имеет. 

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
 Кстати в С++ нельзя получить число элементов динамического массива, типа High(mas)


Для этого, в прицнипе, и существуют стандартные STL-контейнеры. 

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
  Класс будет использовать объект   . Чета тут перемудрили ИМХО.


Нет, на самом деле всё просто.

Обычное наследование:
user posted image

Виртуальное:
user posted image



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Mayk
Дата 1.6.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(Alexeis @  1.6.2008,  18:04 Найти цитируемый пост)

  Делается, но несколько иным образом через array of const, при этом число параметров получается автоматически. Кстати в С++ нельзя получить число элементов динамического массива, типа High(mas)  

Да? А std::vector<t>::size() для кого?

Добавлено через 4 минуты и 3 секунды
Кстати в паскале нельзя вычислить факториал в compile time.

ps. а в си++ нельзя вычслить синус - 
Код

 template<double x> class Z; //"ComeauTest.c", line 1: error: floating-point template parameter is nonstandard

но тссс, это секрет.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 1.6.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Mayk @  1.6.2008,  13:34 Найти цитируемый пост)
Да? А std::vector<t>::size() для кого?

  Так это ж класс...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
vinter
Дата 1.6.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 1
Всего: 56



Цитата(Alexeis @  1.6.2008,  15:53 Найти цитируемый пост)
  Так это ж класс...

это стандартная замена массива


--------------------
Мой блог
PM MAIL WWW   Вверх
Любитель
Дата 1.6.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Mayk @  31.5.2008,  15:56 Найти цитируемый пост)
Если это появится раньше полноценных замыканий/лямбд в дельфи (кстати как с этим в дельфи.нет?)  то это смерти подобно

ИМХО Дельфям глубоко плевать на ФП.

Цитата(Alexeis @  31.5.2008,  16:13 Найти цитируемый пост)
В Delphi можно реализовать полноценный Singleton вообще не создавая экземпляра класса.

 smile 

Цитата(Alexeis @  31.5.2008,  19:01 Найти цитируемый пост)
В таком как в примере это никому и не нужно. При наследовании виртуальной функции, можно запретить предкам начиная с определенного колена вызывать виртуальную функцию того класса, который реально создан. Т.е. в одном из наследников вводиться новый виртуальный метод, точно такой же как и прежний, но с директивой reintroduce, после чего в таблицу VMT вводиться новая запись, а старая остается. Т.о. можно добиться разных действий, в зависимости от того к какому из предков был приведен объект. Довольно тонкий механизм, но в VCL используется.

Смысл непонятен. Только проблемы ИМХО smile

Цитата(Alexeis @  31.5.2008,  19:01 Найти цитируемый пост)
При этом он является классом обычных объектов, в том смысле, что создает объекты и объекты этого класса имеют доступ ко всем статическим полям и функциям.

Стоп. А в Дельфи разве есть статические поля?

Цитата(MAKCim @  1.6.2008,  11:44 Найти цитируемый пост)
4. есть ли аналог элипсисов? (оператор ...)

В С++ они унаследованы от С, потому в оч недобном виде. Ими, по-моему, никто не пользуется (в плюсах).

Цитата(MAKCim @  1.6.2008,  11:44 Найти цитируемый пост)
6. есть ли аналог объединений? (union)

Записи с вариантами?

Цитата(MAKCim @  1.6.2008,  11:44 Найти цитируемый пост)
9. есть ли аналог виртуального наследования?

Дык множественного ж вроде нет - зачем виртуальное?!

Цитата(MAKCim @  1.6.2008,  11:44 Найти цитируемый пост)
11. есть ли аналог спецификатора restrict?

Немного оффтоп. Какие компилеры на сегодня юзают рестрикт для оптимизации?

Цитата(Lazin @  1.6.2008,  12:32 Найти цитируемый пост)
13. есть ли аналог модификатора const для параметров функций

Да - const smile Причём AFAIK для 32-битных (или меньше) типов аналогично передачи по значению. Иначе - константная ссылка.

Цитата(Lazin @  1.6.2008,  12:32 Найти цитируемый пост)
18. можно-ли реализовать сборку мусора, используя только возможности стандартных библиотек

Delphi .Net? smile 

Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
2. можно ли определить свой аллокатор для класса? (аналог перегрузки new в С++)
Угу.

AFAIK только глобально. Разве я не прав?

Цитата(Alexeis @  1.6.2008,  12:49 Найти цитируемый пост)
Только классические паскалевские (не VCL ские)

Эт которые с object вместо class? Если да - тогда фтопку, точно не помню, но помню, что это нечто кривое и недоделанное smile

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
 В этом смысле существует несколько другой механизм. Механизм ReadOny и WriteOnly свойств, ограничивающих возможность изменения состояния объекта.

А какое отношение это имеет к mutable?

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
Очень деже неплохо, стековые объекты нарушают концепцию безопасности ООП в Delphi. Этот механизм неэффективен для больших объектов, а маленькие стековые объекты есть, это Record. Все четко разделено. Объект маленький - делай Record это будет быстро  + копирование по значению, большой - делай в куче.

Нелогично smile 

Цитата(W4FhLF @  1.6.2008,  14:25 Найти цитируемый пост)
Можно пример? Мне кажется, что использование массивов к эллипсису никакого отношения не имеет. 

Нетипизрованный массив, если я правильно понял, как-то можно в дельфях передавать в функцию. Как затем юзать - фиг его smile

Цитата(Mayk @  1.6.2008,  14:34 Найти цитируемый пост)
Кстати в паскале нельзя вычислить факториал в compile time.

Ну, в С++ тоже много чего нельзя в компайл-тайм (не тот язык всё-таки) - так что кодогенераторы рулят smile 

Насчёт виртуальных конструкторов и виртуальных статических методов - респект. Гуд smile

ЗЫ Блин, хорошая вещь холивары smile 


--------------------
PM MAIL ICQ Skype   Вверх
Rrader
  Дата 1.6.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: нет
Всего: 191



Цитата(W4FhLF @  1.6.2008,  21:25 Найти цитируемый пост)
Можно пример? Мне кажется, что использование массивов к эллипсису никакого отношения не имеет. 

В справочной системе приведен пример:
Код

function MakeStr(const Args: array of const): string;
var
  I: Integer;
begin
  Result := '';
  for I := 0 to High(Args) do
    with Args[I] do
      case VType of
        vtInteger:    Result := Result + IntToStr(VInteger);
        vtBoolean:    Result := Result + BoolToStr(VBoolean);
        vtChar:       Result := Result + VChar;
        vtExtended:   Result := Result + FloatToStr(VExtended^);

        vtString:     Result := Result + VString^;
        vtPChar:      Result := Result + VPChar;
        vtObject:     Result := Result + VObject.ClassName;
        vtClass:      Result := Result + VClass.ClassName;
        vtAnsiString: Result := Result + string(VAnsiString);
        vtCurrency:   Result := Result + CurrToStr(VCurrency^);
        vtVariant:    Result := Result + string(VVariant^);
        vtInt64:      Result := Result + IntToStr(VInt64^);
    end;
end;

//Calling
MakeStr(['test', 100, ' ', True, 3.14159, TForm])

Для последней версии Dephi можно для прохода использовать оператор for..in..do
Код

function MakeStr(const ADynArray: array of const): string;
var
  lRec: TVarRec;
begin
  Result := '';
  for lRec in ADynArray do
    case lRec.VType of
      vtInteger: Result := Result + IntToStr(lRec.VInteger) + sLineBreak;
      vtString : Result := Result + string(lRec.VString^) + sLineBreak;
      vtPointer: Result := Result + '$'+IntToHex(Integer(lRec.VPointer), 4) + sLineBreak;
      vtAnsiString: Result := Result + PChar(lRec.VAnsiString) + sLineBreak;
    end;
end;

Цитата(Lazin @  1.6.2008,  19:32 Найти цитируемый пост)
12. есть ли аналог ссылок

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

Это сообщение отредактировал(а) Rrader - 1.6.2008, 17:42


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
W4FhLF
Дата 1.6.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Цитата(Rrader @  1.6.2008,  17:41 Найти цитируемый пост)
В справочной системе приведен пример:


Действительно, хорошая штука smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Alexeis
Дата 1.6.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  1.6.2008,  16:21 Найти цитируемый пост)
AFAIK только глобально. Разве я не прав?

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

Цитата(Любитель @  1.6.2008,  16:21 Найти цитируемый пост)
Эт которые с object вместо class? Если да - тогда фтопку, точно не помню, но помню, что это нечто кривое и недоделанное

  Ну не то чтобы кривое, просто старый механизм. Есть целая библиотека KOL которая живет этим механизмом, код получается самый чистый и маленький, они то как раз ближе всего к классам С++.

Цитата(Любитель @  1.6.2008,  16:21 Найти цитируемый пост)
А какое отношение это имеет к mutable?

  Как я понял это механизм ограничения доступа к полям данных. Тут оно работает несколько другим образом. Доступ к свойству можно ограничить или расширить в наследнике, передавая объект как предка. В отличие от С++, здесь можно свойство поднять из private в public, при необходимости в наследнике расширить доступ к свойству или функции. Нельзя требовать от языка, чтобы он полностью повторял механизмы другого. В замен одного механизма может быть совершенно другой или два заменяют один. Соответвтенно алгоритмы и структура программы строиться по другому. Так вот ограничить часть свойств так чтобы их нельзя было изменить при передаче в функцию возможно.

Цитата(Любитель @  1.6.2008,  16:21 Найти цитируемый пост)
Нелогично 

Что именно нелогично? То что если внутри объекта возникнет исключение, то вся динамическая память которая была выделена до того повиснет ввиде утечки? Это логично? Или логично, то что проверка принадлежности указателя на базовый класс к наследнику при помощи is пройдет, а попытка использования базового как наследника при помощи as провалиться в исключение, потому что видите ли это не первый базовый класс, а лишь второй, а второй базовый уже для этого не годиться. Или то что при присваивании стековых объектов поля копируются лишь бинарно, потому все внутренние объекты созданные в куче будут одним, а потом, когда уничтожат второй объект, деструтктор упадет на AV потому что объект поле был у них общим и его уничтожил первый владелец, а второй уже удаляет мусор. Чего дальше перечислять все особенности "безопасной" работы с объектами в С++? Или все таки согласишься, что большой объект должен иметь встроенные механизмы безопасности, а простой можно создавать хоть у черта на рогах. Будте уверены, что создание объектов в куче это не глупое ограничение, а серьезный механизм безопасности и исключения случайных ошибок при работе с памятью.

Добавлено через 2 минуты и 15 секунд
Цитата(Rrader @  1.6.2008,  16:41 Найти цитируемый пост)
Прямого аналога нет, но для вызовов функций, там, где в С++ любят использовать ссылки, используется оператор @

  var параметр это как раз такой параметр, который передается по ссылке, а @ это аналог &


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Burka
Дата 1.6.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



Mayk, спасибо за максимально полный ответ и за то что он по теме =)

Цитата
Со скобками есть проблема. При компиляции сторонних .pas файлов могут возникнуть Серьезные Проблемы из-за того что {комменты} будут третироваться как код.


да, я думал над этим. я бы написал программку которая конвертирует исходники под мой синтаксис, это не сложно.

Цитата

Можешь ещё попробовать настроить Текстовой Редактор чтобы по нажатию на { вставлялось begin и по нажатитю на } - end.
Правда удалять их одной клавишей затрундительно.


Как вариант подходит, но крайне удобно перед каждой компиляцией это проделовать. даже через батник будет не то  smile 

Еще подумаю может чего придумаю.



--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
skyboy
Дата 1.6.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Burka @  1.6.2008,  18:11 Найти цитируемый пост)
я бы написал программку которая конвертирует исходники под мой синтаксис, это не сложно.

вот-вот. делаешь внешний препроцессор в виде расширения ide и подключаешь к среде разработки ;) уж извини, для таких экзотических требований готовых решений либо нет, либо совсем уж никому неизвестные.
Цитата(Любитель @  1.6.2008,  16:21 Найти цитируемый пост)
Эт которые с object вместо class? Если да - тогда фтопку, точно не помню, но помню, что это нечто кривое и недоделанное

ну, скажем так: после привычной модели штука выглядит... .ээээ... коряво. но если уж сильно хочется иметь в стеке объект - то решение есть. разве нет?
Цитата(Любитель @  1.6.2008,  16:21 Найти цитируемый пост)
Стоп. А в Дельфи разве есть статические поля?

статические методы есть и в 6(насколько помню, работать начал с 7-ки). статические поля, насколько помню, уже в BDS 2005 есть. кстати, об этом узнал от Alexis'a, так что он точно скажет.

PM MAIL   Вверх
MAKCim
Дата 1.6.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
Это вообще, не имеет отношения к языку. Скорее директива определенного компилятора.

это, как уже заметили, стандарт
в низкоуровневом коде volatile встречается повсеместно

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
Кстати в С++ нельзя получить число элементов динамического массива, типа High(mas)

потому что в С/С++ нет понятия динамического массива  smile 
нет вообще динамических массивов
есть указатели
указатели относятся к простым типам данных

я даю 95%, что динамический массив в Delphi - это ни что иное, как объект соответствующего класса, только он завуалирован синтаксисом Delphi, т. е по сути является встроенным
приведи ассемблерный листинг функции, работающей с динамическим массивом, сразу все станет видно


Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
В этом смысле существует несколько другой механизм. Механизм ReadOny и WriteOnly свойств, ограничивающих возможность изменения состояния объекта.

не то
вот пример mutable
Код

class a {
private:
    mutable int b;
public:
    void c() const {
       b = 0; // можем изменять несмотря на то, что метод константный
    }
};



Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
 Класс будет использовать объект  smile . Чета тут перемудрили ИМХО.

скажем так, при создании объекта D, создается только один объект A

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
Этот механизм неэффективен для больших объектов,

больших это сколько?

Цитата(Alexeis @  1.6.2008,  14:04 Найти цитируемый пост)
Все четко разделено. Объект маленький - делай Record это будет быстро  + копирование по значению, большой - делай в куче.

а если объект маленький, но структурой не представим (нужна семантика класса)?  smile 
не гибко и притянуто за уши

Цитата(Любитель @  1.6.2008,  17:21 Найти цитируемый пост)
Немного оффтоп. Какие компилеры на сегодня юзают рестрикт для оптимизации?

GCC


Цитата(Alexeis @  1.6.2008,  18:57 Найти цитируемый пост)
То что если внутри объекта возникнет исключение, то вся динамическая память которая была выделена до того повиснет ввиде утечки? Это логично?

а причем здесь стек и куча?
если объекты в куче выделяются ничего не повиснет?  smile 


Цитата(Alexeis @  1.6.2008,  18:57 Найти цитируемый пост)
Или то что при присваивании стековых объектов поля копируются лишь бинарно, потому все внутренние объекты созданные в куче будут одним, а потом, когда уничтожат второй объект, деструтктор упадет на AV потому что объект поле был у них общим и его уничтожил первый владелец, а второй уже удаляет мусор. Чего дальше перечислять все особенности "безопасной" работы с объектами в С++?

это все от того, что в Delphi нет конструкторов копирования, перегрузки operator= и т. д smile 
в С++ настраивается любое поведение

Цитата(Alexeis @  1.6.2008,  18:57 Найти цитируемый пост)
Будте уверены, что создание объектов в куче это не глупое ограничение, а серьезный механизм безопасности и исключения случайных ошибок при работе с памятью.

это именно глупое ограничение (читать абзац выше)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Burka
Дата 1.6.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



skyboy, расширения ide - ты имеешь виду что то типа плагина делать для делфи или просто прогу отдельную. 
И вообще как плагины делать? Где про них понятней написано?

Это сообщение отредактировал(а) Burka - 1.6.2008, 20:40


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
Alexeis
Дата 1.6.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  1.6.2008,  18:45 Найти цитируемый пост)
а если объект маленький, но структурой не представим (нужна семантика класса)?  smile 
не гибко и притянуто за уши

  Он может все кроме того что связанно с наследованием, даже больше.

Цитата(MAKCim @  1.6.2008,  18:45 Найти цитируемый пост)
больших это сколько?

Большие это те которые содержат вложенные или пронаследованы, т.е. включаются опасные механизмы.
 
Цитата(MAKCim @  1.6.2008,  18:45 Найти цитируемый пост)
скажем так, при создании объекта D, создается только один объект A

  Все равно не ясно, зачем создавать 2 объекта, при наследовании и так создается только 1 объект В наследник A, объекту A не зачем создаваться, это же наследование, а не композиция.

Цитата(MAKCim @  1.6.2008,  18:45 Найти цитируемый пост)
а причем здесь стек и куча?
если объекты в куче выделяются ничего не повиснет?


  Это часть общего механизма безопасности объектов. Если объект создается в стеке, то его конструктор вызывается в неопределенное время и деструктор тоже, потому его нельзя поместить в блок try...except и правильно отработать исключения. Аналогично происходит в случае глобальных объектов. Кроме того объекты в C++ не инициализируются нулями, потому при возникновении исключения в конструкторе, нельзя вызвать деструктор, так как в последнем невозможно узнать какие из вложенных объектов уже были созданы и соответственно уничтожить только их, ведь если в объекте мусор, то указатели не нулевые. Исключение в конструкторах для Delphi это не критическая ситуация, а механизм сигнализации о неверных параметрах.
  
Цитата(MAKCim @  1.6.2008,  18:45 Найти цитируемый пост)
это все от того, что в Delphi нет конструкторов копирования, перегрузки operator= и т. д smile 
в С++ настраивается любое поведение

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

Цитата(MAKCim @  1.6.2008,  18:45 Найти цитируемый пост)
это именно глупое ограничение (читать абзац выше)

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 1.6.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Alexeis @  1.6.2008,  18:57 Найти цитируемый пост)
Что именно нелогично? То что если внутри объекта возникнет исключение, то вся динамическая память которая была выделена до того повиснет ввиде утечки? Это логично?


Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
Это часть общего механизма безопасности объектов. Если объект создается в стеке, то его конструктор вызывается в неопределенное время и деструктор тоже, потому его нельзя поместить в блок try...except и правильно отработать исключения. Аналогично происходит в случае глобальных объектов. Кроме того объекты в C++ не инициализируются нулями, потому при возникновении исключения в конструкторе, нельзя вызвать деструктор, так как в последнем невозможно узнать какие из вложенных объектов уже были созданы и соответственно уничтожить только их, ведь если в объекте мусор, то указатели не нулевые. Исключение в конструкторах для Delphi это не критическая ситуация, а механизм сигнализации о неверных параметрах.

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

....
{
  Bar bar();//здесь происходит вызов конструктора bar
  {
     Foo fоо(); //здесь то-же происходит вызов конструктора foo
     ....
     //здесь вызывается деструктор foo
  }
  //объект foo, здесь уже гарантировано уничтожен, можно на это расчитывать
}
//здесь вызывается деструктор bar

стек, он на то и стек, что-бы все работало по принципу FIFO
если где нибудь в функции возникнет исключение, то стековые объекты будут удалены в порядке обратном их созданию

часто в С++ делают так, например есть класс Mutex - который работает как мьютекс smile , тоесть используется для синхронизации чего-то в многопоточной программе

Код

class Mutex
{
  public:
  void enter();//захватить мьютекс
  void leave();//освободить мьютекс
};


обычный способ его использования

Код

mutex.enter();
...работаем с общими данными
mutex.leave();


если между вызовами enter и leave, произойдет исключение, то это приведет к блокировке программы, все встанет колом smile 

так вот, можно описать такой класс

Код

class scope_locker
{
  Mutex& mutex_;
public:
  //конструктор
  scope_locker(Mutex& m) : mutex_(m) { mutex_.enter(); } //захватываем мьютекс
  //деструктор
  ~scope_locker() { mutex_.leave(); }//освобождаем мьютекс
};

это все))

теперь в коде можно писать вот так
Код

{
.....
//здесь мьютекс освобожден
  {
     scope_locker(mutex);//здесь вызовется метод enter мьютекса
     //делаем здесь что угодно
  } //здесь будет вызван метод leave мьютекса, даже если происходит раскрутка стека, после исключения
//здесь мьютекс освобожден
}

исключения в конструкторах в С++ - нормальное явление, деструкторы для полей объекта вызываются, следуя все тому-же принципу... 
и вообще там все происходит намного интереснее чем ты думаешь, инициализация нулями отношения к делу не имеет никакого =)

Добавлено через 3 минуты и 21 секунду
Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
 Все в Delphi есть, но дело не в том что можно все сделать правильно, а в том, чтобы язык не давал лишней возможности для возникновения трудно анализирумых ошибок. Можно все делать правильно, но факт остается фактом, что ошибки в программах исправляются годами и количество совершаемых в средней программе исчисляется сотнями, потому задача языка свести к миниму возможности появления.

конструкторы копирования и операторы присваивания, никогда небыли источником ошибок smile 

Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
При разработке программы не исходят из того, что в ней не будет ошибок, порядочный программист при написании программы должен понимать что ошибки будут, однозначно будут, их не избежать и нужно так спланировать написание ПО, чтобы все ошибки легко находились, поэтому безопасность ООП это не последнее дело в программировании.

модульные тесты не помогают? smile 
PM MAIL Skype GTalk   Вверх
skyboy
Дата 1.6.2008, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



господа, а почему, собственно, обсуждение не продолжается в pascal vs с++?!
зачем нам клоны?
PM MAIL   Вверх
Любитель
Дата 1.6.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  1.6.2008,  19:45 Найти цитируемый пост)
я даю 95%, что динамический массив в Delphi - это ни что иное, как объект соответствующего класса, только он завуалирован синтаксисом Delphi, т. е по сути является встроеннымприведи ассемблерный листинг функции, работающей с динамическим массивом, сразу все станет видно

Вообщем-то да. Компилер вставляет вызовы внутренних функций рантайма. Даже присваивание для них переопределено (работает reference counting, в частности).

Цитата(MAKCim @  1.6.2008,  19:45 Найти цитируемый пост)
а если объект маленький, но структурой не представим (нужна семантика класса)?   не гибко и притянуто за уши

+1

Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
 Он может все кроме того что связанно с наследованием, даже больше.

Красиво сказал smile

Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
Большие это те которые содержат вложенные или пронаследованы, т.е. включаются опасные механизмы.

А чем эт они опасны?!

Цитата(skyboy @  1.6.2008,  23:24 Найти цитируемый пост)
господа, а почему, собственно, обсуждение не продолжается в pascal vs с++?!

Новая эпоха smile 

Хотелось бы узнать - что там со статическими полями? В современной дельфе. Для общего развития smile


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 2.6.2008, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  1.6.2008,  22:57 Найти цитируемый пост)
Хотелось бы узнать - что там со статическими полями?

даже во FreePascal сие есть

Добавлено через 4 минуты и 20 секунд
Цитата(Любитель @  1.6.2008,  22:57 Найти цитируемый пост)
что там со статическими полями? В современной дельфе

к примеру, тыц

Добавлено через 5 минут и 19 секунд
оказалось, я все же не от Alexis'a услышал про  static-поля  smile 
PM MAIL   Вверх
Любитель
Дата 2.6.2008, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Понятно. Буду знать smile


--------------------
PM MAIL ICQ Skype   Вверх
nerezus
Дата 2.6.2008, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

В Delphi можно реализовать полноценный Singleton вообще не создавая экземпляра класса.

 smile 


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 2.6.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
Он может все кроме того что связанно с наследованием, даже больше.

структура (record) может содержать методы? 


Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
Большие это те которые содержат вложенные или пронаследованы, т.е. включаются опасные механизмы.

ничего опасного нет
при условии, что язык позволяет осуществлять полное управление жизненным циклом объекта


Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
Все равно не ясно, зачем создавать 2 объекта, при наследовании и так создается только 1 объект В наследник A, объекту A не зачем создаваться, это же наследование, а не композиция.

у нас наследование не обычное
без виртуального механизма будет создано 2 объекта A: по ветке B и ветке C
ладно, проехали, как тут уже сказали, в Delphi нет множественного наследования

Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
Если объект создается в стеке, то его конструктор вызывается в неопределенное время и деструктор тоже, потому его нельзя поместить в блок try...except и правильно отработать исключения. Аналогично происходит в случае глобальных объектов. Кроме того объекты в C++ не инициализируются нулями, потому при возникновении исключения в конструкторе, нельзя вызвать деструктор, так как в последнем невозможно узнать какие из вложенных объектов уже были созданы и соответственно уничтожить только их, ведь если в объекте мусор, то указатели не нулевые.

читай пост Lazin
от себя замечу, что как я и предполагал, плохо и непродуманно Delphi работает со стеком
кроме того, я не получил ответа на вопрос: как куча в Delphi предотвращает возникновение приведенных тобой "проблем"?
тем, что ты явно вызываешь конструктор/деструктор?
извини конечно, но такой подход еще больше увеличивает вероятность ошибок

Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
а в том, чтобы язык не давал лишней возможности для возникновения трудно анализирумых ошибок.

а вот здесь уже на вкус и цвет...


Цитата(Alexeis @  1.6.2008,  21:28 Найти цитируемый пост)
Глупо надеятся что можно писать идеальные программы без ошибок с идеальной структурой, где предусмотрено все на все случаи жизни.  

глупо
но и строгость не панацея



Это сообщение отредактировал(а) MAKCim - 2.6.2008, 09:17


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Lazin, вот пример
Код
void __fastcall TForm1::FormCreate(TObject *Sender)
{

class a
{
   public:
   int _a;

   a(int source)
   {
     throw 1;
   };

   ~a()
   {

   };

};

class b
{
   public:
     a member;

     b() : member(3)
     {

     };

     ~b()
     {

     };
};

b *obj = new b;
}


  Как в этом случае спасти объект b? Его член member при создании вызвал исключение и вышел аварийно, требуется отработать эту ситуацию и пересоздать объект member или вообще отказаться от него.


Цитата(Lazin @  1.6.2008,  21:24 Найти цитируемый пост)
исключения в конструкторах в С++ - нормальное явление, деструкторы для полей объекта вызываются, следуя все тому-же принципу... 
и вообще там все происходит намного интереснее чем ты думаешь, инициализация нулями отношения к делу не имеет никакого =)

  Привожу пример.

Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{

class a
{
   public:
   int smf;

   a(int source)
   {
      smf = source + 1;
   };

   ~a()
   {

   };

};

class b
{
   public:
     a *member1;
     a *member2;
     a *member3;
     a *member4;
     a *member5;

     b()
     {
        member1 = new a(1);
        member2 = new a(2);
        member3 = new a(3);
        throw 1;
        member4 = new a(4);
        member5 = new a(5);
     };

     ~b()
     {
        delete member1;
        delete member2;
        delete member3;
        delete member4;
        delete member5;
     };
};


b *obj = new b;

}


Все члены member1, member2, member3 повисли утечкой, хотя память выделенная под b будет возвращена в кучу. Если бы объект b был предварительно занулен, то для очистки member1 - member3 можно было вызвать деструктор ~b, а так это сделать невозможно, потому что в этом случае возникнет исключение в деструкторе на строчке delete member4; и настанет полный северный пушистый зверек, поэтому в С++ при возникновении исключения в конструкторе никогда не вызывается деструктор.

Цитата(Lazin @  1.6.2008,  21:24 Найти цитируемый пост)
конструкторы копирования и операторы присваивания, никогда небыли источником ошибок

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

  Вот это и называется опасный код, не интуитивный код, который приводит к возникновению ошибок.

nerezus, см. ниже после этой фразы, метакласс обладает практически всеми возможностями объекта + синтаксически похож на объект, он сам и есть Синглтон по определению. 

Цитата(MAKCim @  2.6.2008,  08:14 Найти цитируемый пост)
структура (record) может содержать методы? 

Да, в том числе конструкторы с параметрами, свойства и даже операторы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 2.6.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  2.6.2008,  08:14 Найти цитируемый пост)
как тут уже сказали, в Delphi нет множественного наследования

есть. но объявления(интерфейса),  а не реализации. через абстрактные классы - т.н. interface
это к обсуждаемому виртуальному наследованию не относится, но уже столько раз звучало про "отсутствие множественного наследования", что не смог промолчать. 
PM MAIL   Вверх
Lazin
Дата 2.6.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Alexeis @  2.6.2008,  10:06 Найти цитируемый пост)

Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
class a
{
   public:
   int _a;
   a(int source)
   {
     throw 1;
   };
   ~a()
   {
   };
};
class b
{
   public:
     a member;
     b() : member(3)
     {
     };
     ~b()
     {
     };
};
b *obj = new b;
}

создай объект в стеке и вставь в конструкторы - деструкторы брейкпоинты, и ты увидишь что в этом случае деструкторы вызываются
если-бы obj был смарт поинтером, например shared_ptr-ом, то и в твоем примере все будет нормально удалено

Добавлено через 3 минуты и 25 секунд
Цитата(Alexeis @  2.6.2008,  10:06 Найти цитируемый пост)


Код

class b
{
   public:
     a *member1;
     a *member2;
     a *member3;
     a *member4;
     a *member5;
     b()
     {
        member1 = new a(1);
        member2 = new a(2);
        member3 = new a(3);
        throw 1;
        member4 = new a(4);
        member5 = new a(5);
     };
     ~b()
     {
        delete member1;
        delete member2;
        delete member3;
        delete member4;
        delete member5;
     };
};


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

Добавлено через 9 минут и 27 секунд
если написать это развернуто, то получится вот что

Код

     b() :member1(), member2(), member3(), member4(), member5()
     {
        member1 = new a(1);
        member2 = new a(2);
        member3 = new a(3);
        throw 1;
        member4 = new a(4);
        member5 = new a(5);
     };
     ~b()
     {
        delete member1;
        delete member2;
        delete member3;
        delete member4;
        delete member5;
     };


во время раскрутки стека вызываются деструкторы сконструированных объектов в порядке обратном их созданию, тоесть 
Код

member5
member4
member3
member2
member1

если member - голый указатель, то ничего не удалиться, так как у POD типов нет деструкторов, а если смарт поинтер, например auto_ptr, то его деструктор вызовет delete для объекта, который он содержит
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 2.6.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  11:14 Найти цитируемый пост)
все верно, но это опять же сделано специально, так как множественное наследование опасный механизм, приводящий к возникновению неочевидных ошибок

никто не заставляет им пользоваться, однако в случае необходимости Delphi будет курить  smile 

по поводу стека, ответом Lazin удовлетворен?  smile  


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Lazin @  2.6.2008,  09:39 Найти цитируемый пост)
создай объект в стеке и вставь в конструкторы - деструкторы брейкпоинты, и ты увидишь что в этом случае деструкторы вызываются
если-бы obj был смарт поинтером, например shared_ptr-ом, то и в твоем примере все будет нормально удалено

  Первый код был примером не для утечек, а для исключений. См. выше. Здесь невозможно отработать исключение, с утечками тут все ОК.

Цитата(Lazin @  2.6.2008,  09:39 Найти цитируемый пост)
если member - голый указатель, то ничего не удалиться, так как у POD типов нет деструкторов, а если смарт поинтер, например auto_ptr, то его деструктор вызовет delete для объекта, который он содержит 

  Выходит что без смарт поинтеров о безопасном программировании под С++ можно забыть. Видишь, а в Delphi объекты изначально создавались так чтобы они были с одной стороны простыми в работе, с другой, чтобы были безопасными.

Добавлено через 1 минуту и 17 секунд
Цитата(MAKCim @  2.6.2008,  10:21 Найти цитируемый пост)
никто не заставляет им пользоваться, однако в случае необходимости Delphi будет курить

  В случае необходимости алгоритмы пишут так чтобы обойтись без опасных механизмов. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Alexeis
так ты все-таки на вопрос ответь?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  2.6.2008,  10:21 Найти цитируемый пост)
по поводу стека, ответом Lazin удовлетворен?

  Ни чуть. Статические объекты приводят к потере контроля над созданием объектов и невозможности отработки исключений. 

Цитата(Alexeis @  2.6.2008,  09:06 Найти цитируемый пост)
Как в этом случае спасти объект b? Его член member при создании вызвал исключение и вышел аварийно, требуется отработать эту ситуацию и пересоздать объект member или вообще отказаться от него.

  Не услышал ни грамма по этой теме.

Добавлено через 34 секунды
Цитата(MAKCim @  2.6.2008,  10:24 Найти цитируемый пост)
так ты все-таки на вопрос ответь?

  На какой именно?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  11:22 Найти цитируемый пост)
Здесь невозможно отработать исключение, с утечками тут все ОК.

исключение обработать можно
Код

class b
{
   public:
     a member;
     b() 
     try 
        : member(3) {
     } catch (...) { }

     ~b()
     {
     }
};


Добавлено через 1 минуту и 57 секунд
Цитата(Alexeis @  2.6.2008,  11:25 Найти цитируемый пост)
На какой именно? 


Цитата(MAKCim @  2.6.2008,  09:14 Найти цитируемый пост)
кроме того, я не получил ответа на вопрос: как куча в Delphi предотвращает возникновение приведенных тобой "проблем"?
тем, что ты явно вызываешь конструктор/деструктор?
извини конечно, но такой подход еще больше увеличивает вероятность ошибок


Добавлено через 14 минут и 3 секунды
Цитата(Alexeis @  2.6.2008,  11:25 Найти цитируемый пост)
Не услышал ни грамма по этой теме.

для реализации нужного тебе поведения нужно использовать указатель
в этом вся гибкость С++: можно сделать и так, и так, в зависимости от требуемого поведения


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  2.6.2008,  10:27 Найти цитируемый пост)
исключение обработать можно

  Значит остается только опасное копирование по значению, могут быть и другие причины, которые мне неизвестны, но говорить сразу что это глупо излишне самонадеянно. Заметь от этого механизма отказалась даже Microsoft при разработке нового языка C#. Объекты в C# создаются только в куче. Кстати еще вспомнил момент связанный с интерфейсами. После освобождения интерфейса связанный объект должен немедленно уничтожен, а интерфейс ничего не знает создан ли объект в стеке или в куче и соответственно не сможет его удалить. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  11:45 Найти цитируемый пост)
После освобождения интерфейса связанный объект должен немедленно уничтожен, а интерфейс ничего не знает создан ли объект в стеке или в куче и соответственно не сможет его удалить. 

объект класса с pure virtual методами (применительно к С++) создать нельзя
работа с такими классами осуществляется через указатели/ссылки, т. е через простые типы, а у них нет ни коструктора, ни деструктора
это что касается семантики стека, т. е автоматического удаления при выходе из области видимости
если удаление осуществляется через delete, то, определив в таком классе виртуальный деструктор, мы получим требуемое поведение (т. е удаление реального объекта)

Добавлено @ 11:53
Цитата(Alexeis @  2.6.2008,  11:45 Найти цитируемый пост)
Значит остается только опасное копирование по значению

поведение управляемо через конструктор копий и operator=
где тут что опасно?

Это сообщение отредактировал(а) MAKCim - 2.6.2008, 11:55


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  2.6.2008,  10:52 Найти цитируемый пост)
поведение управляемо через конструктор копий и operator=
где тут что опасно? 


Цитата(Alexeis @  2.6.2008,  09:06 Найти цитируемый пост)
  Источник ошибок не он сам, а его отсутствие по недосмотру. Его просто нужно делать, но не всегда, пока объект простой он может быть не нужным, но в определенный момент при расширении объекта неожиданно поле член заменяется на указатель, все красиво, оно создается в конструкторе, уничтожается в деструкторе, но теперь для копирования такого объекта уже необходим конструктор копирования. Вот этот момент как раз неочевиден, ведь структурно класс почти не изменился.

  Вот это и называется опасный код, не интуитивный код, который приводит к возникновению ошибок.



Цитата(MAKCim @  2.6.2008,  10:52 Найти цитируемый пост)
объект класса с pure virtual методами (применительно к С++) создать нельзя
работа с такими классами осуществляется через указатели/ссылки, т. е через простые типы, а у них нет ни коструктора, ни деструктора

  Я не про него самого, а про его наследника. Наследник выполняет интерфейс (реализует его методы), одновременно он является сервером для интерфейса. Интерфейс же в свою очередь является клиентом и владеет минимальной информацией о структуре класса, но при освобождении интерфейса (интерфейсу присваивается nil) начинается подсчет ссылок на серверный объект, если число ссылок равно нулю, то серверный объект гарантированно уничтожается освобождая ресурсы. В этой схеме время жизни объекта сервера полностью контролируется клиентами. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Alexeis
Цитата

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

  Вот это и называется опасный код, не интуитивный код, который приводит к возникновению ошибок.

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

Цитата(Alexeis @  2.6.2008,  12:02 Найти цитируемый пост)
В этой схеме время жизни объекта сервера полностью контролируется клиентами. 


ну пожалуйста, оберни указатель классом и считай ссылки
или пользуйся готовыми реализациями, из того же буста например

Добавлено через 5 минут и 5 секунд
пусть I - интерфейс, obj - объект класса, реализующего интерфейс
выполнены следующие действия
I a = obj
I b = obj
I c = obj

где в этом случае расположен счетчик ссылок на obj? (в каждом из a, b, c?)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



MAKCim, я сейчас не говорю про интерфейсы, как о преимуществе, это уже подробно изжевали в старой теме. Тут я говорю про то что механизм интерфейсов находиться в противоречии с механизмом стековых (не динамических) объектов, так как у последних время жизни от входа в блок до выхода. Подсчет ссылок должен реализовывать объект. Все интерфейсы наследуются от IUnknown, который требует реализации методов подсчета ссылок (поскольку эти методы в нем объявлены). Интерфейс сам по себе не является сущностью. Он не имеет ни каких данных, это лишь протокол доступа к объекту, на деле являющийся чем-то вроде дополнительной таблицы VMT, которая расположена в объекте. Это и есть гарантия того что объект исполняет интерфейс.

Добавлено через 1 минуту и 41 секунду
Цитата(Alexeis @  2.6.2008,  11:43 Найти цитируемый пост)
которая расположена в объекте

точнее в объекте указатель на нее.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 2.6.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



вот за это я и люблю С++, можно создать такой класс, объекты которого нельзя создать в стке, а можно только в куче, и наоборот....
и никаких тебе разговоров о том, что концепция стековых объектов плохо сочетается с концепцией интерфейсов и подсчетом ссылок smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 2.6.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  12:43 Найти цитируемый пост)
ут я говорю про то что механизм интерфейсов находиться в противоречии с механизмом стековых (не динамических) объектов, так как у последних время жизни от входа в блок до выхода.

где ты нашел противоречие?
приведи пример


Цитата(Alexeis @  2.6.2008,  12:43 Найти цитируемый пост)
Подсчет ссылок должен реализовывать объект

я правильно понимаю: класс, реализующий любой интерфейс, должен реализовывать методы подсчета ссылок?
если так, на лицо еще один показатель "гибкости"

Это сообщение отредактировал(а) MAKCim - 2.6.2008, 12:59


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  2.6.2008,  11:57 Найти цитируемый пост)
где ты нашел противоречие?
приведи пример

   smile Время жизни стековых объектов от начала блока, до конца, время жизни, время жизни объекта созданного по запросу клиента( т.е. переменной объекта нет вообще как таковой, получен только его интерфейс) не определенно. фиксированно != не определенно. 

Цитата(MAKCim @  2.6.2008,  11:57 Найти цитируемый пост)
я правильно понимаю: класс, реализующий любой интерфейс, должен реализовывать методы подсчета ссылок?
если так, на лицо еще один показатель "гибкости"

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

Цитата(Lazin @  2.6.2008,  11:54 Найти цитируемый пост)
вот за это я и люблю С++, можно создать такой класс, объекты которого нельзя создать в стке, а можно только в куче, и наоборот....

  Это возможность для появления ошибок, зачем тебе лишняя возможность появления ошибок? Гораздо лучше когда компилятор тебе не даст сделать глупость переведя ошибку из времени исполнения во время компиляции. Это известный принцип. Самые лучшие ошибки это те которые видны на этапе компиляции, потом идут те которые кричат о себе в RunTime, а самые вредные, которые молчат и тихо делают свое черное дело.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 2.6.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Burka @  1.6.2008,  19:36 Найти цитируемый пост)
skyboy, расширения ide - ты имеешь виду что то типа плагина делать для делфи

да. типа CnPack или ModelMaker CodeExplorer. Впрочем, сам их не делал, потому не могу сказать наверняка, позволят ли они до компиляции неявно делать замену так, чтоб не надо было сохранять файл. 

PM MAIL   Вверх
MAKCim
Дата 2.6.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  13:16 Найти цитируемый пост)
Время жизни стековых объектов от начала блока, до конца, время жизни, время жизни объекта созданного по запросу клиента( т.е. переменной объекта нет вообще как таковой, получен только его интерфейс) не определенно. фиксированно != не определенно. 

в данном случае ни о каком создании объекта на стеке не может идти и речи
т. к он уничтожится еще до того, как будет передан клиенту
поэтому клиенту передается ссылка или указатель на динамически (или статически) созданный объект
дальше нужно учитывать протокол взаимодействия клиента и сервера, а именно, кто ответственен за удаление объекта

в общем я не вижу никакой опасности

Добавлено @ 13:28
Цитата(Alexeis @  2.6.2008,  13:16 Найти цитируемый пост)
Ни каких проблем, для этого есть предок в котором уже реализован IUknown. 

cтоп
реализации методов в интерфейсе быть не может
допустим у меня есть интерфейс I и класс C, реализующий I
где будет реализация подсчета ссылок?

Это сообщение отредактировал(а) MAKCim - 2.6.2008, 13:30


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 2.6.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Alexeis @  2.6.2008,  13:16 Найти цитируемый пост)
Гораздо лучше когда компилятор тебе не даст сделать глупость переведя ошибку из времени исполнения во время компиляции. Это известный принцип. Самые лучшие ошибки это те которые видны на этапе компиляции, потом идут те которые кричат о себе в RunTime, а самые вредные, которые молчат и тихо делают свое черное дело. 

а я и написал про этап компиляции, если к примеру перегрузить для класса операторы new delete, и сделать их закрытыми, то объект можно будет создать только в стеке

Код

class Stacked
{
    void *operator new (size_t);
    void operator delete (void *);
public:
};
Stacked a;//OK
Stacked* s = new Stacked;//error WTF!!!!


причем достаточно сделать закрытой только одну форму оператора new(delete), в этом примере такое

Код

Stacked* s = new(nothrow) Stacked;//compile time error!!!


не прокатит

Это сообщение отредактировал(а) Lazin - 2.6.2008, 13:34
PM MAIL Skype GTalk   Вверх
Любитель
Дата 2.6.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Alexeis @  2.6.2008,  12:43 Найти цитируемый пост)
Все интерфейсы наследуются от IUnknown

Интерфейсы - это только COM?!


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 2.6.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  2.6.2008,  12:36 Найти цитируемый пост)
Интерфейсы - это только COM?!

  Ничуть. Интерфейсы прекрасно работают безо всякого COMa, но они просто совместимы с COM. COM нужен только для межязыкового взаимодействия. При работе внутри приложения написанного только на VCL или приложение + Dll, COM не участвует, работают лишь встроенные механизмы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Любитель
Дата 2.6.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



А с чего тогда любой интерфейс должен наследоваться от IUnknown?


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 2.6.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Lazin, я и не сомневаюсь, что на С++ можно написать Delphi, более того сам компилятор таки написан на билдере. Это все тонкие нюансы, которые не обязательно знать программисту на Delphi. У него есть хороший и главное ПРОСТОЙ инструмент, который много за него делает, причем делает скрыто. Это работает вне зависимости от того знает он что его объекты создаются в куче или не знает. В идеале ему вообще не нужно знать слова указатель. Программист Delphi должен проектировать программу при помощи паттернов, которые реализуются при помощи высокоуровневых средств ООП, которые работают стабильно. Важно не изобретать велосипедов, там где уже все поставлено на поток.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Alexeis
ответь на мой вопрос

Цитата(MAKCim @  2.6.2008,  13:27 Найти цитируемый пост)
допустим у меня есть интерфейс I и класс C, реализующий I
где будет реализация подсчета ссылок?




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  2.6.2008,  12:56 Найти цитируемый пост)
А с чего тогда любой интерфейс должен наследоваться от IUnknown? 

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

Добавлено через 2 минуты и 40 секунд
MAKCim, я уже писал, что интерфейс не самостоятельная сущность. Сам он ничего не умеет. Подсчет ссылок целиком и полностью лежит на объекте.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  14:03 Найти цитируемый пост)
MAKCim, я уже писал, что интерфейс не самостоятельная сущность. Сам он ничего не умеет. Подсчет ссылок целиком и полностью лежит на объекте. 

значит я обязан для каждого класса, реализующего любой интерфейс, определять методы подсчета ссылок?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 2.6.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  2.6.2008,  13:16 Найти цитируемый пост)
 я обязан

нет.
можно вместо TObject наследоваться от TInterfacedObject.

PM MAIL   Вверх
Любитель
Дата 2.6.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Alexeis @  2.6.2008,  14:03 Найти цитируемый пост)
Это происходит неявно вне зависимости от желания программиста. Если его не указать, то Delphi без спроса его туда скрыто пропишет. На этом основан механизм подсчета ссылок.

Вот я этого не понимаю. С чего это любой интерфейс должен включать методы, занимающиеся подсчётом ссылок?

Цитата(skyboy @  2.6.2008,  14:34 Найти цитируемый пост)
можно вместо TObject наследоваться от TInterfacedObject.

Не вариант. Множественного наследования реализации у нас нет. Появляется проблема в выборе TInterfacedObject или чего-то ещё, не наследющегося от этого класса.


--------------------
PM MAIL ICQ Skype   Вверх
nickless
Дата 2.6.2008, 18:51 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 2
Всего: 181



 smile 

И не надоедает же об одном и том же спорить...  smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
skyboy
Дата 2.6.2008, 19:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  2.6.2008,  14:20 Найти цитируемый пост)
Множественного наследования реализации у нас нет. Появляется проблема в выборе TInterfacedObject или чего-то ещё, не наследющегося от этого класса.

не появляется. 
любой класс без указания явного предка - наследник TObject. TInterfacedObject - прямой потомок TObject, ничего, кроме реализации подсчета ссылок, к предку не добавляющий. Зачем вместо TInterfacedObject использовать TObject, если они идентичны за исключением подсчета ссылок? Только ради проблем?
PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



nickless, не об одном. Акценты смещаются. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mayk
Дата 3.6.2008, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



на эту тему тоже стоит подписатьсяsmile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 3.6.2008, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Mayk
подписка не бесплатна  smile  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 3.6.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  2.6.2008,  19:13 Найти цитируемый пост)
Зачем вместо TInterfacedObject использовать TObject, если они идентичны за исключением подсчета ссылок? Только ради проблем?

Блин, не от TObject. Я хочу наследоваться от некоторого TMyObject - а он не наследуется от TInterfacedObject. В то же время я хочу реализовать некий Interface1. Я вынужден также реализовывать подсчёт ссылок, который Interface1 наследует от IUnknown - хотим мы того или нет. Наследоваться одновременно и от TMyObject, и от TInterfacedObject я не могу. И вопрос - зачем мне лишние труды по реализации ненужного мне подсчёт ссылок?!

Цитата(nickless @  2.6.2008,  18:51 Найти цитируемый пост)
И не надоедает же об одном и том же спорить... 

smile 


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 3.6.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Любитель, TMyObject в любом случае наследуется от TObject, потому все изменение сводиться лишь к замене TObject на TInterfacedObject. Не пойму в чем проблема?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 3.6.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  3.6.2008,  11:12 Найти цитируемый пост)
Наследоваться одновременно и от TMyObject, и от TInterfacedObject я не могу.

если твой TMyObject не доступен тебе для редактирования, то ты можешь объявить собственного наследника TMyObject, который реализует IUnknown(методы объявленные в нем). И использовать в своих проектах TMyMyObject = class(TMyObject) implements IUnknown в качестве базы.
Если ты не хочешь реализовывать три метода, сделай композицию с объектом TInterfacedObject и передай реализацию методов IUnknown внутреннему объекту класса TInterfacedObject.

Добавлено через 6 минут и 9 секунд
Цитата(skyboy @  3.6.2008,  12:06 Найти цитируемый пост)
 сделай композицию с объектом TInterfacedObject

предчувствуя возражения типа "это же не удобно! меня поплющит три строчки дописать и объявить внутренний объект" сразу привожу контраргументы:
(по реализации) если объектов будет слишком много, объект, реализующий подсчет ссылок и правда - лишняя трата: либо делать-таки "ручную"(непосредственную) реализацию методов, либо использовать шаблон "Посетитель"(visitor)
(по структуре) композиция вполне соответствует "духу ООП", а перенос реализации на внутренние объекты - полне нормально при условии отсутствия множественного наследования; к тому же само по себе делегирование - не есть плохо, лишь бы логика одного объекта не переносилась в независимый и несвязанный по модели объект.
PM MAIL   Вверх
Любитель
Дата 3.6.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Это всё хорошо, вопрос в том - нафига мне вообще заботиться о подсчёте ссылок, который мне вовсе не нужен, если я хочу релизовать некий интерфейс, не имеющий никакого отношения к подсчёту ссылок?

Вообщем, думаю мы друг друга поняли. Нигде больше реализация произвольного интерфейса не заставляет реализовывать подсчёт ссылок (почему вообще именно подсчёт ссылок - мож ещё какую-нибудь полезную фиговину реалдизовать  smile ). Предлагаю переключаться на другой пункт обсуждения (чтоб придумать? smile )

Добавлено через 46 секунд
Цитата(Alexeis @  3.6.2008,  12:28 Найти цитируемый пост)
Любитель, TMyObject в любом случае наследуется от TObject, потому все изменение сводиться лишь к замене TObject на TInterfacedObject. Не пойму в чем проблема? 

Надо змаенить TMyObject на THisObject smile


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 3.6.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  3.6.2008,  12:22 Найти цитируемый пост)
Вообщем, думаю мы друг друга поняли. Нигде больше реализация произвольного интерфейса не заставляет реализовывать подсчёт ссылок (почему вообще именно подсчёт ссылок - мож ещё какую-нибудь полезную фиговину реалдизовать  smile ). 

  Ну вот, это не просто фиговина, а управление памятью. Кстати интерфейс является автоматическим объектом. Это значит что при выходе интерфейса из блока счетчик ссылок декремнируется автоматически и если он становиться равным нулю, то объект автоматом удаляется, без явного вызова Free или деструктора. Тоже удобная фича. Так что не нада.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Любитель
Дата 3.6.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Alexeis @  3.6.2008,  13:43 Найти цитируемый пост)
Это значит что при выходе интерфейса из блока счетчик ссылок декремнируется автоматически и если он становиться равным нулю, то объект автоматом удаляется, без явного вызова Free или деструктора.

Гы. Это собственно и называется смарт-поинтер. И непонятно, почему сие обязано привзываться к интерфейсам. smile


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 3.6.2008, 14:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  3.6.2008,  12:46 Найти цитируемый пост)
И непонятно, почему сие обязано привзываться к интерфейсам.

  Сие называется автоматические объекты. И никак это не привязывается к интерфейсам, просто интерфейс это один из 3х типов автоматических объектов. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Любитель
Дата 3.6.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Ладно, скажем по-вашему - почему в дельфях нету интерфейсов для неавтоматических объектов?


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 3.6.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  3.6.2008,  12:22 Найти цитируемый пост)
нафига мне вообще заботиться о подсчёте ссылок

не заботься.. все - для тебя. поставь заглушки на методы, реализующие подсчет ссылок и пожалуйста - держи утечки памяти. распишитесь о получении: здесь и здесь smile 
Цитата(Любитель @  3.6.2008,  12:46 Найти цитируемый пост)
Это собственно и называется смарт-поинтер.

кстати, тебя не напрягает тот факт, что смарт-понинтеры в "неуправляемом" С++ надо указывать явно? как же? это же лишний код! почему надо писать лишний код?! или любые указатели в С++ становятся "умными" по умолчанию?

Добавлено через 4 минуты и 14 секунд
Цитата(Любитель @  3.6.2008,  13:36 Найти цитируемый пост)
почему в дельфях нету интерфейсов для неавтоматических объектов?

типа приведения типов в С++? потому что не будет контроля. RTTI дает большой контроль за типом данных во время выполнения, но и приводить можно только к тому, от чего наследовано, а не к тому, у кого одноименные методы. А если и в С++ приводить только к тем классам, от которых происходило наследование, то какая разница? опять же пришли к противостоянию "мультинаследование против однозначного наследования"

Добавлено через 7 минут и 4 секунды
Цитата(Любитель @  3.6.2008,  13:36 Найти цитируемый пост)
почему в дельфях нету интерфейсов для неавтоматических объектов?

ты Алексиса не понял. Интерфейс по сути - разновидность автоматического объекта. 
а если поставишь заглушки-пустышки, то ничего у тебя удаляться не будет. и все должны быть довольны.
PM MAIL   Вверх
Любитель
Дата 3.6.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  3.6.2008,  14:39 Найти цитируемый пост)
кстати, тебя не напрягает тот факт, что смарт-понинтеры в "неуправляемом" С++ надо указывать явно? как же? это же лишний код! почему надо писать лишний код?! или любые указатели в С++ становятся "умными" по умолчанию?

Не, не напрягает. Я просто пишу boost::shared_ptr<MyType> (подставить tr1 по вкусу). А любые нет - указал, стали. Но никто не заставляет, чтоб они ими были.

Цитата(skyboy @  3.6.2008,  14:39 Найти цитируемый пост)
типа приведения типов в С++? 

Нет, я не о приведении - всё о том же. Почему реализация любого интерфейса заставляет реализовывать подсчёт ссылок?

ЗЫ Блин, мне надоедает обсуждать одну тему smile 


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 3.6.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  3.6.2008,  13:48 Найти цитируемый пост)
Почему реализация любого интерфейса заставляет реализовывать подсчёт ссылок?

странно, что тебя не напрягает сам факт принудительного наследования от класса(TObject), у которого с полтора десятка методов. типа, "а вдруг я захочу реализовать собственную логику метода inheritsFrom(AClass: TClass)?" и т.д..

Добавлено через 1 минуту и 32 секунды
вообще, не могу понять. тебя не устраивает:
а) необходимость самостоятельно писать код в случае "косого наследования"?
б) необходимость реализации подсчета ссылок в том или ином виде?
в) необходимость реализации чего бы то ни было?
PM MAIL   Вверх
Alexeis
Дата 3.6.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  3.6.2008,  13:36 Найти цитируемый пост)
Ладно, скажем по-вашему - почему в дельфях нету интерфейсов для неавтоматических объектов? 

  Объект который управляет интерфейс не является автоматическим. Автоматическим объектом называется сам интерфейс (объект в общем смысле этого слова, не тот что инстанцируется классом).


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Любитель
Дата 3.6.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  3.6.2008,  14:54 Найти цитируемый пост)
вообще, не могу понять. тебя не устраивает:
а) необходимость самостоятельно писать код в случае "косого наследования"?
б) необходимость реализации подсчета ссылок в том или ином виде?
в) необходимость реализации чего бы то ни было? 

Все пункты. Тобою они как раз названы в порядке важности smile Только на всякий случай замечу - "необходимость реализовывать нечто мне ненужное". Как - это уже не суть важно.

Цитата(skyboy @  3.6.2008,  14:39 Найти цитируемый пост)
а если поставишь заглушки-пустышки, то ничего у тебя удаляться не будет. и все должны быть довольны. 

Я понимаю. Только это костыль. Во-первых, я всё равно что-то должен писать (что мне вовсе не надо), а во-вторых, это как раз может создать потенциальные проблемы. Кто-нибудь будет юзать этот TMyMyObject, увидит, что он реализует IUnknown (который как я понял объявляет лишь всё, связанное с подсчётом ссылок) и решит, что это работает. А ему - обломись smile Я ничего против подсчёта ссылок, даже его ручной реализации не имею - ну пусть будет отдельный интерфейс, который мы реализуем, если хотим. А не хотим - не будем smile

Цитата(Alexeis @  3.6.2008,  15:00 Найти цитируемый пост)
Объект который управляет интерфейс не является автоматическим. Автоматическим объектом называется сам интерфейс (объект в общем смысле этого слова, не тот что инстанцируется классом). 

Ладно, чо-т я запутался smile Вопрос я переформулировал выше. Сорри, если что-то в вашей терминлогии не так понял smile


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 3.6.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  3.6.2008,  14:43 Найти цитируемый пост)
Я понимаю. Только это костыль. Во-первых, я всё равно что-то должен писать (что мне вовсе не надо), а во-вторых, это как раз может создать потенциальные проблемы. Кто-нибудь будет юзать этот TMyMyObject, увидит, что он реализует IUnknown (который как я понял объявляет лишь всё, связанное с подсчётом ссылок) и решит, что это работает. А ему - обломись smile Я ничего против подсчёта ссылок, даже его ручной реализации не имею - ну пусть будет отдельный интерфейс, который мы реализуем, если хотим. А не хотим - не будем smile

  Интерфейсы реализованы так чтобы выполнять свою функцию. Например, "строитель" создает некоторый функциональный объект и передает его интерфейсы тем кто его должен использовать. Клиенты не знают ничего о классе объекта и о том как он реализует свои интерфейсы, не знает какие еще у него есть интерфейсы и не знает использует ли его еще кто-то. В этой модели, можно сколько угодно менять класс функционального объекта, добавлять к нему другие члены, которые будут частично или полностью реализовывать интерфейсы, заменять его другим при этом все зависимые модули даже не нужно перекомпилировать, поскольку они ссылаются на абстрактный интерфейс. Сам же строитель отпускает свое дитя в свободное плавание, при этом строитель не должен созвать ни каких дополнительных списков с созданными им объектами. Более того сам объект не будет существовать до окончания работы приложения и освободит ресурсы сразу же как только станет ненужным.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Любитель
Дата 3.6.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Блин, у меня есть интерфейс объекта, поддерживающего, например, сравнение (IComparable smile ) - зачем мне плясать с подсчётом ссылок?

Кстати, возникла идея - а в Delphi .Net интерфейся тоже наследуются от IUnknown?!


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 3.6.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  3.6.2008,  15:32 Найти цитируемый пост)
Кстати, возникла идея - а в Delphi .Net интерфейся тоже наследуются от IUnknown?!


  Боюсь что там ситуация намного хуже, там любой объект наследует IInterface, а подсчет ссылок реализован у всех объектов, так как это является частью механизма сборки мусора. Там что-то вроде такого получается

<указатель на управляющий объект>  -> <управляющий объект> -> <объект>

Фактически указатель на объект не доступен, доступен только <указатель на управляющий объект>, сам же <управляющий объект> реализует IUnknown и возможно еще кучу всякой хрени. При проходе очередного цикла сборки мусора объект перемещается в памяти и в управляющий объект записывается новый адрес объекта (существует системная очередь хранящая все ссылки на управляющие объекты), при этом <указатель на управляющий объект> остается неизменным. На управляющий объект может быть множество ссылок, которые он сам считает. Когда этот счетчик становиться равным нулю, объект будет объявлен не нужным и будут удален при следующем цикле сборки мусора.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Любитель
Дата 3.6.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Alexeis @  3.6.2008,  17:23 Найти цитируемый пост)
а подсчет ссылок реализован у всех объектов, так как это является частью механизма сборки мусора

Ну... это не банальный подсчёт ссылок. Насколько я знаю, ВМ просто хранит информацию о всех объектах и при запуске собрки мусора стоит граф объектов. "Висячие" части (не связанные со статическими полями, локальными переменными и т. д.) удаляются. То есть, это явно не подсчёт ссылок и реализуется это не на уровне отдельных классов (и не на уровне System.Object), а на уровне ВМ.

Цитата(Alexeis @  3.6.2008,  17:23 Найти цитируемый пост)
На управляющий объект может быть множество ссылок, которые он сам считает.

Он ничего не считает. Весь подсчёт проводится не во время работы, а во время сборки мусора.

Цитата(Alexeis @  3.6.2008,  17:23 Найти цитируемый пост)
там любой объект наследует IInterface

Гм. А что это за IInterface?! Что в нём объявлено? Просто речь о том, что дотнетовские интерфейсы ни от чего не наследуются (что логично) - как с этим поступает Delphi .Net?

Это сообщение отредактировал(а) Любитель - 3.6.2008, 17:51


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 3.6.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Alexeis
в общем с подсчетом ссылок ересь какая-то получается
как сказал Любитель, костыль на пустом месте

ты вот лучше скажи: как в Delphi обстоят дела с шаблонами?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
lukas
Дата 3.6.2008, 18:40 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



MAKCim,

шаблоны это не проблема языка... это проблема среды... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Lazin
Дата 3.6.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(lukas @  3.6.2008,  18:40 Найти цитируемый пост)
шаблоны это не проблема языка... это проблема среды... 

нет, это проблема языка smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 3.6.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(lukas @  3.6.2008,  18:40 Найти цитируемый пост)
шаблоны это не проблема языка... это проблема среды...  

с шаблонами ясно  smile 
сейчас найдем еще что-нибудь...



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 3.6.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  3.6.2008,  18:07 Найти цитируемый пост)
с шаблонами ясно

ну да. как же. писать малопонятные инструкции с <> - это запросто. А воспользоваться расширением для рефакторинга, которому надо будет передать имя класса и имя дл поля, и IDE  сформирует "скелет" по шаблону "Observer" - это не круто. аааа.... укусите меня за ногу....
Как в С++ с метаклассами дела обстоят?
PM MAIL   Вверх
MAKCim
Дата 3.6.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(skyboy @  3.6.2008,  19:18 Найти цитируемый пост)
Как в С++ с метаклассами дела обстоят? 

что это в двух словах
типа класса Class в Java?

Добавлено через 2 минуты и 49 секунд
Цитата(skyboy @  3.6.2008,  19:18 Найти цитируемый пост)
А воспользоваться расширением для рефакторинга, которому надо будет передать имя класса и имя дл поля, и IDE  сформирует "скелет" по шаблону "Observer" - это не круто. аааа.... укусите меня за ногу....

гы  smile 
т. е Delphi IDE и Delphi язык уже неразрывно связаны?  smile 
а если нет у меня IDE, а есть, к примеру, компилятор и vim?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 3.6.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  3.6.2008,  18:26 Найти цитируемый пост)
типа класса Class в Java?

возможно. я практически не знаком с java. в Delphi, объект TClass может иметь значением ссылку на любой класс.
Код

TQuadro = class....
var BaseClass: TClass;
      SomeObject: TObject;
...
BaseClass:= TQuadro;
SomeObject:= BaseClass.Create();

чей-то навроде переменных-функций, только расширенное до класса.
Цитата(MAKCim @  3.6.2008,  18:26 Найти цитируемый пост)
т. е Delphi IDE и Delphi язык уже неразрывно связаны?

та ладно! Это же Религиозные войны  smile 
vim, кстати, вроде славился мощной системой расширений. вроде, на базе скриптов... вот и пишите скрипты smile
Кста, аргумент наводит на грустные размышления. Есть бесплатная среда с отладчиков и тп, но чтоб вот так - vi пользоваться взамен... ууу...
PM MAIL   Вверх
MAKCim
Дата 3.6.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



skyboy
не совсем понял про метаклассы
можно не кусок кода, а целостный рабочий пример?

Цитата(skyboy @  3.6.2008,  19:50 Найти цитируемый пост)
Кста, аргумент наводит на грустные размышления. Есть бесплатная среда с отладчиков и тп, но чтоб вот так - vi пользоваться взамен... ууу... 

нормальный пример
как раз показывает бредовость сравнения кодогенерации IDE с возможностями языка  smile 

Цитата(skyboy @  3.6.2008,  19:50 Найти цитируемый пост)
vim, кстати, вроде славился мощной системой расширений. вроде, на базе скриптов... вот и пишите скрипты

VIM и не на такое способен  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 3.6.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  3.6.2008,  16:49 Найти цитируемый пост)
Ну... это не банальный подсчёт ссылок. Насколько я знаю, ВМ просто хранит информацию о всех объектах и при запуске собрки мусора стоит граф объектов. "Висячие" части (не связанные со статическими полями, локальными переменными и т. д.) удаляются. То есть, это явно не подсчёт ссылок и реализуется это не на уровне отдельных классов (и не на уровне System.Object), а на уровне ВМ.

  На уровне чего происходит это вопрос условный,  <управляющий объект> тоже принадлежит системе, а чисто с объектной точки зрения, никто чужой не может менять внутренние данные объекта, потому все что анализирует внутренние данные объекта правильно считать его методами. Могу залезть в книгу и сказать точнее, но данные по ссылкам точно находятся в управляющем объекте, более того есть даже какие-то методы, которые доступны для использования.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
JackYF
Дата 4.6.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(skyboy @  3.6.2008,  18:18 Найти цитируемый пост)
А воспользоваться расширением для рефакторинга, которому надо будет передать имя класса и имя дл поля, и IDE  сформирует "скелет" по шаблону "Observer" - это не круто

А потом ещё два десятка расширений, чтобы это поддерживать?  smile Это же чистейшего рода копипаст smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
skyboy
Дата 4.6.2008, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(JackYF @  4.6.2008,  00:06 Найти цитируемый пост)
А потом ещё два десятка расширений, чтобы это поддерживать?

в смысле? смотря, какие расширения. мне вот хватает mmx model maker. 
учитывая, что mmx codeExplorer входит в Delphi начиная с какой-то там версии, то рефакторинг стал бесплатноприлагаемой фичей.
MMX CodeExplorer  + CnPack и я сплю спокойно smile

Добавлено через 9 минут и 17 секунд
Цитата(MAKCim @  3.6.2008,  18:57 Найти цитируемый пост)
а целостный рабочий пример?

признаться чесно, не могу сходу придумать настолько обоснованное применение, чтоб меня не запинали. Металкассы, так же, как и templates(когда немного-немного касался С++) для меня пока - слишком непонятная штука: не могу представить, как использовать: не дорос ещё. Потому пример приводить не буду, извини.
Только замечу, что суть в том, что сам класс тоже является объектом. Который можно хранить в переменной, передавать в функцию в виде параметра(не имя класса, а сам класс - кстати, теряется смысл объектной реализации паттерна Фабрика/Factory: мы и так при желании можем создавать объект любого произвольного класса). Вкупе с RTTI это дает выражения вроде
Код

someClassVar:= getClassByName('Tbutton');
button1:= someClassVar.Create(Form1);
button2:= someClassVar.Create(Form1);
button3:= someClassVar.Create(Form1);

PM MAIL   Вверх
MAKCim
Дата 4.6.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(skyboy @  4.6.2008,  01:41 Найти цитируемый пост)
Вкупе с RTTI это дает выражения вроде

рефлексии в С++ нет



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 4.6.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(skyboy @  4.6.2008,  01:41 Найти цитируемый пост)

Код

someClassVar:= getClassByName('Tbutton');
button1:= someClassVar.Create(Form1);
button2:= someClassVar.Create(Form1);
button3:= someClassVar.Create(Form1);


такое поведение легко реализовать и без метаклассов smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 4.6.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Lazin @  4.6.2008,  10:38 Найти цитируемый пост)
такое поведение легко реализовать и без метаклассов smile  

как?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 4.6.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



MAKCim, видимо, он имеет в виду шаблон "Фабрика". ведь как раз она и предназначена для создания объектов заранее не определенного класса. Правда, приходится писать "лишний код", но в итоге-то функционал тот же, разве нет?  smile 
PM MAIL   Вверх
Lazin
Дата 4.6.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



я бы не сказал что много лишнего кода, ассоциативный массив, плюс статический метод или функция Create для каждого типа...
как то так...
Код

std::map<std::string, boost::function<Control*(Form*)> > controls_factory;
...
controls_factory["Button"] = &Button.Create;
...
Button * btn = controls_factory["Button"](MainForm);

PM MAIL Skype GTalk   Вверх
MAKCim
Дата 4.6.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Lazin
проблема в том, что все классы придется регистрировать (причем статически)
getClassByName() же возвращает объект метакласса для любого класса (или я не прав?)
т. е полный аналог Class.forName() в Java


Это сообщение отредактировал(а) MAKCim - 4.6.2008, 11:45


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.6.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  3.6.2008,  19:18 Найти цитируемый пост)
Как в С++ с метаклассами дела обстоят? 

Плохо обстоят - не спорим smile

Цитата(skyboy @  4.6.2008,  01:41 Найти цитируемый пост)
в смысле? смотря, какие расширения. мне вот хватает mmx model maker. 

Это уже мегакостыль. Всё - писать надо на асме фсё + мегаИДЕ, чтоб там генерила мегакод.


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 4.6.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



исправляюсь: getClass, а не getClassByName(редко пользую, не упомнил).
Цитата(MAKCim @  4.6.2008,  10:42 Найти цитируемый пост)
getClassByName() же возвращает объект метакласса для любого класса (или я не прав?)т. е полный аналог Class.forName() в Java

именно smile
вот оно - RTTI smile
впрочем, есть свои сложности - как быть, если конструктор не может быть вызван без параметров? или наоборот - мы вызываем с параметрами, а конструктор должен быть без параметров... нло это частные случае применения smile
это раз.
потом: получаемый т.о. класс должен быть потомком TPersistent(а не базового TObject). это два.
автоматически регистрируются только те классы, поля-объекты которых(в смысле, объекты каких классов) являются полями формы. Остальные классы надо "регистрировать" при помощи RegisterClass(уверен, сделано в целях повышения производительности: класс, который можно получить по имени должен быть в памяти даже если ни одного объекта такого класса не создается; значит, надо указывать явно, какие классы загружать: не размещать же в памяти всю VCL!). это три.

PM MAIL   Вверх
Lazin
Дата 4.6.2008, 12:03 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(MAKCim @  4.6.2008,  11:42 Найти цитируемый пост)
проблема в том, что все классы придется регистрировать (причем статически)

зато как дисциплинирует, плюс платишь только за то, что тебе нужно...
PM MAIL Skype GTalk   Вверх
skyboy
Дата 4.6.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  4.6.2008,  11:01 Найти цитируемый пост)
Это уже мегакостыль.

UML-костыль, если уж начистоту.  smile 
Цитата(Любитель @  4.6.2008,  11:01 Найти цитируемый пост)
Плохо обстоят - не спорим

мне с моей низкой колокольни кажется, что шаблоны вполне подменяют метаклассы smile
PM MAIL   Вверх
MAKCim
Дата 4.6.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Lazin @  4.6.2008,  12:03 Найти цитируемый пост)
зато как дисциплинирует, плюс платишь только за то, что тебе нужно... 

в любом случае это не то

 smile 
почему бы не сделать в С++ полноценный RTTI с возможностью динамической загрузки и использования классов?
это же не трудно  smile 
в итоге получили бы Spring для C++

Добавлено через 2 минуты и 49 секунд
Цитата(skyboy @  4.6.2008,  12:03 Найти цитируемый пост)
мне с моей низкой колокольни кажется, что шаблоны вполне подменяют метаклассы

это два ортогональных понятия

Это сообщение отредактировал(а) MAKCim - 4.6.2008, 12:32


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 4.6.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  4.6.2008,  11:31 Найти цитируемый пост)
это два ортогональных понятия

как минимум - это два подхода к метапрограммированию. разве нет?
PM MAIL   Вверх
Любитель
Дата 4.6.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  4.6.2008,  12:31 Найти цитируемый пост)
почему бы не сделать в С++ полноценный RTTI с возможностью динамической загрузки и использования классов?

+1

Цитата(skyboy @  4.6.2008,  12:51 Найти цитируемый пост)
как минимум - это два подхода к метапрограммированию. разве нет? 

Нет. Метаклассы дельфи к метапрограммированию не имеют отношения. Метапрограммирование - программирование на стадии компиляции, грубо говоря.


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 4.6.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Любитель @  4.6.2008,  12:23 Найти цитируемый пост)
Метапрограммирование

раз уж на то пошло, это создание программы, которая создает другие программы  smile 
PM MAIL   Вверх
MAKCim
Дата 4.6.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(skyboy @  4.6.2008,  13:51 Найти цитируемый пост)
раз уж на то пошло, это создание программы, которая создает другие программы

грубо говоря да
ты создаешь код, который генерирует другой код по определенным правилам

Цитата(Любитель @  4.6.2008,  13:23 Найти цитируемый пост)
+1

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


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.6.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  4.6.2008,  13:51 Найти цитируемый пост)
раз уж на то пошло, это создание программы, которая создает другие программы

Согласен. Метаклассы к этому не имеют отношение - это к RTTI.

Цитата(MAKCim @  4.6.2008,  14:21 Найти цитируемый пост)
чем представим класс? идентификатором, методами и данными
остается эту информацию упорядочить и структурировать в бинарном формате скомпилированных классов
единственная сложность - это статические поля
в текущих версиях компиляторов С++ статические поля представлены глобальными переменными 

По-моему, просто добавить информацию в type_info - это раз. И создать глобальный маппинг: "имя класса" -> type_info. Насчёт статических полей - не понял, в чём проблема? smile Просто FieldInfo будет хранить для статических полей - адрес, для нестатических - оффсет. Но вообще для нормальной реализации всего этого, по-моему, необходимо взаимодействие с компилером smile Нет, можно конечно генерить некую инфу о классе иными способами (moc? smile) - но это всё-таки не то smile 


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 4.6.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Любитель

Цитата(Любитель @  4.6.2008,  14:32 Найти цитируемый пост)
Насчёт статических полей - не понял, в чём проблема? 

смотри как я это вижу
есть класс
Код

// Class.hpp

class Class {
...
public:
    static int variable;
...
};

он компилируется в бинарное представление (описывает идентификатор, методы и данные)
для поддержки фабрики классов реализуется класс rtti со статическим методом load_class(), получающий имя класса в качестве параметра
load_class() находит скомпилированный класс, распаковывает его (парсит), создает объект type_info, его представляющий и помещает его в список объектов (например, хэшированный по имени класса)
реализация type_info дополняется методом создания экземпляра класса (возвращает void *)
т. е выходной код будет примерно таким
Код

rtti * factory = rtti :: get_instance()
type_info * info = rtti -> get_class("Class");
Class * object = info -> create()

так вот, что касается статических полей
как получить доступ к variable из object?
если каждый объект Class будет хранить адрес variable, то общий размер таких объектов увеличится на sizeof(void*)
а это семантически неправильно
поэтому я бы расширил С++ концепцией атрибутов (или анотация), т. е метаинформацией о классе
что-то наподобие этого
Код

attribute(dynamic)
class Class {
...
};

при этом, в случае, если  Class реализует атрибут dynamic, то каждый объект этого класса будет содержать адреса всех статических переменных класса (если такие есть)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.6.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  4.6.2008,  14:47 Найти цитируемый пост)
создает объект type_info

Это уже требует поддержки со стороный копилеры (речь про стандартный type_info?).

Цитата(MAKCim @  4.6.2008,  14:47 Найти цитируемый пост)
поэтому я бы расширил С++ концепцией атрибутов (или анотация), т. е метаинформацией о классе

По мне бы, полноценную метаинфу о всё, что только можно - не отказался бы smile Скажем, атрибуты для полей, методов. Для многих вещей это полезно (насмотрелся на шарп smile ).

Цитата(MAKCim @  4.6.2008,  14:47 Найти цитируемый пост)
при этом, в случае, если  Class реализует атрибут dynamic, то каждый объект этого класса будет содержать адреса всех статических переменных класса (если такие есть) 

А вот это не понял. Зачем объёкут содержать инфу? Компилер генерит метаинформацию о классе как таковом - и туда засовывает либо адреса, либо оффсета (статик/нонстатик).


--------------------
PM MAIL ICQ Skype   Вверх
skyboy
Дата 4.6.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  4.6.2008,  13:47 Найти цитируемый пост)
так вот, что касается статических полейкак получить доступ к variable из object?если каждый объект Class будет хранить адрес variable, то общий размер таких объектов увеличится на sizeof(void*)

в Делфи каждый класс представляет собой объект, потому статические объекты, по идее, относятся к объекту-классу и поедания памяти не происходит.
В С++, как я понимаю, с РТТИ будет сложно, т.к. класс как структура не хранится в памяти(я прав?), а в процессе компиляции конструкторы преобразуется аллокаторы, методы - в вызовы с передачей параметров.
PM MAIL   Вверх
Любитель
Дата 4.6.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(skyboy @  4.6.2008,  15:39 Найти цитируемый пост)
т.к. класс как структура не хранится в памяти(я прав?)

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


--------------------
PM MAIL ICQ Skype   Вверх
Beltar
Дата 4.6.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

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


Хотите печатать быстро поступите на курсы машинисток. smile  smile  smile А для программирования это самый последний требующийся скилл. smile 

Кстати, реального кскорения даже при наборе вы не получите хотя бы из-за того, что надо нажимать еще и Shift.
Я лично уже давно не пишу end руками. Их за меня вставляет Delphi 2006. ;)
И вообще, все эти вроде бы мусорные слова типа then при просмотре кода очень сильно помогают.
Если менять синтаксис, то я бы сделал в конструкции case закрытие не через end, а через endcase, лишний end если case стоит в середине процедуры иногда создает путаницу.

Что касается надежности и быстроты набора Си, то все время сэкономленное при наборе 
сишного кода съедается компиляцией.

Почему-то господа сишники стыдливо молчат, что проект в несколько тысяч строк в том же Билдере на самом современном процессоре будет собираться полминуты.
Так же стыдливо молчат про проваливающиеся case, про отсутствие родного контроля выхода за границы массива. И еще я громко заявляю, что в Си++ нет цикла for. То что есть, это while с переставленными в другие места начальным значением и приращением счетчика.
Не кажется ли, что приращение на 1, нужное в 99,9% случаев компилятор мог бы и сам ставить.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Alexeis
Дата 4.6.2008, 16:13 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Beltar @  4.6.2008,  14:59 Найти цитируемый пост)
Почему-то господа сишники стыдливо молчат, что проект в несколько тысяч строк в том же Билдере на самом современном процессоре будет собираться полминуты.

  Не нужно путать полный ребилд и билд. Если нет лишних инклудов, то при рабочем билде компилятся 1-2 cpp шника +линковка. Это происходит не дольше чем в делфи. Ребилд ол делается очень редко, например при изменении настроек компиляции. В этом нет большой нужны.
  
Цитата(Beltar @  4.6.2008,  14:59 Найти цитируемый пост)
И еще я громко заявляю, что в Си++ нет цикла for. То что есть, это while с переставленными в другие места начальным значением и приращением счетчика.
Не кажется ли, что приращение на 1, нужное в 99,9% случаев компилятор мог бы и сам ставить. 

  В С++ ахренительный цикл for, такой обалденный, что делфи нервно курит в сторонке. Невероятно удобный, логичный и функциональный. С таким фором ничего другого не нужно. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 4.6.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Beltar @  4.6.2008,  15:59 Найти цитируемый пост)
Кстати, реального кскорения даже при наборе вы не получите хотя бы из-за того, что надо нажимать еще и Shift.
Я лично уже давно не пишу end руками. Их за меня вставляет Delphi 2006. ;)

какой ужас, Shift нужно нажимать, слепой метод набора рулед smile 

Цитата(Beltar @  4.6.2008,  15:59 Найти цитируемый пост)
про отсутствие родного контроля выхода за границы массива

в С++ и Delphi под массивом понимают несколько разные вещи, ты-бы еще Си-шный массив сравнил с массивами в Руби smile 
только вся фишка в том, что в С++ есть аналог массива Delphi - vector(там проверяется выход за  границу массива, и ее даже можно отключить), а вот в Delphi нет аналога Сишного массива smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 4.6.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Любитель @  4.6.2008,  15:26 Найти цитируемый пост)
Это уже требует поддержки со стороный копилеры (речь про стандартный type_info?).

компилятор тут не причем
это libstdc++.so

Цитата(Любитель @  4.6.2008,  15:26 Найти цитируемый пост)
А вот это не понял. Зачем объёкут содержать инфу? Компилер генерит метаинформацию о классе как таковом - и туда засовывает либо адреса, либо оффсета (статик/нонстатик). 

ну смотри

Код

class Class {
public:
    static int variable;
};
...
Class * object = static_cast<Class*>(info -> create());
object -> variable = 50;

что компилятор будет генерировать в месте присваивания variable?
на сегодняшний день статические переменные реализуются через обычные глобальные переменные
но variable на момент компиляции не будет определена (класс загружается динамически)



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.6.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  4.6.2008,  17:14 Найти цитируемый пост)
но variable на момент компиляции не будет определена (класс загружается динамически)

Ааааа.... Так ты про то, что сам класс берётся откуда-то из библиотеки что ли?


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 4.6.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Любитель @  4.6.2008,  18:07 Найти цитируемый пост)
Ааааа.... Так ты про то, что сам класс берётся откуда-то из библиотеки что ли? 

сам класс будет описываться бинарным форматом и загружаться при необходимости


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
lukas
Дата 4.6.2008, 18:54 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Что вы тут спорите... пока вы тут решаете что RTII у делфи во много раз лучше чем у С++, пытаетесь приводить аргументы, в это время вся технология .NET ушла вперед... так например в C# и всех подобных .NET языках RTII механизм круче раз в 100 по возможностям чем у делфи...
там можно практически все (да не практически а абсолютно все) получить о классе о функциях, о методах в ран-тайм... я считаю это довольно хорошим преимуществом... хоть .NET это компиляция в байт-код... но скорость всеравно приближается с каждым разом к компилируемым языкам... а скорость при наших современных компах практически не критична...


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MAKCim
Дата 4.6.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



lukas
про .NET тут речи не было

Цитата(lukas @  4.6.2008,  18:54 Найти цитируемый пост)
NET это компиляция в байт-код... но скорость всеравно приближается с каждым разом к компилируемым языкам... а скорость при наших современных компах практически не критична... 

еще раз задаю этот вопрос
перечисли программы, установленные на твоем компьютере и использующие для своей работы .NET framework

Это сообщение отредактировал(а) MAKCim - 4.6.2008, 19:08


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Mayk
Дата 4.6.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(lukas @  4.6.2008,  22:54 Найти цитируемый пост)
.NET ушла вперед... так например в C# и всех подобных .NET языках RTII механизм круче раз в 100 по возможностям чем у делфи...

Не вперёд,а назад, не ушла а сделала поползновение.  RTTI в Smalltalk'е с его метаклассами и ярко выраженным "всё — объект, и это — тоже" мягко скажем не слаб уже пару десятков лет. Где он теперь?   smile 

Цитата(lukas @  4.6.2008,  22:54 Найти цитируемый пост)
там можно практически все (да не практически а абсолютно все) получить о классе о функциях, о методах в ран-тайм...

В питоне это тоже можно. Питон+смаллталк+нет+ява убьют с++ и дельфи?  Забавно, учитывая что ST с этими достоинствами  был рожден до с++ и дельфи и почему то их не убил. Наверное он противник абортов.  smile 

Цитата(lukas @  4.6.2008,  22:54 Найти цитируемый пост)
а скорость при наших современных компах практически не критична... 

Однако исследования в области JIT'ов вроде встречаются гораздо чаще чем в области "а как бы нам зафигачить двусвязный спиок в минимальное число указателей

Цитата(MAKCim @  4.6.2008,  23:08 Найти цитируемый пост)
про .NET тут речи не было

хрустит попкорном smile

ps. эту энергию, да в мирные бы цели.


Это сообщение отредактировал(а) Mayk - 4.6.2008, 19:27


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Lazin
Дата 4.6.2008, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(lukas @  4.6.2008,  18:54 Найти цитируемый пост)
Что вы тут спорите... пока вы тут решаете что RTII у делфи во много раз лучше чем у С++, пытаетесь приводить аргументы, в это время вся технология .NET ушла вперед... так например в C# и всех подобных .NET языках RTII механизм круче раз в 100 по возможностям чем у делфи...

Цитата(lukas @  4.6.2008,  18:54 Найти цитируемый пост)
там можно практически все (да не практически а абсолютно все) получить о классе о функциях, о методах в ран-тайм... 

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

и когда только M$ успели всем внушить что .NET теперь абсолютно везде, некоторые люди верят, что виста на нем написана чуть ли не целиком  smile

Добавлено через 1 минуту и 1 секунду
 smile

Добавлено через 2 минуты и 13 секунд
интересно, куда пропал Мастер, может он и правда Тар и Mayk его спугнул smile 
PM MAIL Skype GTalk   Вверх
lukas
Дата 4.6.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



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

.NET и все подобное... что выполняет байт код это еще одна ступень в абстракции программных языков... тему тут удивляться... 

P.S. Там где нужна скорость, обычно RTII совсем не нужна, а там где она вообще не ощутима... да и ощутить ее нельзя... т.к. разницы нет никакой... вот там то и удобно применять RTII.

P.S.S. По вашей логике можно было до сих пор программировать на одних функциях, не используя объекты и их методы, т.к. методы же работают медленее... а для нас скорость критична... когда процессоры dual core... 3.0 MGz... 

Это сообщение отредактировал(а) lukas - 4.6.2008, 21:27


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MAKCim
Дата 4.6.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(lukas @  4.6.2008,  21:25 Найти цитируемый пост)
я говорю о возможностях языка

гы 
язык тут не причем  smile 
ключевое слово CLR

Цитата(lukas @  4.6.2008,  21:25 Найти цитируемый пост)
т.к. методы же работают медленее...

в общем случае ложь

smile


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
lukas
Дата 4.6.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Код

в общем случае ложь


ну да в с++ возможно... поэтому там и нет нормального RTII, т.к. объект это набор функций названных методами... (образно говоря) smile 

Это сообщение отредактировал(а) lukas - 4.6.2008, 21:51


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MAKCim
Дата 4.6.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(lukas @  4.6.2008,  21:50 Найти цитируемый пост)
т.к. объект это набор функций названных методами... (образно говоря)

объект - это данные  smile 
данные отделены от кода


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
lukas
Дата 5.6.2008, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



MAKCim, и почему же они должны работать так же как и функции...

сделай простой тест на с++... возми функцию и метод объекта который выполняет тоже самое что и функция... поставь это все в цикл большой и посчитай на что больше времени уйдет... с помощью функции GetTimeCount() например... 

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


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Mayk
Дата 5.6.2008, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(lukas @  5.6.2008,  10:42 Найти цитируемый пост)
MAKCim, и почему же они должны работать так же как и функции...

а почему иначе

Цитата(lukas @  5.6.2008,  10:42 Найти цитируемый пост)
Делаю ставку, что функция выполнится раз в 10 быстрее чем метод объекта...  

Какой феерический бред.
Код



#include <string>
#include <iostream>
#include <string.h>
#include <windows.h>

enum{AMOUNT=100000};

class A
{
public:
    int foo(){
        int j = 2;
        for(int i = 0; i <= 1023; ++i)
            j += i;
        return j;
    }

};


    int foo(){
        int j = 2;
        for(int i = 0; i <= 1023; ++i)
            j += i;
        return j;
    }


class Timer
{
public:
    const char* what;
    long ticks;
    Timer(const char* msg) : what(msg), ticks(GetTickCount()){}
    ~Timer(){ std::cout << what << ":" << (GetTickCount() - ticks) << "\n"; }
};




int main()
{
    A a;
    int z=0;
    {
    Timer t("method");
    for( int j = 0; j < AMOUNT; ++j ){
        z += a.foo();
    }
    }
    {
    Timer t("func");
    for( int j = 0; j < AMOUNT; ++j ){
        z += foo();
    }
    }
    return z;

}


Цитата

method:94
func:94

Цитата(lukas @  5.6.2008,  10:42 Найти цитируемый пост)
Делаю ставку, что функция выполнится раз в 10 быстрее чем метод объекта...  

smile



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
lukas
Дата 5.6.2008, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Mayk, короче говоря я не знаю как устроен компилятор си, поэтому ничего утверждать не буду... возможно оптимизация... я даже уверен... приглядись на свои циклы... по крайней мере оптимизация дает иногда такие результаты... ну и возьми побольше цикл... 94 это не показатель...


хм... повторил тоже самое на делфи... время таже такое же как у тебя... (надо же проци у нас наверно одинаковые  smile ) что-то точно не то... я уверен... и рано смеятся...

Код

type
 A = class
  public
    function Foo(): Integer;
 end;

const
 AMOUNT = 100000;
 
var
  Form1: TForm1;

implementation

{$R *.dfm}
function A.Foo(): Integer;
 Var
   I: Integer;
begin
Result := 2;
  for i:=2 to 1023 do
   Inc(Result,i);
end;

function Foo(): Integer;
   Var
   I: Integer;
begin
Result := 2;
  for i:=2 to 1023 do
   Inc(Result,i);
end;

procedure TForm1.Button1Click(Sender: TObject);
  Var
  I,T: Integer;
  B: A;
begin
B := A.Create;

t := GetTickCount;
 for i:=0 to AMOUNT do
  foo();
ShowMessage(IntToStr(GetTickCount-t));

t := GetTickCount;
 for i:=0 to AMOUNT do
  B.foo();
ShowMessage(IntToStr(GetTickCount-t));

B.Free;
end;


Это сообщение отредактировал(а) lukas - 5.6.2008, 07:38


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Mayk
Дата 5.6.2008, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(lukas @  5.6.2008,  11:34 Найти цитируемый пост)

хм... повторил тоже самое на делфи... время таже такое же как у тебя... (надо же проци у нас наверно одинаковые  smile ) что-то точно не то... я уверен... и рано смеятся...

Точно! Счас мы добавим ещё и виртуальную таблицу на потеху оптимизаторам.  smile  smile 
Код

// a.h
#include <string>
#include <iostream>
#include <string.h>
#include <windows.h>
enum{AMOUNT=800000};

class  Base
{
public:
    virtual int foo()=0;
};


class Timer
{
public:
    const char* what;
    long ticks;
    Timer(const char* msg) : what(msg), ticks(GetTickCount()){}
    ~Timer(){ std::cout << what << ":" << (GetTickCount() - ticks) << "\n"; }
};

Код

// a.cpp

#include "a.h"

class A : public Base
{
public:
    int foo(){
        int j = 2;
        for(int i = 0; i <= 1023; ++i)
            j += i;
        return j;
    }

};

Base* makeA()
{
    return new A();
}

Код

//b.cpp
#include "a.h"


Base* makeA();
int testVirmethod(Base* b)
{
    int z = 0;
    Timer t("virmethod");
    for( int j = 0; j < AMOUNT; ++j ){
        z += b->foo();
    }
    return z;
}



int foo(){
        int j = 2;
        for(int i = 0; i <= 1023; ++i)
            j += i;
        return j;
    }

int main()
{
    int z = testVirmethod(makeA());
    Timer t("func");
    for( int j = 0; j < AMOUNT; ++j ){
        z += foo();
    }
    return z;

}




Цитата

virmethod:734
func:734


Похоже что накладные расходы на вызовы здесь ужасно незначительны.

Добавлено через 1 минуту и 31 секунду
и это при том что у testvirmethod'а нету на этапе компиляции кода A::foo().

Добавлено через 8 минут и 55 секунд
Цитата(lukas @  5.6.2008,  11:34 Найти цитируемый пост)

хм... повторил тоже самое на делфи... время таже такое же как у тебя... (надо же проци у нас наверно одинаковые  smile ) что-то точно не то..

Всё то. При вызове метода из накладных расходов - это лишь передача указателя на класс(да и то лишь в том случае если компиялтор был достаточно туп чтобе не сделать данный метод (foo) статическим самостоятельно). это вообще почти нулевые расходы.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 5.6.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(lukas @  5.6.2008,  06:42 Найти цитируемый пост)
Делаю ставку, что функция выполнится раз в 10 быстрее чем метод объекта...  

Цитата(lukas @  5.6.2008,  07:34 Найти цитируемый пост)
короче говоря я не знаю как устроен компилятор си, поэтому ничего утверждать не буду.

Цитата(lukas @  5.6.2008,  07:34 Найти цитируемый пост)
что-то точно не то... я уверен... и рано смеятся...

smile

Добавлено через 5 минут и 42 секунды
в который раз убеждаюсь, что С/С++ обязателен для обучения
а то всякие Java/.NET-ы дают своеобразное понимание многих вещей
 smile 

Это сообщение отредактировал(а) MAKCim - 5.6.2008, 09:34


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skyboy
Дата 5.6.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(MAKCim @  5.6.2008,  08:33 Найти цитируемый пост)
а то всякие Java/.NET-ы дают своеобразное понимание многих вещей

каким боком затесались .NET/Java в тему о Delphi и С++? Оффтоп!  smile 
Надо говорить: 
"А то всякие Delphi дают своеобразное понимание многих вещей" - и вот, ещё один аргумент в пользу С++  smile 
PM MAIL   Вверх
lukas
Дата 5.6.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



ДА какая разница... мне пох... наверно я спутал со свойствами... property..


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Alexeis
Дата 5.6.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Понимание многих вещей лучше всего дает ASM и C. С++ здесь точно также своеобразно преломляет алгоритмы под свои правила.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
W4FhLF
Дата 5.6.2008, 11:23 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Асм рулед, я всегда это говорил smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
skyboy
Дата 5.6.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(lukas @  5.6.2008,  10:05 Найти цитируемый пост)
 наверно я спутал со свойствами... property..

которые компилятся в обращения к тем же методам....
новые замеры проведем?  smile 
PM MAIL   Вверх
lukas
Дата 5.6.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



skyboy

функция против property??  smile 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Lazin
Дата 5.6.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(MAKCim @  5.6.2008,  09:33 Найти цитируемый пост)
в который раз убеждаюсь, что С/С++ обязателен для обучения
а то всякие Java/.NET-ы дают своеобразное понимание многих вещей

+1 smile 
PM MAIL Skype GTalk   Вверх
Любитель
Дата 5.6.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  4.6.2008,  18:24 Найти цитируемый пост)
сам класс будет описываться бинарным форматом и загружаться при необходимости

А... даже так... Я про другое думал - получение полной метаинформации об обычном классе. Хотя такое - это, конечно, ещё интересней. Этого в дельфи нет smile

Цитата(skyboy @  5.6.2008,  10:24 Найти цитируемый пост)
"А то всякие Delphi дают своеобразное понимание многих вещей" - и вот, ещё один аргумент в пользу С++

А чем реализация методов в обычно (не дотнетовской) дельфе отличается от функций smile Как и в С++ - почти ничем (кроме дополнитекльного параметра this/self + вызова через VMT для виртуальных функций).

Цитата(lukas @  5.6.2008,  13:48 Найти цитируемый пост)
функция против property??

property в .Net это специальный тип метаданных. Который указывает имя свойства, тип и референсы на гет/сет методы. Последние - обычный методы, по-сути smile


--------------------
PM MAIL ICQ Skype   Вверх
Mayk
Дата 5.6.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Скажите, а кто нить кроме меня ещё путает эту тему и соседнюю?  smile 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
lukas
Дата 5.6.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Код

property в .Net это специальный тип метаданных. Который указывает имя свойства, тип и референсы на гет/сет методы. Последние - обычный методы, по-сути smile


хех америку открыл...  smile  

в делфи тоже самое... думаю и в билдере тоже самое... 

Код

 TObj = class
   private
    function GetItems(I: Integer): String;
    procedure SetItems(I: Integer; S: String);
   public
    property Items[Index: Integer]: String GetItems read write SetItems;



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Любитель
Дата 5.6.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(lukas @  5.6.2008,  17:38 Найти цитируемый пост)
в делфи тоже самое... думаю и в билдере тоже самое... 

Я не знаю, как они там реализуются в дельфи. Всмысле в PE-шнике что сохраняется. РЕчь шла о том, что и property вовсе не будут работать в 10 раз медленнее функций/методов. Вообщем, никакой приницпиальной разницы smile

Цитата(Mayk @  5.6.2008,  16:54 Найти цитируемый пост)
Скажите, а кто нить кроме меня ещё путает эту тему и соседнюю?

Неа. Здесь Мастера нет!


--------------------
PM MAIL ICQ Skype   Вверх
lukas
Дата 5.6.2008, 20:01 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



короче спорить о языках программирования также глупо как и о естественных языках...

например руский и английский... давайте поспорим кто круче... у кого больше возможностей для построения предложений и т.д...  smile 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MAKCim
Дата 5.6.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  5.6.2008,  11:20 Найти цитируемый пост)
Понимание многих вещей лучше всего дает ASM и C

ОК, соглашусь

Цитата(W4FhLF @  5.6.2008,  11:23 Найти цитируемый пост)
Асм рулед, я всегда это говорил

угу  smile 

Цитата(lukas @  5.6.2008,  20:01 Найти цитируемый пост)
например руский и английский... давайте поспорим кто круче... у кого больше возможностей для построения предложений и т.д...  

а что тут спорить
очевидно, что русский круче  smile 

smile

Добавлено через 1 минуту и 45 секунд
Цитата(Любитель @  5.6.2008,  16:41 Найти цитируемый пост)
Хотя такое - это, конечно, ещё интересней

только вот переносимость будет нулевая
но зато в рамках конкретной платформы все будет пучком  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nerezus
Дата 5.6.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

Неа. Здесь Мастера нет!
 ROFL ) накличешь, появится ))))


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
lukas
Дата 6.6.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Цитата(MAKCim @  5.6.2008,  20:58 Найти цитируемый пост)
а что тут спорить
очевидно, что русский круче  smile 


да, но это не мешает английскому быть самым популярным языком в мире... короче... это последний офтоп...  smile 

Это сообщение отредактировал(а) lukas - 6.6.2008, 10:17


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MAKCim
Дата 6.6.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(lukas @  6.6.2008,  10:17 Найти цитируемый пост)
да, но это не мешает английскому быть самым популярным языком в мире... короче... это последний офтоп... 

английский в разы проще


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
LSD
Дата 6.6.2008, 10:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Вы решили, что менять синтаксис паскаля, это не тот размах, и решили поменять синтаксис английского языка? smile  smile  smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Mayk
Дата 6.6.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



And ze drems vil finali kum tru!!!!!!!!!!!


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
skyboy
Дата 6.6.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Mayk, чьи мечты-то исполнятся?
PM MAIL   Вверх
Mayk
Дата 6.6.2008, 11:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



skyboy, это из старинного баяна про английский язык - см  например тут ТЫНЦ МИ


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Любитель
Дата 6.6.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(MAKCim @  5.6.2008,  20:58 Найти цитируемый пост)
только вот переносимость будет нулевая
но зато в рамках конкретной платформы все будет пучком 

Большего и не надо. С бинарной переносимостью (даже на одой платформе - при смене компилера) у С++ всегда были (и будут) проблемы. Это не есть плохо.


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 6.6.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(Любитель @  6.6.2008,  10:03 Найти цитируемый пост)
С бинарной переносимостью

ABI - фиг с ним. API, главное, сохраняется

Цитата(Любитель @  6.6.2008,  10:03 Найти цитируемый пост)
у С++ всегда были (и будут) проблемы.

Не удержусь: а в GNU/Linux'е на 99-и-много-девяток-в-периоде-процентов такой проблемы нет smile






--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 6.6.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(JackYF @  6.6.2008,  13:42 Найти цитируемый пост)
Не удержусь: а в GNU/Linux'е на 99-и-много-девяток-в-периоде-процентов такой проблемы нет 

Хм... Ну для начала - ты много знаешь разных компилеров под GNU/Linux? gcc3 vs gcc4 - проблемы совместимости AFAIK были. Хотя вроде их решали, но это естественно (всё-таки это разные версии одного компилера smile ). icc - intel само собой делает всё, чтобы добиться совместимости с gcc (как и с msvc для виндовой версии), иначе у их компилера не было шансов на использование просто.


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 7.6.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Любитель, ну так об этом и речь веду. Холивары всё-таки smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Страницы: (12) [Все] 1 2 3 ... Последняя »
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.5410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.