tinyscript

注重提升集合类处理操作的脚本语言
授权协议 GPL
开发语言 Java
所属分类 程序开发、 脚本编程语言
软件类型 开源软件
地区 国产
投 递 者 郎弘业
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

许多的人使用Java来作为主要的编程语言,许多的时候感觉代码太过繁复,当然有Scala、Kotlin、Python等等语言号称可以解决此问题,但是毕竟生态圈的切换不是个小问题。同时语法结构和Java相去甚远也导致切换的成本毕竟高。

为此本人做了一下尝试,准备走一个中间路线,主题还是用Java语言,但是在需要的时候用TinyScript来解决一下问题,然后再回到Java主体执行,所以你完全可以把它当成一种EL语言来使用,当然解决复杂问题也比常规的EL语言更方便,毕竟TinyScript在集合运算能力方面有重点扩展的地方。

未来的方向,会重点放在算法方面,目前已经内嵌了动态规划的背包问题通用方法,后面会逐步扩充其他算法,让程序员们不再纠结于算法实现,而是集中注意力在问题上。

语言特性列表

  • 支持有序数据结构:数组和序列

  • 支持无序数据结构:set和map

  • 支持专有数据结构:树和序表

  • 序表支持关联、匹配、过滤、分组、排序、聚会等多种业务运算

  • 与java无缝集成,适用于jdk1.6及以上版本

  • 支持new java对象,并可以使用Java所有类及对象

  • 可以采用obj.field方式访问和操作对象属性,简化obj.getField()和obj.setField(value);

  • 支持数据结构间相互转换

  • 支持调用java非静态方法和静态方法

  • 支持bean对象,可以操作bean对象的属性和方法

  • 可以和Spring集成,方便加载bean配置信息

  • 支持访问数据库,可以将表数据转换成序表结构

  • 支持访问Excel,可以将Sheet数据转换成序表结构

  • 支持访问文本,可以将行数据转换成序表结构

  • 支持不同数据源的序表操作,比如关联、匹配等

  • 支持object[key]扩展,比如访问list[1],map[key],简化用户操作

  • 支持object.field扩展,允许用户实现不同语法场景

  • 支持object.function(…)扩展,允许用户实现不同语法场景

  • 支持java的基本类型,内置不同精度的数值转换函数

  • 支持if/elseif/else、switch指令

  • 支持for、while循环指令

  • 支持基本表达式操作,符合java语法规范

  • 允许用户设置下标是否从0开始,方便用户访问元素

  • 支持[a .. b]方式生成指定范围的序列

  • 允许用户定制常量,可以在脚本引擎构造后直接使用,无需声明,如PI、E等。

  • 内置聚合函数和三角函数等系统函数,允许用户自行编写函数类进行扩展。

  • 允许用户编写脚本类,简化业务逻辑。

  • 允许用户编写脚本文件,同时支持java方式和IDE插件调用,实现即时开发测试。

  • 支持动态更新脚本文件,无需重新编译部署

  • 允许用户通过快速运行器执行脚本,也允许用户通过带Spring的运行器执行需要Spring环境的脚本

  • 定义了基本操作符,但是允许用户配置不同的对象实现重载。

  • 提供集合的差并交异或运算

  • 允许对集合子元素进行批量操作符运算,返回新的集合,如list*2

  • 允许对集合子元素进行批量方法运算,返回新的集合,如list.getName()

  • 允许对集合子元素进行批量属性运算,返回新的集合,如list.age

  • 支持lambda表达式,部分函数允许使用lambda表达式简化逻辑

  • 增强lambda特性,允许lambda变量修改外部同名变量。

  • 支持排列的lambda遍历操作

  • 支持组合的lambda遍历操作

  • 支持全排列的lambda遍历操作

  • 支持单方法接口的lambda封装,如Runnable、Comparator

  • 支持各种脚本内嵌执行,比如dataSource[[ sql语言 ]] 进行带@占位符的sql动态执行,支持template[[ 模板语言 ]] 进行模板语言执行,也可以继承各种其他脚本

当然上面列的不一定全,后面也会有新的语言特性加入。

脚本运行

脚本语言的扩展名是ts和tinyscript,当然也可以起其他的扩展名。

提供了Eclipse和Idea的执行器插件,安装之后可以右键直接运行脚本文件。

先推出看看反响如何,如果反响比较好,准备开发ide,支持高亮、调试等等。

  • echo "adb wait-for-device" adb wait-for-device echo "*********************adb reboot bootloader *************" adb reboot bootloader echo "*********************fastboot devices ***************" fastbo

  • 00. 目录 01. Uboot帮助命令 ? 帮助 help 帮助 DengJin #help ? - alias for 'help' 帮助 base - print or set address offset 打印或者设置地址的偏移 bdinfo - print Board Info structure 板子的信息结构

  • Create fast testing server with TinyCore. I will be using Microcore (8MB) that resides in RAM and 500MB disk drive for persistence. TinyCore Nginx server with php-cgi and vsftpd can be used for for va

  • Tiny Core Linux是一份很小(10 MB)的最低限度Linux桌面。它基于Linux 2.6内核、Busybox、Tiny X、FLTK图形用户界面、JWM窗口管理器,全部运行在内存中。它并非一份完整的桌面,也不完整支持所有的硬件;它只代表能引导进入一份最小X窗口桌面 所需的核心内容,典型情况下可包含对有线网络的访问。这份最小桌面可以通过从在线软件仓库安装额外应用软件来进行扩展。 Ti

  • 1. Tiny C Compiler 官网 https://bellard.org/tcc/ 1.1 git https://github.com/TinyCC/tinycc 1.2 编译 1.2.1 linux tar  xvf  tcc-0.9.26.tar.bz2 则生成一个子目录 tcc-0.9.26,进入目录,编译它 cd tcc-0.9.26 ./configure  --disabl

  • 在u-boot目录执行make相关操作会调用到Makefile文件。执行make tiny4412_config时,会匹配到如下: %_config:: unconfig @$(MKCONFIG) -A $(@:_config=) PS:%在makefile中是通配符,其后可以匹配任意字符。 @表示不显示这条指令,在makefile中执行的指令都会显示出来

  • 网络发展迅猛,数据传输安全日益备受重视,微信小程序等更是要求服务端地址必须支持HTTPS协议,SSL证书不可或缺! 创建一个 Let’s Encrypt 账户私钥 mkdir -p /acme-tiny/account cd /acme-tiny/account openssl genrsa 4096 > lets.encrypt.account.key 创建网站域名私钥 mkdir -p /a

  • C++ XML 解析器:tinyxml 一个简单,轻量,高效的C++ XML 解析器,能够很容易得整合到其他程序。 TinyXML-2相比1,内存占用更少,读取更快,能更好得适应移动设备(Android)。 2) 准备 2.1) 源码 TinyXML-2源码放在了GitHub上,其为zlib license开源协议。 2.2) 编译 tinyxml2-2.1.0/tinyxml2/目录下是工程文件

  • 下载tiny-emitter npm i tiny-emitter 创建utils文件夹中bus.js import emitter from "tiny-emitter/instance"; export default { $on: (...args) => emitter.on(...args), $once: (...args) => emitter.once(...args)

 相关资料
  • sdiff key1 key2...keyN 返回所有给定key的差集 sdiffstore dstkey key1...keyN 同sdiff,并同时保存差集到dstkey下

  • sunion key1 key2...keyN 返回所有给定key的并集 sunionstore dstkey key1...keyN 同sunion,并同时保存并集到dstkey下

  • sinter key1 key2...keyN 返回所有给定key的交集 sinterstore dstkey key1...keyN 同sinter,但是会同时将交集存到dstkey下

  • 主要内容:向 set 集合中添加元素,从set集合中删除元素,Python set集合做交集、并集、差集运算Python set 集合最常用的操作是向集合中添加、删除元素,以及集合之间做交集、并集、差集等运算,本节将一一讲解这些操作的具体实现。 向 set 集合中添加元素 set 集合中添加元素,可以使用 set 类型提供的 add() 方法实现,该方法的语法格式为: setname.add(element) 其中,setname 表示要添加元素的集合,element 表示要添加的元素内容。 需

  • 主要内容:联合 - Union,2. 全联合 - Union All,3. 相交,4. 差集SQL集合操作用于组合两个或多个SQL SELECT语句。 集合操作的类型 联合 - Union 联合所有 - UnionAll 交集 - Intersect 差集 - Minus 联合 - Union SQL 操作用于组合两个或多个SQL 查询的结果。 在操作中,在应用操作的两个表中,所有数据类型和列的数量必须相同。 操作从结果集中删除重复的行。 语法 假设有两个表,第一个表:First 的结构

  • 我在这个Batch脚本中有一个语法错误,但我不知道它是从哪里来的。我是批处理新手,所以我很难弄清楚这一点。我感觉这与语句有关,但我不确定。 我得到的当前错误是: 该命令的语法不正确。

  • 问题内容: 我正在尝试使用JAXB解组以下XML: 我已经使用XJC生成了所有类。如果要访问Composers集合,则必须执行以下操作: 有什么办法可以代替我吗? 我理解需要一个从XML派生的Composers对象,但是在使用Java进行交易时,拥有一个用于存储集合的中间POJO似乎有点多余。 我的XSD是: 问题答案: 该 @XmlElementWrapper 插件不正是你想要的。

  • 1.【强制】 关于 hashCode 和 equals 的处理,遵循如下规则: 1) 只要重写equals,就必须重写hashCode。 2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的 对象必须重写这两个方法。 3) 如果自定义对象做为Map的键,那么必须重写hashCode和equals。 说明: String 重写了 hashCode 和 e