Как же приятно, когда за такими вещами следит сам компилятор!
let mut text = vec![0; 256];
let mut caption = vec![0; 256];
load_string(&mut text);
load_string(&mut text);
message_box(&text, &caption);
warning: variable does not need to be mutable
--> src/main.rs:9:9
|
9 | let mut caption = vec![0; 256];
| ^^^^^^^^^^^
|
= note: #[warn(unused_mut)] on by default
Хм, переменные используются одинаково а варнинг только про одну из них, посмотрю ка повнимательней.
Specs это ECS система, нацеленная на производительность и параллельность исполнения. Она используеться как ECS система в движке amethyst, жива и поддерижваема.
TinyECS это ECS система, сделанная мной от безысходности. В начале проекта я сформулировла свои желания к ECS, не нашёл их ни в одной готовой библиотеке и просто как мог реализовал всё, что хотел. Это мой первый rust опыт и сейчас реализация кажется мне крайне неудачной. Интерфейс же, наоборот, получился на удивление удобным.
Specs появился где-то в момент первого youtube-видео из статьи — то есть близко к началу проекта. И был серьёзный соблазн не пилить свой велосипед, а просто перейти на популярную чужую систему.
В этот момент передо мной было четыре варианта:
продолжить использовать tinyecs
переписать код игры под api specs и получить классную многопоточность
переписать и api specs и код игры
позаимствовать идеи из specs в tinyecs.
Я принял решение и дальше использовать tinyecs и возможно в будущем взять идеи из specs к себе с сохранением интерфейса.
Во первых, api tinyecs мне нравится сильно больше.
Во вторых, у меня были идеи на будущее tinyecs и они не совпадали с тем, куда двигался specs.
В третьих — оно работало, работает — не трогай :D
Сейчас я уверен, что поступил правильно. У меня есть большие планы на TinyECS v2, но и та самая первая версия прошла проверку временем, пережила добавление целой кучи фичей и продолжает исправно работать.
Смотрел, но довольно давно и не слишком внимательно.
Показалось, что фичей одинаково не хватает как для игрового гуя(хочется какую-то внешнюю вёрстку и возможности делать красивые эффекты) так и для тулзового гуя(я в основном сравнивал картинки с imgui и не особо внимательно смотрел на внутренности conrod).
Всё так! действительно чем-то похоже на умные указатели, и действительно существуют только на уровне статического анализа при компиляции.
Еще эта штука с борроу-чекером классно помогает с многопоточностью (перевод) — гарантирует отсутствие data-races, а это тоже здорово :)
так мы пока что и не готовы крошить бетонные плиты. Для тех игровых моментов что я описал полностью хватает нашего уровня детализации — который в видео в начале поста.
unsafe позволил написать функцию с такой сигнатурой: fn get_by_ids<'a>(data : &mut Vec, ids : &HashSet) -> Vec<&'a mut Foo>
то есть я получаю массив мутабельных ссылок, не связанную лайфтаймом с исходным массивом.
и такую функцию можно написать только с unsafe. Ну и она супер не правильная, так не надо писать!
а безопасная выглядела бы так:
fn get_by_ids<'a>(data : &'a mut Vec, ids : &HashSet) -> Vec<&'a mut Foo>
с такой сигнатурой, раст запретил бы мне делать data.clear() и всё было бы хорошо. И примерно такую сигнатуру можно получить безо всяких unsafe внутри.
Как же приятно, когда за такими вещами следит сам компилятор!
Хм, переменные используются одинаково а варнинг только про одну из них, посмотрю ка повнимательней.
Specs это ECS система, нацеленная на производительность и параллельность исполнения. Она используеться как ECS система в движке amethyst, жива и поддерижваема.
TinyECS это ECS система, сделанная мной от безысходности. В начале проекта я сформулировла свои желания к ECS, не нашёл их ни в одной готовой библиотеке и просто как мог реализовал всё, что хотел. Это мой первый rust опыт и сейчас реализация кажется мне крайне неудачной. Интерфейс же, наоборот, получился на удивление удобным.
Specs появился где-то в момент первого youtube-видео из статьи — то есть близко к началу проекта. И был серьёзный соблазн не пилить свой велосипед, а просто перейти на популярную чужую систему.
В этот момент передо мной было четыре варианта:
Я принял решение и дальше использовать tinyecs и возможно в будущем взять идеи из specs к себе с сохранением интерфейса.
Во первых, api tinyecs мне нравится сильно больше.
Во вторых, у меня были идеи на будущее tinyecs и они не совпадали с тем, куда двигался specs.
В третьих — оно работало, работает — не трогай :D
Сейчас я уверен, что поступил правильно. У меня есть большие планы на TinyECS v2, но и та самая первая версия прошла проверку временем, пережила добавление целой кучи фичей и продолжает исправно работать.
На мой взгляд для молодого языка у Rust очень даже большое сообщество :)
Self-hosted, работает на моей машине. Можно научить использовать репозитории с той же машины(в моём случае это gogs запущенный на том же сервере).
нет, я беру дефолтный raspbian и играю в minecraft pi^W тестирую OpenGL
Настоящего большого OpenGL нет, есть OpenGL ES 2.0. На моей Pi3 работает довольно таки быстро :)
для преобразование в число бы логичнее не заморачиваться с Display и parse а сделать так:
playpen
Nat — от natural number, бездумно взял из хаскелевого примера, о котором думал.
Показалось, что фичей одинаково не хватает как для игрового гуя(хочется какую-то внешнюю вёрстку и возможности делать красивые эффекты) так и для тулзового гуя(я в основном сравнивал картинки с imgui и не особо внимательно смотрел на внутренности conrod).
в следующем абзаце:
С ним всё хорошо, генерируются функции которые сами всё грузят как надо, автоматизация! :)
и этот самый Static generator и используется в glium.
По мне так у него хороший уровень абстракции — и от OpenGL далеко не уезжаем и некую безопасность имеем.
Еще эта штука с борроу-чекером классно помогает с многопоточностью (перевод) — гарантирует отсутствие data-races, а это тоже здорово :)
http://rurust.github.io/rust_book_ru/src/ownership.html < — вот здесь описан этот механизм защищающий указатели
Рассказать планирую :)
Пол нерушим!
fn get_by_ids<'a>(data : &mut Vec, ids : &HashSet) -> Vec<&'a mut Foo>
то есть я получаю массив мутабельных ссылок, не связанную лайфтаймом с исходным массивом.
и такую функцию можно написать только с unsafe. Ну и она супер не правильная, так не надо писать!
а безопасная выглядела бы так:
fn get_by_ids<'a>(data : &'a mut Vec, ids : &HashSet) -> Vec<&'a mut Foo>
с такой сигнатурой, раст запретил бы мне делать data.clear() и всё было бы хорошо. И примерно такую сигнатуру можно получить безо всяких unsafe внутри.