After nearly three months into the “relaunch” of the C++ team, I would like to provide an update regarding the team itself, what we have accomplished and our future plans.
Team update
The so-called C++ team presently comprises Paweł Bylica (@chfast), Greg Colvin (@gcolvin), Liana Husikyan (@LianaHus), Dimitry Khokhlov (@winsvega), Yann Levreau (@yann300), Bob Summerwill (@bobsummerwill), myself (@chriseth) and (generously “donated” by Eris Industries) RJ (@VoR0220).
Paweł is the original creator of the llvm-based EVM-to-native just-in-time compiler, who rejoined in April and will continue enhancing the JIT.
Greg became part of the team in February and has already realized significant speed enhancements for the C++ implementation of the Ethereum Virtual Machine, leveraging his experience from working on the Java Virtual Machine for his previous employer Oracle.
Liana and Yann are focusing on Solidity and its IDEs (yes, plural, see below!).
Dimitry oversees the consensus tests and is also contributing to the C++ core.
Bob joined in February (having been engaged with the community for a longer duration) and is now spearheading the ambitious initiative to untangle the C++ codebase. He was also a key contributor to the homestead guide.
RJ joined Eris Industries in March and is working on the Solidity compiler.
Moreover, the collaboration and communication between the C++ and the Go teams has reached a completely new level compared to before. One of the motivations for enhancing the interpreter is to establish a benchmark for the go-ethereum interpreter; insights gained during this process will directly inform the go interpreter, just as an illustration.
Announcing Remix
Developing Solidity itself and offering resources and tools for those writing smart contracts and dapps represent one of the most substantial areas of focus for the C++ team. A crucial such tool is a debugger for Solidity and the Ethereum Virtual Machine, enabling developers to “look inside” the virtual machine and identify the precise location in their code that is not performing as expected. Our IDE Mix is an excellent piece of software that provides just that. Unfortunately, most users do not utilize it and tend to favor browser-solidity or simply various unit testing tools.
This is understandable; people are reluctant to switch editors (I suspect this is also the reason why we’ve seen a plethora of Solidity plugins for existing IDEs in recent months) or install additional software. Additionally, the relative amount of external contributions we received for the html5+js-based minimalist IDE browser-solidity compared to C++/Qt-based Mix is simply staggering.
Due to this and to enhance modularity, reusability, and openness, we have decided to rethink the way we aim to provide developer tools: With the remix project we will develop a series of reusable html5+js modules aimed at the development and debugging of smart contracts.
This indicates that integrating a debugger for EVM and Solidity into browser-solidity (which will also be positioned more prominently in the future), as well as into Visual Studio Code, Atom, Sublime, and essentially any IDE that is html5+js-based, will be achievable. You will even have the capability to launch the debugger within Mist, including for past transactions!
It may be slightly premature to experiment with remix, but if you’re interested, follow the instructions in the repository, ensuring you utilize the latest develop version of cpp-ethereum as the backend node.
For everyone else: Here is a screenshot of an early proof of concept version:
Other Tasks
Regarding the current focus on other projects, we are enhancing the runtime efficiency of the virtual machine. Greg has made excellent strides in this domain and continues to have numerous ideas. We are in the process of establishing general benchmarks, allowing us to compare the performance of various implementations and the disparities between interpreters and just-in-time compilers. Our goal is to make the just-in-time compiler accessible for other implementations such as py-ethereum and, of course, go-ethereum.
For Solidity, the primary areas of focus are currently fixed-point types, structs as part of the ABI, and enhancing the versatility of libraries through “inlineable” functions and templates. Furthermore, we encourage the community to develop and publish valuable libraries. Special thanks to Alex Beregszaszi (@axic), Nick Johnson (@Arachnid), and Andreas Olofsson (@androlo) for their excellent contributions in this regard!
Lastly, we aim to alleviate the challenges currently faced when dealing with the C++ codebase, primarily due to external and internal dependencies. We are almost at the position where Solidity can be compiled independently, and our objective is to return to our original home, the ethereum/cpp-ethereum repository, separating parts only where it makes sense, specifically for Mix, Solidity, and EVMJIT.