昨日,谷歌在其开源博客介绍了一个新的开源逻辑编程语言——Logica

Logica,取名于  Logic + aggregation,即逻辑+聚合。因此顾名思义,Logica 的创建进一步扩展了经典逻辑编程语法,尤其在聚合(指对有关数据进行内容挑选、分析、归类,最后分析得到想要的结果,主要指任何能够从数组产生标量值的数据转换过程)方面外重视。

谷歌不仅在博文中对其打包票:“你一定会喜欢的!”,今天在推特上也表示对 Logica 感到骄傲,称其“可编译成 SQL 并在 Google BigQuery 上运行”:

为解决 SQL 的缺陷,Logica 应运而生

在详细介绍 Logica 之前,我们首先要明确“逻辑编程”的含义。

逻辑编程从二十世纪 60 年代末开始在学术界发展起来的。与常规的通过设定步骤解决问题不同,逻辑编程的过程是“事实+规则=结果”,即设定答案须符合的规则来解决问题。所以逻辑编程其实就是将正规的逻辑风格带入计算机程序设计之中,其中程序被编写为一组逻辑语句。

在逻辑编程语言中,最具代表性的例子就是 Prolog 和 Datalog,而这次谷歌介绍的 Logica 正是属于 Datalog 家族的一种语言。

Datalog 是一种数据查询语言,由于它与关系数据库的出发点相同:都是将数据视为关系,将数据处理视为对这些关系的一系列处理,因此 Datalog 用于设计与大型关系数据库交互。但在数据处理方式上,Datalog 与处理数据的通用语言 SQL 有所不同:Datalog 受到一阶逻辑的数学语法所启发,而 SQL 遵循自然语言的语法。

70 年代发明的 SQL 在历经半个世纪后的如今,可谓是发展得“风生水起”。小到智能手表,大到企业 IT 解决方案系统,都可以在读写数据上看见 SQL 的身影,甚至正在看本文的你所使用的浏览器中都可能包含了一个内置 SQL 数据库。

出现这种现象的根本原因是由于 SQL 是基于自然语言所开发的,它让无数没有经过正规计算机编程和数学培训的人能够顺利访问数据库,而这同时也是 SQL 无法弥补的缺陷。

在 SQL 中,经常出现明明逻辑程序很简单,但对应的 SQL 查询示例却复杂到难以理解。一个查询就要写几百行语句时有发生,更不用说为保持 70 年代的老式COBOL 精神,还经常通篇大写字母。

这还是次要的,SQL 的主要缺陷在于它对抽象的支持非常有限。

良好的编程应该是创建小型、可理解、可重用的逻辑片段,并且这些逻辑片段还要被测试、被命名、被组织成包,而这些包之后可以用来构造更多有用的逻辑片段。这样的工作流程合理又便捷,可是 SQL 并不支持。

因而,为了解决 SQL 的缺陷,Logica 应运而生。

开发者可以“尝尝鲜”

身为逻辑编程语言的 Logica,采用的是由数学家专门设计的数学命题逻辑,简化了表达复杂的语句,可以将逻辑程序编译为 SQL 表达式,并且由于逻辑编程语法的便利性能在 Google BigQuery 上运行(实验性地支持 PostgreSQL 和 SQLite)。

此外,相较于从 Datalog 转换到 SQL 可能遇到有关析取和否定的处理,在 Logica 中会对此尝试做出各种选择,尽可能提高所生成的 SQL 结构的可读性,从而使用户能够编写有效执行的程序。

因此,与 SQL 相比,Logica 更为简洁,并支持 SQL 所缺乏的可重用抽象机制,也支持模块和导入,还可以在交互式 Python 笔记本上使用,甚至使测试查询都变得自然轻松。

目前,Logica 已在 Apache 2.0 许可下开源,GitHub 上展示了 Logica 部分代码示例:

目标:查找小于 30 的质数

程序:

# Define natural numbers from 1 to 29.
N(x) :- x in Range(30);
# Define primes.
Prime(prime: x) :-
  N(x),
  x > 1,
  ~(
    N(y),
    y > 1,
    y != x,
    Mod(x, y) == 0
  );

运行结果:

$ logica primes.l run Prime
+-------+
| prime |
+-------+
|     2 |
|     3 |
|     5 |
|     7 |
|    11 |
|    13 |
|    17 |
|    19 |
|    23 |
|    29 |
+-------+

谷歌工程师也建议广大开发者可以尝试一下 Logica,他们认为“你一定会喜欢的”。因为即便不真正应用在项目中,学习一门强大而新语言也有助于开发者对数据处理和计算领域产生新的灵感。
并且,Logica 还可能尤为适用以下三种类型的开发者:
1)已经使用逻辑编程并且需要更强大的计算能力;
2)使用 SQL,但对它的可读性不满意;
3)想学习逻辑编程并将其应用于大数据处理。

Logica 官方还表示,将来计划支持更多的 SQL 语句和引擎,所以对此感兴趣的程序员们或许可以去“尝尝鲜”:

Logica 的 GitHub 地址:https://github.com/EvgSkv/logica

来源:智一面