3 ms·
This is actually an important use for Rust. Many font renders were initially written for speed on single user systems running trusted programs. Vector renderi
by wmil 10y ago
This is actually an important use for Rust. Many font renders were initially written for speed on single user systems running trusted programs.
Vector rendering creates a lot of edge cases that C tends to ignore.
The initial X-Box soft mod hack was done by loading a font with negative values in key fields. Microsoft had brought over the Windows font rendering code, and that wasn't written with hostile fonts in mind.
- moosingin3space 10y agoMy belief is that Rust today, in production, is best used in networking code, such as protocol parsers, but the interest in font rendering in Rust will help to push the priority of stabilizing SIMD up, which should help quite a bit with the applications where Rust lags in performance.
- pcwalton 10y agoI haven't observed that the lack of stable SIMD makes Rust only suitable for networking code. You can easily use SIMD by writing in assembly (inline assembly, even), with unstable intrinsics, or even with autovectorization. In Servo, for example, we have large speedups over existing C++ codebases that have nothing to do with networking.
- moosingin3space 10y agoOh I'm a huge Rust fan and am using it in nearly everything, but I'd really like to use it in data analytics/linear algebra applications (it would be nice to be able to use a single language for this instead of the mash of Python, R, Octave, and C), and lack of stable SIMD has been an issue there.
- vardump 10y agoIt would be useful to be able to have an option for 16 (SSE)/32 (AVX)/64 (AVX512) byte aligned stack in Rust, to help with SIMD alignment requirements. That would help with SIMD related stack alignment code and reduce cases where dropping down to assembler is needed. Of course external ABI might need need to have normal alignment. Ability to selectively align functions too would be nice. Sometimes it's nice to get them to 64-byte boundary, to reduce icache latency and waste. You usually only have 512 64-byte lines of L1 instruction cache, sometimes it pays to be able to choose where it's spent.
- dikaiosune 10y agoInline assembly is still unstable though, yes? Also autovectorization doesn't support many uses and can be quite brittle AFAIK. I think Rust is absolutely amazing, but stabilized SIMD support is right up at the top of my wishlist.
- steveklabnik 10y agoInline asm is still unstable, yes.