谷歌發(fā)布新編程語言,專治SQL各種“不服”
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
天下苦SQL久矣。
寫個查詢語句而已,動不動就上百行……
不過谷歌新推出的這個邏輯編程語言,對于“SQL黨”來說可謂是福音:
專治SQL語句的冗長和它不擅長的抽象機制 (abstraction mechanisms)。
它就是Logica。
(又有新語言了?“扶我起來,還能學”)
邏輯編程語言解決SQL的局限性
谷歌為什么要推出這樣一門新的編程語言?
有道是,“數據是新世紀的石油”。
SQL作為處理數據的通用語言,因為它基于自然語言的設計,好理解好入門,已流行了很多年,但,也并非完美無缺:
- 沒有將邏輯分成小塊的設計
- 沒有“模塊”和“導入”的概念
- 更沒有高級點的構造(例如函數間的傳遞)
這就導致SQL對抽象的支持非常有限,就更不用說還要去維護那動輒上百行的語句了。
有沒有好的解決方案呢?
市面上開發(fā)了很多可供大家選擇的數據庫查詢語言和相應的庫。
其中,邏輯編程語言最能解決SQL的局限性。
邏輯編程語言Logica
Logica就是這樣一門邏輯編程語言。
何為邏輯編程?
邏輯編程是種編程典范,它設定答案須符合的規(guī)則來解決問題,而非設定步驟來解決問題,過程是事實+規(guī)則=結果。
Logica進一步擴展了經典的邏輯編程語法,最顯著的是使用聚合,這也是這個名字的來源:Logic + Aggregation (聚合)。
Logica繼承自Yedalog(早期谷歌開發(fā)的一種語言),是一種類似數據日志(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,只是用了作為虛擬機的解釋器動態(tài)“翻譯”的。
還有人覺得這不是通常意義的邏輯編程,僅僅搞了搞數據庫查詢。
并且還會帶來依賴問題。
但他們都表示可能是對Logica了解得不夠深入。
只有一個人的關注點是這個新編程語言的名字和一家公司撞名了圖片
最后,項目已開源,參見鏈接[2]。有興趣(有頭發(fā)的)的朋友可以自己嘗試一下!