七月份可能是今年以来我个人最忙的一个时间段,所以上一个 Go+ 的 weekly release: v0.7.2 延迟了一天发布,并且也没来得及将发布的内容整理成文。这周我们就把这两周的更新合并在一起说。

首先是一个影响颇大的工作细节改变。之前我们合并 pull request 的时候,是原样合并,这样 pull request 在实现某功能或修改某个 bug 时进行了 N 次 commits,我们合并的时候就会生成 N+1 次 commits。但是现在我们合并 pull request 改为 “Squash and merge”,简单说就是把这 N+1 次 commits 合并为 1 次 commits。

这样做的好处是阅读源代码的时候比较方便,历史提交记录中没有多余的 “废话”,哪些功能修改涉及了哪些文件的修改,一清二楚。当然不好的地方也是有的。一个是冲突比之前更容易发生了。另一个是看 Github Contributors 信息的时候,会发现 commits 次数比之前差不多整整少了一个数量级(每个 commit 变成了一个 big commit 了)。

回到我们的变更。在 v0.7.2 中,我们最重要的是发布了一个叫 Auto property 的功能。这个功能在很多场景下会让 Go+ 的代码看起来更优雅,尤其是在 DOM Query 场景。

所谓 DOM Query,是指 DOM 树查询场景。我个人不建议采用 XPath 这种 DSL 文法进行查询,而是直接采用语言自身的语法能力来表达查询,比如:

import "github.com/goplus/gop/ast/goptest"doc := goptest.New(`... Go+ code ...`)!println(doc.Any().FuncDecl().Name())

这是在没有 Auto property 是我们的查询语法,它表示我们读取了 Go+ 的语法树,并且找到所有的函数,并打印它们的名字。在有了 Auto property 后,这段代码变成了:

import "github.com/goplus/gop/ast/goptest"doc := goptest.New(`... Go+ code ...`)!println(doc.any.funcDecl.name)

我们知道很多语言都有 property 这样的概念。property 往往会有 get 和 set 方法。如果只有 get 方法,那么就是只读的 property。那么究竟什么是 Auto property?它其实是一种只读 property,只是无需自己实现 get 方法。简单来说,如果一个类型拥有一个无参数的 Bar() 方法,那么在 Go+ 中就自动拥有了一个名为 bar 的 property。这样,foo.bar 其实就等价于 foo.Bar()。

在 weekly release v0.7.3 中,最重要的变化是新增加了 iGo+。也就是说,现在  Go+ 可以运行在 REPL/Console 模式下了。我很期待下一个 weekly release 能够把它搬到 Web 上。

这一周我们还提出了 Go+ 的 lambda 函数的设计。尽管 Go 语言的 closure 挺好,但是相对于 Data Science 而言,表达上还是比较丑陋的。我们拿 Map/Reduce 作为例子:

foo.Map(func(x float64) float64 { return x*x })

但是在 Go+ 中我们希望它变成:

foo.Map(x => x*x)

如果你希望了解更多的细节,请参见 https://github.com/goplus/gop/issues/321。

以下是完整的 Release Notes:

Design of Go+ lambda functions

See #321. Comments are welcome.

Commands

gop repl (ie. igop)

Run Go+ in REPL/Console mode. Thanks contribution of jiangz222 (jiangzhi@goplus.org).

Defer

Currently only available in bytecode backend. Thanks contribution of go-wyvern (wuxinyi@goplus.org).

Bugs fix

  • Variable scope bug: variable redefinition.

  • Array literal is deduced as a pointer.

  • Fix inconsistent command line output for different help commands.

  • cmd/qexp: fix export mod pkg with version (#501).

Thanks contribution of JessonChan (chendongpo@goplus.org), visualfc (visualfc@goplus.org), si9ma.

Git merge mode

We change merge mode to Squash and merge. It will combine all commits from the head branch into a single commit in the base branch.

Auto property

Let's see an example written in Go+:

import "github.com/goplus/gop/ast/goptest"doc := goptest.New(`... Go+ code ...`)!println(doc.Any().FuncDecl().Name())

In many languages, there is a concept named property who has get and set methods.

Suppose we have get property, the above example will be:

import "github.com/goplus/gop/ast/goptest"doc := goptest.New(`... Go+ code ...`)!println(doc.any.funcDecl.name)

In Go+, we introduce a concept named auto property. It is a get property, but is implemented automatically. If we have a method named Bar(), then we will have a get property named bar at the same time.

Go+ related packages

  • github.com/goplus/gop/ast/gopq

  • github.com/goplus/gop/ast/goptest

See tutorial/22-Auto-Property.

Flow control

  • break/continue/return in for range statements.

Thanks contribution of JessonChan (chendongpo@goplus.org).

Misc

  • Simplify test cases of cl/stmt_test.go.

  • Command gop export bug fixed.

  • Getting value from a map panics if the key not exists.

  • Export fmt package.

  • Update dependency: github.com/qiniu/x v1.11.5

Thanks contribution of JessonChan (chendongpo@goplus.org), visualfc (visualfc@goplus.org).

Go+ 发布 weekly release: v0.7.3相关推荐

  1. CITA Release v0.18

    CITA Release v0.18 Commit:1618ba7fabefd96f5ec67e16ed24e3be2b80930b 技术论坛:https://forums.nervos.org 20 ...

  2. Android Studio开发版(debug)和发布版(release)获取SHA1和MD5和SHA256的最原始方法

    直接上图: 先看debug(开发版本) 1.打开cmd输入cd  .android 2.输入keytool -list -v -keystore debug.keystore然后回车就行 再看发布版( ...

  3. VC下发布的Release版程序的异常捕捉

    VC下发布的Release版程序的异常捕捉寻找Release版程发生异常退出的地方比Debug版麻烦得多.发生异常的时候windows通常会弹出一个错误对话框,点击详细信息,我们能获得出错的地址和大概 ...

  4. flex发布的release程序要配release的Flash Player,速度飞快!如果有一方是debug版本的,速度就降下来了,要注意!...

    flex发布的release程序要配release的Flash Player,速度飞快!如果有一方是debug版本的,速度就降下来了,要注意! 有时自已发布的release程序,感常和debug速度差 ...

  5. 集成JIRA/TAPD管理缺陷,增强接口测试,MeterSphere开源持续测试平台v1.2.0发布丨Release Notes

    8月31日,MeterSphere开源持续测试平台正式发布v1.2.0版本.在该版本中,针对测试跟踪模块的缺陷管理功能,我们与主流的JIRA/TAPD平台进行了集成.同时对接口测试进行了全面增强,单接 ...

  6. 极限编程 (Extreme Programming) - 发布计划 (Release Planning)

    编写用户故事后,您可以使用发布计划会议来创建发布计划.发布计划指定 将为每个系统版本实现哪些用户故事以及这些版本的日期.这给出了一组用户故事供客户在迭代计划会议期间进行选择,以便在下一次迭代期间实施. ...

  7. cordova 发布 android release 签名打包

    2019独角兽企业重金招聘Python工程师标准>>> ## 20161227 android 签名打包制作一个 build.json 文件,放在项目一级目录修改 build.jso ...

  8. 测试用例支持思维导图编辑模式,MeterSphere开源持续测试平台v1.8.0发布丨Release Notes

    3月25日,MeterSphere一站式开源持续测试平台正式发布v1.8.0版本.v1.8.0版本是2021年农历春节后的第一个版本,经过近两个月的迭代,我们为大家带来了众多的功能更新及优化. 测试用 ...

  9. 增加用例评审及思维导图导入功能,MeterSphere开源持续测试平台v1.3.0发布丨Release Notes

    9月29日,MeterSphere开源持续测试平台正式发布v1.3.0版本.在该版本中,MeterSphere主要针对测试跟踪及接口测试模块进行了功能更新及优化. 在测试跟踪模块中,我们增加了全新的用 ...

最新文章

  1. android框架连接mysql_Android:ROOM数据库框架
  2. 为什么String中的Java hashCode()使用31作为乘数?
  3. leetcode算法题--一周中的第几天
  4. 30张图 讲述真实的人性
  5. 电脑字体模糊_2020年初电脑配件和配置单推荐!
  6. 优秀网页设计各种国外站的素材
  7. 【渝粤教育】电大中专药事管理与法规 (2)作业 题库
  8. 最大尺寸分辨率_未来就在眼前!全球最大尺寸、最高分辨率硅基OLED显示屏在肥点亮...
  9. 20145231熊梓宏 《网络对抗》 实验四 恶意代码分析
  10. access性别字段_12、ACCESS数据表的筛选(ACCESS图解操作系列)
  11. 5岁自学python编程-三十岁了还可以学编程吗?只要你想,只要你做,什么时候都不晚...
  12. 无法初始化主类 flink.learn.bounded.WordCountJob
  13. 局部变量AND全局变量
  14. MVP模式——Okhttp实现下载图片并带有进度 【Android Demo】
  15. 从小白到大咖——十分钟学会JavaScript操作浏览器内置对象
  16. 操作系统-文件读写过程
  17. ZROI 2018 ZYB建围墙
  18. 在vue中如何使用umy-ui
  19. 《中国垒球协会》:新春贺词
  20. STFT filter bank

热门文章

  1. PDF文件太大怎么压缩?用这个方法能够一键瘦身
  2. jieba的简单使用
  3. Cadence Allegro 17.4学习记录开始26-PCB Editor 17.4软件PCB中铺铜操作
  4. json数据和json数据与python之间的转换
  5. 输入框:请输入关键字 小功能
  6. 如何将Word转化为Markdown文本
  7. 供应链金融服务平台系统开发-成熟、稳定、节本、增效,一站式信息交易管理平台
  8. CV学习笔记-VGG
  9. 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(九)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(二)
  10. mini2440 led驱动程序测试实验