谷歌發(fā)布新編程語(yǔ)言,專治SQL各種“不服”
本文經(jīng)AI新媒體量子位(ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處
豐色 發(fā)自 凹非寺
天下苦SQL久矣。
寫個(gè)查詢語(yǔ)句而已,動(dòng)不動(dòng)就上百行……

不過(guò)谷歌新推出的這個(gè)邏輯編程語(yǔ)言,對(duì)于“SQL黨”來(lái)說(shuō)可謂是福音:
專治SQL語(yǔ)句的冗長(zhǎng)和它不擅長(zhǎng)的抽象機(jī)制 (abstraction mechanisms)。
它就是Logica。
(又有新語(yǔ)言了?“扶我起來(lái),還能學(xué)”)
邏輯編程語(yǔ)言解決SQL的局限性
谷歌為什么要推出這樣一門新的編程語(yǔ)言?
有道是,“數(shù)據(jù)是新世紀(jì)的石油”。
SQL作為處理數(shù)據(jù)的通用語(yǔ)言,因?yàn)樗谧匀徽Z(yǔ)言的設(shè)計(jì),好理解好入門,已流行了很多年,但,也并非完美無(wú)缺:
沒(méi)有將邏輯分成小塊的設(shè)計(jì)
沒(méi)有“模塊”和“導(dǎo)入”的概念
更沒(méi)有高級(jí)點(diǎn)的構(gòu)造(例如函數(shù)間的傳遞)
這就導(dǎo)致SQL對(duì)抽象的支持非常有限,就更不用說(shuō)還要去維護(hù)那動(dòng)輒上百行的語(yǔ)句了。
有沒(méi)有好的解決方案呢?
市面上開發(fā)了很多可供大家選擇的數(shù)據(jù)庫(kù)查詢語(yǔ)言和相應(yīng)的庫(kù)。
其中,邏輯編程語(yǔ)言最能解決SQL的局限性。
邏輯編程語(yǔ)言Logica
Logica就是這樣一門邏輯編程語(yǔ)言。
何為邏輯編程?
邏輯編程是種編程典范,它設(shè)定答案須符合的規(guī)則來(lái)解決問(wèn)題,而非設(shè)定步驟來(lái)解決問(wèn)題,過(guò)程是事實(shí)+規(guī)則=結(jié)果。
Logica進(jìn)一步擴(kuò)展了經(jīng)典的邏輯編程語(yǔ)法,最顯著的是使用聚合,這也是這個(gè)名字的來(lái)源:Logic + Aggregation (聚合)。
Logica繼承自Yedalog(早期谷歌開發(fā)的一種語(yǔ)言),是一種類似數(shù)據(jù)日志(Datalog-like)的邏輯編程語(yǔ)言。Logica代碼可以編譯成SQL,可在谷歌BigQuery上運(yùn)行(也支持PostgreSQL和SQLite):
支持SQL所缺乏的簡(jiǎn)潔和可重用的抽象機(jī)制
支持模塊和導(dǎo)入
甚至使測(cè)試查詢變得不再困難!
到底好不好用,上手體現(xiàn)便知結(jié)果。
下面是一個(gè)查找小于 30 的質(zhì)數(shù)的具體示例:
# 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
);
運(yùn)行結(jié)果:
$ logica primes.l run Prime
+-------+
| prime |
+-------+
| 2 |
| 3 |
| 5 |
| 7 |
| 11 |
| 13 |
| 17 |
| 19 |
| 23 |
| 29 |
+-------+
熱議:能否成為主流?
谷歌工程師們鼓勵(lì)大家積極嘗試Logica。
很多人很高興看到Google推出的這樣一門新的邏輯編程語(yǔ)言,但表示被主流采用還有很長(zhǎng)的路要走。

正如很多網(wǎng)友都有一些質(zhì)疑:
有人認(rèn)為L(zhǎng)ogica沒(méi)有真的做到轉(zhuǎn)SQL,只是用了作為虛擬機(jī)的解釋器動(dòng)態(tài)“翻譯”的。

還有人覺(jué)得這不是通常意義的邏輯編程,僅僅搞了搞數(shù)據(jù)庫(kù)查詢。

并且還會(huì)帶來(lái)依賴問(wèn)題。
但他們都表示可能是對(duì)Logica了解得不夠深入。


只有一個(gè)人的關(guān)注點(diǎn)是這個(gè)新編程語(yǔ)言的名字和一家公司撞名了

最后,項(xiàng)目已開源,參見鏈接[2]。有興趣(有頭發(fā)的)的朋友可以自己嘗試一下!
參考鏈接:
[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
點(diǎn)這里??關(guān)注我,記得標(biāo)星呀~
長(zhǎng)按進(jìn)入小程序,進(jìn)行打卡簽到 (更多精彩值得期待……)
最近熱文: 國(guó)內(nèi)大神成功給手機(jī)裝上了 Win11,代碼已開源! 最強(qiáng)代碼生成器平臺(tái),殺瘋了~ 基于 SpringBoot + Vue 實(shí)現(xiàn)的可視化拖拽編輯的大屏項(xiàng)目 2021年7月程序員薪資出爐,平均15302元 2T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,人工智能,考研,軟考,英語(yǔ),等等。在公眾號(hào)內(nèi)回復(fù)「資源」,即可免費(fèi)獲?。?span style="letter-spacing: 0.544px;font-weight: bolder;">回復(fù)「社群」,可以邀請(qǐng)你加入讀者群! ??給個(gè)「在看」,是對(duì)我最大的支持??


