python在线代码编译_代码在线编译器(上)- 编辑及编译

此文已由作者姚太行授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

在线编译器

代码在线编译器,即在线代码编写运行工具,提供给用户在线代码编辑、代码提示、代码诊断、编译、运行等一系列从代码编写到启动运行过程中必要的功能服务,以达到IDE的核心功能,应用范围较广,从使用场景下大致分为两类:

一般场景功能基础:仅基于开发语言的语法特点及常用原生库。

内容描述:此应用场景下,对一些涉及IO,诸如读写、外部请求等极端操作类型支持程度较高,代码运行环境通常使用沙箱,以满足安全性需要。

应用范畴:主要的应用业务范畴有在线代码辅助编辑工具(Tool等)、在线考试平台(牛客网等)、算法竞赛刷题平台(leetcode等)。

特殊场景功能基础:基于平台提供的大量工具API,仅结合必要的常用原生库。

内容描述:此应用场景下,用户编写的代码涉及的内容被限制在平台规定的有界范围内,代码风格、格式、结构也需按照平台规范进行展开,编译器除在基本语法检测的基础上也会对代码内涉及内容、方法做细致检测,对一些涉及IO、读写、网络请求等敏感操作会进行严格限制。由于需要使用平台本身提供的API,故简单的沙箱已经无法满足需要,需要针对不同的业务特点进行特殊的代码运行环境安全保障。

应用范畴:应用方面,根据平台工具API提供的出发点不同,业务范畴会被限制在平台涉及的范围内。在量化范畴内,多数量化平台会提供Python、Java的策略代码在线编译功能,并提供相关API以供用户完成量化策略开发的需要。

由于一般场景比较常见,开发及搭建的相关成熟样例也较多,本文在此不过多进行讨论。对于特殊场景,本文将结合在网易贵金属量化平台Java在线编译器的相关案例,对于在线编译部分的实现思路进行详细阐述。

案例说明

网易贵金属量化平台,核心是利用在线编译器相关原理,(目前)提供了针对贵金属交易的相关量化策略开发功能。后文每一个部分将以此平台为案例,结合理论总结进行案例阐述。为方便之后的阐述,现对系统基本情况作出简单说明:业务核心说明:用户可结合自身市场投资经验,形成策略,以回测或实盘方式,使用历史行情或实时行情以策略内容进行在历某个阶段或实时地模拟交易操作,输出策略交易盈亏,以达到验证策略、优化策略、积攒投资经验的目的。

策略:策略即“决定何种条件下触发交易”的一段逻辑,条件判定依据除时间及商品行情外,还可能包含机器学习结果、训练模型结果以及经济学指标等。表现在量化平台上是一段Java(或其他语言)代码,代码通过调用平台提供的接口进行逻辑判断以及交易操作。

策略输出:策略输出的直接结果就是交易信号本身及交易记录,统计出某段时间该策略总盈亏、最大回撤、夏普率等常用盈亏评价统计指标。

过程上体现为:用户编写策略

平台模拟交易

交易结果统计

用户编写策略

模拟交易并统计结果

在线编辑及编译

一个完整的在线编译流程,是从用户编写的代码开始的(当然代码来源不仅仅局限于此),代码从构建(编写或组装)到编译直至运行,最终输出结果或造成预期影响。流程包括代码构建

语法检测

代码诊断

代码编译

代码运行

内容反馈

代码构建

代码构建,涉及到语言类型、代码结构以及最终的代码生成方式。

语言类型

在线编译器平台构建前,需明确平台支持的语言类型。语言类型会影响到的方面:编译方式:可归纳至以下三种类型:解释型:解释型语言编写的程序,由其对应的解释程序执行的,不会直接涉及到编译过程,如JavaScript等。此类语言在搭建时一般可以动态的进行执行,而无需后台程序进行繁琐的编译过程。在平台架构设计时,可结合实际需要将相关代码的处理过程直接放置于平台上层(如浏览器本身),直接反馈结果,而无需将请求处理过程放置在底层,反而会把逻辑搞复杂。

编译型:编译型语言通常功能较为强大且相对底层,需要先将代码编译为目标程序机器码文件,如C、C++等,目标程序文件可脱离代码在计算机上多次运行。此类语言的用户代码,需将用户最终提交的代码交由服务器等具体计算机进行处理后,再进行程序运行进而反馈程序运行结果。

混合型:混合型语言与编译型语言不同点在于,编译过程不生成机器码而生成字节码文件,如Java、Python等,字节码文件同样可被加载至特殊的运行环境中多次运行但却无法被计算器直接识别。此类语言的用户代码,同样需要交由服务器等计算机进行处理,但运行时必须交由能够提供特殊运行环境的计算机来执行。

代码风格:代码风格,主要是需要确定代码是否对格式有特殊的要求,从而对提示过程作出优化,且会对之后的代码检测过程提供便利。例如Python会对缩进有强依赖,那么在代码提示和用户使用方面需要进行特殊的服务优化。

代码提示:代码提示必须在语言类型确认后才可确定,一般的基于浏览器的前端在线编辑框架,对某些语言的原生API会有现成的提示,除这一部分外,如果需要提示给用户平台自身开发的一些额外的API,则需要对这部分额外的内容整理为代码提示要求的格式,进行补充与导入。

代码结构

一般场景下,对用户代码的结构一般没有特殊需求,即与一般的IDE功能相同。 但是在特殊场景下,由于代码编写的目的相对明确,代码中包含的内容也是有预期的,所以在用户代码编写前,就可以通过固定代码结构的方式来限制用户代码的编写内容及构成,在之后的代码检测阶段,也可以根据此固定格式来进行初步的代码合理性检测。

以Java为例,固定结构的内容包括:禁止指定package结构

禁止类import导入

必须继承的父类

必须实现的接口

类唯一性

必须包含的方法

代码固定位置的提示性用注释

生成方式

代码生成方式上,根据平台对用户代码编写过程中的不同支持方式,在交互层面,用户生成自己代码的路径会有所不同,但最终结果均以生成合理代码为目标。

量化平台范畴中,用户代码用于实现对既往数据计算学习从而在未来做出决策的策略,以目前市场上一些特征较为突出的量化平台为例,生成方式可包括:原始代码编辑方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值