Notice: file_put_contents(): Write of 17952 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50
Алло, это отладочная?@gdb_dbg P.34
GDB_DBG Telegram 34
Люблю запах финализаторов по утрам! (часть 4, заключительная)

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

1) Финализация зачастую неотрывно связана с интеропом с unmanaged языками. По моему опыту главный клиент финализации - человек, который хочет почистить нативные ресурсы, это описывает прям большинство юзкейсов. А managed и unmanaged языки - это миры принципиально разного устройства: понятие времени жизни объектов, детерминированность исполнения и ее отсутствие, концепция владения ресурсами, все это может очень сильно отличаться. Когда вы пишите финализатор, вы зачастую начинаете эти миры смешивать, случается сопряжение сфер, отсюда и лезут всякие черти.

2) Финализация - это попытка вмешаться в работу GC, т.е. фича языка, заведомо тесно связанная с реализацией. И как бы не хотелось от реализации абстрагироваться, в этом случае реальность будет больно бить пользователя этой фичи по голове.

Как видите, разные рантаймы стараются решить проблему финализации, но все они имеют свои недостатки. Я видел еще несколько вариантов механизмов финализации в других языках, включая запретительные (когда в финализаторах почти ничего нельзя делать), но все они были не лишены изъянов, а точнее все так же создавали кошмарные ситуации и интересные баги. Мои фавориты на данный момент - это C# (SafeHandle - круто!) и, на удивление, Python с weakrefs.finilze(...).

Если вы знаете managed язык, где проблема финализации полностью решена, напишите, пожалуйста, в комментарии, как именно там это было достигнуто, это действительно очень интересно!
👍8💯3🥴1



tgoop.com/gdb_dbg/34
Create:
Last Update:

Люблю запах финализаторов по утрам! (часть 4, заключительная)

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

1) Финализация зачастую неотрывно связана с интеропом с unmanaged языками. По моему опыту главный клиент финализации - человек, который хочет почистить нативные ресурсы, это описывает прям большинство юзкейсов. А managed и unmanaged языки - это миры принципиально разного устройства: понятие времени жизни объектов, детерминированность исполнения и ее отсутствие, концепция владения ресурсами, все это может очень сильно отличаться. Когда вы пишите финализатор, вы зачастую начинаете эти миры смешивать, случается сопряжение сфер, отсюда и лезут всякие черти.

2) Финализация - это попытка вмешаться в работу GC, т.е. фича языка, заведомо тесно связанная с реализацией. И как бы не хотелось от реализации абстрагироваться, в этом случае реальность будет больно бить пользователя этой фичи по голове.

Как видите, разные рантаймы стараются решить проблему финализации, но все они имеют свои недостатки. Я видел еще несколько вариантов механизмов финализации в других языках, включая запретительные (когда в финализаторах почти ничего нельзя делать), но все они были не лишены изъянов, а точнее все так же создавали кошмарные ситуации и интересные баги. Мои фавориты на данный момент - это C# (SafeHandle - круто!) и, на удивление, Python с weakrefs.finilze(...).

Если вы знаете managed язык, где проблема финализации полностью решена, напишите, пожалуйста, в комментарии, как именно там это было достигнуто, это действительно очень интересно!

BY Алло, это отладочная?


Share with your friend now:
tgoop.com/gdb_dbg/34

View MORE
Open in Telegram


Telegram News

Date: |

While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc. Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week. Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. Click “Save” ; Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel.
from us


Telegram Алло, это отладочная?
FROM American