К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

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

0 - 14.02.2012 - 09:33
Всем день добрый.

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

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

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

type
TStringListExt = class(TStringList)

List:=TStringListExt.Create() :

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



1 - 14.02.2012 - 09:34
Синтаксис Паскаля просто для примера... я понимаю, что скорее всего, копать нужно в сторону скриптовых языков
2 - 14.02.2012 - 09:36
Еще, я знаю, что C++ позволяет в одной строке делать и декларацию, и создание (что-то вроде):
TStringList *List = new TStringList()

Но мне хочется, чтобы все декларации были в одном месте (условно, блок var), а создание объекта - по мере необходимости на автомате.
3 - 14.02.2012 - 09:44
Кажется не совсем удобно это будет. В этом случае явно можно будет использовать только конструкторы без параметров.
4 - 14.02.2012 - 10:36
В Visual Basic можно объявлять:
Dim MyObj As New StringList
Объект будет создаваться при первом обращении. Его можно точно так же уничтожать и пересоздавать.
Гость
5 - 14.02.2012 - 10:42
боги программирования, удачные предприниматели (другая иерархия куле) в треде. сцкнх!

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

sserj, вот так лаконичность и законченность изложения у дельфиста (перни фиалкой, прошу).
Гость
6 - 14.02.2012 - 10:45
5 это не в твой огород палка. тут два поциэнта.

---
выносите RCorpa в студию. молю! картина не полна.
7 - 14.02.2012 - 11:01
5-Mikle Quits > Спасибо, буду пробовать.
6-Продаются саженцы > По теме-то есть что сказать?
Гость
8 - 14.02.2012 - 11:40
3-NTFS_ > Кажется с++ позволяет делать проще:
Объявление вида:
MyClass MyVariable;
Автоматически создает объект. И при выходе из области видимости - автоматом вызывает деструктор... если я ничего не путаю.
Гость
9 - 14.02.2012 - 11:42
Если конструктор имеет параметры, то объявляется вот так:
MyClass MyVariable(Type Param1, ... Type ParamN);
Гость
10 - 14.02.2012 - 11:45
Цитата:
Сообщение от NTFS_ Посмотреть сообщение
Но мне хочется, чтобы все декларации были в одном месте (условно, блок var), а создание объекта - по мере необходимости на автомате.
А декларация типов (классов) не пойдет, и создание объектов этого типа (класса "когда надо и где хочу"?
11 - 14.02.2012 - 12:26
11-drmiller > Не, я хочу, чтобы конструктор вызывался неявно. А схема из (9) не работает, по крайней мере, с компилятором MinGW для Windows. Еще в студии проверю, но по-моему, C++ такого не позволяет в принципе.
Гость
12 - 14.02.2012 - 12:32
12-NTFS_ > Ubuntu + Code::Blocks IDE + gcc..
Неделю назад брекпойнт в конструкторе срабатывал при объявлении а-ля п.9
Почему с MinGW все плохо - ХЗ :(

п.9. "... если я ничего не путаю." - было сказано касаемо деструктора.. это не проверял.
Гость
13 - 14.02.2012 - 12:42
13-drmiller > + Страуструп вроде обещал что пработать будет.

+

Из букваря:

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

soldier a;

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

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

Сцылко: http://shatalov.su/ru/articles/cpp_primer/class_0.php
Гость
14 - 14.02.2012 - 12:56
только попробывал - в билдере конструктор вызывается при определении. то есть
some_class some_obj; //прямо вот здесь идет вызов конструктора, т.е. объект фактически создается
открытый вопрос - зачем создавать именно при первом обращении? можно и такое замутить, но на костылях - создать указатель на объект, каждый вызов относящийся к объекту оборачивать шаблоном функцией проверяющей что указатель не ноль и при необходимости создающей объект.
Гость
15 - 14.02.2012 - 12:57
12- в принципе позволяет если я правильно понял вопрос)
16 - 14.02.2012 - 13:38
В студии действительно работает...

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

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

Всем спасибо, я получил ответ на свой вопрос. Старый добрый C++...
17 - 14.02.2012 - 15:37
Еще раз всем спасибо, действительно, просто нужно было получше вникнуть в C++. Мощный язык, если умеючи :-)
Гость
18 - 14.02.2012 - 17:31
18 "просто нужно было получше вникнуть в C++"

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

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

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

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

p.s. тока ты эта. в реальный проект с++ еще не тяни. еще много вникать не перевникать!
Гость
19 - 14.02.2012 - 17:38
18 почитай еще разницу в c++ между

Код:
MyClass myClassObj;
MyClass* myClassObj = new MyClass();
MyClass^ myClassObj = gcnew MyClass(); // не стандарт. есть тока в MS
а вообще я так и не понял зачем тебе это все. хз.
20 - 14.02.2012 - 19:09
Я вообще-то не упертый фанатик... признаю свои ошибки, когда не прав или некомпетентен.
вообще я так и не понял зачем тебе это все. хз.

Я же написал - хочется странного...
Гость
21 - 14.02.2012 - 20:18
1-NTFS_ > могу себе такое представить только для классов, у которых есть конструкторы по умолчанию.

А вообще, к той же самой делфе можно прикрутить препроцессор (будет генерировать прокси-классы).
Гость
22 - 14.02.2012 - 20:59
Водки хочца.....
Гость
23 - 15.02.2012 - 04:20
Этому топику не хватает картинки с троллейбусом из буханки хлеба:

А если по теме, то совершенно непонятна цель данного изврата. Ну создай на стеке объект, какие проблемы-то... А в куче создавать неявно это же самоубийство, будешь потом головой об клавиатуру биться, если где-нибудь утечка памяти обнаружится - непонятно будет, в каком месте объект создался...
Гость
24 - 15.02.2012 - 04:40
В языках со сборщиком мусора утечки может и не быть, но только вот подобная фича идеологически размоет понятие владельца объекта... стимулируя школоту писать говнокод. Для меня это страшный сон - не знать, где создался объект. :) Плюс ещё куча интересных спецэффектов вылезет, например, когда совершенно непонятно, кто и когда вообще всё создаёт в программе: например, объект A создаёт объект B путём вызова его метода, B создаёт C вызовом метода, а C создаёт A вызовом метода. :) И получаем в итоге забивание памяти вплоть до out of memory.
25 - 15.02.2012 - 05:02
24-SilverEye > Да чего тут непонятно-то. NTFS_ просто развел всех на пустом месте, задал фактически элементарный вопрос, на который в 9, 10 и 14 был дан исчерпывающий ответ. И сразу получил общую картину уровня отвечающих :)
Гость
26 - 15.02.2012 - 05:27
26 не ссы в глаза, молю, господин. :D

p.s. доставь еще своих букв в тред!
Гость
27 - 15.02.2012 - 05:30
23 и ты явился, светоч!

p.s. разбавь годноту буквами за жись.
Гость
28 - 15.02.2012 - 09:00
20 - когда я в MS Visual "так называемом" C++ увидел конструкции вида
MyClass^ myClassObj
я удивленно огляделся вокруг и вопросил "что это за гамно?", а знающие люди сказали "это Майкрософт дурью мается - в программы которые "как бы" C++ запихивает шлак от CLR или как там это называется... как будто нельзя было выразить все для C++ - повышают кругозор народа одним словом"
29 - 15.02.2012 - 09:26
SilverEye
совершенно непонятно, кто и когда вообще всё создаёт в программе
Вообще-то, объект будет создаваться там, где объявлен.
Например объект АА объявлен в классе Б. Он создастся при первом обращении, но обратиться к нему можно только через объект ББ класса Б. Конечно, в C++ можно получить указатель на АА, уничтожить ББ, а потом через указатель пытаться вызвать какой-нибудь метод АА, но это одно из извращений. Моё имхо такое, что высокоуровневыми извратами надо заниматься на нормальных ЯВУ, где нельзя выстрелить себе в ногу.
30 - 15.02.2012 - 09:31
26-Sserj >
Да ладно, никогда я не разводил... просто не знал, что С++ позволяет это использовать. В ObjectPascal такого нет. Если бы я мог сформулировать вопрос для Яндекса, я бы и форум не доставал.

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

Теперь буду думать о реализации части логики на C++ вместо FPC.
Гость
31 - 15.02.2012 - 13:02
29 vxg

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

какие же они знающие. если свое незнание выдают за знание? передай им что они не только не поняли, ни что это, ни для чего это, ни когда применять. :D
Гость
32 - 15.02.2012 - 13:20
"...
А нужно мне это было для простых
разовых объектов, например,
проверка какого-то условия,
реализованного как функция
класса.
..."

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

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

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

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

ни в коем случае. ты не только не решил свою истинную проблему, но и свяжешься с языком, которого не знаешь. и поверь, при таких раскладах, как тут уже выше сказали, отстрелишь себе ногу.
Гость
33 - 15.02.2012 - 14:34
32 - ну так объясни для чего господам из MS нужно было привносить в самодостаточный язык C++ иноязычные конструкции без понимания которых невозможно создать программу в Visual Studio потому как все что касается GUI идет через эту "срань"?
Гость
34 - 15.02.2012 - 14:35
...в то время как все прогрессивное человечество в лице Builder C++ спокойно оперирует объектами GUI на отлично подходящем для этого языке C++
Гость
35 - 15.02.2012 - 14:45
34 "... ну так объясни для чего
господам из MS нужно было
привносить в самодостаточный
язык C++ иноязычные конструкции..."

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

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

чо? O_o.
Гость
36 - 15.02.2012 - 14:50
Грю, нада водки!
Ваташи тачи ва бодока ни о номимасё?
Гость
37 - 15.02.2012 - 14:57
36 - если ты импотент или неполноценный так и скажи, а фразы "см. ниже" или "курите маны" все умеют писать. нечего тебе сказать получается, не волочешь ты в предмете.
Гость
38 - 15.02.2012 - 15:09
38 а накуя мне обьяснять тебе о c++ managed extensions, если ты даже не знаешь, что такое. net. (не c#, а .net).

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

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

thread just for lulz!
Гость
39 - 15.02.2012 - 15:17
vxg: но нид реакшн фор зэт. У МЧ завышено ЧСВ и полное ФГМ.


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены