Glean

源码分析引擎
授权协议 BSD
开发语言 Haskell C/C++
所属分类 开发工具、 代码管理分析/审查/优化
软件类型 开源软件
地区 不详
投 递 者 孙福
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Glean 是一个用于收集、推导和查询有关源代码信息的系统。它旨在收集和存储有关代码结构的详细信息,并提供对数据的访问,以提供从在线 IDE 功能到离线代码分析的强大工具和体验。你可以将其用于:

  • 收集和存储有关代码结构的详细信息。Glean 是围绕高效的存储模型设计的,该模型可以大规模存储有关代码的信息。

  • 查询有关代码的信息,为从在线 IDE 功能到离线代码分析的工具和体验提供支持。

Glean 由以下组件组成:

  • 一个建立在 RocksDB 上的高效存储后端,用于存储事实。事实是由用户定义的模式描述的不可变的术语,并形成一个DAG。事实是由存储后端自动去重的。可以把它看作是能够有效地存储和查询你的代码的AST,并且具有完全的类型安全。

  • 实现声明式查询语言 Angle 的查询引擎。Angle 是一种与 Datalog 相似的逻辑语言,但具有扩展功能,使其适用于构建对 Glean data 复杂查询。就像在 Datalog 中一样,Glean 可以通过使用 Angle定义规则来自动推导出新的事实。

  • 一个服务器管理的磁盘多个数据库,并提供从客户创造,写和查询数据库的请求。该服务器目前使用 Thrift,但没有理由将来服务器也不能公开其他协议。该服务器旨在大规模部署,为大量客户端提供复制的数据库。

  • 一个交互式 shell,你可以在其中键入查询并浏览数据。

  • 用于直接或通过连接到服务器来创建、编写和查询数据库的命令行工具

  • 常见编程语言的几个示例模式,以及 其中一些的索引器。请注意,Glean 不会强制将所有数据放入一个单一模式中;每种语言的模式中可以有任意数量的特定于语言的细节。可以通过使用 Angle 派生事实来构建语言中立的抽象。

主要特点:

  • 种类丰富:存储代码的详细信息

  • 紧凑型存储:大规模存储有关代码的数据

  • 高效查询:从代码中获得深刻见解,构建体验

目前支持:

计划提供:

  • Python
  • C++
  • Objective-C
  • Java
  • Rust

 

  • GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution 文章链接:https://arxiv.org/pdf/2012.00739.pdf 1、 Introduction,  Related Work In this study, we explore a new way to employ GAN [9] for

  • JDBC 各组件调用关系 [img]http://dl.iteye.com/upload/attachment/372278/b2ccc9c6-6f2b-326a-b513-bc48852028bc.png[/img] JDBC 中常用的、关键的几个类: DriverManager dm = null; Connection conn = null; Statement stmt = nu

  • [b]JNDI 基本说明[/b] JNDI ( Java Naming and Directory Interface ),是 Java 提供的一组与各种命名目录服务系统交互的接口。它是一套标准的接口,独立于各种命名目录服务系统,与具体类型的命名目录服务无关。Java 应用程序通过 JNDI 接口与命名目录服务交互,交互细节由服务提供者实现,Java 应用程序无需关心。 (个人觉得这是JAVA 的

 相关资料
  • 本文向大家介绍Underscore源码分析,包括了Underscore源码分析的使用技巧和注意事项,需要的朋友参考一下 几年前就有人说javascript是最被低估一种编程语言,自从nodejs出来后,全端(All Stack/Full Stack)概念日渐兴起,现在恐怕没人再敢低估它了。javascrip是一种类C的语言,有C语言基础就能大体理解javascript的代码,但是作为一种脚本语言,

  • 这一节我们来看看requests是如何发送一个request的,这一节内容可能比较多,有很多底层代码,我自己也看的头疼,建议阅读前先喝瓶酸奶以保持轻松的心情。如果你准备好了,请往下看。 我们在Pycharm中按住win点击get,会来到get方法的源码: def get(url, params=None, **kwargs): r"""Sends a GET request. :

  • 传统习惯 上高清无码自制大图: 不需要理解图中各个类的功能, 大致扫一眼留一下印象。 State组件中有三个比较重要的地方,一个是State这个结构, 一个是BlockExector,还有一个是Store。 我们先看State结构。 它代表了区块的状态。 看一下它的详情数据结构: type State struct { //链ID 整个链中都是不会变化的 ChainID strin

  • 基本组件说明 P2P模块涉及的最重要的组件如上图所示, 上述的UML图并没有列出某个类的所有属性和方法,只是列举了我认为比较重要的部分。 第一眼看到上面的类图我猜应该是什么也看不出来。 再仔细看我想依然是云山雾绕不知道整个P2P的流程。 所以类图只是给大家一个基本的组件印象。让大家能大致猜测一下各个组件的功能。 现在我们不妨按着上面的类图去大胆猜一猜上述的各个组件的功能。 我们先从Switch这个

  • 老规矩,先上图。 内存池的作用简而言之就是为了保存从其他peer或者自身受到的还未被打包的交易。 我们看一下mempool的文件夹。 所以我们关注的内存池的源码其实只有mempool.go和reactor.go文件。 从源文件名称应该可以看出来MemPool的成员方法是在mempool.go文件中, 和peer信息信息的交互应该是在reactor.go文件中的。 在mempool.go文件中看到这

  • 老规矩,先上类图。 (虽然我知道看上去啥也看不出来) 然后顺便看一下blockchain模块的文件目录 也就是说blockchain模块我们只需要看pool.go store.go和reactor.go模块 根据名字猜功能,pool 猜想是存储区块的区块池,对多个区块进行管理的? store.go应该是和数据库进行相关操作的代码。 reactor.go就显而易见就是和Peer进行通信实现React