С разными тегами самая назойливая для меня проблема — это когда один и тот же символ определён в очень большом числе мест. Поскольку я занимаюсь системным программированием на Си, и часто работаю с кастомными тулчейнами, у нас много где определены всякие вещи типа memcpy. exuberant-ctags в таком случае предлагает просто первое попавшееся определение и перебирать их (даже пусть с помощью helm) не хочется.
А как с этим у Global? Пытается ли там индекс учитывать то, откуда какие определение видны?
В стандартной библиотеке должно быть только то, что не меняется практически никогда и поэтому может жёстко версионироваться одновременно с компилятором. Если вы включаете HTTP в std, вы не можете выпустить новую версию своего HTTP-клиента без выпуска новой версии std (т.е., по сути, без выпуска новой стабильной версии компилятора).
И да, HTTP, наверное, меняется довольно редко, но по такой логике можно захотеть втащить ещё кучу application-level протоколов. Это не сфера ответственности Rust. Это системный язык.
Если говорить конкретно, уже есть стандарт де-факто для HTTP — hyper. Просто потому что это первая достаточно полная достаточно стабильная реализация. Его не надо тащить в std, чтобы пользоваться им. При этом он всё же достаточно сложен, чтобы его нельзя было реализовать «очень быстро» и больше никогда не менять. Т.е. сам hyper сейчас активно развивается. Включение его в std сильно замедлило бы его развитие, потому что новые стабильные версии контейнера можно выпускать гораздо быстрее, чем новые стабильные версии std.
Если так интересно расширение std, вот курируемый список де-факто стандартных библиотек.
Предоставляет полное ядро для написания игр? Предоставляет. Игры на нём делают? Делают. Значит движок.
Другое дело, что сопустсвующих инструментов там не особо, и игры делают пока любительские. Это не SDK вроде Unity и Unreal, это просто движок, хотя и любительский.
То что он побит на тучу библиотек в своих репозиториях — вообще не принципиально. Под одной крышей он их объединяет.
Моё мнение (совпадающее с мнением некоторых разработчиков Rust) — в стандартной библиотеке должен быть необходимый минимум вещей, у которых есть гарантированно оптимальная или общепринятая реализация (что называется, non-controversial и не opionated). HTTP-клиент к ним не относится.
Встречный вопрос: у вас есть как минимум 1 нормальный HTTP-клиент вне стандартной библиотеки; зачем его тащить внутрь?
Go стабилизировался 3 года назад, Rust — 2 месяца назад. Конечно, для Go будет написано гораздо больше продуктовых вещей.
При этом для Rust уже есть сетевой стек, который вполне можно использовать — hyper, rustc-serialize, rust-postgres. Я этим пользовался для переписывания простого серверного приложения на Go — всё получилось, никаких принципиальных проблем. В целом же, вот статус сетевого стека для Rust.
В Firefox внедрять его не слишком много смысла. На данный момент Servo — исследовательский движок, вокруг которого скорее всего придётся строить новый браузер, чтобы хорошо использовать его многопоточность, например.
В то же время, Servo использует кучу существующих библиотек на C++ и да, Rust это «исследовательский язык для Servo». Но когда-то C был «исследовательским языком для Unix», просто никто не клеймил его такими ярлыками, потому что решение задачи в программировании — очень часто исследование.
Может и «годятся», но так-то и Nim «годится». Заставить работать можно, только это ничего не даёт — во-первых, нужна память для среды исполнения, во-вторых, гарантии безопасности Rust статические — во время исполнения это ничего не стоит.
Тут говорят о том, что у Rust практически отсутствует среда исполнения, поэтому его можно легко встраивать в языки с runtime. В официальной книге есть пример вызова Rust из Ruby.
trait Base {
fn print(&self);
}
struct Der1;
struct Der2;
impl Base for Der1 {
fn print(&self) {
println!("Der1")
}
}
impl Base for Der2 {
fn print(&self) {
println!("Der2")
}
}
fn main() {
let d1 = Der1;
let d2 = Der2;
let v: Vec<&Base> = vec![&d1, &d2];
for e in v {
e.print()
}
}
Соответстенно типаж лучше назвать не Base, а Printable, или как-то так, чтобы отражалась суть поддерживаемых операций.
С разными тегами самая назойливая для меня проблема — это когда один и тот же символ определён в очень большом числе мест. Поскольку я занимаюсь системным программированием на Си, и часто работаю с кастомными тулчейнами, у нас много где определены всякие вещи типа memcpy. exuberant-ctags в таком случае предлагает просто первое попавшееся определение и перебирать их (даже пусть с помощью helm) не хочется.
А как с этим у Global? Пытается ли там индекс учитывать то, откуда какие определение видны?
И да, HTTP, наверное, меняется довольно редко, но по такой логике можно захотеть втащить ещё кучу application-level протоколов. Это не сфера ответственности Rust. Это системный язык.
Если говорить конкретно, уже есть стандарт де-факто для HTTP — hyper. Просто потому что это первая достаточно полная достаточно стабильная реализация. Его не надо тащить в std, чтобы пользоваться им. При этом он всё же достаточно сложен, чтобы его нельзя было реализовать «очень быстро» и больше никогда не менять. Т.е. сам hyper сейчас активно развивается. Включение его в std сильно замедлило бы его развитие, потому что новые стабильные версии контейнера можно выпускать гораздо быстрее, чем новые стабильные версии std.
Если так интересно расширение std, вот курируемый список де-факто стандартных библиотек.
Ни у них на сайте, ни в поиске ничего (совсем) релевантного не нашёл. Есть примеры от создателей, но я всё же про сторонние игры.
Предоставляет полное ядро для написания игр? Предоставляет. Игры на нём делают? Делают. Значит движок.
Другое дело, что сопустсвующих инструментов там не особо, и игры делают пока любительские. Это не SDK вроде Unity и Unreal, это просто движок, хотя и любительский.
То что он побит на тучу библиотек в своих репозиториях — вообще не принципиально. Под одной крышей он их объединяет.
Моё мнение (совпадающее с мнением некоторых разработчиков Rust) — в стандартной библиотеке должен быть необходимый минимум вещей, у которых есть гарантированно оптимальная или общепринятая реализация (что называется, non-controversial и не opionated). HTTP-клиент к ним не относится.
Встречный вопрос: у вас есть как минимум 1 нормальный HTTP-клиент вне стандартной библиотеки; зачем его тащить внутрь?
При этом для Rust уже есть сетевой стек, который вполне можно использовать — hyper, rustc-serialize, rust-postgres. Я этим пользовался для переписывания простого серверного приложения на Go — всё получилось, никаких принципиальных проблем. В целом же, вот статус сетевого стека для Rust.
В то же время, Servo использует кучу существующих библиотек на C++ и да, Rust это «исследовательский язык для Servo». Но когда-то C был «исследовательским языком для Unix», просто никто не клеймил его такими ярлыками, потому что решение задачи в программировании — очень часто исследование.
Перегрузки по аргументу нет.
То, что вы тут приводите, можно сделать так:
Соответстенно типаж лучше назвать не Base, а Printable, или как-то так, чтобы отражалась суть поддерживаемых операций.
Успехов с переходом! :)
Сила Rust не в отсутствии GC как таковом, а в отсутствии GC и безопасности работы с памятью при этом.