LINUX.ORG.RU

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

 ,


0

4

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

★★★★★

Никак, смотри в сторону D.

anonymous
()

Никак. В конечный бинарник попадает только используемую часть пакетов. Так что всего кода пакета там не будет.

PS: могу ошибаться.

BeerSeller ★★★★
()

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

ambiguousnick
()

В бинарях есть метаданные, в рантайме - нет (естественно).

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

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

anonymous
()

Ненужно. Будет в Rust 7.0 или Rust21.

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

Ты хоть какой-нибудь софт написал? Нет. Если нет, херли ты не сидишь и молчишь в тряпочку?

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

существуют лишь в теории и наколенныйх поделках.

...или другими словами - за пределами твоего кругозора

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

Вообще то я *написал софт*. Я пишу вебприложения и для себя, и для клиентов. А ты со своими аргументами уровня *сперва добейся*, марш на горшок. Если есть что сказать, говори по существу.

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

Вообще то я *написал софт*. Я пишу вебприложения и для себя, и для клиентов.

Это не правда.

А ты со своими аргументами уровня *сперва добейся*, марш на горшок

Сперва доейся — вполне себе адекватный аргумент для тех, кто считает себя уровнем выше, чем является на самом деле.

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

я *написал софт*. Я пишу вебприложения

Бгг, какой же ты всё-таки дегенерат ))))

Если есть что сказать, говори по существу.

Ты не понимаешь предмета той ниши, в которую нацелен rust. Те высокоуровневые конструкции, которые силами компилятора нельзя реализовать zero-cost, на уровне языка тут не уместны.

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

Бгг, какой же ты всё-таки дегенерат ))))

Да существует расхожее мнение, что написание вебни — для макак. Однако, на деле, все с точностью до наоборот. Любая обезьяна способна вызубрить числодрочерство и наборы инструкций для компилятора. А, непосредственно, программирование начинается там, где нужно втыкать в асинхронность, ооп, event-driven и прочее. Как правило, тут как-раз всякие сишники обсираются. Динамика, одним словом. они ее не тянут.

нельзя реализовать zero-cost, на уровне языка тут не уместны.

Что такое zero-cost?

И как это противоречит с тем что я изначально утверждал? В расте есть рантайм модификация кода, или с чем ты споришь?

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

асинхронность, ооп, event-driven и прочее. Как правило, тут как-раз всякие сишники обсираются

Ты правда думаешь, что коду на Си не приходится иметь дело с асинхронностью и с event-driven? Что асинхронность рождается у тебя броузере? ))))

Что до true oop, это overhyped пережиток прошлого. Всё, что в ООП было полезного, выкристаллизовалось в принципы solid.

Что такое zero-cost?

«What you don’t use, you don’t pay for [Stroustrup, 1994]. And further: What you do use, you couldn’t hand code any better.»

И как это противоречит с тем что я изначально утверждал?

Слушай, а зачем мне что-то тебе растолковывать? Ты же тупое философствующее животное, мы все это знаем по прошлым тредам с твоим участием. Что толку метать перед тобой бисер?

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

Кстати, вот ведь умора. Ты приводишь цитаты дезигнера самой уродской пародии на язык программирования. Ну ладно, проехали.

Если отнестись к этому с долей серьезности. за кадром остается вопрос: а где грантии, что ты юзаешь именно то что надо? где гарантии, что твой подход оптимален? эффективен? Я не юзаю бульдозер на дачном участке, обхожусь только экскаватором и космической ракетой, ага.

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

Подход динамики в этом смысле — у меня будет все что мне понадобиться, но до тех пор пока оно не понадобиться оно не будет висеть в моей проге, и не создаст оверхеда. На деле, этот подход эффективней, не побоюсь этого слова, на 100%.

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

но до тех пор пока оно не понадобиться оно не будет висеть в моей проге, и не создаст оверхеда.

Как будто не в динамике это не так.

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

этот подход эффективней, не побоюсь этого слова, на 100%.

Ага, конечно.

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

Как будто не в динамике это не так.

не так. В статике, например, ты не можешь создать сабкласс тили суперкласс существующего класса в рантайме.

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

то одна из целей языка сделать безопасным программирование без GC

Это петросяство. Самый лучший способ оградить себя от пожара — никогда не использовать спички.

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

не так. В статике, например, ты не можешь создать сабкласс тили суперкласс существующего класса в рантайме.

Причём тут это? Я думал, что ты говоришь о том, что если любой из доступных инструментов НЕ использовать, то он и «создавать оверхед» не будет.

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

Это петросяство. Самый лучший способ оградить себя от пожара — никогда не использовать спички.

Ну если ты правда не понимаешь, что есть области, где GC пользы не приносит, то тебя не зря (тут) не любят.

Это уже не говоря о корявости аналогии. Цель GC - сделать безопасной работу с памятью. Цель раста в том же. То есть, в обоих случаях, имеем дело с «пожаром». И если ты не понимаешь, что у обоих подходов есть как преимущества так и недостатки, то это очень ограниченное восприятие.

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

Ну если ты правда не понимаешь, что есть области, где GC пользы не приносит

Нет, я как раз это понимаю. И более того, есть языки, в которых есть доступ к управлению GC. Я о том, что если уж ты взялся манипулировать памятью вручную, то делай это на сишке, например, по честному, а не ценой ограничений на уровне компилятора. Что, среднестатистический сишник не может запилить примитивный GC, или алгоритм подсчета ссылок, который будет запускаться тогда когда надо?

Но я в этом не селен, развивать эту тему не буду. Мб, я в чем то и ошибаюсь.

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

А вот нифига. Таки в common lisp «программы как данные» полностью поддерживаются, а не только в теории. Но вот насколько это необходимо - другой вопрос.

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

Любая обезьяна способна вызубрить готовый инструментарий javascript/php и складывать из него кубики. А, непосредственно, программирование начинается там, где нужно втыкать в алгоритмы руками.

Fixed That For You

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

то делай это на сишке, например, по честному, а не ценой ограничений на уровне компилятора

Но зачем делать руками то, что можно автоматизировать? Ради этого можно и «ограничения компилятора» потерпеть.

А насчёт «среднестатистического сишника» - над проектом, как правило, работает не один человек и уровень у них разный. Да и ошибки все делать могут.

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

А как тогда всякие rustc_serialize работают?

А нафига там рефлексия? Используемый тип известен на этапе компиляции.

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

Или так:

#![feature(custom_derive, plugin)]
#![plugin(serde_macros)]

extern crate serde;
extern crate serde_json;

#[derive(Serialize, Deserialize, Debug)]
struct Point {
    x: i32,
    y: i32,
}

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

Ну так если есть compile time рефлексия, то можно и runtime сделать поверх неё. Тем более, что compile time рефлексия она zero-cost.

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

Он же через аннотацию реализуется. Аналогичным образом можно сделать и кортеж с рефлексией потипу Qtшного moc'а.

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

Реализуется кортеж Encodable

кортеж

Вот и первые плоды тупых переводов на великий и могучий. Не кортеж, а трейт.

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

то одна из целей языка сделать безопасным программирование без GC

Безопасность и GC ортогональны.

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

Цель GC - сделать безопасной работу с памятью

Нет. Цель GC - это сборка мусора. В некоторых случаях наличие GC упрощает алгоритм анализа данных(некоторые задачи на графах, например, которые в случае реализации на RC будут тупить и циклиться, а в случае ручного управления превратятся в ад) или просто реализацию чего-либо(скажем, там нет проблем класса ABA для lock-free структур данных). Так же наличие сборки мусора уменьшает вероятность утечек памяти(что не имеет отношения к безопасности).

Есть сборщики для C и C++, например, где о безопасности говорить не приходится.

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

Не только. Можно просто реализовать функцию.

impl Encodable for YouStruct {
fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
        /*тут уже реализация :-) */
    }
}

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

Для биндингов ко всяким пайтонам нужна именно runtime. Если кто-то решится на расте писать крупный игровой движок, то ему эта фича обязательно понадобится.

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

Безопасность и GC ортогональны.

Ну где они ортогональны, если GC подбирает за тобой все говно, об уборке которого без GC ты вынужден заботится вручную? И если ты при этой ручной сборке облажаешься, у тебя будут утечки. Самая что ни на есть, непосредственная связь.

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

Ну где они ортогональны, если GC подбирает за тобой все говно, об уборке которого без GC ты вынужден заботится вручную? И если ты при этой ручной сборке облажаешься, у тебя будут утечки. Самая что ни на есть, непосредственная связь.

Утечки не имеют никакого отношения к безопасности.

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

А ты про какую безопасность вообще говоришь?

Безопасность работы с памятью - висячие ссылки, ошибка индексирования, порча чужой памяти и т.д.

Каким образом утечки связаны с безопасностью?

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

Безопасность и GC ортогональны.

Это не так

Это так

Не так. Язык с GC впринципе безопасным быть не может

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

Язык с GC впринципе безопасным быть не может

Чем докажешь?

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

Утечки не имеют никакого отношения к безопасности.

А double free, например, имеет. https://cwe.mitre.org/data/definitions/415.html

Безопасность и GC ортогональны.

Не вполне. GC избавляет кодера от необходимости самостоятельно реализовывать логику управления памятью. А значит, избавляет программу от проблем с безопасностью, которые кодер мог бы в этой логике допустить. Нет кода - нет проблем.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.