ShoneSharp语言(S#)的设计和使用介绍系列(4)— 入门概述

来源:互联网 发布:许晴 王雪冰 知乎 编辑:程序博客网 时间:2024/06/05 20:37


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

系列(4)— 入门概述

作者:Shone

声明:原创文章欢迎转载,但请注明出处。

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


前面几篇博文发布后我发现各种搜索引擎很难索引到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键则自动补全完整的方法调用示例。

 

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 黑曼巴c挂不上弦怎么办 费效比超过100%怎么办 入职体检不报销怎么办 入职体检过不了怎么办 入职体检血糖高怎么办 入职体检没过怎么办 入职体检血压高怎么办 看病没带医保卡怎么办 孕妇8个月血压高怎么办 怀孕3个月血压高怎么办 怀孕3个月血压低怎么办 38周孕妇血压高怎么办 孕前检查后怀孕怎么办 精子a加b成活率底怎么办 怀孕五周孕酮低怎么办 怀孕38天孕酮低怎么办 刚怀孕了孕酮低怎么办 怀孕2个月孕酮低怎么办 怀孕七周孕酮低怎么办 孕前检查孕酮低怎么办 甘油三酯偏高7.2怎么办 入职体检来例假怎么办 6激素检查喝水了怎么办 抽血前吃了东西怎么办 怀孕一个月孕酮低怎么办 怀孕了老是有痰怎么办 孕妇有很多白痰怎么办 血糖高怎么办吃什么好 5年糖尿病血糖高怎么办 血糖高引起的视力模糊怎么办 谷丙转氨酶和谷草转氨酶高怎么办 产检血糖有点高怎么办 孕期餐后血糖高怎么办 怀孕12周血糖高怎么办 怀孕2个月血糖高怎么办 怀孕7个月血糖高怎么办 孕妇7个月血糖高怎么办 空腹血糖6%2e7怎么办 血糖和尿酸都高怎么办 血糖高的孕妇便秘怎么办 血糖低怎么办吃什么好