丰色 发自 凹非寺
量子位 报道 | 公众号 QbitAI
天下苦
SQL
久矣。
写个查询语句而已,动不动就
上百行
……
不过谷歌新推出的这个
逻辑编程
语言,对于“SQL党”来说可谓是福音:
专治SQL语句的
冗长
和它不擅长的
抽象机制
(abstraction mechanisms)
。
它就是
Logica
。
(又有新语言了?“扶我起来,还能学”)
逻辑编程语言解决SQL的局限性
谷歌为什么要推出这样一门新的编程语言?
有道是,“数据是新世纪的石油”。
SQL作为处理数据的通用语言,因为它基于自然语言的设计,好理解好入门,已流行了很多年,但,也并非完美无缺:
-
没有将逻辑分成小块的设计
-
没有“模块”和“导入”的概念
-
更没有高级点的构造
(例如函数间的传递)
这就导致SQL对抽象的支持非常有限,就更不用说还要去维护那动辄上百行的语句了。
有没有好的解决方案呢?
市面上开发了很多可供大家选择的数据库查询语言和相应的库。
其中,
逻辑编程语言最能解决SQL的局限性。
逻辑编程语言Logica
Logica就是这样一门逻辑编程语言。
何为逻辑编程?
逻辑编程是种编程典范,它设定答案须符合的规则来解决问题,而非设定步骤来解决问题,过程是事实+规则=结果。
Logica进一步扩展了经典的逻辑编程语法,最显著的是使用聚合,这也是这个名字的来源:
Logic + Aggregation
(聚合)
。
Logica继承自Yedalog
(早期谷歌开发的一种语言)
,是一种类似数据日志
(Datalog-like)
的逻辑编程语言。
Logica代码可以编译成SQL
,可在谷歌BigQuery上运行
(也支持PostgreSQL和SQLite)
:
-
支持SQL所缺乏的
简洁和可重用的抽象机制
-
支持模块和导入
-
甚至使测试查询变得不再困难!
到底好不好用,上手体现便知结果。
下面是一个
查找小于 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。
很多人很高兴看到Google推出的这样一门新的逻辑编程语言,但表示被主流采用还有很长的路要走。
正如很多网友都有一些质疑:
有人认为Logica没有真的做到转SQL,只是用了作为虚拟机的解释器动态“翻译”的。
还有人觉得这不是通常意义的逻辑编程,仅仅搞了搞数据库查询。