Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Хочется странного... языка с автосозданием объектов (http://forums.kuban.ru/f1024/hochetsya_strannogo_yazyka_s_avtosozdaniem_ob-ektov-2200197.html)

NTFS_ 14.02.2012 09:33

Хочется странного... языка с автосозданием объектов
 
Всем день добрый.

Есть идея фикс: язык или библиотека, позволяющие делать такое:

// Объявляем объект типа TStringList
var List:TStringList ;
...
// При первом обращении к объекту, он автоматически создается компилятором
// как List:=TStringList.Create()
// И следующая инструкция вызовет метод Add класса TStringList
List.Add('abc') ;
...

// Но при этом я могу позже пересоздать его вручную в совместимый тип

type
TStringListExt = class(TStringList)

List:=TStringListExt.Create() :

Какой язык позволяет делать нечто подобное?

NTFS_ 14.02.2012 09:34

Синтаксис Паскаля просто для примера... я понимаю, что скорее всего, копать нужно в сторону скриптовых языков

NTFS_ 14.02.2012 09:36

Еще, я знаю, что C++ позволяет в одной строке делать и декларацию, и создание (что-то вроде):
TStringList *List = new TStringList()

Но мне хочется, чтобы все декларации были в одном месте (условно, блок var), а создание объекта - по мере необходимости на автомате.

Sserj 14.02.2012 09:44

Кажется не совсем удобно это будет. В этом случае явно можно будет использовать только конструкторы без параметров.

Mikle Quits 14.02.2012 10:36

В Visual Basic можно объявлять:
Dim MyObj As New StringList
Объект будет создаваться при первом обращении. Его можно точно так же уничтожать и пересоздавать.

aj3 14.02.2012 10:42

боги программирования, удачные предприниматели (другая иерархия куле) в треде. сцкнх!

скажи па русски че те нада и для чего? а то топик уже доставляет.

sserj, вот так лаконичность и законченность изложения у дельфиста (перни фиалкой, прошу).

aj3 14.02.2012 10:45

5 это не в твой огород палка. тут два поциэнта.

---
выносите RCorpa в студию. молю! картина не полна.

NTFS_ 14.02.2012 11:01

5-Mikle Quits > Спасибо, буду пробовать.
6-Продаются саженцы > По теме-то есть что сказать?

drmiller 14.02.2012 11:40

3-NTFS_ > Кажется с++ позволяет делать проще:
Объявление вида:
MyClass MyVariable;
Автоматически создает объект. И при выходе из области видимости - автоматом вызывает деструктор... если я ничего не путаю.

drmiller 14.02.2012 11:42

Если конструктор имеет параметры, то объявляется вот так:
MyClass MyVariable(Type Param1, ... Type ParamN);

drmiller 14.02.2012 11:45

[quote=NTFS_;23309481]Но мне хочется, чтобы все декларации были в одном месте (условно, блок var), а создание объекта - по мере необходимости на автомате. [/quote]
А декларация типов (классов) не пойдет, и создание объектов этого типа (класса "когда надо и где хочу"?

NTFS_ 14.02.2012 12:26

11-drmiller > Не, я хочу, чтобы конструктор вызывался неявно. А схема из (9) не работает, по крайней мере, с компилятором MinGW для Windows. Еще в студии проверю, но по-моему, C++ такого не позволяет в принципе.

drmiller 14.02.2012 12:32

12-NTFS_ > Ubuntu + Code::Blocks IDE + gcc..
Неделю назад брекпойнт в конструкторе срабатывал при объявлении а-ля п.9
Почему с MinGW все плохо - ХЗ :(

п.9. "... если я ничего не путаю." - было сказано касаемо деструктора.. это не проверял.

drmiller 14.02.2012 12:42

13-drmiller > + Страуструп вроде обещал что пработать будет.

+

Из букваря:

"Сначала же создадим переменную типа soldier.

soldier a;

a.x = 3;
a.y = 4;
a.ammo = 5;

Здесь мы создали объект a класса soldier."

Сцылко: [url]http://shatalov.su/ru/articles/cpp_primer/class_0.php[/url]

vxg 14.02.2012 12:56

только попробывал - в билдере конструктор вызывается при определении. то есть
some_class some_obj; //прямо вот здесь идет вызов конструктора, т.е. объект фактически создается
открытый вопрос - зачем создавать именно при первом обращении? можно и такое замутить, но на костылях - создать указатель на объект, каждый вызов относящийся к объекту оборачивать шаблоном функцией проверяющей что указатель не ноль и при необходимости создающей объект.

vxg 14.02.2012 12:57

12- в принципе позволяет если я правильно понял вопрос)

NTFS_ 14.02.2012 13:38

В студии действительно работает...

TMyClass MC ;
printf ("%d\n",MC.x()) ;

Почему не пошло в MinGW - я так и не понял :-)

Всем спасибо, я получил ответ на свой вопрос. Старый добрый C++...

NTFS_ 14.02.2012 15:37

Еще раз всем спасибо, действительно, просто нужно было получше вникнуть в C++. Мощный язык, если умеючи :-)

aj3 14.02.2012 17:31

18 "просто нужно было получше вникнуть в C++"

да кагбэ еще вникать не перевникать.

"Старый добрый C++..."

новый, злой. не?

нтфс. а представь если еще и с .net и с ms sql clr hosting'ом разобраться так вообще оттот твой глюкавый проект заведется с полпинка. несмотря на кривость =D гыгы.

p.s. тока ты эта. в реальный проект с++ еще не тяни. еще много вникать не перевникать!

aj3 14.02.2012 17:38

18 почитай еще разницу в c++ между

[code]
MyClass myClassObj;
MyClass* myClassObj = new MyClass();
MyClass^ myClassObj = gcnew MyClass(); // не стандарт. есть тока в MS
[/code]

а вообще я так и не понял зачем тебе это все. хз.

NTFS_ 14.02.2012 19:09

Я вообще-то не упертый фанатик... признаю свои ошибки, когда не прав или некомпетентен.
[em] вообще я так и не понял зачем тебе это все. хз.[/em]

Я же написал - хочется странного...

scumware 14.02.2012 20:18

1-NTFS_ > могу себе такое представить только для классов, у которых есть конструкторы по умолчанию.

А вообще, к той же самой делфе можно прикрутить препроцессор (будет генерировать прокси-классы).

Rcorp 14.02.2012 20:59

Водки хочца.....

SilverEye 15.02.2012 04:20

Этому топику не хватает картинки с троллейбусом из буханки хлеба:[img]http://www.gamer.ru/system/attached_images/images/000/411/621/original/1320276.jpg[/img]

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

SilverEye 15.02.2012 04:40

В языках со сборщиком мусора утечки может и не быть, но только вот подобная фича идеологически размоет понятие владельца объекта... стимулируя школоту писать говнокод. Для меня это страшный сон - не знать, где создался объект. :) Плюс ещё куча интересных спецэффектов вылезет, например, когда совершенно непонятно, кто и когда вообще всё создаёт в программе: например, объект A создаёт объект B путём вызова его метода, B создаёт C вызовом метода, а C создаёт A вызовом метода. :) И получаем в итоге забивание памяти вплоть до out of memory.

Sserj 15.02.2012 05:02

24-SilverEye > Да чего тут непонятно-то. NTFS_ просто развел всех на пустом месте, задал фактически элементарный вопрос, на который в 9, 10 и 14 был дан исчерпывающий ответ. И сразу получил общую картину уровня отвечающих :)

aj3 15.02.2012 05:27

26 не ссы в глаза, молю, господин. :D

p.s. доставь еще своих букв в тред!

aj3 15.02.2012 05:30

23 и ты явился, светоч!

p.s. разбавь годноту буквами за жись.

vxg 15.02.2012 09:00

20 - когда я в MS Visual "так называемом" C++ увидел конструкции вида
MyClass^ myClassObj
я удивленно огляделся вокруг и вопросил "что это за гамно?", а знающие люди сказали "это Майкрософт дурью мается - в программы которые "как бы" C++ запихивает шлак от CLR или как там это называется... как будто нельзя было выразить все для C++ - повышают кругозор народа одним словом"

Mikle Quits 15.02.2012 09:26

[b]SilverEye[/b]
[em]совершенно непонятно, кто и когда вообще всё создаёт в программе[/em]
Вообще-то, объект будет создаваться там, где объявлен.
Например объект АА объявлен в классе Б. Он создастся при первом обращении, но обратиться к нему можно только через объект ББ класса Б. Конечно, в C++ можно получить указатель на АА, уничтожить ББ, а потом через указатель пытаться вызвать какой-нибудь метод АА, но это одно из извращений. Моё имхо такое, что высокоуровневыми извратами надо заниматься на нормальных ЯВУ, где нельзя выстрелить себе в ногу.

NTFS_ 15.02.2012 09:31

26-Sserj >
Да ладно, никогда я не разводил... просто не знал, что С++ позволяет это использовать. В ObjectPascal такого нет. Если бы я мог сформулировать вопрос для Яндекса, я бы и форум не доставал.

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

Теперь буду думать о реализации части логики на C++ вместо FPC.

aj3 15.02.2012 13:02

29 vxg

"... мно?", а
[b]знающие люди сказали[/b] "это
Майкрософт дурью мается - в
программы которые "как бы" C++
запихивает шлак от CLR или как там
это называется... как будто нельзя
было выразить все для C++ -
повышают кругозор народа одним
словом"... "

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

aj3 15.02.2012 13:20

"...
А нужно мне это было для простых
разовых объектов, например,
[b]проверка какого-то условия,
реализованного как функция[/b] класса.
..."

я правильно понял, из за вшивенькой функции, не хочется плодить определения классов да?

почитай "анонимные методы", делегаты, лямбда выражения и т. п..

в c# это есть, в других языках ищи аналоги. пример не кидаю, с тела пишу.

"...
Теперь буду думать о реализации
части логики на C++ вместо FPC.
..."

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

vxg 15.02.2012 14:34

32 - ну так объясни для чего господам из MS нужно было привносить в самодостаточный язык C++ иноязычные конструкции без понимания которых невозможно создать программу в Visual Studio потому как все что касается GUI идет через эту "срань"?

vxg 15.02.2012 14:35

...в то время как все прогрессивное человечество в лице Builder C++ спокойно оперирует объектами GUI на отлично подходящем для этого языке C++

aj3 15.02.2012 14:45

34 "... ну так объясни для чего
господам из MS нужно было
привносить в самодостаточный
язык C++ иноязычные конструкции..."

мне кажется, если я обьясню, то ты никуя непоймешь. потому, что смотри ниже. ^_^

"... ноязычные конструкции
без понимания которых
[b]невозможно[/b] создать программу в
Visual Studio [b]потому как все что
касается GUI идет через эту "срань"[/b]... "

чо? O_o.

Rcorp 15.02.2012 14:50

Грю, нада водки!
Ваташи тачи ва бодока ни о номимасё?

vxg 15.02.2012 14:57

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

aj3 15.02.2012 15:09

38 а накуя мне обьяснять тебе о c++ managed extensions, если ты даже не знаешь, что такое. net. (не c#, а .net).

"... сли ты импотент или
неполноценный так и скажи..."

а чо тебя так заботит моя потенция? :D

thread just for lulz!

Rcorp 15.02.2012 15:17

vxg: но нид реакшн фор зэт. У МЧ завышено ЧСВ и полное ФГМ.


Текущее время: 11:15. Часовой пояс GMT +3.