fish lang是一门基于函数的,可定制语法的编程语言。

为什么要设计fish这门语言

目前的编程语言语法都是固定死的,无法很容易的移除一种语法。fish语言一切语法由函数定义,语言只提供一个函数的定义/调用过程。

fish语言的语法

print if a b c

如果函数a为真输出函数b的结果,否则输出函数c的结果。

loop a b

循环调用函数b,函数a的返回值次。

当然,上文中出现的loop,if,print等函数为系统函数,我们可以通过取消注册的方式,取消这个函数的注册。

我们可以看一个更复杂的代码。

print if a b c d e

我们分解一下这个代码。

代码逆向入栈,从顶到底部为print,if,a,b,c,d,e
虚拟机调用print函数,print需要一个参数,if出栈,
if需要3个参数,a,b,c出栈。
运行a,假设a需要一个参数,d入栈,
运行d,假设d无需参数,向exa写入true,
if发现exa为为true,b入栈,c被抛弃,
运行b,假设b需要一个参数,e入栈,
运行e,假设e无需参数,向exa写入字符串hello world的地址,
print发现exa指向为hello world,输出hello world。

fvm

Fvm是fish lang的虚拟机,当然现在只是一个原型,大概由一个栈组成,一个函数表,一组变量寄存器组成。

目标

小型的,嵌入式的脚本语言。用于路由服务,引导和链接宿主的函数。

特征

  • 可自定义语法
  • 运行速度快
  • 安全

Fish Lang的更多相关文章

  1. Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh

    Hyperpolyglot Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh grammar | quoting and escaping | charactersvar ...

  2. scheme 教程 #lang racket

    scheme 教程 #lang racket 来源  https://blog.csdn.net/yemeishenme/article/details/51471037 原文: https://le ...

  3. java head space/ java.lang.OutOfMemoryError: Java heap space内存溢出

    上一篇JMX/JConsole调试本地还可以在centos6.5 服务器上进行监控有个问题端口只开放22那么设置的9998端口 你怎么都连不上怎么监控?(如果大神知道还望指点,个人见解) 线上项目出现 ...

  4. Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法

    有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm ...

  5. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

    学习架构探险,从零开始写Java Web框架时,在学习到springAOP时遇到一个异常: "C:\Program Files\Java\jdk1.7.0_40\bin\java" ...

  6. Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V

    在学习CGlib动态代理时,遇到如下错误: Exception in thread "main" java.lang.NoSuchMethodError: org.objectwe ...

  7. Java—恶心的java.lang.NumberFormatException解决

    项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.NumberFormatException异常 ...

  8. java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE

    Android发出HTTP请求时出现了这个错误: java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INST ...

  9. Linux的locale、LC_ALL和LANG

    如果你是一个Linux新手,并且刚刚安装了一个新的英文系统但想要设置成中文系统,肯定会接触到上面几个变量,在网上搜索了一系列解决方法,给一些变量赋一下值,再export一下,或者写到配置文件里面,然后 ...

随机推荐

  1. 【亲测可行,图片宽度高度自适应】c# Graphics MeasureString精确测量字体宽度

    , , ) { int count = number.Length; //需要配置的字段 //Font f = new Font("Microsoft Sans Serif", f ...

  2. LeetCode算法01 Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  3. 浅谈 form 表单提交

    原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7675230.html 若有错误,请评论指出,谢谢! Form 对象代表一个 HTML 表单.在 HTML ...

  4. 191010 python3分数划分ABC等级

    # 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,# 60-89分之间的用B表示,60分以下的用C表示. while True: score = input(" ...

  5. 数据库类型对应Java语言类型表

    下表列出了基本 SQL Server.JDBC 和 Java 编程语言数据类型之间的默认映射: SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型 big ...

  6. 高并发下redis

    1.================================================================================================== ...

  7. abp学习(三)——文档翻译一

    地址:https://aspnetboilerplate.com/Pages/Documents 什么是ASP.NET样板?ASP.NET Boilerplate(ABP)是一个开放源代码且文档齐全的 ...

  8. java写入内容到本地文件 -读取文件内容

    /** 日志记录 * @author sys * @param content 要写入的类容 * @param path 目标路径 c:/log/ * @param filename 文件名 log. ...

  9. [牛客网 -leetcode在线编程 -02] minimum-depth-of-binary-tree -树的最短深度

    题目描述 题目描述 Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along ...

  10. codevs 1341 与3和5无关的数

    题目描述 Description 有一正整数a,如果它能被x整除,或者它的十进制表示法中某位上的数字为x,则称a与x相关.现求所有小于等于n的与3或5无关的正整数的平方和. 输入描述 Input De ...