Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Слабые указатели https://zx.oberon.org/forum/viewtopic.php?f=46&t=356 |
Страница 1 из 4 |
Автор: | budden [ 23 янв 2018, 18:23 ] |
Заголовок сообщения: | Слабые указатели |
Если у кого-то есть вопросы о применениях слабых указателей, то вот обсуждение в группе разработки Golang. https://groups.google.com/forum/#!topic ... YWxjT2v6ps |
Автор: | prospero78su [ 23 янв 2018, 19:07 ] |
Заголовок сообщения: | Re: Слабые указатели |
Почему бы не воспользоваться википедией?)) Идея слабой ссылки мне не нравится. Много проблем было из-за этого у питона со связкой Gtk. Pidgin периодически падал с диким грохотом несколько лет. С другого конца мне это чем-то напоминает поведение Си: его не просили, а он сам молча приводит типы. Если опираться на приводимый механизм -- то подсчёт, имхо, проще в реализации и дешевле стоит. Чем сборщик будет лазить по софтине в попытках выяснить на предмет использования -- куда как проще посмотреть на число с обозначением количества ссылок на текущий объект. Ну, и использование слабых ссылок в коллекциях мне совсем непонятно. Если объект есть -- то он есть. Если его нет -- то его просто нет в коллекции. Постоянно мониторить члены коллекции на NULL можно, но зачем, если штаны выглядят одинаково? |
Автор: | budden [ 23 янв 2018, 20:15 ] |
Заголовок сообщения: | Re: Слабые указатели |
один вариант использования - здесь: https://groups.google.com/d/msg/golang- ... 1NNFlHQ1oJ Цитата: I wrote a Java tool+package that keeps track of every object created while the program runs and asserts some preconditions whenever an object is accessed. Of course, memory would be extremely wasted if I kept them all in a map with strong references for the keys, so I instead used a WeakHashMap, allowing the garbage collector to clean things up in a typical fashion. Using explicit reference counting would've been painful for that. То, что там у Питона что-то не работало - это не обязательно проблемы самих слабых ссылок - это могут быть проблемы самого Питона. Вообще, нет ничего удивительного в нестабильной работе связки между С и языком с автоматическим управлением памятью, и для этого слабых ссылок не нужно - оно просто рождено, чтобы плохо работать ![]() В Java, C# и лиспах слабые ссылки работают. Про Golang - видимо, решили не включать. Проблемы (производительности, а не надёжности) обсуждаются в той же теме. |
Автор: | vlad [ 24 янв 2018, 05:06 ] |
Заголовок сообщения: | Re: Слабые указатели |
prospero78su писал(а): Почему бы не воспользоваться википедией?)) Идея слабой ссылки мне не нравится. Это не вопрос личных предпочтений, это вопрос эффективности решений ![]() Код: "OBERON"
Можно придумать кучу решений этой задачи без слабых ссылок, все они будут сложнее, чем приведенное решение. prospero78su писал(а): Много проблем было из-за этого у питона со связкой Gtk. Pidgin периодически падал с диким грохотом несколько лет. Это не проблема слабых ссылок как идеи... prospero78su писал(а): С другого конца мне это чем-то напоминает поведение Си: его не просили, а он сам молча приводит типы. Тебе везде Си мерещится ![]() prospero78su писал(а): Если опираться на приводимый механизм -- то подсчёт, имхо, проще в реализации и дешевле стоит. Известные мне реализации слабых ссылкок дополняют реализацию подсчета ссылок, каких-то особых дополнительных накладных расходов там не требуется, они даже включены в стандартную библиотеку С++11. Как поддержка слабых ссылок сказывается на ЯП с GC не скажу, не разбирался. |
Автор: | prospero78su [ 24 янв 2018, 08:15 ] |
Заголовок сообщения: | Re: Слабые указатели |
Цитата: Можно придумать кучу решений этой задачи без слабых ссылок, все они будут сложнее, чем приведенное решение. Да ладно. Проверка на NIL -- это эффективней?)) Если ты проверяешь на NIL -- значит ты не знаешь в каком состоянии находится система. Значит ты не можешь ею управлять, значит прощай надёжность)) Си тут как раз при том, что при неявном приведении ты уже не знаешь, не представляешь какого типа у тебя переменная. Неявное приведение не так страшно, как висячая ссылка, но тоже приятного мало. |
Автор: | vlad [ 24 янв 2018, 08:56 ] |
Заголовок сообщения: | Re: Слабые указатели |
prospero78su писал(а): Цитата: Можно придумать кучу решений этой задачи без слабых ссылок, все они будут сложнее, чем приведенное решение. Да ладно. Проверка на NIL -- это эффективней?)) Покажи твой код. Под "эффективным решением" я конечно имел ввиду сумму факторов: читабельность + такты CPU + архитектура. prospero78su писал(а): Если ты проверяешь на NIL -- значит ты не знаешь в каком состоянии находится система. Значит ты не можешь ею управлять, значит прощай надёжность)) Это утверждение ошибочно настолько же, насколько расплывчато. prospero78su писал(а): Си тут как раз при том, что при неявном приведении ты уже не знаешь, не представляешь какого типа у тебя переменная. Неявное приведение не так страшно, как висячая ссылка, но тоже приятного мало. Какие приведения? Какие висячие ссылки? Мы вообще говорим про слабые указатели, которых в Си нет в принципе. Ближайший к Си язык со слабыми указателями это С++, в котором с типами все предельно строго. |
Автор: | prospero78su [ 24 янв 2018, 12:16 ] |
Заголовок сообщения: | Re: Слабые указатели |
Цитата: Покажи твой код. Под "эффективным решением" я конечно имел ввиду сумму факторов: читабельность + такты CPU + архитектура. Ты забыл самый главный фактор -- человека. Код я тебе не покажу, по причине того, что у меня не возникало необходимости в слабых ссылках, да и зачем они мне нужны, если есть строго типизированные?)) По крайней мере, многочисленные Цитата: Какие приведения? Какие висячие ссылки? Мы вообще говорим про слабые указатели, которых в Си нет в принципе. Ближайший к Си язык со слабыми указателями это С++, в котором с типами все предельно строго. Т.е. сборщиков мусора для Си нет, я правильно понимаю?)) 61 млн. результатов, на минуточку |
Автор: | vlad [ 24 янв 2018, 21:00 ] |
Заголовок сообщения: | Re: Слабые указатели |
prospero78su писал(а): Код я тебе не покажу, по причине того, что у меня не возникало необходимости в слабых ссылках, да и зачем они мне нужны, если есть строго типизированные?)) Код я тебе уже привел. Даже специально на обероне (но с выдуманным WEAK POINTER TO). Логика тебе понятна из этого кода или надо еще по-русски расписать? Напиши свою реализацию такой же логики без использования WEAK POINTER TO и мы обсудим эффективность твоего решения. prospero78su писал(а): По крайней мере, многочисленные Ох. Причем здесь ассерты? Утечки памяти (которые помогают разрулить слабые указатели) тебе ассерты помогут поймать? Или кто-то призывал отказаться от ассертов? prospero78su писал(а): Цитата: Какие приведения? Какие висячие ссылки? Мы вообще говорим про слабые указатели, которых в Си нет в принципе. Ближайший к Си язык со слабыми указателями это С++, в котором с типами все предельно строго. Т.е. сборщиков мусора для Си нет, я правильно понимаю?)) Неправильно. Причем здесь GC? Слабые указатели, как концепция, ортогональны наличию GC. Они работают как с GC (в джаве и т.п.) так и с подсчетом ссылок (в стандартной библиотеке С++). |
Автор: | budden [ 25 янв 2018, 22:34 ] |
Заголовок сообщения: | Re: Слабые указатели |
Самый ржач состоит в том, что я полез смотреть, что есть в сборщике мусора ББ и нашёл там финалайзеры (просто ищите слово Finalizer в модуле Kernel). Они нужны для COM. Обычно финалайзеры и слабые ссылки в пачке идут, хотя я не уверен, что одно выражается через другое. |
Автор: | vlad [ 25 янв 2018, 23:26 ] |
Заголовок сообщения: | Re: Слабые указатели |
budden писал(а): Самый ржач состоит в том, что я полез смотреть, что есть в сборщике мусора ББ и нашёл там финалайзеры (просто ищите слово Finalizer в модуле Kernel). Они нужны для COM. Обычно финалайзеры и слабые ссылки в пачке идут, хотя я не уверен, что одно выражается через другое. Финалайзеры идут в комплекте с GC. Не очень понял, что тебя так удивило. |
Страница 1 из 4 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |