# NARust 158 |[简体中文](README.md) | **English**| |:-:|:-:| ![logo](./docs/image/opennars-logo-modified-with-rust.svg) ![License](https://img.shields.io/crates/l/narust_158?style=for-the-badge&color=ff7043) ![Code Size](https://img.shields.io/github/languages/code-size/ARCJ137442/NARust-158?style=for-the-badge&color=ff7043) ![Lines of Code](https://www.aschey.tech/tokei/github.com/ARCJ137442/NARust-158?style=for-the-badge&color=ff7043) [![Language](https://img.shields.io/badge/language-Rust-orange?style=for-the-badge&color=ff7043)](https://www.rust-lang.org) Cargo Status: [![crates.io](https://img.shields.io/crates/v/narust_158?style=for-the-badge)](https://crates.io/crates/narust_158) [![docs.rs](https://img.shields.io/docsrs/narust-158?style=for-the-badge)](https://docs.rs/narust_158) ![Recent Downloads](https://img.shields.io/crates/dr/narust_158?style=for-the-badge) ![Downloads](https://img.shields.io/crates/d/narust_158?style=for-the-badge) ![Crate Size](https://img.shields.io/crates/size/narust_158?style=for-the-badge) Development Status: [![CI status](https://img.shields.io/github/actions/workflow/status/ARCJ137442/NARust-158/ci.yml?style=for-the-badge)](https://github.com/ARCJ137442/NARust-158/actions/workflows/ci.yml) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-2.0.0-%23FE5196?style=for-the-badge)](https://conventionalcommits.org) ![Files](https://www.aschey.tech/tokei/github.com/ARCJ137442/NARust-158?style=for-the-badge&category=files) ![Created At](https://img.shields.io/github/created-at/ARCJ137442/NARust-158?style=for-the-badge) ![Last Commit](https://img.shields.io/github/last-commit/ARCJ137442/NARust-158?style=for-the-badge) ![GitHub commits since latest release](https://img.shields.io/github/commits-since/ARCJ137442/NARust-158/latest?style=for-the-badge) ## Introduction A [Non-Axiomatic Reasoning System](http://www.opennars.org/) implemented in [Rust](https://www.rust-lang.org/), based on [OpenNARS 1.5.8](https://github.com/patham9/opennars_declarative_core). ## Online Demo Thanks to the integration of Rust and WebAssembly, this reasoning system has a [web version](https://arcj137442.github.io/demo-158-dev/) and can be run directly in browsers that support WebAssembly. (Browsers that support WebAssembly: Chrome 57+, EDGE 16+, Safari 11+, Firefox 52+, Opera 44+, ...) If you want to compile it to the web by yourself, you can refer to the [RustWasm](https://rustwasm.github.io/) and the [`wasm-pack`](https://rustwasm.github.io/wasm-pack/) tool, and you can search for related resources by yourself. ## Quick Start ### Prerequisites 1. Install the [**Rust**](https://www.rust-lang.org/tools/install) compiler toolchain in the system 2. Ensure that the `cargo` command is available after installation ![Expected result of entering `cargo` in the system command line after installing Cargo](./docs/image/installed-cargo.png) ### Try It: Run Immediately In an **online** environment, run the following command directly: ```bash cargo install narust-158 ``` As of today (2024-08-19), this command will install the following two binaries in the system: - `narust_158_shell`: Convenient for user interaction, allowing direct input of Narsese statements and values (specify the reasoning cycle step period) - `narust_158_batch`: Convenient for external integration, unified input of NAVM commands, and input of fixed single-line JSON text format ### Advanced: Source Code Compilation #### Get the Source Code You can get the source code directly from the project repository on GitHub: ```bash git clone https://github.com/arcj137442/narust-158.git ``` You should expect the following reaction: Git fetches the source code from the GitHub repository and downloads it into a specific directory called `narust-158`. After the project is published to **crates.io**, you can get it in the Rust project directory with the following command: ```bash cargo add narust-158 ``` #### Local Compilation The source code obtained from GitHub can be built by entering the following command in the command line at the root directory of `narust-158`: ```bash cargo build ``` You should expect Cargo to automatically download compilation dependencies and ultimately complete the compilation of the project binary files: ```bash [...]> cargo build Compiling narust-158 vX.X.X ([...]) Finished dev [unoptimized + debuginfo] target(s) in X.XXs ``` #### Build and Run At this point, you can use the command `cargo run` to run the built binary files: ```bash cargo run --bin narust_158_shell ``` or ```bash cargo run --bin narust_158_batch ``` Expect: The command line cursor opens a new line and waits for user input. After entering the following NAVM command, ```navm-cmd nse B>. nse C>. nse C>? cyc 20 ``` Expect the following output: ```plaintext nse B>. [IN] $0.8000;0.8000;0.9500$ B>. %1.0000;0.9000% nse C>. [IN] $0.8000;0.8000;0.9500$ C>. %1.0000;0.9000% nse C>? [IN] $0.9000;0.9000;1.0000$ C>? cyc 20 [ANSWER] C>. %1.0000;0.8100% ``` (↑In `shell`) ```plaintext nse B>. {"type":"IN","content":"In: $0.80;0.80;0.95$ (A --> B). %1.00;0.90%","narsese":"$0.8000;0.8000;0.9500$ B>. %1.0000;0.9000%"} nse C>. {"type":"IN","content":"In: $0.80;0.80;0.95$ (B --> C). %1.00;0.90%","narsese":"$0.8000;0.8000;0.9500$ C>. %1.0000;0.9000%"} nse C>? {"type":"IN","content":"In: $0.90;0.90;1.00$ (A --> C)?","narsese":"$0.9000;0.9000;1.0000$ C>?"} cyc 20 {"type":"ANSWER","content":"Answer: (A --> C). %1.0000;0.8100%{16 : 2;1}","narsese":" C>. %1.0000;0.8100%"} ``` (↑In `batch`) ## Project Overview ### Declaration Regarding the meaning of the term 'OpenNARS': Unless specifically distinguished, it refers by default to [`OpenNARS 1.5.8`](https://github.com/patham9/opennars_declarative_core), and also refer to the individual's [Chinese Notes Appendix Custom Edition](https://github.com/ARCJ137442/OpenNARS-158-dev). - 📌The project structure is mainly based on the 'Chinese Notes Appendix Custom Edition' (hereinafter referred to as 'Revised OpenNARS'). - ⚠️Comments and notes in the project are all written in Chinese. ### System Module Architecture The main directory structure of the entire system is as follows: ```plaintext narust-158 ├── docs ├── src │ ├── bin: Executable compilation entry │ ├── control: Control mechanism │ ├── entity: Entity structure │ ├── inference: Inference mechanism │ ├── language: Knowledge representation language │ ├── util: Internal utility functions │ ├── vm: Virtual machine interface and built-in implementation │ ├── global.rs: Global parameters │ ├── lib.rs: Library compilation entry │ ├── symbols.rs: Global symbol constants, corresponding to OpenNARS `nars.io.Symbols` │ └── ... ├── Cargo.toml └── ... ``` #### Knowledge Representation Language Language module `src/language`: Definitions and processing logic related to 'terms' ```plaintext language ├── term_impl: Concrete implementation of term structure │ ├── base: Basic functionality │ │ ├── construct.rs: Constructors │ │ ├── conversion.rs: Type conversion │ │ ├── property.rs: Properties │ │ ├── serde.rs: Serialization and deserialization │ │ ├── structs.rs: Struct definitions │ │ └── ... │ ├── dialect: Dialect syntax │ │ ├── mod.rs: Dialect parser │ │ └── narust_dialect.pest: Syntax definition │ ├── features: Corresponding to OpenNARS features │ │ ├── compound_term.rs: Corresponding to OpenNARS class `CompoundTerm` │ │ ├── image.rs: Corresponding to OpenNARS class `Image` │ │ ├── statement.rs: Corresponding to OpenNARS class `Statement` │ │ ├── term.rs: Corresponding to OpenNARS class `Term` │ │ ├── variable.rs: Corresponding to OpenNARS class `Variable` │ │ └── ... │ ├── term_making.rs: Corresponding to OpenNARS `MakeTerm.java` │ ├── variable_process.rs: Corresponding to OpenNARS `VariableProcess.java` │ └── ... └── ... ``` Entity module `src/entity`: Definitions of structures such as 'truth value', 'budget value', 'statement', 'term chain & task chain', 'concept', 'timestamp', 'task', etc. ```plaintext entity ├── float_values: 'Floating point values' used by both the language mechanism and the control mechanism │ ├── budget_value.rs: Budget value │ ├── truth_value.rs: Truth value │ ├── short_float.rs: Short floating point (four decimal places) │ └── ... ├── sentence: Language mechanism definitions related to 'statements' │ ├── impls: Initial implementation (statements, judgments, questions) │ ├── judgement.rs: Unified 'judgment' interface │ ├── punctuation.rs: Based on enumeration 'punctuation' definition │ ├── question.rs: Unified 'question' interface │ ├── sentence_trait.rs: Unified 'sentence' interface │ └── ... ├── linkages: Control mechanism definitions related to 'linkages' │ ├── t_link.rs: Unified 'link' interface │ ├── t_linkage.rs: General 'linkage' structure │ ├── task_link.rs: Task chain │ ├── term_link_template.rs: Term link template │ ├── term_link.rs: Term link │ └── ... ├── concept.rs: Control mechanism structure 'concept' ├── item.rs: Control mechanism interface 'item' ├── stamp.rs: Language mechanism structure 'timestamp' ├── task.rs: Control mechanism structure 'task' └── ... ``` (This structure originates from OpenNARS 1.5.8, and the code has not been completely separated in terms of inference and control mechanisms) #### Inference Control Mechanism NARS Storage Container `src/storage`: Storage container related to "entities" ```plaintext storage ├── bag: Basic container "bag" based on the control mechanism of "pseudo-random priority queue" │ ├── distributor.rs: Pseudo-random distributor based on priority with a triangular distribution │ ├── impl_tables.rs: Auxiliary "name table" and "level table" structures │ ├── impl_v1.rs: The final exported "first generation implementation" │ └── ... ├── buffer.rs: "Buffer" structure used in "concepts" ├── memory.rs: Overall container "memory area" for storing "concepts" ├── rank_table.rs: "Ranking table" structure used in "concepts" └── ... ``` NARS Inference Function `src/inference`: The process of handling various "entities" in the "container" based on NAL and "knowledge representation language" mechanism ```plaintext inference ├── engine: Universal "inference engine" interface │ ├── inference_engine.rs: Definition and interface of the inference engine │ └── ... ├── functions: Truth functions, budget functions, etc. │ ├── budget_functions.rs: Code related to "budget functions" in NAL, corresponding to `nars.inference.BudgetFunctions` │ ├── truth_functions.rs: "Truth functions" in NAL, corresponding to `nars.inference.TruthFunctions` │ ├── utility_functions.rs: Code related to "extended logical operations" in NAL, corresponding to `nars.inference.UtilityFunctions` │ └── ... ├── rules: Specific NAL inference rules │ ├── table: Rule dispatch table │ │ ├── entry.rs: Rule dispatch entry, corresponding to `nars.inference.RuleTables` │ │ ├── syllogistic.rs: Dispatch related to "syllogistic rules" │ │ ├── compositional.rs: Dispatch related to "compositional rules" │ │ └── ... │ ├── compositional_rules.rs: Compositional rules, corresponding to `nars.inference.CompositionalRules` │ ├── local_rules.rs: Local rules, corresponding to `nars.inference.LocalRules` │ ├── matching_rules.rs: Matching rules, corresponding to `nars.inference.MatchingRules` │ ├── structural_rules.rs: Structural rules, corresponding to `nars.inference.StructuralRules` │ ├── syllogistic_rules.rs: Syllogistic rules, corresponding to `nars.inference.SyllogisticRules` │ ├── transform_rules.rs: Transformation rules, corresponding to `nars.inference.TransformRules` │ └── ... ├── traits │ ├── budget.rs: Abstract interface related to "budget", shared by "budget value", "task", "concept", etc. │ ├── evidential.rs: Abstract interface related to "evidence base", shared by "timestamp", "statement", "task", etc. │ ├── truth.rs: Abstract interface related to "truth", shared by "truth value", "judgment", etc. │ └── ... ├── budget_inference.rs: "Budget inference" involving "link feedback" ├── local_inference.rs: "Direct inference" involving "belief revision" and "question answering" └── ... ``` NARS Control Mechanism `src/control`: Functions closely related to the "reasoner" on top of "containers" and "inference rules" ```plaintext control ├── context: "Inference context" function in the control mechanism │ ├── context_concept.rs: Concept inference context │ ├── context_direct.rs: Direct inference context │ ├── context_transform.rs: Transformation inference context │ ├── derivation.rs: Related functions of inference derivation │ ├── reason_context.rs: Unified "inference context" interface │ └── ... ├── process: Runtime functions related to "work cycle" │ ├── concept_linking.rs: Concept linking (building task chains, word chains) │ ├── parsing_task.rs: Narsese task parsing function │ ├── process_direct.rs: Control process involving "direct inference" │ ├── process_reason.rs: Control process involving "concept inference" │ ├── work_cycle.rs: Work cycle control │ └── ... ├── reasoner: The definition of the reasoner itself and its external API │ ├── definition.rs: Data structure definition of the reasoner │ ├── derivation_datas.rs: Accessory data structures, including "New Task Queue" and "Novel Task Bag" │ ├── report.rs: Output report function │ ├── serde.rs: Serialization and deserialization function │ ├── vm_api.rs: NAVM virtual machine API │ └── ... ├── parameters.rs: Hyper-parameters of the reasoner └── ... ``` #### External Application Interface NAVM Virtual Machine Self-implemented Implementation `src/vm`: Provides a self-implemented NAVM implementation based on the "reasoner" and NAVM API ```plaintext vm ├── alpha: Self-contained kernel "Alpha" of the virtual machine │ ├── cmd_dispatch: NAVM instruction dispatch │ │ ├── cmd_hlp.rs: Handling instruction `HLP` │ │ ├── cmd_inf.rs: Handling instruction `INF` │ │ ├── cmd_loa.rs: Handling instruction `LOA` │ │ ├── cmd_sav.rs: Handling instruction `SAV` │ │ └── mod.rs: Top-level dispatch function │ ├── io: Input and output at the virtual machine level, corresponding to the original OpenNARS channel mechanism │ │ ├── _channel.rs: Abstract traits related to "channels" │ │ ├── channel_in.rs: Preliminary implementation of input channels │ │ ├── channel_out.rs: Preliminary implementation of output channels │ │ ├── channels.rs: Managing input and output channels on top of the reasoner │ │ ├── handle_io.rs: Actual logic of channel input and output │ │ ├── input_channel.rs: Abstract traits of input channels │ │ ├── output_channel.rs: Abstract traits of output channels │ │ └── ... │ ├── launcher.rs: Virtual machine launcher │ ├── runtime.rs: Virtual machine runtime │ └── ... └── ... ``` ### Functionality Test Comparison 🕒Last Updated: 【2024-08-19 23:56:58】 🔗Reference: [BabelNAR NAL Test Suite (Chinese)](https://github.com/ARCJ137442/BabelNAR-NAL-test-suite) 📄The latest test results can be found in the [csv file](./docs/test_results/group_result-20240820000245.csv) Below is a comparison of the test results between **NARust-158** and **OpenNARS 1.5.8**: #### NAL-1 ![NAL-1](./docs/image/test-nal-1.png) #### NAL-2 ![NAL-2](./docs/image/test-nal-2.png) #### NAL-3 ![NAL-3](./docs/image/test-nal-3.png) #### NAL-4 ![NAL-4](./docs/image/test-nal-4.png) #### NAL-5 ![NAL-5](./docs/image/test-nal-5.png) #### NAL-6 ![NAL-6](./docs/image/test-nal-6.png) #### Total Table |Serial|Test group|Reasoner|Test|🎯|Cycles|Time Elapsed(s)| |:-|:-|:-|:-|:-|:-|:-| |1|NAL-1|NARust-158|NAL-1.0|✅|1|0.5954129695892334| |2|NAL-1|OpenNARS 1.5.8|NAL-1.0|✅|1|0.8183493614196777| |3|NAL-1|NARust-158|NAL-1.1|✅|5|0.9925639629364014| |4|NAL-1|OpenNARS 1.5.8|NAL-1.1|✅|5|1.0172924995422363| |5|NAL-1|NARust-158|NAL-1.2|✅|5 + 1|1.1002004146575928| |6|NAL-1|OpenNARS 1.5.8|NAL-1.2|✅|5 + 1|1.218430757522583| |7|NAL-1|NARust-158|NAL-1.3|✅|5 + 1|1.102980375289917| |8|NAL-1|OpenNARS 1.5.8|NAL-1.3|✅|5 + 1|1.2181055545806885| |9|NAL-1|NARust-158|NAL-1.4|✅|5|1.0003728866577148| |10|NAL-1|OpenNARS 1.5.8|NAL-1.4|✅|5|1.018073558807373| |11|NAL-1|NARust-158|NAL-1.5|✅|3|0.7906851768493652| |12|NAL-1|OpenNARS 1.5.8|NAL-1.5|✅|5|1.0184855461120605| |13|NAL-1|NARust-158|NAL-1.6|✅|1|0.5974311828613281| |14|NAL-1|OpenNARS 1.5.8|NAL-1.6|✅|1|0.8184366226196289| |15|NAL-1|NARust-158|NAL-1.7|✅|2|0.7023866176605225| |16|NAL-1|OpenNARS 1.5.8|NAL-1.7|✅|1|0.8166286945343018| |17|NAL-1|NARust-158|NAL-1.8|✅|2 + 1|0.8164653778076172| |18|NAL-1|OpenNARS 1.5.8|NAL-1.8|✅|1 + 1|0.8180663585662842| |19|NAL-2|NARust-158|NAL-2.0|✅|1|0.5882105827331543| |20|NAL-2|OpenNARS 1.5.8|NAL-2.0|✅|1|0.8178684711456299| |21|NAL-2|NARust-158|NAL-2.1|✅|5|1.0131173133850098| |22|NAL-2|OpenNARS 1.5.8|NAL-2.1|✅|5|1.0181186199188232| |23|NAL-2|NARust-158|NAL-2.2|✅|2|0.6862974166870117| |24|NAL-2|OpenNARS 1.5.8|NAL-2.2|✅|7|1.2179877758026123| |25|NAL-2|NARust-158|NAL-2.3|✅|5|0.9923756122589111| |26|NAL-2|OpenNARS 1.5.8|NAL-2.3|✅|5|1.0192923545837402| |27|NAL-2|NARust-158|NAL-2.4|✅|5|1.0161314010620117| |28|NAL-2|OpenNARS 1.5.8|NAL-2.4|✅|5|1.0183181762695312| |29|NAL-2|NARust-158|NAL-2.5|✅|5|0.9920682907104492| |30|NAL-2|OpenNARS 1.5.8|NAL-2.5|✅|5|1.0166361331939697| |31|NAL-2|NARust-158|NAL-2.6|✅|5|0.9971611499786377| |32|NAL-2|OpenNARS 1.5.8|NAL-2.6|✅|5|1.0190651416778564| |33|NAL-2|NARust-158|NAL-2.7|✅|5|0.9988064765930176| |34|NAL-2|OpenNARS 1.5.8|NAL-2.7|✅|3|0.8180522918701172| |35|NAL-2|NARust-158|NAL-2.8|✅|20|0.5948235988616943| |36|NAL-2|OpenNARS 1.5.8|NAL-2.8|✅|20|0.8179733753204346| |37|NAL-2|NARust-158|NAL-2.9|✅|5|1.0015182495117188| |38|NAL-2|OpenNARS 1.5.8|NAL-2.9|✅|3|0.8180046081542969| |39|NAL-2|NARust-158|NAL-2.10|✅|8|0.5884933471679688| |40|NAL-2|OpenNARS 1.5.8|NAL-2.10|✅|8|0.8187534809112549| |41|NAL-2|NARust-158|NAL-2.11|✅|4|0.6898593902587891| |42|NAL-2|OpenNARS 1.5.8|NAL-2.11|✅|6|0.8177580833435059| |43|NAL-2|NARust-158|NAL-2.12|✅|4|0.8919978141784668| |44|NAL-2|OpenNARS 1.5.8|NAL-2.12|✅|6|1.2169487476348877| |45|NAL-2|NARust-158|NAL-2.13|✅|1|0.5938620567321777| |46|NAL-2|OpenNARS 1.5.8|NAL-2.13|✅|1|0.8183119297027588| |47|NAL-2|NARust-158|NAL-2.14|✅|1|0.596996545791626| |48|NAL-2|OpenNARS 1.5.8|NAL-2.14|✅|1|0.81703782081604| |49|NAL-2|NARust-158|NAL-2.15|✅|1|0.5949504375457764| |50|NAL-2|OpenNARS 1.5.8|NAL-2.15|✅|1|0.8177728652954102| |51|NAL-2|NARust-158|NAL-2.16|✅|6|0.7998340129852295| |52|NAL-2|OpenNARS 1.5.8|NAL-2.16|✅|10|1.0184473991394043| |53|NAL-2|NARust-158|NAL-2.17|✅|5|0.99479079246521| |54|NAL-2|OpenNARS 1.5.8|NAL-2.17|✅|7|1.2191729545593262| |55|NAL-2|NARust-158|NAL-2.18|✅|5 + 1|1.101579189300537| |56|NAL-2|OpenNARS 1.5.8|NAL-2.18|✅|7 + 1|1.4188337326049805| |57|NAL-2|NARust-158|NAL-2.19|✅|5 + 1|1.110304355621338| |58|NAL-2|OpenNARS 1.5.8|NAL-2.19|✅|7 + 1|1.4179441928863525| |59|NAL-3|NARust-158|NAL-3.0|✅|5 + 1|1.0987911224365234| |60|NAL-3|OpenNARS 1.5.8|NAL-3.0|✅|5 + 1|1.218343734741211| |61|NAL-3|NARust-158|NAL-3.1|✅|5 + 1|1.1182663440704346| |62|NAL-3|OpenNARS 1.5.8|NAL-3.1|✅|5 + 1|1.2175726890563965| |63|NAL-3|NARust-158|NAL-3.2|✅|4|0.592303991317749| |64|NAL-3|OpenNARS 1.5.8|NAL-3.2|✅|4|0.8178369998931885| |65|NAL-3|NARust-158|NAL-3.3|✅|100|0.6109724044799805| |66|NAL-3|OpenNARS 1.5.8|NAL-3.3|✅|100|0.8171384334564209| |67|NAL-3|NARust-158|NAL-3.4|✅|8 + 8|0.7029902935028076| |68|NAL-3|OpenNARS 1.5.8|NAL-3.4|✅|8 + 8|0.817694902420044| |69|NAL-3|NARust-158|NAL-3.5|✅|100 + 100|0.7507014274597168| |70|NAL-3|OpenNARS 1.5.8|NAL-3.5|❌||1.6182081699371338| |71|NAL-3|NARust-158|NAL-3.6|✅|100|0.6037416458129883| |72|NAL-3|OpenNARS 1.5.8|NAL-3.6|✅|100|0.8177168369293213| |73|NAL-3|NARust-158|NAL-3.7|✅|100|0.5986242294311523| |74|NAL-3|OpenNARS 1.5.8|NAL-3.7|✅|100|0.818411111831665| |75|NAL-3|NARust-158|NAL-3.8|✅|100|0.6246905326843262| |76|NAL-3|OpenNARS 1.5.8|NAL-3.8|✅|100|0.8179376125335693| |77|NAL-3|NARust-158|NAL-3.9|✅|100|0.6234555244445801| |78|NAL-3|OpenNARS 1.5.8|NAL-3.9|✅|100|0.8179781436920166| |79|NAL-3|NARust-158|NAL-3.10|✅|4|0.642333984375| |80|NAL-3|OpenNARS 1.5.8|NAL-3.10|✅|4|0.8172469139099121| |81|NAL-3|NARust-158|NAL-3.11|✅|100|0.613426685333252| |82|NAL-3|OpenNARS 1.5.8|NAL-3.11|✅|100|0.8180327415466309| |83|NAL-3|NARust-158|NAL-3.12|✅|8|0.7130308151245117| |84|NAL-3|OpenNARS 1.5.8|NAL-3.12|✅|8|0.8176462650299072| |85|NAL-3|NARust-158|NAL-3.13|✅|8|0.7020564079284668| |86|NAL-3|OpenNARS 1.5.8|NAL-3.13|✅|8|0.8171148300170898| |87|NAL-3|NARust-158|NAL-3.14|✅|8|0.7334625720977783| |88|NAL-3|OpenNARS 1.5.8|NAL-3.14|✅|8|0.8183391094207764| |89|NAL-3|NARust-158|NAL-3.15|✅|16|0.9022154808044434| |90|NAL-3|OpenNARS 1.5.8|NAL-3.15|✅|8|0.8185086250305176| |91|NAL-4|NARust-158|NAL-4.0|✅|9 + 1|1.3645102977752686| |92|NAL-4|OpenNARS 1.5.8|NAL-4.0|✅|8 + 1|1.6192405223846436| |93|NAL-4|NARust-158|NAL-4.1|✅|10 + 1|1.459580421447754| |94|NAL-4|OpenNARS 1.5.8|NAL-4.1|✅|9 + 1|1.4185864925384521| |95|NAL-4|NARust-158|NAL-4.2|✅|10 + 1|1.4524781703948975| |96|NAL-4|OpenNARS 1.5.8|NAL-4.2|✅|9 + 1|1.4183306694030762| |97|NAL-4|NARust-158|NAL-4.3|✅|10 + 1|1.4990899562835693| |98|NAL-4|OpenNARS 1.5.8|NAL-4.3|✅|9 + 1|1.6195216178894043| |99|NAL-4|NARust-158|NAL-4.4|✅|9 + 1|1.3599236011505127| |100|NAL-4|OpenNARS 1.5.8|NAL-4.4|✅|8 + 1|1.419097900390625| |101|NAL-4|NARust-158|NAL-4.5|✅|9 + 1|1.3632681369781494| |102|NAL-4|OpenNARS 1.5.8|NAL-4.5|✅|8 + 1|1.4237298965454102| |103|NAL-4|NARust-158|NAL-4.6|✅|30|0.6576845645904541| |104|NAL-4|OpenNARS 1.5.8|NAL-4.6|✅|20|0.8183119297027588| |105|NAL-4|NARust-158|NAL-4.7|✅|30|0.6930375099182129| |106|NAL-4|OpenNARS 1.5.8|NAL-4.7|✅|20|0.8178501129150391| |107|NAL-4|NARust-158|NAL-4.8|✅|30|0.6398265361785889| |108|NAL-4|OpenNARS 1.5.8|NAL-4.8|✅|30|0.8178706169128418| |109|NAL-5|NARust-158|NAL-5.0|✅|1|0.5923786163330078| |110|NAL-5|OpenNARS 1.5.8|NAL-5.0|✅|1|0.8178191184997559| |111|NAL-5|NARust-158|NAL-5.1|✅|100|0.6058564186096191| |112|NAL-5|OpenNARS 1.5.8|NAL-5.1|✅|100|0.8180820941925049| |113|NAL-5|NARust-158|NAL-5.2|✅|100|0.6055483818054199| |114|NAL-5|OpenNARS 1.5.8|NAL-5.2|✅|100|0.817556619644165| |115|NAL-5|NARust-158|NAL-5.3|✅|10 + 10|0.731611967086792| |116|NAL-5|OpenNARS 1.5.8|NAL-5.3|✅|10 + 10|0.8183648586273193| |117|NAL-5|NARust-158|NAL-5.4|✅|2 + 2|0.71968674659729| |118|NAL-5|OpenNARS 1.5.8|NAL-5.4|✅|12 + 2|1.217257022857666| |119|NAL-5|NARust-158|NAL-5.5|✅|1|0.608281135559082| |120|NAL-5|OpenNARS 1.5.8|NAL-5.5|✅|1|0.8177833557128906| |121|NAL-5|NARust-158|NAL-5.6|✅|2|0.7111854553222656| |122|NAL-5|OpenNARS 1.5.8|NAL-5.6|✅|2|0.8177797794342041| |123|NAL-5|NARust-158|NAL-5.7|✅|2|0.6048617362976074| |124|NAL-5|OpenNARS 1.5.8|NAL-5.7|✅|6|0.8176219463348389| |125|NAL-5|NARust-158|NAL-5.8|✅|2|0.613330602645874| |126|NAL-5|OpenNARS 1.5.8|NAL-5.8|✅|12|1.2176799774169922| |127|NAL-5|NARust-158|NAL-5.9|✅|100|0.6031229496002197| |128|NAL-5|OpenNARS 1.5.8|NAL-5.9|✅|100|0.818305492401123| |129|NAL-5|NARust-158|NAL-5.10|✅|1|0.6073472499847412| |130|NAL-5|OpenNARS 1.5.8|NAL-5.10|✅|1|0.8171191215515137| |131|NAL-5|NARust-158|NAL-5.11|✅|2|0.6179885864257812| |132|NAL-5|OpenNARS 1.5.8|NAL-5.11|✅|2|0.8184006214141846| |133|NAL-5|NARust-158|NAL-5.12|✅|10|0.6061127185821533| |134|NAL-5|OpenNARS 1.5.8|NAL-5.12|✅|10|0.81870436668396| |135|NAL-5|NARust-158|NAL-5.13|✅|2 + 2|0.7091310024261475| |136|NAL-5|OpenNARS 1.5.8|NAL-5.13|✅|6 + 2|1.0179312229156494| |137|NAL-5|NARust-158|NAL-5.14|✅|2 + 2|0.7129168510437012| |138|NAL-5|OpenNARS 1.5.8|NAL-5.14|✅|12 + 2|1.2173380851745605| |139|NAL-5|NARust-158|NAL-5.15|✅|1|0.6248800754547119| |140|NAL-5|OpenNARS 1.5.8|NAL-5.15|✅|3|1.0182271003723145| |141|NAL-5|NARust-158|NAL-5.16|✅|4|0.9017784595489502| |142|NAL-5|OpenNARS 1.5.8|NAL-5.16|✅|3|0.8178815841674805| |143|NAL-5|NARust-158|NAL-5.17|✅|1|0.6106598377227783| |144|NAL-5|OpenNARS 1.5.8|NAL-5.17|✅|1|0.8181400299072266| |145|NAL-5|NARust-158|NAL-5.18|✅|100|0.6270186901092529| |146|NAL-5|OpenNARS 1.5.8|NAL-5.18|✅|100|0.8192980289459229| |147|NAL-5|NARust-158|NAL-5.19|✅|2 + 4|1.1093814373016357| |148|NAL-5|OpenNARS 1.5.8|NAL-5.19|✅|1 + 5|1.2171788215637207| |149|NAL-5|NARust-158|NAL-5.20|✅|1|0.6312530040740967| |150|NAL-5|OpenNARS 1.5.8|NAL-5.20|✅|1|0.8166608810424805| |151|NAL-5|NARust-158|NAL-5.21|✅|15|1.0181469917297363| |152|NAL-5|OpenNARS 1.5.8|NAL-5.21|✅|21|1.4238536357879639| |153|NAL-5|NARust-158|NAL-5.22|✅|18|0.8522002696990967| |154|NAL-5|OpenNARS 1.5.8|NAL-5.22|✅|36|1.2188985347747803| |155|NAL-5|NARust-158|NAL-5.23|✅|1|0.6137230396270752| |156|NAL-5|OpenNARS 1.5.8|NAL-5.23|✅|3|1.0210330486297607| |157|NAL-5|NARust-158|NAL-5.24|✅|3|0.6303892135620117| |158|NAL-5|OpenNARS 1.5.8|NAL-5.24|✅|3|0.8188819885253906| |159|NAL-5|NARust-158|NAL-5.25|✅|17|1.3772735595703125| |160|NAL-5|OpenNARS 1.5.8|NAL-5.25|✅|13|1.218663215637207| |161|NAL-5|NARust-158|NAL-5.26|✅|10|1.014359712600708| |162|NAL-5|OpenNARS 1.5.8|NAL-5.26|✅|16|1.417463779449463| |163|NAL-5|NARust-158|NAL-5.27|✅|8|1.30757737159729| |164|NAL-5|OpenNARS 1.5.8|NAL-5.27|✅|8|1.4172580242156982| |165|NAL-5|NARust-158|NAL-5.28|✅|18 + 2|1.513357162475586| |166|NAL-5|OpenNARS 1.5.8|NAL-5.28|✅|8 + 2|1.01711106300354| |167|NAL-5|NARust-158|NAL-5.29|✅|38|1.4606080055236816| |168|NAL-5|OpenNARS 1.5.8|NAL-5.29|✅|12|0.8172476291656494| |169|NAL-6|NARust-158|NAL-6.0|✅|1|0.6033296585083008| |170|NAL-6|OpenNARS 1.5.8|NAL-6.0|✅|1|0.8175020217895508| |171|NAL-6|NARust-158|NAL-6.1|✅|5 + 1|1.1030211448669434| |172|NAL-6|OpenNARS 1.5.8|NAL-6.1|✅|5 + 1|1.2181439399719238| |173|NAL-6|NARust-158|NAL-6.2|✅|5 + 1 + 1 + 1 + 1|0.9584789276123047| |174|NAL-6|OpenNARS 1.5.8|NAL-6.2|✅|5 + 1 + 1 + 1 + 1|1.2184979915618896| |175|NAL-6|NARust-158|NAL-6.3|✅|5 + 1 + 1 + 1 + 1|1.404578447341919| |176|NAL-6|OpenNARS 1.5.8|NAL-6.3|✅|5 + 1 + 1 + 1 + 1|1.6175479888916016| |177|NAL-6|NARust-158|NAL-6.4|✅|1|0.6025612354278564| |178|NAL-6|OpenNARS 1.5.8|NAL-6.4|✅|3|0.8175523281097412| |179|NAL-6|NARust-158|NAL-6.5|✅|20 + 2|0.7320339679718018| |180|NAL-6|OpenNARS 1.5.8|NAL-6.5|✅|20 + 2|0.8189425468444824| |181|NAL-6|NARust-158|NAL-6.6|✅|8|0.8993208408355713| |182|NAL-6|OpenNARS 1.5.8|NAL-6.6|✅|4|0.8170242309570312| |183|NAL-6|NARust-158|NAL-6.7|✅|5|1.0029892921447754| |184|NAL-6|OpenNARS 1.5.8|NAL-6.7|✅|5|1.017634391784668| |185|NAL-6|NARust-158|NAL-6.8|✅|5|1.0208451747894287| |186|NAL-6|OpenNARS 1.5.8|NAL-6.8|✅|5|1.2178993225097656| |187|NAL-6|NARust-158|NAL-6.9|✅|5|1.0232045650482178| |188|NAL-6|OpenNARS 1.5.8|NAL-6.9|✅|5|1.0178754329681396| |189|NAL-6|NARust-158|NAL-6.10|✅|200|0.6589128971099854| |190|NAL-6|OpenNARS 1.5.8|NAL-6.10|✅|200|0.8186118602752686| |191|NAL-6|NARust-158|NAL-6.11|✅|3|0.6792869567871094| |192|NAL-6|OpenNARS 1.5.8|NAL-6.11|✅|6|0.8184347152709961| |193|NAL-6|NARust-158|NAL-6.12|✅|9|0.8455550670623779| |194|NAL-6|OpenNARS 1.5.8|NAL-6.12|✅|3|0.8197438716888428| |195|NAL-6|NARust-158|NAL-6.13|✅|22|1.0612874031066895| |196|NAL-6|OpenNARS 1.5.8|NAL-6.13|✅|8|0.8168606758117676| |197|NAL-6|NARust-158|NAL-6.14|✅|3|0.7985975742340088| |198|NAL-6|OpenNARS 1.5.8|NAL-6.14|✅|2|0.8174269199371338| |199|NAL-6|NARust-158|NAL-6.15|✅|10|0.603034257888794| |200|NAL-6|OpenNARS 1.5.8|NAL-6.15|✅|10|0.8172047138214111| |201|NAL-6|NARust-158|NAL-6.16|✅|10|0.6254706382751465| |202|NAL-6|OpenNARS 1.5.8|NAL-6.16|✅|5|0.817591667175293| |203|NAL-6|NARust-158|NAL-6.17|✅|5 + 1 + 1 + 1|1.3186566829681396| |204|NAL-6|OpenNARS 1.5.8|NAL-6.17|✅|5 + 1 + 1 + 1|1.4196081161499023| |205|NAL-6|NARust-158|NAL-6.18|✅|5 + 1 + 1 + 1|1.335634708404541| |206|NAL-6|OpenNARS 1.5.8|NAL-6.18|✅|5 + 1 + 1 + 1|1.4191017150878906| |207|NAL-6|NARust-158|NAL-6.19|✅|5 + 1|1.119678020477295| |208|NAL-6|OpenNARS 1.5.8|NAL-6.19|✅|3 + 1|1.0181732177734375| |209|NAL-6|NARust-158|NAL-6.20|✅|20 + 20|0.7085788249969482| |210|NAL-6|OpenNARS 1.5.8|NAL-6.20|✅|20 + 20|0.8183784484863281| |211|NAL-6|NARust-158|NAL-6.21|✅|20 + 20|0.728318452835083| |212|NAL-6|OpenNARS 1.5.8|NAL-6.21|✅|20 + 20|0.8181295394897461| |213|NAL-6|NARust-158|NAL-6.22|❌||2.2233645915985107| |214|NAL-6|OpenNARS 1.5.8|NAL-6.22|❌||1.6211707592010498| |215|NAL-6|NARust-158|NAL-6.23|❌||1.2589473724365234| |216|NAL-6|OpenNARS 1.5.8|NAL-6.23|❌||1.6173293590545654| |217|NAL-6|NARust-158|NAL-6.24|❌||1.2618408203125| |218|NAL-6|OpenNARS 1.5.8|NAL-6.24|❌||1.6170527935028076| |219|NAL-6|NARust-158|NAL-6.25|✅|5|1.0037875175476074| |220|NAL-6|OpenNARS 1.5.8|NAL-6.25|❌||1.6173484325408936| |221|NAL-6|NARust-158|NAL-6.26|✅|9|1.4338345527648926| |222|NAL-6|OpenNARS 1.5.8|NAL-6.26|✅|7|1.217932939529419| |223|NAL-6|NARust-158|NAL-6.27|❌||1.262467622756958| |224|NAL-6|OpenNARS 1.5.8|NAL-6.27|❌||1.6189584732055664| ### Language Features Used 📝Main Rust language features involved in the code (some of which may be challenging to understand): - Pattern matching - Generics (static dispatch) - Traits (abstract interfaces) - Closures (for simplifying temporary reusable code) - Modules - Macros (declarative macros) ⚠️Features that may be difficult to understand: - `unsafe` code (mutable references for compound terms) - Trait objects (dynamic dispatch) ### Potential Application Areas - Web development: Running NARS in the browser, facilitating the integration of NARS into internet applications - Embedded systems: Running NARS on embedded devices for small kernel, strong specialization scenarios - Industrial applications: Running NARS on industrial equipment for high performance, low operational overhead scenarios ## Contribution Guidelines ### Project Branch Status - `main`: The base version, with long-term support - `dev`: The development version, under continuous development (ℹ️**PRs are mainly merged into this branch**) - `dev-XXX`: Derivative branches for learning or experimentation - `archive-XXX`: Archived branches, providing long-term stable and unchanging code - `debug-XXX`: Temporary branches for solving problems/bugs ### Ways to Contribute - [Github Issues](https://github.com/ARCJ137442/Narust-158/issues): Report issues, suggestions, bugs - [GitHub Pull Request](https://github.com/ARCJ137442/Narust-158/pulls): Contribute code directly to the project