# High-level frontend

**LLVM** is a collection of compiler and toolchain technologies that can be used to develop frontend for any programming language and backend for any instruction set architecture. It is designed around a language-independent intermediate representation that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes. We can use **LLVM** to let developers write code for zkVM using any high-level language, for example C.

As noted earlier, our instruction set is pretty uncommon and a number of intermediate-level optimisations may be beneficial in addition to just plain backend. Also lack of common-use registers pose an unusual challenge to **LLVM** but we are focused on solving this issue in an efficient manner. Additionally with a good enough toolchain we can achieve language-level compatibility with EVM.

While general-purpose programming for zkVM could yield some benefits, we mostly counting on **LLVM** as fixture to implement our **Domain Specific Language**, as for us most useful aspect of creating zkVM is ability to manipulate dataflows in user-defined, zk-proven manner, allowing users to create universally-trusted oracles on blockchains.
