be5invis / Iosevka

Versatile typeface for code, from code.
http://be5invis.github.io/Iosevka
SIL Open Font License 1.1
19.33k stars 577 forks source link

Build Process Gets Stuck at 557 Pending Tasks #2584

Open kryzet opened 1 week ago

kryzet commented 1 week ago

The build process gets stuck at 557 pending build tasks and keeps using the CPU and memory without any reported progress. image


kryzet commented 1 week ago

I left the build process for a bit and it went down a bit more, but for some reason when it hits 557 pending tasks, progress becomes really slow. image

kryzet commented 1 week ago

Might be related to #551.

be5invis commented 1 week ago

What's your hardware spec? Building Iosevka, especially without a cache, is... slow, due to its complexity. Setting noCvSs to true could save a lot of time.

kryzet commented 1 week ago

What's your hardware spec?

Here are the hardware specs: Component Details
CPU 12th Gen Intel(R) Core(TM) i5-12450HX, 2400 Mhz, 8 Core(s), 12 Logical Processor(s)
GPU NVIDIA GeForce RTX 3050 6GB Laptop GPU
Installed Physical Memory (RAM) 16.0 GB

Building Iosevka, especially without a cache, is... slow, due to its complexity.

How can I get that?

Setting noCvSs to true could save a lot of time.

I would like to build this font only once and never have to build it again. Building sure is a painful process, and I don't want to run the risk of not having OpenType in the font files and then realize that some random software needs it or it won't do its job properly :)

be5invis commented 1 week ago

How can I get that?

Once you have a successful build then you will have a cache.

kryzet commented 1 week ago

How can I get that?

Once you have a successful build then you will have a cache.

I already have one. Decided to go with many less widths (specifically 500 (condensed) and 600 (normal) and the build process actually finished within 1 hour and 40-50 minutes.

kryzet commented 1 week ago

Building Iosevka, especially without a cache, is... slow, due to its complexity.

Why are you still using JavaScript? 😃 At least use Deno or Bun. Even better, start using Go, especially because you're doing the build process multi-threaded 👌

be5invis commented 1 week ago

It may take too long to rewrite everything... The current builder is already multithreaded though. We could probably do something to optimize geometry ops (which takes the longest time), especially for the boolean operations -- if we do that to migrate to native code, then I will do it in Rust directly...

kryzet commented 1 week ago

It may take too long to rewrite everything...

I can imagine... I mean, hey, it's just a suggestion 😉

The current builder is already multithreaded though.

... especially because you're doing the build process multi-threaded...

I know, but then Go would handle that much better, without the transition between the two languages being too jarring.

We could probably do something to optimize geometry ops (which takes the longest time), especially for the boolean operations -- if we do that to migrate to native code, then I will do it in Rust directly...

Yes! Rust for the win 🚀

kryzet commented 1 week ago

How can I get that?

Once you have a successful build then you will have a cache.

How can I use my existing build as cache?

be5invis commented 1 week ago

Once you have a successful build, the cache will be there, and is applied automatically. Invalidation of cache will happen when version number changes or some significant change are made to the geometry cache system.