Janet-lang

命令式/函数式编程语言与字节码解释器
授权协议 MIT
开发语言 C/C++
所属分类 程序开发、 其他开发相关
软件类型 开源软件
地区 不详
投 递 者 简学文
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Janet 是一个命令式与函数式编程语言,同时也是一个字节码解释器,它是一个现代的 Lisp,但是列表替换为其它数据结构,包括数组、表、结构与元组,具有更好的实用性和性能。

该语言还支持桥接到用 C 编写的原生代码、宏元编程和字节码汇编。

Janet 还提供了 REPL 环境,以及运行脚本文件的能力。Janet 客户端程序与核心运行时分开,因此可以嵌入到其它程序中。

具体特性:

  • 精简
  • 一级闭包
  • GC
  • 一级绿色线程
  • Python 样式生成器(以普通宏的形式实现)
  • 提供可变与不可变的数组,即 array 与 tuple
  • 提供可变与不可变的哈希表,即 table 与 struct
  • 提供可变与不可变的字符串,即 buffer 与 string
  • Lisp 宏
  • 带有汇编接口的字节码解释器,以及字节码校验
  • 尾调用优化
  • 通过抽象类型和 C 函数直接与 C 互操作
  • 动态加载 C 库
  • 函数式和命令式标准库
  • Lexical 作用域
  • 命令式与函数式编程
  • REPL
  • 解析表达式语法内置于核心库
  • 核心库中有 300 多个函数和宏
  • 可将 Janet 嵌入其它程序
  • 具有详细堆栈跟踪的交互式环境

文献资料

  • 有关快速教程,请参见简介以获取更多详细信息。
  • 有关核心库中所有功能的完整API,请参阅核心API文档
  • 提示500 "msg": "未知异常,请联系管理员", 遇到bug:java.lang.reflect.InvocationTargetException 导致原因: 我的问题原因是因为没有修改xml文件,导致反射的参数不对,自己的方法上没有对应上 解决办法:网上的经验: 在反射调用方法时,被调用的方法内部抛出了异常没有被捕获会抛出此类异常 1、反射的参数不对,内部方法错误,这个原因就是可能自己的

 相关资料
  • 关于命令式语言和函数式(声明式语言的一个子集)编程语言之间的差异,有什么明确的答案,可以用实际例子来解释吗?有哪些主要的或最重要的命令式语言?函数语言呢? 我确实在这里读到了这个答案,但它实际上让我更加困惑-(函数式编程语言和命令式编程语言之间有什么区别?

  • 问题内容: 我遇到了一些有关JVM / JIT活动的参考,其中似乎在编译字节码和解释字节码之间有区别。该特定注释声明的字节码在前10000次运行时进行解释,然后进行编译。 “编译”和“解释”字节码之间有什么区别? 问题答案: 解释字节码基本上是逐行读取字节码,不进行任何优化或任何操作,然后对其进行解析并实时执行。由于许多原因,这种方法效率低下,其中包括Java字节码设计得不能快速解释的问题。 编译

  • 本文向大家介绍JavaScript函数式编程(Functional Programming)声明式与命令式实例分析,包括了JavaScript函数式编程(Functional Programming)声明式与命令式实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript函数式编程(Functional Programming)声明式与命令式。分享给大家供大家参考,具体如

  • 本文向大家介绍Python3中lambda表达式与函数式编程讲解,包括了Python3中lambda表达式与函数式编程讲解的使用技巧和注意事项,需要的朋友参考一下 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。其一般有如下几种使用方式: 1、lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号

  • 本文向大家介绍详解易语言字符命令,包括了详解易语言字符命令的使用技巧和注意事项,需要的朋友参考一下 易语言字符命令,这个命令比较少见,但是有用,我教大家操作。 1、易语言新建一个windows窗口 点击进入代码编辑区 具体看如何用易语言编写自己第一个程序? 2、我们输入 这个命令 字符() 3、展开这个字符命令 我们发现只有一个参数 4、这个参数比较少见,字节型它的取值范围为0~255 我们输入1

  • this 要在执行时才能确认值,定义时无法确认值 var a = { name:'A', fn:function(){ console.log(this.name); } } a.fn() //this === A a.fn.call({name:'B'}) //this === {name:'B'} var fn1 = a.fn; fn1() //this === windo