当前位置: 首页 > news >正文

【技术猩球】七牛云姜智:Go+ 演进之路

姜智,七牛云QCDN技术经理,曾就职于朗讯、中兴。具备十余年服务端研发经验和多年的团队管理经验。对高可用、高性能服务端开发和微服务架构有深入理解。一直深耕于业务一线,致力于将对技术和架构的理解,在业务场景中完美落地。

 

如果说在云计算的时代里,没有人可以错过 Go 语言;那么在 Go 语言的领域里,没有人可以错过 Gopher China Con。七牛云作为中国 Go 语言第一个吃螃蟹的企业,CEO 许式伟是国内 Go 语言大中华区首席布道师,他在今年面向全球发布了为数据科学而生的 Go+ 。本次大会现场,七牛云技术经理姜智受邀分享了《Go+ 演进之路》的主题演讲。姜智从 Go+ 是如何火起来的、许式伟对 Go+ 的思考以及为什么做 Go+、为什么 Go+ 靶心是数据科学、Go+ 发布后目前已经具备了哪些特性、Go+ 的运行机制和逻辑等方面深度解析了 Go+ 的演进之路。

Go+ 发展历程

2020 年 7 月 5 日,七牛云 CEO 许式伟面向全球发布了为数据科学而生的开发语言 Go+ 。Go+ 的诞生,在 Hacker News 上引发热议,在 Twitter 上形成了一道壮丽的风景线,占据了 Github Go 趋势榜双榜冠军。

关于为什么是 Go+,为什么技术开发者纷纷关注 Go+,Python 与 Go+ 的区别等问题,主要有下面几方面的背景和原因。

首先是数据科学的发展和变化。未来的数据科学将具备全领域、大数据、无处不在等特征。并且随着 DT 时代的到来,数字化信息(数据)极大化地产生,促使我们进入了 DT 时代,数据地位发生变化,由副产品上升为原材料(石油),无处不在,深植于业务流。Data Science 的地位变化,Data Science 将基础设施化,数学软件 (Application) 向基础设施 (Infrastructure)演进。

另外,Data Science 本质上是算力革命,是计算密集型的业务。Python 不会是 Data Science 的终局。Python 有很多强大的地方,非常灵活,但灵活性却导致 Python 有其局限。相比之下,Go 语言语法简洁。Python 是脚本语言,无法承担算力密集型。所以,Python 成不了基础设施(Infrastructure)。

未来的数据科学,必然是数学软件和通用语言的结合,所以 Go+ 来了!

Go+ 特性与实现解析

姜智在现场详细为大家介绍了 Go+ 当前所处的阶段,支持了哪些语言特性、具备的功能,同时 Go+ 是如何去实现这些特性的。

Go+ 的主要特性:

1、 Go+ 针对数据科学设计了简洁而易用的语法,比如 Go+ 对 List 和 Map 简洁实现,以及利用 List 和 Map 进行计算时的简洁语法。

2、Go+ 保持对 Go 兼容:Go+ 目前支持了大部分 Go 语言的特性(比如流程控制、goroutine、channel、defer等);Go+ 可以 import 所有 Go 的包;所有 Go+ 的包都能被转换成 Go 的包。

3、Go+ 独有的双擎:bytecode backend 和生成 Go 源码运行。

4、Go+ 实现了自己的 playground、REPL、vscode 插件等。

基于一个简单的示例,姜智在现场演示了 Go+ 的运行机制,包括:利用 Go+ 的词法分析,将 Go+ 源码生成 Go+ 的 token 序列;利用 Go+ 的语法分析,将 token 序列生成 Go+ 的抽象语法树(AST);Go+ 是如何基于双擎设计,将 Go+ 语法树转换成 bytecode 并运行,或者生成 Go 源码。

Go+ 下一步会是什么?

语言的选择标准必须包括:语法清晰简练和语法稳定容易学习。也希望语言的使用者是比较有探索精神的一个群体。Go+ 及其基于 Go 社区的用户群体刚好符合这些条件。当前 Go+ 的主要精力还是做它语法的一些实现,以及支持 Go 的特性。在维持 Go 的语法简洁性的本色之上,合理准入简化语法,是 Go+ 项目的核心战术工作。未来,七牛云希望借助更多开源的力量,用「坐十年冷板凳」的态度去探索及维护 Go+,以 Go+ 的力量助力数据科学。

相关文章:

  • 七牛云视频模板 SDK:「剪刀手」是怎样炼成的?
  • ECUG 全球技术大会开幕在即|顶级技术领袖助阵,共探无界未来
  • 【ECUG】十四年如一日,有这样一群初心不改的技术人
  • 太强!国人开发的后端新语言1.0 版本正式发布!
  • 又一门国产编程语言即将发布 1.0 版本
  • 这门国产语言终于要发布 1.0 版本了
  • 这门国产语言终于要发布1.0版本了!可以和Python相当!
  • 通知大家一件事:10月15日,我在上海等你们~
  • 追踪报道!Go+ 1.0 发布会有哪些大佬和精彩话题?嘿嘿嘿
  • Go+ 1.0即将正式发布!相关特性和发展路线图介绍
  • Go+ Together!Go+ 1.0 发布会暨 Go+ 开发者基金会启动仪式开幕在即,诚邀您报名!
  • 立足数据打响云端之战,七牛云的年末企划
  • 【架构师实践课】单体和微服务怎么选?单体到微服务怎么转?
  • 【架构师实践课】微服务如何拆分?大型微服务项目从何下手?
  • 【无标题】音视频实践日 Live|七牛云 QRTC 媒体传输质量优化实践
  • .pyc 想到的一些问题
  • Angular4 模板式表单用法以及验证
  • FineReport中如何实现自动滚屏效果
  • iOS 颜色设置看我就够了
  • JavaScript创建对象的四种方式
  • Making An Indicator With Pure CSS
  • Spring Boot快速入门(一):Hello Spring Boot
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 包装类对象
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 读懂package.json -- 依赖管理
  • 给github项目添加CI badge
  • 记一次和乔布斯合作最难忘的经历
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 强力优化Rancher k8s中国区的使用体验
  • 我的业余项目总结
  • 系统认识JavaScript正则表达式
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​flutter 代码混淆
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (分布式缓存)Redis哨兵
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net 无限分类
  • .net反编译的九款神器
  • .NET值类型变量“活”在哪?
  • [ 蓝桥杯Web真题 ]-布局切换
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [Angular 基础] - 表单:响应式表单
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数