groovy

编译器移植到.NET Core失败记录和对.NET未来感想

安稳与你 提交于 2020-10-04 22:52:08
.NET Core 是微软力推的新平台,影响力好像还越来越大。为了对这一行业趋势有所准备,最近把自己搞的编程语言的编译器从 .NET 移植 .NET Core ,以实现跨平台在 Linux 上运行,然而失败了。 原因是 .NET Core 类库中 AppDomain 、 AssemblyBuilder 、 ModuleBuilder 、 ILGenerator 等等缺失了一些很核心的方法或类型,导致无法编译通过。 核心缺少这些无法编译成功,也不能生成最终的二进制文件。那些以前可以在 .NET CLR 上运行的开源语言 .NET Core 对它们来说已经没有了吸引力,现在没有一个跟进到 .NET Core 上,所以也没有办法从开源项目中获得帮助。比如说 Clojure CLR ,我下载了它最新的编译器源码,它还是用 System.Reflection.Emit 命名空间生成 IL 指令。 微软要在 .NET Core 上废弃了 System.Reflection.Emit 那一套东西。我拼命研究的那套生成 IL 的知识要作废了。这让我想到了 Sliverlight 、 XNA 、 Windows Phone 的下场。我辛辛苦苦钻研到的这部分知识又被归零了,让我想到了刷卡时为零 ( 萨卡什维利外号 ) 。 我又想到现在微软现在是用 Roslyn 编译 C# 的,而且 Roslyn

Java 如何实现动态脚本?

亡梦爱人 提交于 2020-10-04 13:34:25
阿里妹导读:在平台级的 Java 系统中,动态脚本技术是不可或缺的一环。本文分享了一种 Java 动态脚本实现方案,给出了其中的关键技术点,并就类重名问题、生命周期、安全问题等做出进一步讨论,欢迎同学们共同交流。 前言 繁星是一个数据服务平台,其核心功能是:用户配置一段 SQL,繁星产出对应的 HSF/TR/SOA/Http 取数接口。 繁星引擎流程图如下: 一次查询请求经过引擎的管道,被各个阀门处理后就得到了相应的结果数据。图中高亮的两个阀门就是本文讨论的重点:前置脚本与后置脚本。 温馨提示:动态脚本就意味着代码发布跳过了公司内部发布平台,做不到监控、灰度、回滚三板斧,容易引发线上故障,因此业务系统中强烈不推荐使用该技术。 当然 Java 动态脚本技术一般使用场景也比较少,主要在平台性质的系统中可能用到,比如 leetcode 平台,D2 平台,繁星数据服务平台等。本文权当技术探索和交流。 功能描述 对 Javascript 熟悉的同学知道,eval() 函数,例如: eval('console.log(2+3)') 就会在控制台中打出 5。 这里我们要做的和 eval 类似,就是希望输入一段 Java 代码,服务器按照代码中的逻辑执行。在繁星中前置脚本的功能就是可以对用户的输入参数进行自定义的处理,后置脚本的功能就是可以对数据库中查询到的结果做进一步加工。 为什么是 Java

Gremlin 图查询概述

强颜欢笑 提交于 2020-10-01 09:40:51
图数据库基本概念 图形数据库是 NoSQL 数据库的一种类型,它应用图形理论存储实体之间的关系信息。最常见的例子,就是社会网络中人与人之间的关系。关系型数据库用于存储关系型数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。Google的图形计算系统名为 Pregel。 目前主流的图数据库有:Neo4j,FlockDB,GraphDB,InfiniteGraph,Titan,JanusGraph,Pregel等。 下面介绍几个图数据库中的几个基本概念: RDF :RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model)。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。RDF 形式上表示为 SPO 三元组,有时候也称为一条语句(statement),知识图谱中我们也称其为一条知识。RDF 由节点和边组成,节点表示实体/资源、属性,边则表示了实体和实体之间的关系以及实体和属性的关系。 RDF 没有外键和主键,它使用的是 URI ,万维网的标准引用格式。通过 URI,一个三元组库可以直接链接到任何三元组库的其他任何数据。 属性图 :属性图是由 顶点(Vertex),边(Edge),标签(Lable),关系类型 还有 属性(Property