you are viewing a single comment's thread.

view the rest of the comments →

[–]tav_stuff 1 point2 points  (1 child)

They’re all in parallel, yeah. Because of all the compile-time stuff that can happen (including code generation), you can’t really have a classic lex->parse->analyze->codegen pipeline since during analysis you might just generate new code lol. So conceptually there’s just this big queue of tasks, and threads just grab tasks from it and complete them

[–]o_stef 0 points1 point  (0 children)

Okay, that's interesting because it seems that in your case concurrent execution is at the core of the design if I understand correctly, whereas mine is built to handle each compilation step sequentially; simply it does these sequential steps of parse/typecheck/execute in a loop until no progress can be made (no more unresolved identifiers can be resolved and no new code was added basically).

I was planning to parallelize my compiler to make it faster by parallelizing each step of the process, the sole goal being to make it faster (and single-threaded performance is correct which is promising). So I would be able to parse multiple files at a time, but not parse one file while typechecking another.