How to develop Magic
For years I've been reluctant to getting others to contribute to Magic for a lot of reasons, however I have now created a process that at least makes it possible
Join the DZone community and get the full member experience.Join For Free
A guy at Reddit once told me "it's just configuration" when I told him about Magic. His prove for such a statement, was a link to magic.library, which barely contains any C# code at all. Of course, combining the amount of C# code in magic.library with the amount of C# code in Magic itself, yields practically no C# code, which makes it easy to land such conclusions. However, Magic contains a lot of C# code, it's just spread out in 35 different git repositories at GitHub, most of with literally zero cross project references.
This creates a lot of advantages, such as the fact that the project is super modularised in nature, where each module is reusable to an extent difficult to imagine for most, and the projects are super encapsulated in nature. In fact, each project typically references nothing more than magic.signal, magic.signal again references magic.node, and these are typically the only references until you get to magic.library, which arguably ties everything together nicely by wiring together the different projects. This allows a user of Magic to simply reference magic.library itself, and everything is wired up automagically for him or her. In fact, this architecture arguably resembles an in process micro service architecture, due to the zero cross project references in the project as a whole.
The disadvantage with the above structure is that it becomes difficult to debug and extend the individual components, simply because there are no csproj files that even wires these projects together, since it's assumed the end user wants to wire up everything using the project's NuGet packages. However, yesterday I created a helper project that allows you to clone everything locally, and start debugging Magic on your local development machine.
The project is really simple in nature, it just clones all 35 projects needed to have all the code locally. Then it creates a csproj file that instead of linking in NuGet packages will use the projects themselves. And voila; You can debug Magic and all of its components. In addition to of course browse through its code and look at each individual project, and how I created Hyperlambda using nothing but a simple design pattern in C#.
Anyways, assuming you can legally contribute to Open Source projects, implying you have an IP exception in your current employment contract, and you are interested in doing so, you can now easily develop and maintain Magic, provide me with a pull request, and help me improve it if you wish. Later at some point I'll probably create some sort of automatic process that gives your GitHub user credit for whatever you contribute with on the main documentation for Magic. Hence, if you wish to contribute to Magic, or simply see how I created Hyperlambda and Magic at the C# level, follow the recipe in the link below.
Opinions expressed by DZone contributors are their own.