We analyze and modernize software, build new software, and provide support for Rascal metaprogramming.

Knowledge-based Software Creation

A domain model is the best way to represent the knowledge in a domain and build software applications for it. To build completely new applications we provide services for creating so-called Domain Specific Languages: dedicated languages that can dramatically speed-up software development in a domain. An application is specified in the domain-specific language, it can be checked, verified and simulated to assess its behaviour and is then automatically converted into conventional software but with guaranteed properties.

Understanding & Modernizing Software

To get insight into an existing system or modernize it, we provide Understanding & Modernization services. We apply Software Analysis to a given system and create domain knowledge that can be used to better understand it, identify problematic parts, or drive a Software Transformation that recreates (parts of) the original system with better structure or more modern technology.

Support for Rascal Metaprogramming

Our services are largely based on the award-winning Rascal metaprogramming technology. We provide Rascal Metaprogramming services to help our clients benefit from this technology in their own projects.

Knowledge-based Software Creation

Knowledge-based Software Creation

In dynamic business environments domain models and Domain Specific Languages (DSLs) bring down the cost of software ownership while simultaneously improving software quality; this approach effectively bridges the gap between business knowledge and software design.

So when the need arizes to develop a family of software components or applications in the same domain we first make the knowledge of our clients about the domain explicit in a domain model. This knowledge is then captured in a dedicated, human-readable notation: a Domain Specific Language.

We describe the desired software components in this DSL and use these descriptions to simulate their behaviour and give early feedback. We validate their quality and, finally, create executable code.

Why we use domain models and DSLs

A domain model:

  • enables representing domain knowledge in a uniform way.
  • allows for easy review of domain knowledge at the business level.
  • enables dissemination of domain knowledge.
  • enables control over and further evolution of domain knowledge.

A DSL:

  • is based on an underlying domain model.
  • allows for easy review of applications at the business level.
  • allows rapid prototyping and simulation of real user stories.
  • allows upgrading to future new technologies without starting from scratch.
  • helps in managing security and privacy risks as well as compliance risks in the auditing domain.
  • can be automatically simulated, checked, validated, tested, and executed.
  • can be used to control functional – does it what we want it to do? – as well as non-functional – is it secure? does it perform? – properties of the desired system.
  • helps balancing the fine line between technical debt and code efficiency.
  • can prevent (costly) bugs by avoiding manual labor.
  • can also play a role in modernization scenarios where parts of a legacy system are replaced by DSL-based new implementations.

DSLs can empower popular "low code" platforms by adding new, specialized functionality.

We provide the best services for knowledge-based software creation

  • Domain analysis.
  • Domain modelling.
  • Design of new DSLs.
  • Redesign and improve existing DSLs.
  • Implement new or existing DSLs.
  • Tools for validation and simulation of DSLs.
  • Tools for code generation for DSLs for any platform.

Understanding & Modernizing Software

Understanding & Modernizing Software

Getting deep insight in existing software and eventually adapting it to new requirements amounts to

  • Software analysis. Software analysis gives insight into existing software by searching for global properties such as architecture, component structure, security or code quality. Software analysis can also be used for knowledge recovery from source code. Example: recover state machines from source code.

  • Software transformation. Automatically and systematically changing existing software using explicitly scripted transformation rules.

  • Software modernization. Combine software analysis and software transformation to modernize important existing systems.

We provide services in all three areas above. For modernization, our preference is to use software analysis to extract knowledge from an existing system and introduce a domain specific language to build a new and more maintainable new system.

Support for Rascal Metaprogramming

Rascal is the metaprogramming language of choice that we use in our projects. Rascal integrates source code analysis, transformation, and generation primitives on the language level. It can be used for any kind of metaprogramming task: to construct parsers for programming languages, to analyze and transform source code, or to define new DSLs with full IDE support. Rascal is a programming language: metaprograms can be created by, understood by, and debugged by programmers.

Rascal seamlessly integrates with Java’s JVM ecosystem and in most projects, we use it as our preferred development tool that is not visible for clients. We support clients that want to maintain or change Rascal-based products.

Metaprogramming is the science and technology to write programs that take other programs as input and/or output. Metaprogramming forms the foundation for program analysis, program transformation, code generation, and compilation.

For clients using Rascal we provide excellent services

  • Priority maintenance on the Rascal distribution.

  • User-support: advicing on how to implement a project or how to use Rascal features.

  • Training: on site courses, tailored towards our clients’ needs.

  • Dedicated Rascal development including:

    • Creating dedicated Rascal libraries.
    • Building dedicated applications.
    • Support in deployment of applications.