词条 | Nuva |
释义 | Nuva语言是一种面向对象的动态脚本语言,Nuva对应于中国神话人物女娲一词。本计算机语言主要用于基于模板的代码生成。除此之外,本语言支持正则表达式, 内置 O/R Mapping 引擎和基于 HTML/XML 的界面引擎,因此也能用于开发应用程序,如文本和数据处理、GUI 应用程序等。本语言设计的特点是语法简单灵活, 动态的,无类型约束,支持面向对象,自动垃圾回收,内置 O/R Mapping 支持,模版专用的语言元素等。 语言特点(语法简单灵活 动态无约束 支持面向对象 自动垃圾回收 模板专用元素) 虚拟机特点(内置了正则表达式引擎 内置了 O/R Mapping 引擎 内置了基于HTML/XML 的界面引擎) 代码示例(1 Hello, Nuva! 2 foreach | O/R Mapping 3 file | 生成文件 4 assign | 捕获输出 5 函数 | 递归调用 6 类 | 多态性) 语言概述:简介Nuva语言是一种面向对象的动态脚本语言。Nuva对应汉语的女娲一词。女娲是中国上古时代的神话传说人物。 设计目的Nuva语言的设计目的是用于基于模板的代码生成。除了用于代码生成领域外,Nuva语言也能用于开发应用程序,如文本和数据处理、GUI 应用程序等。 Nuva (女娲) 语言是一种面向对象的动态脚本语言 ( Scripting Language ) ,它的设计目的是用于基于模板的 ( Template Based ) 代码生成 ( Code Generation )。除了用于代码生成 ( Code Generation ) 领域外,Nuva (女娲) 语言也能用于开发应用程序,如文本和数据处理、GUI 应用程序等。 Nuva (女娲) 语言的设计目的是用于基于模板的 ( Template Based ) 代码生成 ( Code Generation ) ,因此 Nuva (女娲) 语言中包含了专门用于模板的语言元素,编写模板更为灵活方便。 Nuva (女娲) 虚拟机内置了正则表达式引擎,能够方便的进行文本处理。 Nuva (女娲) 虚拟机内置了 O/R Mapping ( Object-Relation Mapping ) 引擎,您可以通过面向对象的方式直接存取数据库架构和数据。 Nuva (女娲) 虚拟机内置了基于 HTML/XML 的界面引擎,能够方便的编写 GUI 应用程序 ( Macrobject CodeAuto 就是用 Nuva 语言编写的)。 设计特点我们在开发 XObject、CodeAuto、HelpAuto、WebAuto、AppAuto 等产品的时候,需要一种基于模板的代码生成工具。在考察了一些生成工具以后,发现它们的模版技术不够简便,因此我们决定自己来实现它。起初我们的模版采用一种简单的标记技术,并实现了我们的第一个版本的生成工具。然后这种标记技术得到扩展,变得非常像一门新的语言,我们决定对其进行规范化,于是就有了 Nuva。 Nuva 语言的设计目的就是用于基于模板的代码生成,因此我们决定这门新的语言要有如下特点: l 语法简单灵活 l 动态的,无类型约束 l 支持面向对象 l 自动垃圾回收 l 内置 O/R Mapping 支持 l 模版专用的语言元素 主要应用Nuva 除了用于代码生成外,也能用于开发应用程序,如文本和数据处理、GUI 应用程序等。 l 支持正则表达式,能够方便的进行文本处理。 l 内置 O/R Mapping 引擎,能够简便的存取关系数据。 l 基于 HTML/XML 的界面引擎,能够方便的编写 GUI 应用程序。 语言特点语法简单灵活Nuva语言采用类似伪码的语法风格,结构之间可以任意嵌套,关键字和运算符兼容大部分现有的编程语言,非常容易学习。 <. if (a = b && c == d or e <> f) ?? foo() function foo() Result = 'foo' end function end if .> 动态无约束Nuva语言采用动态类型,使用时不需声明类型,赋值计算时自动进行类型转换,如下: <. var a = '1' a ++ ?? 'a' ~ a // 结果为: a2 .> 支持面向对象Nuva语言支持面向对象的编程方法,支持继承性和多态性。 自动垃圾回收Nuva语言支持自动垃圾回收,程序员不需显式释放其所创建的对象。 模板专用元素Nuva语言为模板增加了专用的语言元素,方便模板的编写。 <. | .> | [. | .] 模板标记可以混合配对使用,对于格式要求很严格的场合非常有用。 [.='Hello, Nuva!'.] <.='Hello, Nuva!'.> [.='Hello, Nuva!'.> <.='Hello, Nuva!'.] 凡[.之前的所有空白字符原样输出,.]之后的所有空白字符(包括换行)也原样输出; 如果行首到<.之间均为空白字符,则该部分空白字符不输出,否则原样输出; 如果.>到行尾之间均为空白字符,则该部分空白字符和换行不输出,否则也原样输出。 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 引擎Nuva虚拟机内置了 O/R Mapping 引擎,可以通过面向对象的方式直接存取数据库架构和数据。 内置了基于HTML/XML 的界面引擎Nuva虚拟机内置了基于 HTML/XML的界面引擎,能够方便的编写 GUI 应用程序,典型的例子就是 Macrobject CodeAuto 代码生成器。 代码示例1 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(); .> 2 foreach | O/R Mapping<. function Foreach_Demo() // Load Schema from a Xml file var schema = System.Data.LoadSchema( System.Path.ProjectPath ~ '..\orthwind\orthwind.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 .> 3 file | 生成文件<. function File_Demo() ?? \\r\ ~ '--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\ ~ '--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 .> 4 assign | 捕获输出<. function Assign_Demo() // 'Result' assigned from the output in the assign statement assign(Result).] Generate Text ... @[.=System.Now.] ... <.end assign end function .> 5 函数 | 递归调用<. /*-------------------------------------------------------- Factorial --------------------------------------------------------*/ function Factorial ( N ) if (N <= 1) Result = 1; else Result = N * Factorial(N - 1); // Recursion Call end if; end function; .> 6 类 | 多态性<. 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 .> |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。