Holonic is the only company to have created and implemented a self-learning, mathematical model akin to semantic understanding for coding. Semantically, computer programs are similar to natural language in that different developers can express the same intent in different ways, just as two sentences can express the same meaning using different sentence structures and terminology. Our process works by producing a canonical description of the program’s behavior which allows us to reproduce the original program verbatim while correcting its errors. Machine translation for computer programs is a matter of recomposing the canonical form in the new language, applying the learned nuances where necessary and appropriately, to output the deliverable.
Compiler technology is used in several phases of our process, particularly during the “decomposition” phase where we determine canonically the developer’s intent. A compiler is limited, however, in its capacity because, like most static analysis tools, the compiler is only concerned with satisfying certain correctness constraints. We take this quite a bit further.
Once we have the canonical form of the code, we are then able to map it to an extensive knowledge base of best practices and algorithms. We separate code out into specific domains, e.g. database access, network protocols, parsing and formatting, and file operations. Each of these domains also carries specific issues which we can deterministically detect. SQL injection attacks are one example, but more complex issues exist such as maintaining system-wide coherency. Developers rarely maintain best practices unfortunately because they rarely ever experience system failures in their development environments, and only the best developers plan around these issues.
We have discrete engines and underlying intent for many of the most popular scripting (e.g. PHP, ASP, Python, Perl) and complied (e.g. C, C++, .Net, Ada, Java) languages. We have also successfully applied our work to raw machine code.
Generally, we handle both procedural and functional languages. For OOP, we can reconstruct the authors’ original object-oriented design or recompose the work into a new, likely more correct, inheritance graph. If required, and the conditions amenable, we can recompose OOP code directly into procedural code. Technically, we can switch between procedural and functional code, within reason, in the same way that a compiler can switch procedural code to single static assignment and then back again to produce machine code. Ultimately, if the code “means” something and has a deterministic grammar, we can handle it.
Going further, we have looked beyond programming languages to natural language processing, particularly automated natural language translation and semantic interpretation. We use this in our work with parsing and programmatically regenerating sites. We have also been asked to look at an imaging processing problem. However, these domains are not well-formed as computer programming languages, so we expect a higher reliance on deep learning tools.
Holonic utilizes cloud platforms extensively, particularly AWS. We also operate in collocation environments.
A large part of our platform manages DevOp tasks automatically, including spinning up machines, and deploying code. All configuration is handled through intent.
We generate the machine configurations in the same way that we generate the software that runs on them. We can inter-operate with anything that supports an API.