-
Notifications
You must be signed in to change notification settings - Fork 3
Home
S.IM.PL is a software architecture and a cross-language type system that aims to improve the transmission of data and data structures across language, format, and plaform borders. S.IM.PL stands for Support for Information Mapping between Programming Languages. Our research lab has heavily relied upon S.IM.PL as a foundational data layer, which has eased some design problems and allowed us to develop software such as BigSemantics. The use of a cross language type system (S.IM.PL) has allowed us to spend less time focusing on format-related boilerplate code to support our data structures and more time focusing on application code.
S.IM.PL is different from many serialization frameworks because it natively supports graphs and cycles in data. Many JSON and XML serialiation frameworks cannot handle such data structures, which requires designers to add additional boilerplate code to serialize their data. Supporting cyclic data means that very little modification needs to be done to data structures to support de/serialization. (At the moment, data structures need to be annotated in a target language; future work will eliminate this requirement and replace it with a description language)
S.IM.PL also aims to support more formats than most other serialization frameworks. Its architecture is designed in such a way that new formats can be added as needed, without the need to resolve some of the more complicated logic underneath the type system. Any application that uses S.IM.PL can access all of the formats supported by that S.IM.PL implementation!
S.IM.PL also facilitates cross-language translation of data structures. For example, if you have written a class in Java, it is possible to use S.IM.PL to generate source code for an equivilant C# class. (And, since the classes are the same, data from your Java application can be deserialized in a C# application!)
Overall, S.IM.PL aims to simplify many development tasks which are tedious and time consuming. Instead of focusing on writing serialization code, you can focus on writing more exciting application code. And, in the future, when you decide to port your application to another language, you can do it just as easily as recompiling your data structures! S.IM.PL also makes interoperability between programming languages that support nearly painless!
If this project seems appealing to you, you should consider Getting Involved. We can always use more developers.
We've created a set of tutorials on S.IM.PL. (And we are also in the process of writing some more comprehensive tutorials covering how to reimplement S.IM.PL in other languages!) A full list of those tutorials can be found on the Tutorials page. If you're looking for a straightforward introduction to S.IM.PL, you can work your way through the this Java Tutorial.
S.IM.PL has been implemented in the following languages. If you have created an implementation, feel free to share the link with us and we'll place it here! If you are interested in implementing S.IM.PL, peruse some of our documentation and feel free to contact us!
Our reference implementation of S.IM.PL is written in Java. We've leveraged this implementation for some of our lab's prior research, such as InfoComposer and Combinformation. You can access the JavaDocs for Simpl, or peruse the code here.
We also maintain an implementation of S.IM.PL written in C#. That can be accessed from Github as well.
A preliminary implementation of S.IM.PL has been created for Python, but plenty of work is needed to bring it up to speed. The code can be accessed here