DeepType

1.Shebang

这个符号通常在Unix系统的脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序。

  1. 如果脚本文件中没有“#!”这一行,那么他执行时会默认使用当前shell去解释这个脚本(即$shell环境变量)。
  2. 如果“#!”之后的解释程序是一个可执行文件,那么执行这个脚本是,他就会把文件名及其参数作为参数传给那个解释程序去执行。
  3. 如果“#!”指定的解释程序没有可执行权限,则会报错“bad interpreter:Permission denied”(拒绝访问,也就是没有权限)。如果“#!”指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而给当前的shell去执行这个脚本。
  4. 如果“#!”指定的解释程序不存在,那么会报错“bad interpret : No such file ordirectory”,注意:“#!”之后的解释程序,需要些其绝对路径(例如:/bin/bash),他是不会自动到$PATH中寻找解释器的。
  5. 当然,如果你使用的“bash test.sh”这样的命令来执行脚本,那么“#!”这一行将被忽略,解释器当然是用命令行中显示式指定的bash。
    原文:https://blog.csdn.net/qq_32863631/article/details/75649033

前提:安装node和python3和pip
安装需要的package,如

node typescript
pip install numpy

data/repo-SHAs.txt:
repositories列表 和 the SHAs

1.data/cloner.sh:数据下载
a.切换到data目录下,执行./cloner.sh
a bash script:下载repositories(保存至data/Repos目录)和reset SHAs
Note that some repositories may have been deleted or made private, so these cannot be cloned.
b.切换到data目录下,执行sudo cp -r ./Repos ./Repos-cleaned
复制”Repos" directory(保存原始projects) 重命名为"Repos-cleaned"(data/下)(为了不改变原始projects下,存储 tokenized TypeScript data without type annotations)

2.在Repos-cleaned中 创建 tokenized 和type-aligned 文件 并 从中抽取 train和 test data.
a.切换到根目录下,执行node CleanRepos.js
创建 tokenized 和type-aligned 文件
*.ttokens:tokenized data and type;
*.ttokens.pure:all user-added type annotations
b.*切换到根目录下,执行node GetTypes.js
抽取训练和测试数据
每一行对应一个TypeScript文件,文件格式为:
tokens(space-separated)+tab+对应的types(space-separated)
outputs-all(training)(every identifier is annotated with its inferred type)
outputs-pure(GOLD data for evaluation)(real user-added type annotations for the TypeScript code)
outputs-checkjs(for comparing performance)(TSc+CheckJS inferred types for every identifier)
注意以上文件格式

3.运行DeepTyper
a.切换到根目录,执行python lexer.py
将数据分为80%train、10%valid、10%test
创建source(token)和target(type)vocabulary
创建test-project.txt(分析scripts,检索哪些projects被选中)
转换train/valid/test数据为.ctf输入文件(为了与CNTK兼容)
如:python txt2ctf.py --map data/source_wl data/target_wl --input data/train.txt --output data/train.ctf
b.切换到根目录,执行python infer.py
训练,每个epoch后保存至models/目录下
前提:安装GPU相关的深度学习package,注意最新的显卡驱动,cuda9.0和cuddn
https://docs.microsoft.com/en-us/cognitive-toolkit/Setup-Linux-Python?tabs=cntkpy27
https://docs.microsoft.com/en-us/cognitive-toolkit/setup-gpu-specific-packages-linux
在这里插入图片描述
解决:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.评估
a.evaluation.py:
加载数据:outputs-gold、outputs-checkjs
将结果写入"results/evaluation.txt"
针对test data中的real type得出true type, CheckJS’ type guess, DeepTyper’s type guess, DeepTyper’s confidence 和DeepTyper’s “rank”
top-K accuracy and MRR (using the ‘rank’) and mix models’ performance, hit and misses (using the ‘confidence’)

b.consistency.py:
分析outputs-all数据
How many tokens?

  • Singletons
  • Multiple occurrences
  • Inconsistently types(同名不同类型)

c.tokentypemodel.py:
训练一个name-only模型
针对naïve baseline打印top-k accuracy(1-10)

注意=>的使用
“use strict”:不能使用未声明的变量。

TAJS
run TAJS without arguments to see the full list:
• -inspector- start TAJS Inspector after analysis
• -callgraph- output call graph as text and in a file out/callgraph.dot (process with Graphviz dot)
• -show-variable-info- output type and line information about all variables
• -debug- output extensive internal information during the analysis
• -flowgraph- output the initial and final flow graphs (TAJS’s intermediate representation) as text and to out/flowgraphs/(in Graphviz dot format, with a file for each function and for the complete program)
• -low-severity- enable many more type warnings
• -quiet- only print results, not information about analysis progress
• -states- output intermediate abstract states during the analysis
• -statistics- output various statistics about the analysis results
• -uneval- enable the Unevalizer for on-the-fly translation of eval calls, as described in’Remedying the Eval that Men Do’, ISSTA 2012
• -determinacy- enable the techniques described in’Determinacy in Static Analysis of jQuery’, OOPSLA 2014
• -test-soundness- test soundness using concrete execution as described in’Systematic Approaches for Increasing Soundness and Precision of Static Analyzers’, SOAP 2017
• -unsound X- enable unsound assumption X, e.g.-ignore-unlikely-property-reads causes some unlikely properties to be ignored during dynamic property read operations, and -show-unsoundness-usage outputs usage of unsound assumptions

分析结果如下:
进入tajs-all.jar所在目录

java -jar tajs-all.jar D:\JetBrains\pycharm\TAJS-master\test-resources\src\google\richards.js

在这里插入图片描述

在这里插入图片描述

java -jar tajs-all.jar D:\JetBrains\pycharm\TAJS-master\test-resources\src\chromeexperiments\3ddemo.html

在这里插入图片描述
在这里插入图片描述
FLOW
a.Installing Flow Per Project

npm install --save-dev flow-bin

运行:

node_modules/.bin/flow

b.Installing Flow Globally

npm install -g flow-bin

运行:

flow

c.使用
1.在project根目录下Initialize Flow

Node_modules\.bin\flow init

2.在你想进行typecheck的文件顶部添加:

/* @flow */
  1. Run

    Node_modules.bin\flow check

执行之后出现:
在这里插入图片描述

源码学习


String… args与String[] args:可变参数
::JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下。
->是lambda表达式,就是匿名函数。

java 注解
元数据,即一种描述数据的数据。注解就是源代码的元数据。
元注解:
@Documented –注解是否将包含在JavaDoc中
@Retention –什么时候使用该注解
@Target –注解用于什么地方
@Inherited – 是否允许子类继承该注解
自定义注解,采用@interface
Spring和Hebernate等一些框架中大量使用了注解功能。

Java中的注解是如何工作的?
采用反射机制。反射可以提供类名、方法和实例变量对象。所有这些对象都有getAnnotation()这个方法用来返回注解信息。

常见注解
@Override告诉编译器这个方法是一个重写方法,如果父类中不存在该方法,编译器便会报错。
@Deprecated 标示已过时
@SuppressWarnings({"unchecked", "rawtypes"})作用是屏蔽一些无关紧要的警告。使开发者能看到一些他们真正关心的警告。
@FunctionalInterface函数式接口,在这个接口里面只能有一个抽象方法。主要用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。
@Retention可以用来修饰注解,是注解的注解,称为元注解。有一个value,属性为RetentionPolicy。RetentionPolicy有3个值:CLASS、RUNTIME、SOURCE
按生命周期来划分可分为3类:
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
@Target说明了Annotation所修饰的对象范围
取值(ElementType)有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

javadoc中的注解:
@link@see:链接代码,让注释看的更清楚易懂。

npm5之后安装文件之后会多出一个package-lock.json的文件,它的作用是:

  1. 安装之后锁定包的版本,手动更改package.json文件安装将不会更新包,想要更新只能使用 npm install xxx@1.0.0 --save 这种方式来进行版本更新package-lock.json 文件才可以

  2. 加快了npm install 的速度,因为 package-lock.json 文件中已经记录了整个 node_modules 文件夹的树状结构,甚至连模块的下载地址都记录了,再重新安装的时候只需要直接下载文件即可

package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值