整理 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

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

(图片来自 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 还可能尤为适用以下三种类型的开发者:

  • 已经使用逻辑编程并且需要更强大的计算能力;

  • 使用 SQL,但对它的可读性不满意;

  • 想学习逻辑编程并将其应用于大数据处理。

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

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

参考链接:

https://opensource.googleblog.com/2021/04/logica-organizing-your-data-queries.html

https://logica.dev/

谷歌力推新语言 Logica,解决 SQL 重大缺陷!相关推荐

  1. 谷歌新语言重写android,谷歌将推新设计语言 安卓APP用户界面将换新颜

    腾讯科技讯 6月15日消息,随着安卓系统成为移动操作系统的王者,微博)也正在投入精力,解决自家和第三方安卓应用用户界面.风格在各种终端不一致的问题.据美国科技媒体报道,谷歌将推出一个新的设计语言,统一 ...

  2. 超级招聘会落地武汉,钉钉为何“不务正业”力推新校招?

    9月14日,阿里钉钉"新校招"超级招聘会在武汉大学召开,这不是阿里钉钉自身的校招,而是其"新校招"解决方案的第一次大规模试水,在阿里钉钉的组织下,一共有超过10 ...

  3. 智能汽车“增量部件”争夺战(三):蔚来、广汽力推新动力电池,1000公里续航有多大水分?

    华为说"不造车",要做智能汽车"增量部件"供应商. 这是一个标志性的事件,即华为通过现行说法揭示了一个在整车之外的巨量市场,其中包括高精地图.芯片.感知硬件(激 ...

  4. 为什么前几年谷歌力推的模块化手机现在没动静了?

    首先得承认,模块化手机是个很天才的思路,初衷也很好,既能让用户升级自己最需要的部分,也有利于环保避免浪费,但可惜实用性不佳,最终黯淡收场. Google的Project Ara模块化手机是在2015年 ...

  5. 时序数据库InfluxDB 2.0 alpha 发布:主推新的Flux查询语言,TICK栈将成为整体

    InfluxDB 2.0的第一个alpha版本正式发布.2.0版本的愿景是将TICK整合成一个整体,将时序数据库.UI.仪表盘工具以及后台处理和监控代理置于一组API后面.从1.x到2.0产品线代表了 ...

  6. 谷歌宣布推出Dart编程新语言

    北京时间9月9日上午消息,据著名科技做网站ExtremeTech的报道,谷歌编程新语言Dart逐渐浮出水面,它是一种"结构化的Web编程"语言.早在几天前谷歌就已着手注册了一系列与 ...

  7. magenta内核与linux,谷歌将推出新操作系统Fuchsia:Magenta语言为内核

    谷歌现在研发出来并且推出使用的系统有Chrome OS.Android和Chromecasts,这三者在操作系统的市场中占得份额很高,但是好像谷歌对此并不满意,因为有相关消息显示,谷歌正在研发新的操作 ...

  8. 淘宝退款崩溃;马云预言成真;谷歌推新API | 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 淘 ...

  9. 新浪将力推秒拍 短视频大战时代悄然来临

    在新浪秒拍.腾讯微视等短视频产品相继上线之后,优酷.爱奇艺.56.酷6等视频网站也纷纷加快了在短视频市场布局,如今社交与视频两大行业在短视频业务上出现了市场交集,各大公司均想在这款美国市场已经非常火爆 ...

最新文章

  1. NLP深度学习:近期趋势概述
  2. 常用网站--前端开发类+网页设计类+平面素材类+flash类
  3. 信捷步进指令的使用_【笔记】信捷plc应用,指令篇
  4. JVM中GC小对象配置
  5. hashcode值一样对象一定相同吗_HashMap实现原理分析(面试问题:两个hashcode相同 的对象怎么存入hashmap的)...
  6. php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件
  7. 确认! Python夺冠,Java“被迫”退出竞争舞台,网友:崩溃!
  8. 删除操作记录_微信消费记录能删吗?专家告诉你这样做百分百彻底删除!
  9. php中include,require的文件包含问题,以及$_SERVER['PHP_SELF']和__FILE__的区别
  10. Hyperledger Fabric教程(15)--基于Kafka的Order服务实战
  11. Luyten反编译工具
  12. Python实现微信自动发送消息
  13. 在哪下拼多多上传助手?拼多多软件方法介绍
  14. node处理图片和PDF文件方法
  15. 实现antd中Form、Form.Item组件
  16. 菜鸡解析CSS(cascading style sheet)
  17. 网站被qq拦截应该怎么处理
  18. 2021-11-12 (2018 CCPC 吉林站)
  19. 分享66个ASP上传下载源码,总有一款适合您
  20. 宁夏统编中学计算机教材,中小学三科教材的统编

热门文章

  1. 算法不会,尚能饭否之对分查找二叉树(又为快速排序之二叉树实现)
  2. 从一个案例看MVC中DataContext和UpdateModel的工作原理(详解UpdateModel/SubmitChanges错误)...
  3. NFV-Bench A Dependability Benchmark for Network Function Virtualization Systems
  4. 第三周练习 part3 --- 文件的操作
  5. GatewayWorker+laravel5.5+layim即时通讯项目demo
  6. TensorFlow环境配置----Mac OS
  7. Orcle 版本、数据库名查询
  8. java 中的 ThreadLocal
  9. 多线程设计模式(二):Future模式
  10. c#转换XML文件和json对象