#prog #gamedev #article
Cramming 'Papers, Please' Onto Phones (перевод)
Статья от автора 'Papers, Pleaze' о том, как он портировал игру на мобильные устройства и о том, на какие сложности он наткнулся: как технические, так и куда как более значительные интерфейсные.
P. S.: Слава Арстоцке!
Cramming 'Papers, Please' Onto Phones (перевод)
Статья от автора 'Papers, Pleaze' о том, как он портировал игру на мобильные устройства и о том, на какие сложности он наткнулся: как технические, так и куда как более значительные интерфейсные.
P. S.: Слава Арстоцке!
Dukope
Cramming 'Papers, Please' Onto Phones
I created Papers, Please in 2013 specifically for desktop computers with mouse control. Now, here, in 2022, desktop computers no longer exist and all computing is done via handheld mobile telephone. Time to update this dinosaur.
These thousands of words and…
These thousands of words and…
🔥6❤1👍1
#prog #gamedev #article
Localizing Papers, Please (часть 1, часть 2)
(разбито на две части из-за ограничений tumblr на размер постов)
Localizing Papers, Please (часть 1, часть 2)
(разбито на две части из-за ограничений tumblr на размер постов)
Tumblr
Localizing Papers, Please
Papers, Please was released on August 8th, 2013 without multilingual support. Even though it would've been great to support other languages besides English, I decided to push that work until after th…
🔥4👍1
Forwarded from мне не нравится реальность
Там кстати Rust 1.63 вышел. TL;DR интересного (по моему мнению):
— из компилятора выкинули старый borrowck (я так и не понял что это меняет)
—
— турборыбу можно использовать для дженериков в функциях с APIT [1]
—
— std теперь поддерживает nintendo 3DS 👀
—
—
—
— Стабилизорована / const-ифицирована куча функций (мне лень их все перечислять) (кстати к некоторым я приложил лапки), в том числе стабилизировали scoped треды (!!!), более безопасные типы для работы с платформо зависимым IO и
— Добавили в документацию заметку про то, что safety гарантии раста никак не защищают от
[blog] [github release]
[1]: это позволяет делать такое:
[2]: Termination это трейт для типов, которые можно вернуть из
— из компилятора выкинули старый borrowck (я так и не понял что это меняет)
—
[x; 0]
теперь дропает x
(ранее был баг из-за которого это было эквивалентно mem::forget
)— турборыбу можно использовать для дженериков в функциях с APIT [1]
—
null
и null_mut
теперь работают с extern типами— std теперь поддерживает nintendo 3DS 👀
—
write!
/print!
теперь дропают tmp раньше—
Layout
теперь реализует Hash
— needs_drop
теперь работает для не Sized
типов—
Termination
теперь реализован для большего количества типов [2]— Стабилизорована / const-ифицирована куча функций (мне лень их все перечислять) (кстати к некоторым я приложил лапки), в том числе стабилизировали scoped треды (!!!), более безопасные типы для работы с платформо зависимым IO и
Mutex::new
в const
контексте— Добавили в документацию заметку про то, что safety гарантии раста никак не защищают от
/proc/self/mem
— У коллекций улучшена документация на счёт того, что происходит при логических ошибках (например в реализации Ord
)[blog] [github release]
[1]: это позволяет делать такое:
fn f<T>(f: impl FnOnce() -> T) { ... }
f::<u32>(|| 0);
раньше ::<u32>
было нельзя писать из-за impl Trait
в аргументах. сам APIT
явно задать нельзя, но это может быть и плюсом, когда явно хочется задать только другие параметры.[2]: Termination это трейт для типов, которые можно вернуть из
main
. В этом релизе добавили реализации для Infallible
и Result<impl Termination, impl Debug>
(ранее можно было возвращать только Result<(), _>
, Result<!, _>
и Result<Infallible, _>
).🎉6
Forwarded from мне не нравится реальность
хочу миленькое лёгенькое платьице с клубничным паттерном а не вот это вот всё
👍2🤮2
мне не нравится реальность
Там кстати Rust 1.63 вышел. TL;DR интересного (по моему мнению): — из компилятора выкинули старый borrowck (я так и не понял что это меняет) — [x; 0] теперь дропает x (ранее был баг из-за которого это было эквивалентно mem::forget) — турборыбу можно использовать…
О некоторых вещах Вафель всё же зря умолчал.
Первое — это реализация типов для IO safety. Новые типы для Unix (OwnedFd, BorrowedFd) и Windows (OwnedHandle, HandleOrNull, HandleOrInvalid, BorrowedHandle, OwnedSocket, BorrowedSocket), полезные в основном для FFI, позволяют:
* на уровне типов — а не устных соглашений — описать, как именно функция обращается с сырыми ручками от OS;
* опять-таки, на уровне типов исключить возможность забыть обработку возможных невалидных значений;
* задействовать niche optimisation, чтобы не иметь оверхед на тег для опциональных значений;
* использовать их непосредственно в FFI-сигнатурах из-за
Не та вещь, которую будешь использовать каждый день, но для написания биндингов определённо полезна.
Вторая вещь — это array::from_fn (которая, кстати, реализована в терминах array::map). Пример использования:
Первое — это реализация типов для IO safety. Новые типы для Unix (OwnedFd, BorrowedFd) и Windows (OwnedHandle, HandleOrNull, HandleOrInvalid, BorrowedHandle, OwnedSocket, BorrowedSocket), полезные в основном для FFI, позволяют:
* на уровне типов — а не устных соглашений — описать, как именно функция обращается с сырыми ручками от OS;
* опять-таки, на уровне типов исключить возможность забыть обработку возможных невалидных значений;
* задействовать niche optimisation, чтобы не иметь оверхед на тег для опциональных значений;
* использовать их непосредственно в FFI-сигнатурах из-за
#[repr(transparent)]
.Не та вещь, которую будешь использовать каждый день, но для написания биндингов определённо полезна.
Вторая вещь — это array::from_fn (которая, кстати, реализована в терминах array::map). Пример использования:
let array = core::array::from_fn(|i| i);
assert_eq!(array, [0, 1, 2, 3, 4]);
Чем примечательна эта функция? Ну... В C есть фича под названием designated initializers. Обычно её вспоминают в связи со структурами:struct A { int x; int y; int z; };
struct A a{.y = 2, .x = 1};
, но почему-то мало кто знает, что их можно использовать и с массивами:int n[5] = {[4]=5,[0]=1}; // 1,0,0,0,5
array::from_fn
позволяет (до некоторой степени) сымитировать это поведение:// look ma no types!
let arr = std::array::from_fn(|i| match i {
4 => 5,
0 => 1,
_ => 0,
});
То есть Rust вынес в библиотеку то, что в C зашито в язык!GitHub
Tracking Issue for RFC 3128: I/O Safety · Issue #87074 · rust-lang/rust
Feature gate: #![feature(io_safety)] This is a tracking issue for RFC 3128: I/O Safety. Raw OS handles such as RawFd and RawHandle have hazards similar to raw pointers; they may be bogus or may dan...
👍10
Блог*
#music youtube.com/watch?v=Ep7Ni6dtQaA (ну вы поняли, во что я играл)
#game #video
The Music Of Metal Gear Rising Is Smarter Than You Think
ВНИМАНИЕ: СОДЕРЖИТ СПОЙЛЕРЫ К ИГРЕ ДЕВЯТИЛЕТНЕЙ ДАВНОСТИ
The Music Of Metal Gear Rising Is Smarter Than You Think
ВНИМАНИЕ: СОДЕРЖИТ СПОЙЛЕРЫ К ИГРЕ ДЕВЯТИЛЕТНЕЙ ДАВНОСТИ
YouTube
The Music Of Metal Gear Rising Is Smarter Than You Think
Metal Gear Rising has a brilliant soundtrack. It's one of the best celebrated elements of the game, and with good reason-it's lightning fast and matches the exhilarating gameplay perfectly.
But something that I feel gets a bit left behind is that the music…
But something that I feel gets a bit left behind is that the music…
#prog #math
Вы когда-нибудь задумывались, как именно процессоры считают значения тригонометрических функций? Нет, не через ряды Тейлора — они слишком медленно сходятся. Через последовательное приближение половинками углов и сравнения с таблицей предвычисленных значений.
Подробнее в Википедии.
Вы когда-нибудь задумывались, как именно процессоры считают значения тригонометрических функций? Нет, не через ряды Тейлора — они слишком медленно сходятся. Через последовательное приближение половинками углов и сравнения с таблицей предвычисленных значений.
Подробнее в Википедии.
Wikipedia
CORDIC
algorithm for computing trigonometric and hyperbolic functions
👍12
assert_eq!(
Some(unsafe { std::num::NonZeroUsize::new_unchecked(0) }),
None
);
🤯11❤3💩1
мне не нравится реальность
IF LET CHAINS ARE STABILIZED IN RUST 1.64 rust-lang/rust/pull/94927#event-7007028976 > 2 years, 4 months, 3 weeks and 1 day of long nights, obstacles and headaches. > Hope stabilization won't be reverted but regardless, thanks to everyone who helped make…
GitHub
Revert let_chains stabilization by Noratrieb · Pull Request #100538 · rust-lang/rust
This reverts commit 3266460.
It was discovered in #100513 that they are not implemented correctly, which does not make them ready for stabilization.
The merge in the let parsing had a few conflicts...
It was discovered in #100513 that they are not implemented correctly, which does not make them ready for stabilization.
The merge in the let parsing had a few conflicts...
😢6
> называет себя анимешником
> не может вспомнить, когда в последний раз смотрел анимэ
> не может вспомнить, когда в последний раз смотрел анимэ
🔥3
💩3🤯2😢2