|
|
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
P.S. в понедельник с утра этот код не поддается осмыслению )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 11:44 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
боян, было на дженериках http://blog.barrkel.com/2008/09/smart-pointers-in-delphi.html http://www.delphiplus.org/articles/delphi/smart_pointers_in_object_pascal/index.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 11:46 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov, от первого варианта по сути не отличается. Однако, у меня есть разные дополнительные вещи, например, bindingVariable (связывает переменную в области видимости fr), finallyDoo( выполнить функцию с аргументом Tobject при закрытии fr). Все "кадры стека" данного треда связаны между собой, так что можно получить какую-то информацию о вышележащих кадрах. Правда, я этим не пользуюсь и быстро про это забыл. Есть минимальная защита от того, что мы попытаемся написать onStack без создания объекта. x := F.Add(TExampleObject.Create); - это вроде не прокатит, придётся писать x := F.Add(TExampleObject.Create) as TExampleObject; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:24 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
debose, в JCL по сути, то же самое, что и у меня, только у меня применение лаконичнее, поэтому буду и дальше пользоваться своим. В любом случае, будет хорошо, если народ начнёт пользоваться подобными вещами, в этом случае намного удобнее писать и читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:36 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Квейд, вообще-то идея разместить объекты на стеке ясно не нова. Я не пользуюсь дженериками, в моей версии Delphi их попросту нет. Кроме того, мой код в использовании намного лаконичнее и мне не нужны лишние типы. Видимо, можно и код по Вашей ссылке сделать настолько же лаконичным. Но вопрос не в том, есть этот код или нет, а пользуются этим подходом или нет. Я пользуюсь и нахожу удобным. Если сравнивать Delphi и С++, возможность совершать действия по факту выхода из функции без написания конструкции try.., а лишь за счёт создания объекта-сторожа на стеке даёт С++ гигантское преимущество в выразительности и надёжности. Мне удалось перенести эти возможности в Delphi, чему я весьма рад. Если говорить о лиспе, то там вовсю применяются конструкции типа with-open-file, которые ещё намного мощнее. Без нормального препроцессора их не получится реализовать в Delphi, но хотя бы не занимать для сторожа имя переменной вполне получается. Т.е., я могу просто написать withUpdateTransaction; // и транзакция будет закрыта при выходе из функции мне не нужно придумывать под это имя переменной. В моём текущем проекте onStack встречается 362 раза, finallyDo - 20 раз, bindingVariable - 26 раз, разного рода конструкции with, построенные на том же механизме (кстати, для этого требуется, чтобы была threadvar для хранения текущего "кадра стека") - примерно 100 раз. Среди конструкций with есть такие: withDefaultTransaction withUpdateTransaction withMessages withMutex withSavedForegroundWindow Это к ответу на замечание про профит, который кто-то задал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:46 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenx := F.Add(TExampleObject.Create); - это вроде не прокатит, придётся писать x := F.Add(TExampleObject.Create) as TExampleObject; Прокатит, если объявить: function Add(AObject: TObject) :Pointer; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:50 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddendebose, в JCL по сути, то же самое, что и у меня, только у меня применение лаконичнее, поэтому буду и дальше пользоваться своим. В любом случае, будет хорошо, если народ начнёт пользоваться подобными вещами, в этом случае намного удобнее писать и читать. Вот что-то не заметил ни какого удобства. А изобретать велосипед ради экономии пары строчек, как-то не тянет. Кроме того, с try finally любому нормальному программеру всё ясно и очевидно, кусок можно скопипастить из одного проекта (примера кода) в другой, а тут въезжай еще что это за методы вызываются где их реализация закопана и т.п. Т.е. нужны какие-то очень веские основания, которых не заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:52 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenЯ пользуюсь и нахожу удобным. Если сравнивать Delphi и С++, возможность совершать действия по факту выхода из функции без написания конструкции try.., а лишь за счёт создания объекта-сторожа на стеке даёт С++ гигантское преимущество в выразительности и надёжности. ...и огромный проигрыш в производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:52 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusovогромный проигрыш в производительности кроме доисторического bcc с его унылым кодогеном есть и "более оптимальные" плюсовые компайлеры, к-е умело заинлайнив все что можно минимизируют проигрыш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:16 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov, > ...и огромный проигрыш в производительности. Вы о чём? С++ вообще-то производит весьма быстрый код, а выделение объектов на стеке - быстрее, чем в куче. Если Вы имеете в виду, что интерфейсы работают намного медленнее try..finally, то я на это Вам так отвечу: популярность Delphi падает, а популярность Python растёт. При этом Python работает примерно в 30-100 раз медленнее Delphi. Я думаю, компромиссные подходы, при которых снижается быстродействие (но всё равно остаётся быстрее Python), при этом сохраняется статическая проверка типов, способствуют продлению жизни Delphi больше, чем верность традиции написания пусть и быстрых, но слишком многословных "правильных" программ. > Прокатит, если объявить: > function Add(AObject: TObject) :Pointer; Это ещё хуже, т.к. отключает статическую проверку типов при создании объекта varOfSomeClass:=x.Add(TIncompatibleClass.Create); с непредсказуемыми последствиями. Кстати, у меня есть один класс nod, который я очень часто использую и для которого есть специальная версия выделения на стеке: Код: pascal 1. И мы можем составлять выражения из объектов, размещённых на стеке. Код: pascal 1. 2. 3. 4. т.е., объекты могут быть анонимными. Здесь print - это метод класса nod. Если Вы сделаете onStack указателем, то нельзя будет вызвать print без явного приведения типа (с отсутствием статической проверки), а если Вы сделаете как Вы предлагаете x.add, то функция nodOnStack будет принимать лишний параметр - сам объект-хранитель. У меня объект-хранитель неявен (определяется текущим тредом), поэтому сама конструкция onStack имеет один параметр, можно написать функцию nodOnStack с одним параметром и функцию with... с нулём параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:17 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden> ...и огромный проигрыш в производительности. Вы о чём? С++ вообще-то производит весьма быстрый код, а выделение объектов на стеке - быстрее, чем в куче. Я про Ваш подход vs try-finally, а не про C++. Вы выделяете объекты в куче + добавляете дополнительный оверхеад при работе со списками и интерфейсами. На стеке, возможно, и быстрее - но то, что Вы предлагаете это и близко не лежало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:18 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Maxim Rusov, я ответил про Python. Когда питонистов спрашивают "что вы делаете, когда ваша программа тормозит слишком сильно", они говорят "мы переписываем это на С". Соответственно, в нашем случае можно переписать на try..finally. Но даже если этого не делать, будет всё равно на порядок быстрее, чем на питоне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:22 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenКогда питонистов спрашивают "что вы делаете, когда ваша программа тормозит слишком сильно", они говорят "мы переписываем это на С" hiphop туда же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:41 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
vavan, не понял, что Вы имеете в виду, но они переписывают на С не всю программу, а только узкие места по производительности. Я сам не сторонник Python, однако, тот факт, что Delphi тихонько умирает, а Python идёт в гору, я не взялся бы оспаривать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:56 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Соответственно, как человек, не желающий ни в какой перспективе переходить ни на Python, ни на С++, предпочитаю взять из других языков то, что можно, и использовать это в Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:57 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenне понял, что Вы имеете в виду почитай про "facebook php c++ hiphop" а рулит у них александреску, если ты в плюсах ориентируешься тож не пустой звук должен быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:59 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
vavan, нда, была у меня пара лет назад идея сделать компилятор PHP в нативный код. Хм, может ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 19:58 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenбыла у меня пара лет назад идея сделать компилятор PHP в нативный код "все уже украдено до нас" (С) buddenможет ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятноалександреску нервно закурил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 09:51 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
vavanbuddenбыла у меня пара лет назад идея сделать компилятор PHP в нативный код "все уже украдено до нас" (С) buddenможет ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятноалександреску нервно закурил +1 Вот уделает их, вообще ЧСВ зашкалит, будет деньги не за стажировку брать, а за чтение его мыслей на форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 09:58 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden... предпочитаю взять из других языков то, что можно, и использовать это в Delphi. А не пробовали из нескольких блюд взять всё самое вкусное и смешать? С бутерброда икру, из супа кусок мяса, из мартини вишенку, с торта кремовую розочку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2012, 12:33 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
Иванов Александр Александрович, У меня ЧСВ адекватно достижениям. А Вы, милочек - баран (извините). Потому что, вместо того, чтобы попытаться понять код или, допустим, написать консольный проект из 10 строк и запустить его, Вы просмотрели код в блокноте (sic!) и после этого на форуме (на весь интернет!) стали сомневаться в работоспособности кода. Почему, Вы думаете, я должен был Вам отвечать в теме, где я искал сотрудников? Ведь это было своего рода тестовое задание на собеседовании, и Вы, кстати говоря, его не решили. Более того, Вы его не решили, даже когда Вам дали подсказку в виде работоспособного исходника. Вы думаете, мне больше нечем заняться, кроме как делать Вашу работу? С Вас нужно только брать деньги и никак иначе - это побудит Вас внимательнее читать исходники и пользоваться для этого адекватными средствами. Хотя... потраченное на Вас время Вы отработали, указав на проблему с исключениями, за что Вам объявляется ещё и благодарность с занесением в исходник. Чтобы впредь больше никто не смотрел проект в блокноте, а имел возможность его запустить и убедиться в том, что всё работает, прилагается тестовый проект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 12:16 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden,тьфу,ошибся в комментах. Всё переделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 12:23 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
budden, и ещё одна правка, пожалуй, не помешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 12:26 |
|
||
|
делфинист предлагает сборку мусора
|
|||
|---|---|---|---|
|
#18+
buddenИванов Александр Александрович, У меня ЧСВ адекватно достижениям. А Вы, милочек - баран (извините). Потому что, вместо того, чтобы попытаться понять код или, допустим, написать консольный проект из 10 строк и запустить его, Вы просмотрели код в блокноте (sic!) и после этого на форуме (на весь интернет!) стали сомневаться в работоспособности кода. Почему, Вы думаете, я должен был Вам отвечать в теме, где я искал сотрудников? Ведь это было своего рода тестовое задание на собеседовании, и Вы, кстати говоря, его не решили. Более того, Вы его не решили, даже когда Вам дали подсказку в виде работоспособного исходника. Вы думаете, мне больше нечем заняться, кроме как делать Вашу работу? С Вас нужно только брать деньги и никак иначе - это побудит Вас внимательнее читать исходники и пользоваться для этого адекватными средствами. Хотя... потраченное на Вас время Вы отработали, указав на проблему с исключениями, за что Вам объявляется ещё и благодарность с занесением в исходник. Чтобы впредь больше никто не смотрел проект в блокноте, а имел возможность его запустить и убедиться в том, что всё работает, прилагается тестовый проект. На Вы и баран - вместе не совмещаются. Я спросил как работает, ответ - думайте сами. Еще деньги брать за стажировку. Это все говорит о безкрайнем ЧСВ, и только. Одна фраза - "используются интерфейсы" решила бы проблемы. Но нет, надо строить из своего решения какую-то невероятно полезную вещь(коей она не является) и заставлять копошится в говномодуле. Ну не знаю, я бы перед демонстрацией на весь интернет!! :), если очень хочется чтобы твой код смотрели, хоть модуль в порядок привел бы. З.Ы. Заставлять придумывать нестандартные решения там, где есть стандартные, на собеседовании - простой способ никого не нанять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2012, 14:49 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=37873241&tid=2038816]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 373ms |

| 0 / 0 |
