[中文] [Tutorial] [开发示例] [Introduction and Q & A Video]
Reversible Computing: A Theory of Next Generation Software Construction
**Nop is nOt Programming (non-programming) **
Nop Platform 2.0 is a next-generation low-code development platform built from scratch based on the principles of reversible computation, adopting a language-oriented programming paradigm. It includes a suite of fully designed engines such as a GraphQL engine, ORM engine, workflow engine, reporting engine, rule engine, and batch processing engine, all developed from scratch based on new principles. It automatically generates GraphQL/REST/gRPC services according to Excel data models, allowing for customized development without modifying the source code of the basic product. It supports native compilation with GraalVM, and is free for commercial use by small and medium-sized enterprises.
The underlying architecture of the Nop platform does not utilize third-party frameworks such as Spring. Instead, it has been redesigned and implemented based on new software construction principles, greatly reducing the complexity of the framework’s internal structure while significantly enhancing its flexibility, scalability, and performance. Its design goal is to explore next-generation software production technologies, laying the technical foundation for intelligent software production in the AI era.
-nop-entropy is the back-end part of the Nop platform. It is implemented in Java language, does not rely on third-party frameworks, and can be integrated with Quarkus, Spring or Solon frameworks.
-nop-entropy support for GraalVM technology, with the help of Quarkus or SpringNative The framework is compiled into a native executable program, no JDK installation is required at runtime, and the startup speed is increased by dozens of times.
-nop-entropy is designed to be a simple and easy-to-use domain language workbench (Domain Language Workbench) . By adding simple metadata definitions, you can automatically get the corresponding parsers, validators, IDE plug-ins, debugging tools, etc., and automatically add module decomposition, differential customization, meta-programming and other common language features for DSL domain languages. At this point, it is similar to Jetbrains company's MPS product It's just that its design principles and technical implementation paths are essentially different from MPS.
-The nop-entropy adopts a cloud-native design with built-in distributed transaction and multi-tenant support. It can run on a stand-alone machine or as a distributed cluster. It can provide online API services or automatically package online services for a single business object as batch tasks for batch files. For most business application scenarios, the corresponding model support is provided, and the main functions can be completed with a small amount of configuration, greatly reducing the need for manual coding.
-The nop-entropy can be used as a low-code platform supporting incremental development during the development period, automatically generating various codes and related documents, and can be used as a low-code platform during the runtime period *
- Support technology for end-user codeless platform **, allowing customers to adjust business module functions online and iterate products in a WYSIWYG manner.
At present, the open source part mainly includes the implementation of XLang language, as well as ORM, dependency injection container (IoC), distributed configuration (Config), GraphQLEngine, report engine (Report. Engine), task scheduling engine (Job Scheduler), batch Prcessing engine (Batch Engine), rule engine (Rule Engine) and other basic frameworks, Follow-up planning includes workflow engine (Workflow Engine), business intelligence (BI), flow processing engine and other common parts of business development.
The code of Nop Platform 2.0 is refactored by Entropy Platform 1.0 recently, the integration of the domestic framework solon has been increased. see nop-solon. the size of the packaged jar package is more than 10 m lower than that of Spring and Quarkus.
Development Progress:
Module | Description | Progress |
---|---|---|
nop-api-support | Support classes for API interface | Completed |
nop-codegen | Data-Driven Code Generator | Completed |
nop-antlr | Model-driven retrofit of Antlr | Completed |
nop-core | Virtual File System, Reflection Mechanism, XML/JSON Parsing | Completed |
nop-ioc | Declarative IoC Container | Completed |
nop-config | Dynamic Configuration Center | Completed |
nop-xlang | XLang Scripting and Template Languages | Completed |
nop-dao | JDBC Access, Transaction, Database Dialects | Completed |
nop-orm | Next Generation ORM Engine | Completed |
nop-graphql | GraphQL Engine | Completed |
nop-rpc | Distributed RPC call | Completed |
nop-ooxml | Parsing and generation of Office files, replacing POI. Word Report Template | Completed |
nop-report | Chinese Reporting Engine | Completed |
nop-rule | Rules Engine | Completed |
nop-autotest | Model-Driven Test Automation Framework | Completed |
nop-idea-plugin | IDEA development plug-in, supporting syntax prompt, file jump, breakpoint debugging | Basically available |
nop-cli | Encapsulates code generators, file listening, and more as command-line tools | Basically available |
nop-cluster | Distributed cluster support | 50% |
nop-tcc | Distributed Transactions | 50% |
nop-dyn | Design forms, data models, and service functions online | Basically available |
nop-workflow | Workflow Engine | 65% |
nop-task | Logical Flow Orchestration | Basically available |
nop-job | Distributed Task Scheduling | 40% |
nop-batch | Batch Engine | Basically available |
nop-message | Kafka/Pulsar Message Queue Encapsulation | 10% |
nop-dbtool | Database Import and Export, Data Structure Comparison, Synchronization Tool | 30% |
nop-nosql | Redis Package | 0% |
nop-stream | Simplified stream processing, which can be integrated with Flink | 0% |
nop-netty | TCP/IP Service Processing Framework | 10% |
nop-datav | BI Data Analysis | 0% |
nop-gpt | Integration with AI Big Model for AIGC | 2% |
nop-js | GraalVM Js engine encapsulation to run JS in Java | 50% |
nop-integration | External service packages such as mail, SMS, and file services | 30% |
nop-auth | User Rights Management | Completed |
nop-sys | System Configuration Management | Completed |
-gitee: https://gitee.com/canonical-entropy/nop-entropy -gitcode:https://gitcode.com/canonical-entropy/nop-entropy -github: https://github.com/entropy-cloud/nop-entropy
Reversible Computing: A Theory of Next Generation Software Construction
NOP: The Next Generation Software Production Paradigm
What kind of ORM engine do low-code platforms need?
Analysis of Reversible Calculation Theory Written to Programmers
Addendum to Reversible Calculation Theory Discrimination for Programmers
Development Documentation Guide
Integration with Ruoyi Framework
nop-entropy the Spring framework is not used, all modules are developed from scratch in a model-driven manner (much of the code in the framework itself is also model-generated and can be customized and adjusted declaratively). In principle, nop-entropy can run on top of any microservices framework that supports the REST service standard. At present, we mainly support the integration of Quarkus framework and Spring framework.
Quarkus is a new generation of cloud-native microservice framework open source by Redhat. Its development experience and GraalVM Native compilation is significantly more mature than the Spring framework. With the help of Quarkus framework, we can compile the application into a single uber jar (through java -jar instruction to run), you can also compile the program into an exe executable program, you don't need to install JDK at runtime, and the startup speed is increased by dozens of times. At present, the development and debugging of nop-entropy is mainly based on the Quarkus framework, so there may be some minor problems with the support of Spring framework.
Front-end code for the Nop platform In the nop-chaos project, the nop-chaos packaged result is packaged as the following Java module.
- nop-web-site: The packaging result of the front-end main page framework.
- nop-web-amis-editor: The packaging results of the AMIS visual editor used by the front end. In general business development, we only write JSON and a few JS files, and do not need to recompile nop-chaos project.
Environment preparation: JDK 17 +, Maven 3.9.3 +, Git
git clone https://gitee.com/canonical-entropy/nop-entropy.git
cd nop-entropy
mvn clean install -DskipTests -Dquarkus.package.type=uber-jar
Note: JDK17 or above is required to compile and run. JDK8 is not supported. **When running in PowerShell, you need to wrap the parameters in quotation marks * *
According to feedback, some JDK versions will report errors when compiling, such as jdk:17.0.9-graal will report errors IndexOutOfBound exceptions, so if there is a problem with compiling, you can try the OpenJDK first.
mvn clean install "-DskipTests" "-Dquarkus.package.type=uber-jar"
The quarkus.package.type parameter is a parameter recognized by the quarkus framework. Specifying it as a uber-jar will package items such as nop-quarkus-demo into a single jar package containing all dependent classes. You can do it through Java. -Jar XXX-runner.jar way to run directly.
You can set the encoding of the PowerShell to UTF8
$OutputEncoding = [Console]::OutputEncoding = [Text.Encoding]::UTF8
you have upgraded to quarkus3.0, and running nop-auth-app and other modules with an earlier version of maven may fail. We recommend upgrading to Maven. Version 3.9.3, or use the mvnw command in the nop-entropy directory, it will automatically download and use maven 3.9.3.
- nop-idea-plugin nop-idea-plugin is a plug-in project for IDEA and must be compiled using Gradle.
cd nop-idea-plugin
gradlew buildPlugin
The idea packaging plug-in currently in use does not support a higher version of gradle. gradlew will automatically download the required gradle version, currently using 7.5.1 if you want to speed up the gradle download speed, you can change it to gradle-wrapper.properties distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-7.5.1-bin.zip
The compiled plug-ins are stored in the build/distributions directory. See Plug-in Installation and Use.
- Platform built a demo program, using H2 memory database, you can directly start running
cd nop-demo/nop-quarkus-demo/target
java -Dquarkus.profile=dev -jar nop-quarkus-demo-2.0.0-SNAPSHOT-runner.jar
If you do not specify profile = dev, it will start in prod mode. In the prod mode, you need to configure the database connection in the application.yaml. By default, the local MySQL database is used.
-
Access link [http:// localhost:8080](http:// localhost:8080), * * User name: nop, Password: 123 * *
-
In IDEA, you can debug and run QuarksDemoMain classes in nop-quarks-demo projects. The quarkus framework provides the following debugging tools during development,
http://localhost:8080/q/dev http://localhost:8080/q/graphql-ui
In the graphql-ui tool, you can view the definitions and parameters of all backend service functions.
- For a complete development example, see tutorial
nop-entropy does not rely on Spring or quarkus frameworks, nor does it depend on a specific database, so it is easy to integrate and use in third-party applications.
The functionality of the core engine does not depend on the database and can be run in pure memory. All storage-related code has been stripped into separate dao modules, such as nop-auth-dao,nop-sys-dao, etc.
-
Use as an incremental code generation tool: maven can read Excel model files when packaging, apply the specified template directory, and generate code in an incremental manner. See codegen.md
-
Provide reversible computing support for existing XML/JSON/YAML format configuration files and domain model files: add dynamic decomposition, merging, and product customization mechanisms for model files, which are completely transparent to the application layer, and only need to write a custom model file loader for the engine layer. See delta-loader.md
-
Provide support for development domain-specific languages (DSL): You only need to define xdef metamodel files to obtain IDE support such as syntax prompts, link jumps, breakpoint debugging, etc. Visual designer customization support will be provided later. See idea-plugin.md
-
Use as a model-driven GraphQL engine: Automatically generate GraphQL services based on Excel models and support the addition, deletion, modification and query of complex main tables. See graphql.md
-
Use as a report engine: only need to add a small number of labels to Word or Excel files to run as a report template and dynamically generate complex Chinese-style reports. See report.md
-
Use as a workflow engine: combined with a timing scheduling engine, it supports manual approval workflows and distributed DAG task flows similar to airflow. See workflow.md
-
Use as a batch engine: Similar to the SpringBatch + XXLJob framework, it provides distributed batch task support. You can specify how to parse and generate text or binary data files through configuration files without writing parsing and generation code. See batch.md
-
Use as a rule engine: realize complex business rule judgment through configuration. See rule.md
-
Use as a data-driven automated testing framework: Automated testing through recording and playback mechanisms. The output data is automatically recorded during the first run, and then automatically compared with the recorded data snapshot during the run, reducing the amount of code that needs to be written manually. See autotest.md
-
Provide IDEA plug-in to support breakpoint debugging of custom DSL
-
Use Excel as a report designer to support complex Chinese reports.
The front-end of the Nop platform uses the MIT protocol, and the back-end uses the AGPL3.0 open source protocol as a whole. However, small and medium-sized enterprises in China can use the code of this project under conditions similar to the Apache2.0 agreement (it can be used for free commercial use, and the modification of the code does not need to be open source, but the original copyright information in the source code should be retained). In order to facilitate third-party integration, the 3 packages of nop-api-support/nop-commons/nop-core use Apache 2.0 agreement.
- The algorithm for judging whether a small or medium-sized enterprise is as follows:
Switch (Is your company rich ()){
case "plenty of money":{
console.log("With so much money, do you still need to wonder all day long whether other people's intellectual property rights are free?");
return false;
default:
return true;
}
}
Problems or bugs encountered in use can be mentioned on Gitee
- Thanks to the ORM test case contributed by netizen xyplayman, the original project address is https://gitee.com/xyplayman/nop-orm-demo
- official website international station: https://nop-platform.github.io/
- official website China Station: https://nop-platform.gitee.io/
- Nop Development Practice Sharing Website Established by Netizen Crazydan Studio
Please note when adding WeChat: Join Nop Platform Group