ShoneSharp语言(S#)的设计和使用介绍

系列(4)— 入门概述

作者:Shone

声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp。

摘要: S#语言演变到如今,其实已经形成比较强的个性了,也有很多利弊。语言的个性是由其语法确定的,S#的基因就是公式系统,其设计、表达和核心库在各种语言比较中绝对算的上是一流的,已支持近3800个函数或属性或方法调用。

软件: S#语言编辑解析运行器,运行环境.NET 4.0,绿色软件,单个EXE直接运行,无副作用。网盘下载链接为https://pan.baidu.com/s/1dF4e08p

前面几篇博文发布后我发现各种搜索引擎很难索引到S#,应该是把#看成了特殊符号,因此我把标题改成“ShoneSharp语言(S#)的设计和使用介绍系列”,同时也突出了本系列还将介绍S#的语言设计过程与相关考量,可供语言设计爱好者参考。

今天开始就进入正题,对S#语言本身进行抽丝剥茧,详细介绍。

一、S#语言观

编程语言是人设计和使用的,因此不可避免也反应了人性,肯定会带有某些主观偏好和执念。有人的地方就有江湖,不同民族也有不同方言,可见编程语言的多样性也是必然。物以类聚,人以群分,持有类似编程语言观点的人在一起交流也会比较融洽,不过也没有必要党同划异、争论不休。

个人认为没有一种编程语言是完美的。每种语言都在走平衡木,在机器理性与人类感性世界里徘徊,在运行性能与开发效率中摇摆,在科学理论与工程现实夹缝中求生。

S#语言的开发不是为了替代谁谁,也不是为了显摆和牛逼,他是Shone个人爱好和探索的产物,也是语言自身不断进化的结果。S#语言演变到如今,其实已经形成比较强的个性了,要添加新的功能特性,很多情况下会产生排斥反应。

S#语言也有很多利弊。比如其特色是追求强大的表达能力,但是会牺牲一些运行性能;解析运行一体化很好,但是肯定不利于大规模程序的调试;万物皆树结构很酷,但是会多消耗一些内存。

S#语言不是大规模系统开发语言,但也是一种颇具特色的领域语言,因为他一开始就在内核层面支持二维三维的几何类型,因此天生就适用于表达图形,特别是参数化的矢量图形。

总之天下语言千千万,哪里有需求,哪个语言更适用就用那个。比如编写驱动程序肯定选C++/C/汇编,开发企业应用首选Java/.NET,Web应用就更多了。本人平时也还是使用C#做开发,定制图形系统时专门使用S#,公开S#也是想看看是不是有可能更多类似领域的应用,比如Grassshop、Dynamo等等。JavaScript一开始也只是浏览器语言,现在不也通过Node扩展到了服务器端了。

二、S#符号系统

编程语言其实就是个处理符号的系统,横看成岭侧成峰,远近高低各不同。

从不同角度和层次,S#语言都是进行了精心设计。

  • 从机器角度看:S#处理的是数据,一切都是二进制符号,这是最原始的数据;
  • 从用户角度看:S#处理的是字符,一切都是字节符号,开始有编码含义;
  • 从词法层次看:S#处理的是单词,一切都是词法符号,开始有分词含义;
  • 从语法层次看:S#处理的是节点,一切都是语法符号,开始有组合含义;
  • 从语义层次看:S#处理的是标记,一切都是语义符号,开始有上下文含义;
  • 从运行层次看:S#处理的是求值,一切都是信息符号,最终获得有意义的数据。

S#语言开始处理的是数据,最终获得的也是数据,从而形成周而复始的闭环。而其中处理的过程,其实就是数据变成信息的过程,也就是从没有意义的数据,变成有指定意义的数据(即信息)。

三、S#公式系统

语言的个性是由其语法确定的。S#从2007年开始开发,最初主要用于进行式解析,后面扩展支持了语句以及类,变成了全功能语言,但是在实现上其实公式系统和语句系统的表达能力是等价的,只是语法差异而已。

S#的基因就是公式系统。了解和学习S#,必然从基础的公式系统入手。这里自吹一句,S#公式系统的设计、表达和核心库在各种语言比较中绝对算的上是一流的,已支持近3800个函数或属性或方法调用,大家估算一下其开发工作量,可以用人年计算了。

S#公式由各种数据类型的常量、变量、运算符、函数、属性、方法等组合而成,并可以解析并计算得到一个相应数据类型的结果值,从而建立起变量和对象之间的逻辑依赖关系,确保在变量发生变化时相应的对象可以保持联动更新。

由于常量、运算符、函数、属性、方法数量很多,每个符号解释可以在编辑器软件中查阅,本文主要概述其含义、用途和方法,方便大家入门。后续章节还会逐一详解。

1) 类型

类型用于对各种不同数据进行分类,是S#公式进行解析和计算的基本要素。

S#语言支持的基础数据类型有如下几大类。

数值(即C#的double):用于表示整数或实数值,如10、25.32等。

字符串(即C#的string):用于表示文本内容,如"S#公式是很有特色"等。

布尔值(即C#的bool):用于表示是/否两种状态,如true、false等。

数组(即C#的类型化数组,如double[], string[], bool[]等):由相同类型的数据元素组成的一个数据序列,每种数据类型都可以有相应类型的数组。最常用的数组是数值数组如[10,20],还可以有其他的字符串数组如["红色","黄色","蓝色"]等。

列表(即C#的object[]的包装类):由相同或不同类型的数据元素组成的一个数据集合,集合中既可以包含基本数据、也可以包含数组、还可以包含其他列表,从而形成更加复杂的层级式数据结构,如{10,25.32,true,false,[10,20],["红色","黄色", "蓝色"],{1,2,{3,4}}}。

数据表(即C#的Dictionary<string,string>的包装类):其他语言也叫字典、或哈希表、或键值表,也是一种列表,只不过其中数据可以通过字符串直接索引。例如{A=5, B=[1,2], C={10,20,30}}。

二维几何:常用的有二维点如(10,10)、二维向量如<10,5>、二维线形如path(0,0,0,50,0,100,30)等。

三维几何:常用的有三维点如(10,10,5)、三维向量如<10,5,5>、三维面如plane3d((0,0,0),<1,1,1>)、道路中心线如roadway({[0,0,0,0,210], [195.535,141.294,124.927,210,0]},{[0,0,0],[195.535,30,0]},true,10,0,0,0)等。

2)常量

常量是系统预先定义的一些数值,如PI对应数值是3.1415926535897931。

大部分常量的表达和含义与C#相同,这是S#语言的偏好。

常量可以在编辑器中手工直接输入,也可以通过Ctrl+J组合键下拉选择框输入。

另外“常量”主菜单中还提供了常用π , ε , e , ∞ , true , false等符号的快捷输入。

3)变量

变量命名规则与各种程序语言类似,也是由字母、数字或_组合而成首字非数字的字符序列,如h1,width等。建议首字母采用小写,名称尽量精简而有含义,便于在建模过程中记忆和使用。变量有其相应的作用范围,即不同层级的变量只能在相应层级的定义范围内引用。

S#语言的默认定义范围偏好是:上级定义的变量对象可以被后续所有子级的对象引用,而在有重名变量时子级就近优先。

变量可以在编辑器中手工直接输入,也可以通过Ctrl+J组合键下拉选择框输入。

4)运算符

运算符是公式的基本表达方式,通过运算符可以对数值、常量、变量和子公式进行计算求值。常用的运算符有+-*/等,如(2*a+5*b)/c-10。

大部分运算符的表达和含义与C#相同,这是S#语言的偏好。

运算符通常由1~2个简单符号组成,可以在编辑器中手工直接输入。

S#支持在二位编辑页面中把公式展开并转换为可视化层次结构,从而让对应的运算符含义和公式逻辑结构更加直观,接近于科技论文中的数学公式表达方式。

5) 函数

函数调用是S#公式使用最为广泛的表达方式,其基本格式是:函数名称(参数,…)。其中每个参数又可以是一个子公式,从而可以形成更加复杂的公式嵌套结构。最常用的函数是数值函数,如sin(30)就是求正弦函数值。

大部分数值运算是通过小写函数调用,这是S#语言的偏好。

函数调用可以在编辑器中手工直接输入,也可以通过Ctrl+J组合键下拉选择框输入。注意在下拉选择框中输入字符时将自动高亮到最先匹配的条目,这时按下ESC键放弃,按下回车键则自动补全完整的函数名,而按下TAB键则自动补全完整的函数调用示例。如输入log后按TAB键则自动补全为log(10,2),然后再回过来修改参数,这对于有多个参数的函数可以减少记忆和输入的工作量。

S#除了各种语言都支持的一般函数意外,还支持功能更强大如几何函数、高级函数、函数定义等,其使用更复杂也更灵活,放在后续介绍。

6)属性

属性是面向对象的表达方式之一,可以方便表达被调用对象的各种相关信息,其基本格式是:对象.属性名称。

例如[10,20,30,40,50].Count表达的就是数组[10,20,30,40,50]的计数信息,计算结果为5。有的语言也可以采用函数替代属性如count([10,20,30,40,50]),但输入明显更加繁琐一点。

属性写法可以形成很有特色的链式写法,如A.B.C….,一直点下去,这也是S#语言的偏好。

属性调用虽然可以在编辑器中手工直接输入,但更常用的方法是通过按.键或Ctrl+J组合键下拉选择框输入。在下拉选择框中输入字符时将自动高亮到最先匹配的条目,这时按下ESC键放弃,按下回车键或TAB键则自动补全完整的属性名。

7)方法

方法也是面向对象的表达方式之一,可以方便表达针对被调用对象的各种操作,其基本格式是:对象.方法名称(参数,…)。

例如[10,20,30,40,50].Sub(2)表达的就是从数组[10,20,30,40,50]的索引2位置开始提取子数组,计算结果为[30,40,50]。有的语言也可以采用函数替代方法如sub([10,20,30,40,50],2),但输入会更加繁琐一点。

方法写法可以形成很有特色的链式写法,如A.B().C()….,一直点下去,这也是S#语言的偏好。

方法调用虽然可以在编辑器中手工直接输入,但更常用的方法是通过按.键或Ctrl+J组合键下拉选择框输入。与函数输入一样,在下拉选择框中输入字符时将自动高亮到最先匹配的条目,这时按下ESC键放弃,按下回车键或TAB键则自动补全完整的方法名,而按下TAB键则自动补全完整的方法调用示例。

声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp。

软件: S#语言编辑解析运行器,运行环境.NET 4.0,绿色软件,单个EXE直接运行,无副作用。网盘下载链接为https://pan.baidu.com/s/1dF4e08p

ShoneSharp语言(S#)的设计和使用介绍系列(4)— 入门概述的更多相关文章

  1. ShoneSharp语言(S#)的设计和使用介绍系列(1)— 开篇

    ShoneSharp语言(S#)的设计和使用介绍 系列(1)- 开篇 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. 一 ...

  2. ShoneSharp语言(S#)的设计和使用介绍系列(3)— 修炼工具

    ShoneSharp语言(S#)的设计和使用介绍 系列(3)- 修炼工具 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...

  3. ShoneSharp语言(S#)的设计和使用介绍系列(2)— 掀开盖头

    ShoneSharp语言(S#)的设计和使用介绍 系列(2)- 掀开盖头 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...

  4. ShoneSharp语言(S#)的设计和使用介绍系列(11)—“类”披炫服靓妆化成“表”

    ShoneSharp语言(S#)的设计和使用介绍 系列(11)—“类”披炫服靓妆化成“表” 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Sh ...

  5. ShoneSharp语言(S#)的设计和使用介绍系列(10)— 富家子弟“语句“不炫富

    ShoneSharp语言(S#)的设计和使用介绍 系列(10)— 富家子弟“语句“不炫富 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Sho ...

  6. ShoneSharp语言(S#)的设计和使用介绍系列(9)— 一等公民“函数“爱炫巧

    ShoneSharp语言(S#)的设计和使用介绍 系列(9)— 一等公民“函数“爱炫巧 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Shon ...

  7. ShoneSharp语言(S#)的设计和使用介绍系列(8)— 最炫“公式”风

    ShoneSharp语言(S#)的设计和使用介绍 系列(8)— 最炫“公式”风 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSha ...

  8. ShoneSharp语言(S#)的设计和使用介绍系列(7)— 布尔Bool及对象Object

    ShoneSharp语言(S#)的设计和使用介绍 系列(7)— 布尔Bool及对象Object 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ ...

  9. ShoneSharp语言(S#)的设计和使用介绍系列(6)— 字符串String

    ShoneSharp语言(S#)的设计和使用介绍 系列(6)— 字符串String 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneS ...

随机推荐

  1. JAVA基础知识总结:四

    一.方法 1.什么是方法? 对于功能相同的代码段,为了简化代码,会把功能相同的代码抽取出来,方便多次使用,Java中,我们使用[方法],也被称为函数 2.函数的声明 语法: 访问权限修饰符 其他修饰符 ...

  2. java自动化-juint框架简述

    本人使用的是java的juint框架来组织的自动化测试,故我这边需要简单介绍一下juint框架 首先,建议自行百度一下juint框架,先有一个大概的了解 所谓的接口自动化测试,会对多个接口中每一个接口 ...

  3. 如何在 Apple TV 上使用描述文件

    您可以使用 OS X 上的 Apple Configurator 在 Apple TV 上安装配置描述文件. 开始前,请在 Mac 上安装最新版本的 Apple Configurator(如果尚未安装 ...

  4. 数据结构中,几种树的结构表示方法(C语言实现)

    //***************************************** //树的多种结构定义 //***************************************** # ...

  5. 剑指offer--面试题3

    一 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.完成一个函数,输入这样的数组和一整数,判断这个数组是否包含这个整数. 二 分析 如果这个二维数组是 ...

  6. Connect the Cities(prim)用prim都可能超时,交了20几发卡时过的

    Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  7. Android 开发笔记___SQLite__基本用法

    SQLiteOpenHelper package com.example.alimjan.hello_world.dataBase; import android.content.ContentVal ...

  8. Linux特殊字符用法、后台命令管理

    !! 重复前一个命令!字符 重复前一个以"字符"开头的命令!num 安装history命令的序号执行命令!?abc 重复之前包含"abc"的命令!-n 重复倒数 ...

  9. CSS3 动画 animation和@keyframes

    CSS3 @keyframes 规则 如需在 CSS3 中创建动画,您需要学习 @keyframes 规则. @keyframes 规则用于创建动画.在 @keyframes 中规定某项 CSS 样式 ...

  10. Java多线程Future模式

    Java多线程Future模式有些类似于Ajax的异步请求Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 假设服务器的处理某个业务,该业务可以分 ...