丰色 发自 凹非寺
量子位 报道 | 公众号 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,只是用了作为虚拟机的解释器动态“翻译”的。
还有人觉得这不是通常意义的逻辑编程,仅仅搞了搞数据库查询。
并且还会带来依赖问题。
但他们都表示可能是对Logica了解得不够深入。
只有一个人的关注点是这个新编程语言的名字和一家公司撞名了
最后,项目已开源,参见链接[2]。有兴趣(有头发的)的朋友可以自己尝试一下!
参考链接:
[1]https://opensource.googleblog.com/2021/04/logica-organizing-your-data-queries.html

[2]https://github.com/EvgSkv/logica

[3]https://news.ycombinator.com/item?id=26805121

[4]https://www.163.com/dy/article/G7GCQN3G0511FQO9.html
-END-
PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。
Java后端编程交流群已成立
公众号运营至今,离不开小伙伴们的支持。为了给小伙伴们提供一个互相交流的平台,特地开通了官方交流群。扫描下方二维码备注 进群 或者关注公众号 Java后端编程 后获取进群通道。
—————END—————
推荐阅读:
最近面试BAT,整理一份面试资料Java面试BAT通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:关注公众号并回复 java 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
继续阅读
阅读原文