beta

阅读:十二月 13 日

A new approach to text rendering

https://blog.atom.io/2017/06/22/a-new-approach-to-text-rendering.html

Teahour #91 介绍了 VS Code 与 Atom 之间的性能差距,其中提到 Atom 在文本的数据结构和 DOM 渲染机制上反反复复更换了好几次。Atom 的开发者之一 Nathan Sobo 在这篇博客中总结了 Atom 为文本渲染性能做出的一些优化,例如重新用回 virtual DOM(Atom 做了一个 DOM 操作库 Etch)、使用 Chrome 56 新加入的 ResizeObserver API 监视窗口尺寸变化、约束 CSS 的 containment 规则等等。这些渲染机制的改动使得一些插件无法正常工作,例如 vim-mode-plus,为此 Atom 又对文字和光标的 decoration 做了一些 hack。一番折腾下来,文本滚动时的渲染速度的确有了很大的提升。

然而就像 Teahour #91 的嘉宾、就职于微软 VS Code 团队的 Peng Lyu 所说,Atom 在优化性能的时候似乎真的是靠拍脑袋来决定优化策略的。对于一个尺寸有限的编辑器窗口,渲染和维护有限行数的代码,使用 virtual DOM 经过一次 diff 再渲染到 DOM 里,怎么想都没有直接操作 DOM 来得快吧?不过还是要看过代码再说。


Ten interesting features from various modern languages

(来自碼天狗週刊 #105

https://medium.com/@kasperpeulen/10-features-from-various-modern-languages-that-i-would-like-to-see-in-any-programming-language-f2a4a8ee6727

最近一直在写 Dart,虽然很小众,但是从语法上来看是一门让人觉得非常舒服的语言。Dart 整体的风格仍然属于 C-style 家族,而且很多地方跟 Java 比较像(比如 intdouble 之类都是小写而 String 是大写),对于语法糖的使用,也不会像 Kotlin 和 Ruby 那样给人一种大量堆砌的感觉。

这篇文章总结了「现代」编程语言里的十条有趣的特性,其中我最感兴趣的是 Dart 的 cascade operator:

1
2
3
4
querySelector('#button') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => dispatch(confirmedAction()));

还有 Reason 的自动库里化:

1
2
3
4
let add = (x, y) => x + y; /* same as (x) => (y) => x + y; */
let alsoFive = add(2)(3); /* 5 */
let addFive = add(5); /* y => 5 + y; */
let twelve = addFive(7); /* 12 */

不过最后作者又提到,这些「新」特性其实在很多「古老」的语言中早已存在,例如 Lisp、Smalltalk 和 Haskell 等等。


Writing Python Command-Line Tools With Click

(来自 Pycoders Weekly #296

https://dbader.org/blog/python-commandline-tools-with-click

如果你用过 Flask(尤其是其中的 CLI 模块)的话,对 Click 应该不会陌生。Click 是一个编写命令行应用程序的 Python 框架,通过 Python 的 decorator 来简明地定义命令和参数,并且可以自动生成帮助。相比于 argparse,Click 无疑让 CLI 应用的编写变得更加 Pythonic。我最近在用 Dart 写一些命令行工具,苦于没有好用的 CLI 框架于是想自己做一个,Click 是个非常不错的参考。