|
|
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
GunSmoker Это примерно как если бы вы работали с "лапшой на GOTO" и написали "Доводы против оператора GOTO". Просто когда другие читают такие опусы, они не вполне понимают, про что говорит автор, потому что никогда не видели подобного кода - ну и понимают сказанное слишком буквально ("удалите вообще это из языка"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2020, 22:55 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
bk0010, Ну goto это while и for и всё остальное. А рекорды это и есть массивы, после компиляции не найдёшь отличий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2020, 23:28 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный bk0010, Ну goto это while и for и всё остальное. А рекорды это и есть массивы, после компиляции не найдёшь отличий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 00:10 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Вообще у всего есть семантика и контракт. Кому это не важно, для того эти три варианта одинаковы. Кому важно, заботится о читаемости и логичности кода, для того эти три варианта существенно разные. Если это важно, никто не мешает делать Код: pascal 1. 2. 3. Можно даже до D F N сократить, а то кто-то ещё аргумент приводит "Free печатать быстрее". P.S. Я, может, сильно необъективно смотрю, у меня проф предпосылки: как техподдержке трейсера исключений - часто приходится отлаживать за клиента. Просто иногда действительно прямо уе**ть хочется тому, кто FreeAndNil не поставил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 00:56 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 01:00 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Проблема, которая находится за секунды, если бы кто-то сильно умный использовал бы FreeAndNil, превращается в многочасовой марафон за багами. P.S. Также ещё пару раз встречал ситуацию, когда надо дополнить сторонний код, но это сделать невозможно, потому что, опять же, не обнулили поля объекта. Приходится городить монстров по проверке валидности указателя. Хотя тут, конечно, не так однозначно, ибо всегда можно сказать, что подобное расширение автором кода не предусматривалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 01:10 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Даже в таком маленьком проекте 3D движка, сделали обнуление полей https://github.com/seriva/GenesisDevice-2010/blob/63c93cf169a85f5327d36b5e4497811edb60544c/Source/Engine/General/Base.pas#L112 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 01:20 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
GunSmoker Хотя тут, конечно, не так однозначно, ибо всегда можно сказать, что подобное расширение автором кода не предусматривалось. Это как раз про то, что я выше назвал "хороший вопрос для собеседования". Более-менее опытный программист знает, что удачный проект живёт своей жизнью и за исключением отдельных узких стабильных случаев "предусматривать" его развитие скорее вредно - всё равно оно пойдёт существенно не так. Если разумная доработка требует несоразмерно больших затрат из-за того, что "автором не предусматривалось" - значит, код плохой. С Destroy это связано следующим образом. Если соискатель говорит "использую Destroy, потому что здесь никогда не будет nil", следует выяснить, насколько это "никогда" выдержит проверку будущими непредсказуемыми доработками. И если где-нибудь прозвучит "Ну программист же должен был проверить все места, где используется объект, и увидеть, что теперь надо заменить Destroy на Free" - выше мида ему точно делать нечего. GunSmoker Я, может, сильно необъективно смотрю, у меня проф предпосылки: как техподдержке трейсера исключений - часто приходится отлаживать за клиента. Просто иногда действительно прямо уе**ть хочется тому, кто FreeAndNil не поставил Почему же необъективно? Наоборот. Помнится, единственным минусом FreeAndNil называли её потенциальную опасность при вызове с левыми аргументами. Вот и скажите, кого Вам больше хочется воспитать: "тех, кто не поставил FreeAndNil и создал проблему" или "тех, кто поставил FreeAndNil и создал проблему". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 15:05 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
А почему бы в Destroy или Free не вставить об'nil'ение объекта? Я понимаю, что это как будто отпилили сук, на котором сидели... но "магия компилятора" и всё такое... Ведь если уничтожить объект не занилив его - можно тоже получить потом в лоб. Я про то, чтобы при компелиции это было так по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 15:45 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Sergey1979 А почему бы в Destroy или Free не вставить об'nil'ение объекта? Я понимаю, что это как будто отпилили сук, на котором сидели... но "магия компилятора" и всё такое... Вставьте. Возьмите тот же Free Pascal с открытыми исходниками и добавьте в него такую функциональность. И когда она заработает, причём во всех режимах, включая, например, Код: pascal 1. 2. 3. задайтесь вопросом: а нафига было так делать то, что куда лучше и без всякой магии решается одной за две минуты написанной процедурой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 15:50 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Но ведь Free проверяет объект на nil. Если я ничего не путаю. Да, с запретом - я немного не так выразил свою мысль. Хорошо. Я Вас понял и вопросов больше нет. Написать где нужно FreeAndNil не проблема... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 15:53 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Sergey1979, запретите. Сугубо ради любопытства и пополнения статистики хотелось бы спросить - какое у Вас образование? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 15:57 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
И всё-таки Вы написали глупость - СЕЙЧАС, по ряду причин, уже НЕЛЬЗЯ менять поведение по-умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 17:13 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
softwarer Помнится, единственным минусом FreeAndNil называли её потенциальную опасность при вызове с левыми аргументами. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. И никакой опасности что, кто - то попытается int\string\... Освободить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 18:16 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный, в этом коде на каждое освобождение объекта - минимум один вызов в ядро, а то и больше. Вызов ядра - это очень медленно. Такой код просто так применять нельзя. Гораздо лучше - как в начале топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 18:36 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
GunSmoker, Мы же не собираемся 1000 раз вызывать в секунду. Нормально! И безопасно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 21:12 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
GunSmoker, Кстати, было бы не плохо, что бы хранились созданные объекты в каком нибудь списке. Что бы имелась возможность просмотреть и проверить на данный момент, валидные адреса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 21:18 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Такой список рискует стать очень узким местом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 21:22 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный Нормально! И безопасно! Хрень. Проверка должна быть на этапе компиляции. Этот код ничем не поможет, если он не вызовется. Например - где нибудь в редкой except части. Точно так-же гикнется в продакшене, что мы имеем и без этих хлопот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2020, 21:43 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный GunSmoker, Кстати, было бы не плохо, что бы хранились созданные объекты в каком нибудь списке. Что бы имелась возможность просмотреть и проверить на данный момент, валидные адреса Вот многопоточные приложения-то охренеют... И, кстати, FastMM вроде память выделяет блоками и у них есть данные блока в начале (как у дин. массивов), можно покопаться если делать нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2020, 00:37 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
alekcvp, Есть же threadvar и к тому же, если не использовать TList а обычный Arr[Pointer mod SizeArr] с пометкой ключа в true\false то это не так уж и медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2020, 01:11 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
Что только на свечку не натянут ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2020, 11:00 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный, что бы получить vmt нужно прочитать то на что ссылается "указатель", т.е. прочитать непонятно что И скрытие проблемы это гораздо хуже, нужно сразу ексепшн давать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2020, 20:35 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Причём тут VMT ? Он не нужен. При create записывается индекс в массив о том, что такой адрес создан. И при destructor обнуляется. В PHP такие индексные массивы только в путь и используются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2020, 20:59 |
|
||
|
Улучшил FreeAndNil. Можете не благодарить.
|
|||
|---|---|---|---|
|
#18+
А мне вот стало интересно, а что быстрее. Массивы в PHP или массивы в Delphi.. На досуге проверю. Разумеется с чистым общением ZendAPI без интерпретатора. Дабы знать на сколько поссосанная система в Delphi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2020, 21:33 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39955597&tid=2038337]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 293ms |

| 0 / 0 |
