powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / делфинист предлагает сборку мусора
25 сообщений из 78, страница 2 из 4
делфинист предлагает сборку мусора
    #37871360
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. в понедельник с утра этот код не поддается осмыслению ))
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37871363
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873114
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Rusov, от первого варианта по сути не отличается. Однако, у меня есть разные дополнительные вещи, например, bindingVariable (связывает переменную в области видимости fr), finallyDoo( выполнить функцию с аргументом Tobject при закрытии fr).

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

Есть минимальная защита от того, что мы попытаемся написать onStack без создания объекта.

x := F.Add(TExampleObject.Create);
- это вроде не прокатит, придётся писать
x := F.Add(TExampleObject.Create) as TExampleObject;
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873146
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose, в JCL по сути, то же самое, что и у меня, только у меня применение лаконичнее, поэтому буду и дальше пользоваться своим.

В любом случае, будет хорошо, если народ начнёт пользоваться подобными вещами, в этом случае намного удобнее писать и читать.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873168
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд, вообще-то идея разместить объекты на стеке ясно не нова.
Я не пользуюсь дженериками, в моей версии Delphi их попросту нет.
Кроме того, мой код в использовании намного лаконичнее и мне не нужны лишние
типы. Видимо, можно и код по Вашей ссылке сделать настолько же лаконичным.

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

Я пользуюсь и нахожу удобным. Если сравнивать Delphi и С++, возможность
совершать действия по факту выхода из функции без написания конструкции
try.., а лишь за счёт создания объекта-сторожа на стеке даёт С++ гигантское
преимущество в выразительности и надёжности. Мне удалось перенести эти
возможности в Delphi, чему я весьма рад.

Если говорить о лиспе, то там вовсю применяются конструкции типа with-open-file,
которые ещё намного мощнее. Без нормального препроцессора их не получится
реализовать в Delphi, но хотя бы не занимать для сторожа имя переменной вполне получается.
Т.е., я могу просто написать

withUpdateTransaction; // и транзакция будет закрыта при выходе из функции

мне не нужно придумывать под это имя переменной.

В моём текущем проекте onStack встречается
362 раза, finallyDo - 20 раз, bindingVariable - 26 раз, разного рода конструкции
with, построенные на том же механизме (кстати, для этого требуется, чтобы была
threadvar для хранения текущего "кадра стека") - примерно 100 раз. Среди
конструкций with есть такие:

withDefaultTransaction
withUpdateTransaction
withMessages
withMutex
withSavedForegroundWindow

Это к ответу на замечание про профит, который кто-то задал.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873181
Фотография Maxim Rusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenx := F.Add(TExampleObject.Create);
- это вроде не прокатит, придётся писать
x := F.Add(TExampleObject.Create) as TExampleObject;

Прокатит, если объявить:

function Add(AObject: TObject) :Pointer;
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873187
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddendebose, в JCL по сути, то же самое, что и у меня, только у меня применение лаконичнее, поэтому буду и дальше пользоваться своим.

В любом случае, будет хорошо, если народ начнёт пользоваться подобными вещами, в этом случае намного удобнее писать и читать. Вот что-то не заметил ни какого удобства. А изобретать велосипед ради экономии пары строчек, как-то не тянет.
Кроме того, с try finally любому нормальному программеру всё ясно и очевидно, кусок можно скопипастить из одного проекта (примера кода) в другой, а тут въезжай еще что это за методы вызываются где их реализация закопана и т.п.
Т.е. нужны какие-то очень веские основания, которых не заметно.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873189
Фотография Maxim Rusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenЯ пользуюсь и нахожу удобным. Если сравнивать Delphi и С++, возможность
совершать действия по факту выхода из функции без написания конструкции
try.., а лишь за счёт создания объекта-сторожа на стеке даёт С++ гигантское
преимущество в выразительности и надёжности.
...и огромный проигрыш в производительности.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873241
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Rusovогромный проигрыш в производительности

кроме доисторического bcc с его унылым кодогеном есть и "более оптимальные" плюсовые компайлеры, к-е умело заинлайнив все что можно минимизируют проигрыш
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873245
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
function nodOnStack(nd:nod):nod; begin onStack(nd); result:=nd; end;


И мы можем составлять выражения из объектов, размещённых на стеке.

Код: pascal
1.
2.
3.
4.
var fr:stackFr;
begin fr:=mkStackFr;
nodOnStack(nod.create).print;
end; 


т.е., объекты могут быть анонимными. Здесь print - это метод класса nod. Если Вы сделаете
onStack указателем, то нельзя будет вызвать print без явного приведения типа (с отсутствием
статической проверки), а если Вы сделаете как Вы предлагаете x.add, то функция nodOnStack
будет принимать лишний параметр - сам объект-хранитель.

У меня объект-хранитель неявен (определяется текущим тредом), поэтому сама
конструкция onStack имеет один параметр, можно написать функцию nodOnStack
с одним параметром и функцию with... с нулём параметров.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873346
Фотография Maxim Rusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden> ...и огромный проигрыш в производительности.
Вы о чём? С++ вообще-то производит весьма быстрый код, а выделение объектов на стеке - быстрее, чем в куче.
Я про Ваш подход vs try-finally, а не про C++. Вы выделяете объекты в куче + добавляете дополнительный оверхеад при работе со списками и интерфейсами. На стеке, возможно, и быстрее - но то, что Вы предлагаете это и близко не лежало.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873354
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Rusov, я ответил про Python. Когда питонистов спрашивают "что вы делаете, когда ваша программа тормозит слишком сильно", они говорят "мы переписываем это на С". Соответственно, в нашем случае можно переписать на try..finally. Но даже если этого не делать, будет всё равно на порядок быстрее, чем на питоне.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873392
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenКогда питонистов спрашивают "что вы делаете, когда ваша программа тормозит слишком сильно", они говорят "мы переписываем это на С"
hiphop туда же
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873434
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan,
не понял, что Вы имеете в виду, но они переписывают на С не всю программу, а только узкие места по производительности. Я сам не сторонник Python, однако, тот факт, что Delphi тихонько умирает, а Python идёт в гору, я не взялся бы оспаривать.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873436
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соответственно, как человек, не желающий ни в какой перспективе переходить ни на Python, ни на С++, предпочитаю взять из других языков то, что можно, и использовать это в Delphi.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873440
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenне понял, что Вы имеете в виду
почитай про "facebook php c++ hiphop"
а рулит у них александреску, если ты в плюсах ориентируешься тож не пустой звук должен быть
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37873854
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan,
нда, была у меня пара лет назад идея сделать компилятор PHP в нативный код. Хм, может ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятно.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37874321
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenбыла у меня пара лет назад идея сделать компилятор PHP в нативный код
"все уже украдено до нас" (С)
buddenможет ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятноалександреску нервно закурил
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37874331
Иванов Александр Александрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavanbuddenбыла у меня пара лет назад идея сделать компилятор PHP в нативный код
"все уже украдено до нас" (С)
buddenможет ещё не поздно вступить в эту гонку? Ненавижу С++, уделать их было бы весьма приятноалександреску нервно закурил
+1
Вот уделает их, вообще ЧСВ зашкалит, будет деньги не за стажировку брать, а за чтение его мыслей на форуме.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37874662
Фотография roschinspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden... предпочитаю взять из других языков то, что можно, и использовать это в Delphi. А не пробовали из нескольких блюд взять всё самое вкусное и смешать? С бутерброда икру, из супа кусок мяса, из мартини вишенку, с торта кремовую розочку...
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37876319
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иванов Александр Александрович,

У меня ЧСВ адекватно достижениям. А Вы, милочек - баран (извините). Потому что, вместо того, чтобы попытаться понять код или, допустим, написать консольный проект из 10 строк и запустить его, Вы просмотрели код в блокноте (sic!) и после этого на форуме (на весь интернет!) стали сомневаться в работоспособности кода.

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

С Вас нужно только брать деньги и никак иначе - это побудит Вас внимательнее читать исходники и пользоваться для этого адекватными средствами. Хотя... потраченное на Вас время Вы отработали, указав на проблему с исключениями, за что Вам объявляется ещё и благодарность с занесением в исходник.

Чтобы впредь больше никто не смотрел проект в блокноте, а имел возможность его запустить и убедиться в том, что всё работает, прилагается тестовый проект.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37876336
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden,тьфу,ошибся в комментах. Всё переделал.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37876342
budden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
budden, и ещё одна правка, пожалуй, не помешает.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37876665
Иванов Александр Александрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buddenИванов Александр Александрович,

У меня ЧСВ адекватно достижениям. А Вы, милочек - баран (извините). Потому что, вместо того, чтобы попытаться понять код или, допустим, написать консольный проект из 10 строк и запустить его, Вы просмотрели код в блокноте (sic!) и после этого на форуме (на весь интернет!) стали сомневаться в работоспособности кода.

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

С Вас нужно только брать деньги и никак иначе - это побудит Вас внимательнее читать исходники и пользоваться для этого адекватными средствами. Хотя... потраченное на Вас время Вы отработали, указав на проблему с исключениями, за что Вам объявляется ещё и благодарность с занесением в исходник.

Чтобы впредь больше никто не смотрел проект в блокноте, а имел возможность его запустить и убедиться в том, что всё работает, прилагается тестовый проект.
На Вы и баран - вместе не совмещаются.
Я спросил как работает, ответ - думайте сами. Еще деньги брать за стажировку. Это все говорит о безкрайнем ЧСВ, и только. Одна фраза - "используются интерфейсы" решила бы проблемы. Но нет, надо строить из своего решения какую-то невероятно полезную вещь(коей она не является) и заставлять копошится в говномодуле. Ну не знаю, я бы перед демонстрацией на весь интернет!! :), если очень хочется чтобы твой код смотрели, хоть модуль в порядок привел бы.
З.Ы. Заставлять придумывать нестандартные решения там, где есть стандартные, на собеседовании - простой способ никого не нанять.
...
Рейтинг: 0 / 0
делфинист предлагает сборку мусора
    #37876679
Иванов Александр Александрович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-мне интересно, вы писали что взяли кого-то. Он что, написал подобное решение на собеседовании? Только честно.
...
Рейтинг: 0 / 0
25 сообщений из 78, страница 2 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / делфинист предлагает сборку мусора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]