github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/ARCHITECTURE.md (about) 1 # Architecture 2 3 This document only keeps visual schemas of the core language components. For details see [CONTRIBUTING.md](./CONTRIBUTING.md). 4 5 ## Compiler 6 7 ```mermaid 8 flowchart LR 9 package-manager -->|raw-build| compiler 10 11 subgraph package-manager 12 git-client 13 file-system 14 end 15 16 subgraph compiler 17 subgraph backend 18 go-code-generator 19 end 20 21 parser -->|parsed-build| analyzer 22 23 subgraph parser 24 antlr 25 end 26 27 analyzer -->|analyzed-build| desugarer 28 29 subgraph analyzer 30 typesystem 31 end 32 33 desugarer -->|desugared-build| irgen 34 35 irgen -->|ir| backend 36 end 37 38 compiler -->|go-code| go-compiler 39 ``` 40 41 ## Runtime 42 43 ```mermaid 44 flowchart LR 45 program-->runtime 46 47 subgraph runtime 48 connector-->|msg|func-runner 49 func-runner-->|msg|connector 50 end 51 52 subgraph connector 53 event-listener 54 end 55 56 subgraph func-runner 57 func-registry[(func-registry)] 58 end 59 ``` 60 61 ### Connector Algorithm 62 63 > WARNING: Algorithm has changed, update is needed. 64 65 ```mermaid 66 flowchart TB 67 cond{are there still connections?} 68 cond -->|yes| broadcast[spawn broadcast goroutine] 69 cond -->|no| exit[wait for all broadcast goroutines to finish] 70 broadcast --> cond 71 ``` 72 73 #### Broadcast 74 75 ```mermaid 76 flowchart TB 77 msg[await new message from sender] --> inc[semaphore increment] 78 inc --> distribute[spawn distribute goroutine] 79 distribute --> |first receiver processed| msg 80 distribute --> |all receivers processed| dec[semaphore decrement] 81 ``` 82 83 #### Distribute 84 85 ```mermaid 86 flowchart TB 87 q{is receivers queue empty?} 88 q --> |yes| exit 89 q --> |no| pick[pick receiver] 90 pick --> try[try to send message to current receiver] 91 try --> busy{is current receiver busy?} 92 busy --> |yes| next[go to the next one] 93 busy --> |no| remove[remove this receiver from queue] 94 remove --> next 95 next --> q 96 ``` 97 98 ## Interpreter 99 100 ```mermaid 101 flowchart LR 102 source-code-->interpreter 103 104 subgraph interpreter 105 compiler-->|ir|adapter-->|program|runtime 106 end 107 ``` 108 109 ## VSCode Extension 110 111 ```mermaid 112 flowchart LR 113 language-server-->|jsonrpc|vscode 114 vscode-->|jsonrpc|language-server 115 116 subgraph language-server 117 indexer 118 end 119 120 subgraph vscode 121 webview-->extension 122 extension-->webview 123 end 124 125 subgraph indexer 126 compiler-frontend 127 end 128 ```