分类分类
大小:9.72 MB 更新:2023/06/14
类别:编程工具系统:WinXP, Win7, Win8, Win10, WinAll
aardio专用于桌面软件快速开发,程序提供web.form支持库(开源),可以方便的创建web窗体加载网页创建web风格的软件界面或实现嵌入浏览器应用,网页与aardio代码可以方便的交互调用;程序提供了迭代功能,该功能是指循环取值并不断逼近最终目标的过程,每次取值的结果总是作为下一次迭代的初始值,具体到迭代器函数,就是每一次调用迭代器得到的第一个返回值总会作为下一次调用迭代器的参数这个关键的迭代结果值称之为控制变量;另外程序提供了web.layout支持库,封装了轻量快速的界面引擎HTMLayout,可以使用传统的HTML,CSS技术,更加方便的实现漂亮的界面,而且运行,响应速度极快,开发工具;程序提供可视化开发工具,可以比较方便的的通过拖拉控件创建程序;使用标准库内置并开源的plus控件可以方便的实现控件九宫格贴图、透明贴图、仅仅通过拖拉设置就可以快速制作出漂亮的界面;强大又实用,需要的用户可以下载体验
aardio是专用于桌面软件快速开发的新一代混合型编程语言 - 具有动态语言轻便、灵活的特性,而且又可以同时支持静态类型开发,象静态语言那样使用。aardio可以直接支持原生DLL,即使是外部EXE进程中的函数,也可以使用一句代码声明为普通的aardio函数对象( 原生call支持 ),aardio支持非常多的标准调用约定,例如 stdcall,cdecl,thiscall,fastcall,regparm(n) 等调用约定都可以支持。aardio虽然小,但支持的接口很丰富、可以支持com静态动态双接口,象VBS一样原生支持com对象。
全新的混合编程语言开创了一种全新的编程方式,也因为这种语言特性,aardio可以非常方便的嵌入各种第三方语言,目前aardio可以嵌入汇编机器码,C语言,Java,PHP,C#,Python,Javascript,VBScript......等等数量众多的第三方编程语言,方便的互调函数,并且这些调用第三方语言的功能模块都是使用aardio实现( 开放源码 )。
aardio可以将硬盘目录,硬盘文件一键嵌入EXE文件,将全部程序包含所有资源生成独立的绿色EXE文件,aardio制作的程序大多不需要安装程序,也不需要释放DLL运行库,可以方便的制作免安装绿色软件。
aardio支持多线程开发,复杂的多线程开发在aardio中变得非常简单,标准库也提供大量简化多线程开发的辅助支持库,为多线程软件开发带来很大的方便(请参考aardio范例 -> 多线程 )。
aardio的标准库基本使用纯aardio源码实现,并且全部开源,标准库提供了大量的简化编程的常用函数,涉及到软件开发的方方面面,极大的简化了桌面软件开发过程。
标识符
标识符是指编程语言中由起标识作用的英文字母、数字或中文字符、以及下划线组成的命名符号,
一般用来标识用户或系统定义的数据或方法,例如常量名、变量名、函数名等。
标识符基本规则:
标识符由英文字母、中文字符、数字、下划线“_”三种字符组成。
数字不允许作为首字符。
变量名包含中文时,中文字符前面不能有字母或数字。
可以使用美元符号($)作为变量名或变量名的第一个字符。
可以使用下划线作为变量名或常量名的首字符,当下划线作为首字符时表示常量,单个下划线表示变量.
标识符区分大小写
在程序运行过程中,用来存储数据值并且其值能被改变的对象称为变量。
变量的名称用字母、数字、中文字符、下划线等组成的合法标识符来表示。
变量名开始字符不能为数字。
变量名包含中文时,中文字符前面不能有字母或数字。
可以使用美元符号($)作为变量名或变量名的第一个字符。
可以使用下划线作为变量名或常量名的首字符,当下划线作为首字符时表示常量,单个下划线表示变量.
应遵循就近原则(Principle of Proximity):在第一次使用局部变量之前定义该变量,以使代码保持清晰的结构。
1、浏览至此,需要的用户可以点击本网站提供的下载路径下载得到对应的程序安装包
2、用户可以打开应用程序数据包,双击程序数据包即可打开程序
3、用户打开程序后即可开始您的开发旅途
1、成员变量
成员变量是属于一个名字空间的成员对象。
变量的默认名字空间为global名字空间,并可以使用namespace改变指定代码块的名字空间。
可以使用self关键字访问当前名字空间。使用..操作符访问global名字空间
2、局部变量
var声明一个局部变量,作用域为当前语句块,以及被当前语句块所包含的语句块。
var语句声明的局部变量可以指定一个初始值,也可以不指定,建议对所有变量指定初始值。
例如:
常量
在程序运行过程中,用来存储数据值并且其值不能被改变的对象称为常量,常量仅可初始化赋值一次,不可以修改其常量的值。
1、字面常量
指以数值、字符串等字面值表示数据的对象。
象123,"abc"这样的值被称之为字面值,被称为字面值是因为他的值就是代码直接描述的值,并且没有名字可以称唿他,只能用他的值来表示。
常量只能赋值一次,重复赋于相同的数字或字符串等常量值将会被忽略,赋于不同的值将会抛出错误。
aardio中的常量以下划线作为起始字符的标识符来表示。
2、具名常量
用合法的标识符来表示不可修改数据的对象称为常量,与字面值不同的是他具有类似变量名的常量名称。
常量名以下划线作为首字符,或使用::操作符将普通的变量转换为常量。
具名常量可以理解为赋值后不可修改的变量。
2.1 成员常量
用字母、数字、中文字符、下划线等组成的标识符来表示,并且必须以下划线作为起始字符。
成员常量与成员变量一样默认创建于当前名字空间(self名字空间)、也可以指成员常量的名字空间前缀。
成员常量的长度必须大于1并小于256个字节(单个下划线不是常量,在aardio中通常用作匿名变量占位符)
例如:
2.2 全局常量用大写字母、数字、下划线等组成的标识符来表示,并且必须以“下划线+大写字母”作为起始字符。全局常量类似于成员常量,区别是必须大写、并且位于globle根名字空间。实际上使用全局对象是不好的习惯,你应当尽可能的避免使用全局对象、将他们放入适当的名字空间。不要介意多打几个字多写几个名字空间前缀,理解了全局对象会不知不觉增加程序的复杂度、并且努力地去避免使用全局对象(这里不是指名字空间、相反应当更多地使用名字空间来组织数据),意谓着你已经成为了一名有经验的程序员。
而且全局常量在aardio是运行时对象,意谓着会增加发布后的程序体积。
把他们改为字面常量并加上注释是一个不错的优化方案,aardio提供相应的工具。
这种优化技术被用于libswin#DEFINE.aardio(这不是一个库,放在库目录下仅仅是为了让扫描常量声明到智能提示数据库),效果如下:
2.3 转换全局常量
将一个变量名转换为 global名字空间下的全局常量名 - 并保护该常量在其后加载的代码中一旦赋为非空值后即不可修改,例如
全局常量需要遵守以下使用规则:1、全局常量名首字母大写(以区别普通变量 )。
aardio默认定义了少量全局常量函数名 - 这些关键函数全部小写首字母,但在aardio编辑器中显示为蓝色高亮状态。
2、当一个变量被定义为全局常量,赋于非空值以后其值即不能再随意更改 。
全局常量一般使用 ::Name := 初始值 赋值,等价于使用 ::Name = ::Name or 初始值 以避免重复初始化。
3、::的作用域是根据代码的载入顺序向下向后的,所以在同一文件中已定义的全局常量名再次使用时可以省略::前缀,但因为代码文件的载入有不确定性 - 在其他文件首次使用该常量名时仍然应该使用::定义一次。
下图显示了win库定义的全局常量:
3、使用初始化赋值语句定义常量
常量是仅能初始化赋值一次,对于数值常量,重复赋于相同的值会被自动忽略。
如果常量的值是非数值对象,即不能保证每次创建的值是相同的,为避免无意中修改常量值导致异常,可使用:=操作符赋值。
例如:
上面的代码等效于
动态指针并不是一个新的类型 - 而是与普通指针拥有相同的数据类型, raw.realloc()函数可用于分配、释放一个动态指针,并且可以使用raw.realloc()再次调整该指针分配的内存大小,动态指针的地址是可变的,调整大小后指针变量应当更新为返回的新指针。
动态指针可以作为普通指针使用,但是当你把动态指针传入可以识别此类型指针的raw.realloc() raw.concat() raw.sizeof() 等函数,
aardio可以获取到一个头信息(用于记录内存大小、存储的数据大小),动态指针会在返回给用户的指针地址前面倒退8个字节记录2个32位字段的内存、数据长度信息,然后总是向后移动8个字节将可用的指针地址返回给用户, 并且在内存的尾部总是保留2个字节置0用于兼容C风格字符串,
这种指针也可以象普通指针一样用于API函数等可以使用指针的地方,可以用raw.sizeof()获取这种指针指向内存的大小,可以使用raw.concat()函数对这种指针的内存追加拼接数据。
与缓冲区不同的是,如果不指定初始化值,raw.realloc就不会对分配的内存设定初始化值,并且aardio不负责自动释放动态指针分配的内存,显式的调用 raw.realloc(0,动态指针) 才能释放一个动态指针。
使用 raw.buffer() 函数分配的一块可读写内存的指针,缓冲区在aardio中可以像字符串一样作为一个字节数组使用,可以用#操作符取长度,用[]下标操作符取字节值,字符串是常量字节值是只读的,但缓冲区的字节值不但可读,也可以写入,缓冲区在很多字符串函数中都可以作为字符串使用,在API函数中可以作为指针使用。
与动态指针不同的是,即使你不指定初始值,aardio仍然会初始化所有字节的值为0,并且你无法动态调整缓冲区的大小,你不必要也没办法手动释放缓冲区分配的内存,只能由aardio自动回收。
计算机中以八个二进制位表示一个八位字节 - 这称为一个单字节字符。
一组连续的字节就构成一个字符串,在aardio中字符串是基于二进制的,可以包含任何数据(例如图像、文本、或者''等不可打印字符)。
字符串本质上是字节构成的数组,但这个数组是只读的,每次对字符串做替换、连接等操作都会生成新的字符串,
每个字符串指向的内存不应该被直接修改。
下面的代码定义了一个最基本的字符串:
可以用 #str 取该字符串占用的内存字节长度,可以使用下标获取每个字节的数值,例如 str[1] 取出第一个字节的数值是67, 内存中的67在文本中显示出来的就是字符"C" - 这是ASCII编码规定的。
前面说过,一个字节只有8个二进制位,那他能表示的字符就很有限,所以就有了很多不同的编码规则用多个字节来表示更多的字符,例如GBK,UTF-8等多字节字符集,用小于0x80的单字节表示ASCII字符(英文字母数字这些),GBK用双字节表示汉字(首字符大于0x80),而UTF8有两个以上的字节表示宽字符(所有字节大于0x7F).GBK编码的第二个字节还是会与ASCII冲突,
所以处理GBK字符串需要从头开始才能准确的检测一个字节属于谁,这导致容易出现串码问题,而UTF8的宽字符总是大于0x7F,首字符的两个二进制位总是1,而附加字节的前两个二进制位总是10,这就让我们处理文本非常方便,因为格式化的文本,例如HTML,JSON他的分隔标记通常都是固定小于0x7F的ASCII字符,但要注意UTF8的字符是变长的,理论一个字符可以是1,2,3,4 .....个字节。
不同的编码还存在不同的系统环境不兼容的问题,例如GBK的软件在繁体系统上就会乱码,而Unicode编码可以
避免这一问题,Unicode编码有多种方案,主要被采用的则是UTF-8,UTF-16。 windows系统使用的是UTF-16,
而 aardio 10开始,aardio的源代码文件、字符串等等默认使用UTF-8编码。
注意在aardio文档中一般提到Unicode指的是UTF 16.
例如 string.formUnicode() string.toUnicode() 函数默认都是从UTF-8到 UTF-16(Unicode)双向转换。
一、文本字符串
文本字符串放在双引号中,字符串可以包含换行,aardio保证双引号中的字符串换行使用' '换行符,不包含' '回车符。
例如:
如果在双引号中的字符串本身包含双引号,可以用两个连续的双引号表示双引号自身。另外在 aardio 10中,可以使用反引号(键盘左上角ESC下方的键)代替双引号,他们的作用与用法相同,
、
例如:
aardio代码中双引号、反引号内的都是纯文本字符串,并被aardio标记为UTF-8编码。
aardio中每个字符串都有一个UTF格式标记,可以使用 string.getUtf() , string.setUtf() 函数获取或修改UTF标记。
UTF标记是按位设置的,utf & 8 表示一个UTF8编码的字符串,utf & 16表示一个UTF16编码的Unicode字符串。
而UTF & 1 表示一个ANSI字符串,用户在编写程序中一般不应去获取或修改该UTF标记,该格式标记应由aardio自动维护,用于优化自动编码转换的效率。
用户应当明确的了解一个文本的来源编码,并且有有需要时使用string.fromto()等转换函数进行编码转换。
aardio只要在能确认一个字符串的编码格式时才会对字符串进行标记(例如:直接写在aardio源码中的字符串字面值,或者经过string.fromto函数成功转换编码的字符串)。
二、转义字符串
转义字符串放在单引号中。支持转义符,语法与CC++相同。
需要注意的aardio中双引号中的字符串不能使用转义符,这一点与C语言有别。
在单引号中的字符串可以换行书写,但是aardio会忽略所有的换行,
aardio保证单引号中只能以' '表示回车换行符,所有字面值的回车换行被忽略 。
转义字符串支持的转义符与C,JS等类似:
转义符 说明
表示普通字符
ddd 用一到三个数字组成十进制数值表示一个字符 ,
如果数值开始是数字0,将使用八进制表示一个字符,
如果只想表示''后面有其他不相关的数字,
可以在后面加一个换行,例如 str =' 86'
� 用x后面的两位十六进制表示一个字符
uAAAA 用u后面的四位十六进制表示一个Unicode或双字节字符,
注意普通字符串里默认会解析为UTF-8编码的多字节字符,
而在Unicode字符串中解析为UTF-16编码的双字节字符。
响铃符(常用于print函数发出警告铃声,例如 io.print('')
退格 换页 回车 换行
回车换行 制表符(横向跳格)
匹配一个垂直制表符。等价于 " 双引号' 单引号
[ 方括号[] 方括号]
转义字符串可以换行、但是aardio会忽略换行符,必须使用 表示换行、用 表示回车换行。
如果单引号中仅包含一个字符、并且后面附加#号后缀、则表示该字符的字节码数值。
示例:
注意在转义符串结束后附加#符号表示字节码,附加U或u表示Unicode字符串(UTF16编码),例如:
Unicode字符串(UTF16编码)用下标取字节或字符时,返回的是双字节的值,例如
三、包含字符串
包含字符串用于将一个文件直接嵌入aardio代码中,并加载为一个二进制字符串。 例如:
在aardio程序编译发布以后,该文件就会直接被编译到aardio代码中,不再需要原来的文件也可以运行。
四、注释字符串
在aardio的赋值语句中,可以将行注释、段注释作为一个字符串组成赋值语句。
因为aardio中段注定可以自定义注释标记里 星号数目 - 只要首尾匹配就可以,这就可以方便的用来表示复杂的字符串。
而不用担心所包含的字符串里可能出现字符串的结束标记。
注释字符串的作用与双引号类似,表示的是纯文本字符串,aardio解析后会将起标记为UTF8编码,
但是段注释保证将换行解释为 ',并且忽略首尾紧邻星号的第一个空行(如果有的话),而行注释保证字符串没有回车符(' ')或换行符(' ')
附:字符串导航图
回车换行符
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。
要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被搬到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
Unix 系统里,每行结尾只有“<换行>”,即' ';
Windows系统里面,每行结尾是“<回车 ><换行>”,即' ';
Mac系统里,每行结尾是“<回车>”。
在aardio中可使用string.crlf() 函数格式化换行为统一风格。
一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号
0x0D(asc码是13) 指的是“回车” aardio中写为' ' 是把光标置于本行行首
0x0A(asc码是10) 指的是“换行” aardio中写为' ' 是把光标置于下一行的同一列
0x0D + 0x0A 回车换行 aardio中写为' ' 把光标置于下一行行首
文本模式
在windows中默认的以' '表示文本换行,如果指定文本模式读写文件时,则读取文件时会自动将回车换行转换为' ',而在写入时又自动将' '转换为' '
在使用io.open函数时,可以用'b'标记指定二进制模式,而使用't'标记指定文本模式(默认设置),
在设置winform程序时,要注意普通文本框控件使用' '表示换行,而richedit控件则使用' '表示换行.
在字符串中表示回车换行
aardio有多种表示字符串的方法,
而这些表示方法都有预定义的回车换行解析规则。
这些规则不会受到源文件实际使用的换行字符影响,即无论你是以' ',' '或者' '换行。
aardio会按下面的规则解析回车换行:
在赋值语句中以段注释表示的字符串,保证换行为' '
table(表)
table是aardio中唯一的数据结构类型,用来构建有序或无序的集合(collection)。
1、表结构
一个表可以包含以下两种数据:
a)、哈希表
无序集合又称为字典(Dictionaries)、哈希表(hashtable),映射(Map),联合内存(associative memories),联合数组(associative arrays),每个元素都是一个“键值对(key:value pairs )”。“键”可以是字符或其他除null以外的数据类型,甚至可以在table元素中包含table,table允许嵌套。
通常把“键”放在索引操作符“[]”中来索引一个元素的值,这时候键又称为“下标”或“索引”。例如 tab["键"] tab[1] ;也可以把一个符合变量命名规则的键放在成员操作符“.”后面,例如 tab.key tab.key2 ;
b)、数组
table中以从1开始有序连续的数值索引存储的元素构成数组。数组在内存中的存储是有序的。
如果table中的部分元素使用了数字键但是并未包含在从1开始有序连续的数值索引中、则构成稀疏数组。
在aardio所指的数组专指有序连续数组。
2、构造表
用{}操作符构造新的table对象,并以分号;分隔每一个元素 (不能使用逗号代替分号)。
如果成员是一个函数并以}或end结束时,可以省略分隔符。
{}操作符在表达式中只能作为赋值语句的右值、函数参数、或被包含在另一个table构造器中,而不允许与其他操作符结合,不允许向前结合、向后结合,仅允许被括号{}[]()包含。
创建一个空的table。
days = {}
创建一个table数组。
days = { "Sunday"; "Monday"; "Tuesday"; "Wednesday"; "Thursday"; "Friday"; "Saturday" }
//days[1] 的内容是 "Sunday".days[2]的内容就是"Monday"......
table元素可以使用各种数据类型的变量,甚至可以是一个表达式或者一个函数,如果我们为table中的值赋于一个键名字,则在table字典中添加一个键值对。
point = { x=100 ; y=200 }
//point.x 的值是100;point.y 的值是200
可以在一个table中同时包括“数组”、“字典”。
tab = {x=100;y=200;"Sunday"; "Monday"}
//tab.x 的值是100;tab.y 的值是200
table的键名并不要求符合变量命名规则,键可以是任何除null以外的值或字符串。
但是在{}构造器中的键名必须符合变量命名规则。
在任何时候,table中不符合变量命名规则的键必须通过[]操作符访问,以下是正确的写法:
tab = { [1]=300;[2]=400;["+"]=200;[1+1]=200 }; //因为变量名不能以数字开始,更不能包含运算符。
以上的写法等价于
tab ={};
tab[1]=300;
tab[2]=400;
tab["+"]=200;
tab[1+1]=200;
我们可以把多个变量用一对花括号包含起来以转换为table数组,也可以通过table.unpack函数将table数组转换为多个变量。
tab = {"a";"abc";"abcd"} ; //创建一个table;
a,b,c = table.unpack(tab);
tab ={ table.unpack(tab) }; //将所有返回值转换为table变量tlinks
3、在函数参数中构造表
当在函数内部有且只有一个使用{}构造器构建的table参数时,并且不包含数组元素,则{}可以省略。
aardio v32.35 更新:
---------------------------------------------------------------------------
1、改进 com.double() 等函数。
Embarcadero RAD Studio(多功能应用程序开发工具) 编程工具177.22 MB12
详情猿编程客户端 编程工具173.32 MB4.16.0
详情猿编程 编程工具173.32 MB4.16.0
详情VSCodium(VScode二进制版本) 编程工具76.23 MBv1.57.1
详情aardio(桌面软件快速开发) 编程工具9.72 MBv35.69.2
详情一鹤快手(AAuto Studio) 编程工具9.72 MBv35.69.2
详情ILSpy(.Net反编译) 编程工具3.97 MBv8.0.0.7339 绿色
详情文本编辑器 Notepad++ 编程工具7.81 MBv8.1.3 官方中文版
详情核桃编程 编程工具272.43 MBv2.1.120.0 官方版
详情delphi2007完整 编程工具1198 MB附安装教程
详情SAPIEN PrimalScript2015 编程工具78.02 MB附带安装教程
详情Alchemy Catalyst可视化汉化工具 编程工具81.00 MBv13.1.240
详情Professional Tag Editor(通用标签编辑器) 编程工具25.6 MBv1.0.6.8
详情Coffeecup HTML Editor(html网页编辑器) 编程工具68.98 MBv15.4 特别版
详情JCreator Pro 编程工具9.65 MBv5.0.1 汉化
详情WebStorm 12中文 编程工具209.88 MB附带安装教程
详情MSWLogo(多功能项目开发与管理工具) 编程工具2.25 MBv6.5 免费版
详情JetBrains datagrip 2018.2.1中文-datagrip 2018.2.1 编程工具160.88 MB附注册码汉化包
详情易安卓5.0 编程工具202 MBv5.0 附破解补丁
详情keil uvision5 编程工具271.63 MB附带安装教程
详情CIMCO Edit V8中文 编程工具248 MB附安装教程
详情IntelliJ IDEA 2020.1(java集成开发环境) 编程工具643.0 MB附安装教程
详情redis desktop manager2020.1中文 编程工具32.52 MB附带安装教程
详情猿编程 编程工具173.32 MB4.16.0
详情信捷PLC编程工具软件 编程工具14.4 MBv3.5.2 官方版
详情源码编辑器 编程工具201.0 MBv3.4.3 官方版
详情Microsoft Visual C++ 编程工具226.00 MBv6.0 SP6 简体中文版
详情s7 200 smart编程软件 编程工具187 MBv2.2 官方中文版
详情TouchWin编辑工具(信捷触摸屏编程软件) 编程工具55.69 MBv2.D2c 官方版
详情易语言5.8完美 编程工具312 MB5.8.1 破解增强版
详情Scraino(少儿编程软件) 编程工具272.93 MBv0.3.0 官方版
详情vs2008中文 编程工具1495 MB附序列号
详情e盾网络验证源码 编程工具25.77 MBV45 官方版
详情codeblocks 编程工具95.21 MBv13.12 中文完整版(带GNW编译器
详情Android Studio(安卓开发环境) 编程工具983.0 MBv3.5.0.21 汉化版(附安装教程)
详情源码编辑器pc版 编程工具201.0 MBv3.4.3 官方版
详情CH341A编程器 编程工具1.06 MB1.30 绿色中文版
详情layuiAdmin pro(layui后台管理模板系统) 编程工具0.57 MBv1.1.0 单页版
详情海龟编辑器 编程工具71.5 MBv0.8.4 中文版
详情Ardublock中文版(Arduino图形化编程软件) 编程工具2.65 MB附带安装教程
详情文本编辑器 Notepad++ 编程工具7.81 MBv8.1.3 官方中文版
详情富途牛牛 编程工具160.59 MBv11.8.9068 官方版
详情微信开发者工具 编程工具129.37 MBv1.05.2105170 官方版
详情UEStudio v18.0.0.18 简体中文绿色 编程工具19.00 MB
详情十六进制编辑器 WinHex 编程工具2.79 MBv20.2 SR-5
详情代码编辑器 Sublime Text 编程工具54.74 MBv4.0.0.4126
详情RJ TextEd(代码编辑器) 编程工具49.46 MBv15.31
详情核桃编程 编程工具272.43 MBv2.1.120.0 官方版
详情影刀 编程工具306.37 MBv4.9.14
详情Kate(高级文本编辑器) 编程工具56.11 MBv21.12.1.1544
详情