**Nuva**语言是一种面向对象的动态脚本语言。Nuva对应汉语的「女娲」（中国上古时代的神话传说人物）一词。

设计目的
----

设计目的是用于基于模板的代码生成。除了用于代码生成领域外，也能用于开发应用程序，如文本和数据处理、GUI应用程序等。

特点
--

* 语法简单灵活：采用类似虛擬碼演算法/伪码的语法风格，结构之间可以任意嵌套，关键字和运算符兼容大部分现有的编程语言，非常容易学习。

```
  <.
    if (a = b && c == d or e <> f)
      ?? foo()
     
      function foo()
        Result = 'foo'
      end function
    end if
  .>
```

* 动态的，无类型约束：采用动态类型，使用时不需声明类型，赋值计算时自动进行类型转换，如下：

```
  <.
    var a = '1'
    a ++
    ?? 'a' ~ a
    // 结果为: a2
  .>
```

* 支持面向对象的编程方法：支持继承性和多态性。
* 支持自动垃圾回收：程序员不需显式释放其所创建的对象。
* 模板专用的语言元素
	+ 模板标记（「<.」、「.>」、「[.」、「.]」）可以混合配对使用，对于格式要求很严格的场合非常有用。

```
[.='Hello, Nuva!'.]
```

```
<.='Hello, Nuva!'.>
```

```
[.='Hello, Nuva!'.>
```

```
<.='Hello, Nuva!'.]
```

* + 凡「[.」之前的所有空白字符原样输出，「.]」之后的所有空白字符（包括换行）也原样输出；
	+ 如果行首到「<.」之间均为空白字符，则该部分空白字符不输出，否则原样输出；
	+ 如果「.>」到行尾之间均为空白字符，则该部分空白字符和换行不输出，否则也原样输出。
	+ 特有的**file**和**assign**结构能够非常方便的对输出进行组合、分解，从而方便了模板的编写。

Nuva虚拟机特点
---------

* 内置正则表达式引擎：能够方便的进行文本处理。

```
  <.
    var text = System.File.Load('Regex_Test.nuva')
    foreach(str = text.RegexMatchs('\w+', ''))
      ?? str
    end foreach
  .>
```

输出如下的结果：

```
  var
  text
  System
  File
  Load
  Regex_Test
  nuva
  foreach
  str
  text
  RegexMatches
  w
  str
  end
  foreach
```

* 内置O/R Mapping引擎：可以通过面向对象的方式直接存取数据库架构和数据。
* 内置基于HTML/XML的界面引擎：能够方便的编写GUI应用程序，典型的例子就是Macrobject CodeAuto代码生成器（页面存档备份，存于）。

代码示例
----

### Hello, Nuva!

```
  <.. "Hello, Nuva!" Demo ..>
  <.
  //======================================
  //	Hello, Nuva! (1)
  //======================================
  ?? 'Hello, Nuva!'
  
  /*======================================
    	Hello, Nuva! (2)
  ======================================*/
  function HelloNuva()
    ?? "Hello, Nuva!";
  end function
  
  HelloNuva();
  
  /*======================================
    	Hello, Nuva! (3)
  ======================================*/
  class Nuva()
    function Hello()
      ?? 'Hello, Nuva!';
    end function
  end class
  
  var n = Nuva();
  n.Hello();
  .>
```

### foreach | O/R Mapping

```
  <.
  function Foreach_Demo()
    // Load Schema from a Xml file
    var schema = System.Data.LoadSchema(
        System.Path.ProjectPath ~ '..\Northwind\Northwind.xobject'
      );
  
    ?? '--------------------'
    ?? 'Tables Order by Name'
    ?? '--------------------'
    foreach(table = schema.Tables.OrderbyName)
      ?? table.Name
    end foreach
  
    ?? '---------------------------------'
    ?? 'Tables Filter by Name.Length < 10'
    ?? '---------------------------------'
    foreach(table = schema.Tables | table.Name.Length < 10)
      ?? table.Name
    end foreach
  end function
  .>
```

### file | 生成文件

```
  <.
  function File_Demo()
    ?? \r\n ~ '--Read file and Output here--'
    file('codeexamples.nuvaproj') end file
  
    // Read file and write to 'Target', overwrite it if exist
    file('codeexamples.nuvaproj', true)
      Target = 'temp.target'
    end file
    
    ?? \r\n ~ '--Read file dynamically and Output here--'
    file('')
      FileName = System.Path.ProjectPath ~ 'output\temp.target'
    end file
    
    // Delete file
    System.File.Delete(System.Path.ProjectPath ~ 'output\temp.target')
  end function
  .>
```

### assign | 捕获输出

```
  <.
  function Assign_Demo()
    // 'Result' assigned from the output in the assign statement
    assign(Result).]
      Generate Text ... @[.=System.Now.] ...
  <.end assign
  end function
  .>
```

### 函数 | 递归调用

```
  <.
  /*--------------------------------------------------------
  	Factorial
  --------------------------------------------------------*/
  function Factorial ( N )
    if (N <= 1)
      Result = 1;
    else
      Result = N * Factorial(N - 1); // Recursion Call
    end if;
  end function;
  .>
```

### 类 | 多态性

```
  <.
  function Class_Demo()
    class ClassA()
      function Do()
        this.DynDo()
      end function
      
      function DynDo()
        ?? 'ClassA'
      end function
    end class
    
    class ClassB = ClassA()
      function DynDo()
        ?? 'ClassB'
      end function
    end class
  
    var c1 = ClassA()
    var c2 = ClassB()
    c1.Do()
    c2.Do()
  end function
  .>
```

外部链接
----

* Nuva语言官方主页（页面存档备份，存于） - 可選（简体中文）或（英文）



|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
程序设计语言 |
| --- |
|  |
| 按范型 | 

|  |  |
| --- | --- |
| 过程式 | 
* FORTRAN
* COBOL
* ALGOL 60
* BASIC
	+ QB64（英语：）
* PL/I
* MUMPS（英语：）
* ALGOL 68
* Forth
* Pascal
	+ Turbo Pascal
* C
* Modula-2
* Ada 83
* occam
* Oberon
* Go
* Zig
* Carbon

 |
|  |
| 面向对象 | 
* Simula 67
* Smalltalk
* C++
* Objective-C
* Eiffel
* Object Pascal
	+ Delphi
* Self
* Visual Basic
	+ Gambas
* Ada 95
* Java
* C#
	+ Vala
* Fantom（英语：）
* Crystal（英语：）

 |
|  |
| 多范型 | 
* Modula-3
* Dylan
* Python
* Lua
* JavaScript
* Ruby
* D
* Factor
* Scala
* F#
	+ F\*
* Haxe
* Dafny（英语：）
* Nim
* Rust
* Dart
* Julia
* Swift
* Bosque（英语：）

 |
|  |
| 函数式 | 

|  |
| --- |
| 
* LISP
	+ Scheme
	+ Common Lisp
	+ Clojure
* Logo
* APL/J
* ML
	+ Standard ML
	+ OCaml
* Erlang
	+ Elixir
* Haskell
	+ Curry
* SAC
* Agda
* Idris
* Pure（英语：）
* jq（英语：）
* Cuneiform

 |

 |
|  |
| 逻辑式 | 
* Prolog
* Datalog
* Mercury
* AnsProlog

 |

 |
|  |
| 脚本语言 | 

|  |  |
| --- | --- |
| 动态语言 | 
* SNOBOL
* Icon
* REXX
* Perl
	+ Raku
* Tcl/Tk
* CLOS
* newLISP
* Python
* Lua
* Ruby
* PHP
	+ Hack
* REBOL
	+ Red（英语：）
* Julia

 |
|  |
| Shell语言 | 
* Unix shell
	+ sh
	+ csh/tcsh
	+ ksh
	+ bash
	+ ash
	+ zsh
	+ rc（英语：）
	+ fish
* sed
* AWK
* PowerShell

 |
|  |
| ECMA-262 | 
* ECMAScript
	+ JavaScript
* TypeScript
* Node.js/Deno
* CoffeeScript/LiveScript（英语：）
* Elm
* PureScript
* Reason

 |

 |
|  |
| 特定平台 | 

|  |  |
| --- | --- |
| .NET | 
* C#
* C++/CLI
* F#
* PowerShell
* VB.NET
* Small Basic

 |
|  |
| JVM | 
* Java
	+ AspectJ（英语：）
* Scala
* Clojure
* Groovy
* Kotlin

 |

 |
|  |
| 特定领域 | 

|  |  |
| --- | --- |
| 科学计算 | 
* Speakeasy（英语：）
* IDL
	+ GDL
* Maxima
* Maple
* MATLAB
	+ Octave
	+ Scilab
* Wolfram
* R
* Yorick（英语：）
* SageMath
* Julia

 |
|  |
| GPU计算 | 
* GLSL
* HLSL
* OpenCL
* CUDA
* Futhark

 |
|  |
| 数据查询 | 
* SQL
	+ PL/SQL
	+ T-SQL
	+ SQL/PSM（英语：）
* xBase（英语：）
* XPath
* XQuery（英语：）
* GraphQL

 |
|  |
| 可视化 | 
* Simulink
* LabVIEW
* Orange（英语：）
* KNIME（英语：）
* Scratch
	+ Snap!
* Power Fx

 |
|  |
| 传媒设计 | 
* SuperCollider
* Pure Data
* Processing
* ChucK

 |

 |
|  |
| 其它 | 
* 汇编语言
* make
* PostScript
* XSLT
* WebAssembly

 |
|  |
| 
* 分类 目录
* 列表级条目 列表
* 历史
* 比较（英语：）
* 时间线（英语：）

 |

 |