LINUX.ORG.RU

Как у Rust с рефлекшном?

 ,


0

4

Есть аналоги Annotation из Java? Можно в рантайме получать данные о полях структуры, искать и запускать методы по имени, получать список структур, интерфейсов в пакете (неймспейсе)?

★★★★★

Ответ на: комментарий от Manhunt

А double free, например, имеет

Если ты используешь GC в C, то ты и не такое сможешь сделать=)

GC избавляет кодера от необходимости самостоятельно реализовывать логику управления памятью.

Скорее не избавляет, а позволяет обходиться без. Если ты используешь сборщик в C, то никто тебе не мешает управлять и вручную какими-то другими участками памяти.

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

anonymous
()
Ответ на: комментарий от DarkEld3r

Понял не до конца. rust, как я понимаю, просто предоставляет аналоги unique_ptr/shared_ptr(кстати, аналог weak_ptr есть?) + контроль работы со ссылками на этапе компиляции. Это так же ортогонально GC. Он вполне мог бы быть в Rust, лучше всего опционально.

anonymous
()

из треда повалил дым

thesame ★★★★
()
Ответ на: комментарий от anonymous

кстати, аналог weak_ptr есть?

Да.

...GC. Он вполне мог бы быть в Rust, лучше всего опционально.

И будет. Именно опционально.

DarkEld3r ★★★★★
()
Ответ на: комментарий от Manhunt

Потому что Rust гарантирует memory safety, не прибегая для этого к gc.

Ты выше сообщения читал? GC - это просто (еще один) механизм управления памятью. Memory safity и GC ортогональные вещи.

anonymous
()
Ответ на: комментарий от anonymous

Они не настолько ортогональны, насколько тебе хочется считать. Давай составим список языков общего назначения, где компилятор формально верифицирует программу на предмет memory safety, и при этом сборка мусора не является обязательной.

Я начну:
1. Rust
2. ??? продолжай

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)
Ответ на: комментарий от Manhunt

Потому что Rust гарантирует memory safety, не прибегая для этого к gc.

А зачем для memory safety прибегать к GC? Тем более, что он никакой memory safety не гарантирует(если я использую Boehm GC в C, мой код сразу станет memory safety?).

anonymous
()
Ответ на: комментарий от Manhunt

Давай составим список языков общего назначения, где компилятор формально верифицирует программу на предмет memory safety, и при этом сборка мусора не является обязательной.

Для начала, давай составим список языков общего назначения, где компилятор формально верифицирует программу на предмет memory safety.

Я начну:

1. Rust 2. ???продолжай

Далее из этого списка попробуем найти языки с обязательным GC... Хм. В Rust его нет...

anonymous
()
Ответ на: комментарий от anonymous

он никакой memory safety не гарантирует

Однако он лежит в фундаменте почти всех языков, гарантирующих memory-safety.

Manhunt ★★★★★
()
Ответ на: комментарий от anonymous

А зачем для memory safety прибегать к GC? Тем более, что он никакой memory safety не гарантирует(если я использую Boehm GC в C, мой код сразу станет memory safety?).

Ты хотел сказать, что некоторые GC, например, Boehm GC, не гарантирует memory safety?

tailgunner ★★★★★
()
Ответ на: комментарий от Manhunt

Однако он лежит в фундаменте почти всех языков, гарантирующих memory-safety.

Но так же он есть в modula2, где две кучи, он доступен в Си через библиотеки в духе boehm gc. И там нет memory-safety. С другой стороны, GC нет в Rust, который memory-safety гарантирует.

anonymous
()
Ответ на: комментарий от tailgunner

Ты хотел сказать, что некоторые GC, например, Boehm GC, не гарантирует memory safety?

Я хотел сказать, что никакой GC не гарантирует memory safety, т.к. это забота не GC, а языка программирования. GC мусор собирает.

anonymous
()
Ответ на: комментарий от anonymous

Я хотел сказать, что никакой GC не гарантирует memory safety, т.к. это забота не GC, а языка программирования

Да, Капитан. Но интересно было бы увидеть список языков, гарантирующих memory safety, и при этом не использующих GC. Кроме Rust, конечно.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от anonymous

Для начала, давай составим список языков общего назначения, где компилятор формально верифицирует программу на предмет memory safety.
Я начну:
1. Rust 2. ???продолжай

Продолжаю:
2. java
3. c# / .net
4. go
5. python

Хватит пока?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Хватит пока?

Врать? Действительно хватит. Ни один из тобой перечисленных языков формально не верифицирует программу на предмет memory safety

anonymous
()
Ответ на: комментарий от Manhunt

Кстати, Go не гарантирует memory safety в смысле Rust - возможен несинхронизированный доступ к памяти из разных нитей (думаю, все остальные - тоже).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Кроме Rust, конечно.

А почему кроме него? Он вполне иллюстрирует то, что я говорю. Так исторически сложилось, что языки без гарантии memory safety не используют GC. И, наоборот, языки с memory safety используют так же и GC. Да, если мы используем GC(и только его), то у нас задача обеспечения memory safety в языке упрощается, не спорю. Но тут еще требуется обязать использовать GC и не разрешать другие механизмы. Сам же по себе GC ничего не гарантирует.

anonymous
()
Ответ на: комментарий от anonymous

А почему кроме него?

Потому что он появился в 2015 и о нем мы уже знаем.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

В смысле как всегда обосрался и потопил топик в говне?

anonymous
()
Ответ на: комментарий от anonymous

как я понимаю, просто предоставляет аналоги unique_ptr/shared_ptr(кстати, аналог weak_ptr есть?) + контроль работы со ссылками на этапе компиляции.

Да.
Аналог weak тоже есть.

Aswed ★★★★★
()
Ответ на: комментарий от anonymous

Тем более непонятно, почему ты тогда противопоставил GC и механизмы Rust

Попробую обьяснить: ГЦ позволяет уделять (гораздо) меньше внимания управлением памятью и заодно избавляет от традиционных ошибок ручного управления. Да, ты можешь сказать, что и у ГЦ есть свои проблемы и выстрелить в ногу можно, не спорю. Сказать хотел только то, что раст тоже избавляет от ошибок типа двойного освобождения и т.д. Разумеется, выстрелить в ногу можно и тут.

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

Но тут еще требуется обязать использовать GC и не разрешать другие механизмы.

Обойти гарантии раста тоже можно, но это не значит, что их нет.

DarkEld3r ★★★★★
()
Ответ на: комментарий от ambiguousnick

Ололо. Уеб-макака имеет наглость иметь мнение. Цирк!!!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.