Tim Anderson 发布的文章

TypeScript 的使用率在不断上升,Svelte 的开发者 Rich Harris 解释了为什么反其道而行,从 TypeScript 切换到 JavaScript 和 JSDoc。

Svelte 的一个将 TypeScript 转为 JSDoc 的拉取请求引起了一些困惑的评论。评论中有人说:“这个改变是出于什么原因呢?我在到处寻找这个问题或相关讨论,但我没有找到。” 随后,这个问题在 GitHub 上因“讨论过于激烈”而被锁定回复。

在上个月的一次 Svelte Society 采访中,Harris 提供了进一步的背景信息,他说:“我们决定要做的一件事就是在 Svelte 核心代码库中脱离 TypeScript,转向使用 JavaScript。这里有一些细微的复杂性我未曾充分解释。”

他持有的观点是:“类型是非常好的,但是 TypeScript 确实有些困扰…… 当你开始使用 .ts 文件后,你就必须有相应的工具来支持…… 当你使用像 TypeScript 这样的非标准语言时,你会遇到很多阻碍,我已经开始认识到这并不值得。因此,我们将我们所有的类型都放入了 JSDoc 注解中,我们也能获得所有的类型安全性,但没有任何的缺点,因为它就是 JavaScript,所有的东西都在注解中,你可以直接运行代码。这就是我们在 Sveltekit 代码库中所做的,它在 Svelte 4.0 中表现得非常好,所以我们决定对 Svelte 同样采取这种方式,因为这将让我们能够更快速地前进。”

虽然 Svelte/SvelteKit 并非最受欢迎的 JavaScript 框架,但它却是广受好评的框架之一。

开发者倾向于使用 TypeScript,主要因为他们发现强类型降低了错误的发生率,并提升了编码过程中的体验,如代码自动补全和即时帮助等功能。然而,令人惊讶的是,主要做为 API 文档工具的 JSDoc,也可以进行类型检查。这项功能已直接内置在 Visual Studio Code 中,如 这篇文档 所述。开发者只需在 JavaScript 文件顶部加上:

// @ts-check

正如文档中的解释,“当无法推断出类型时,可以利用 JSDoc 注解进行明确说明”。这个特性实际上是由 TypeScript 提供支持,这意味着在实际环境下,TypeScript 和 JSDoc 是相辅相成的。

不过,一个易被忽视的细节是,Harris 主要是在针对库开发的上下文里关注 TypeScript。他认为切换到 JSDoc 在开发应用时,“可能收益不大”,他说道:“如果你在开发一个应用,无论怎样你都不可避免地需要一个构建步骤。你需要优化代码,需要代码压缩,需要打包各种资源。而如果你在构建一个库,我将极力推荐你使用 JSDoc。”

Harris 在 Hacker News 进一步 补充,“Svelte 的用户无需担心,这个变动不会影响到你与 Svelte 使用 TypeScript 的能力——从 Svelte 导出的函数仍然会有所有熟悉的 TypeScript 好处,如类型检查,智能感知,内联文档等”。他坚定地表示:“我们对 TypeScript 的承诺比以往任何时候都更为坚决。”

(题图:DA/e20ff1ee-6388-42ce-8d82-66bc6eebf63c)


via: https://devclass.com/2023/05/11/typescript-is-not-worth-it-for-developing-libraries-says-svelte-author-as-team-switches-to-javascript-and-jsdoc/

作者:Tim Anderson 译者:ChatGPT 校对:wxy

根据 Retool 的设计总监 Ryan Lucas 所写的新 历史文章,开发微软的 Visual Basic(VB)的 Alan Cooper 最初将其设想为一个“外壳构造工具包”。那是在 1987 年,当时 Windows 正在赢得越来越多的用户,但为这个操作系统编写应用却困难重重。它的原型被命名为 Tripod,能够将按钮和列表框这样的对象拖放到设计界面上。

Lucas 的文章提到,随着时间的推移,这些设计对象的命名从 “waldos” 变到 “gizmos”,又改为“controls”。

当这个项目被微软 CEO 比尔·盖茨评审时,他决定将其与即将发布的 Windows 3.0 捆绑出售。然而这未能实现,原因不太清楚,可能是对于 OS/2 的政策争论(据说 OS/2 有望取代 Windows),或者是与开发 Windows 的团队产生的冲突。

实际上,这个当时开发代号被称为 Thunder 的项目,变成了一个商业语言项目,并在 1991 年作为 BASIC 的一个版本发布。文章里记载:“最终产品让 Cooper 感到震惊,因为他非常厌恶 BASIC。”

尽管如此,这个项目标志着一个广受欢迎的编程模型的诞生,VB 对 Windows 甚至整个软件开发行业影响深远。Lucas 写道:“到 1998 年 Visual Basic 6.0 发布的时候,其地位无人能敌:所有 Windows 上进行的商业应用程序编程中有三分之二都是用 Visual Basic 完成的。全盛时期,全球近有 350 万的 VB 开发者,是 C++ 程序员的十倍还多。”

Lucas 对 Alan Cooper 及原微软 VB 团队的 Micheal Geary 进行了访谈,并把这个历史整理的过程描述为一份“出于热爱的努力”。他进一步指出:“我觉得当我们失去 Visual Basic 的同时,我们也失落了一些东西。在许多方面,过去的 25 年我们一直在追逐它做对的那些理念。”

Visual Basic 6.0,是梦想还是梦魇?

据 Lucas 透露,微软在 2002 年发布 VB.NET 的时候,犯下了一个“非强迫性错误”。虽然语言看起来很像,但没有迁移的路径,新的 .NET 功能,如完全面向对象并不是 VB 开发者们想要的。使用率开始下降,到今天,VB.NET 在 .NET 编程中的地位已经落后于占主导地位的 C#。此外,微软已经失去了其在商业应用开发中的地位,.NET 只不过是诸多热门技术之一。

然而,实际上,在 .NET 推出的时候,VB 已经开始衰退。它编程的便捷性在大型且复杂的应用中开始崩解,开发者不得不痛苦地学习像“公寓线程”这样的奇特的 COM 概念。VB 应用还必须通过直接调用 Windows API 来增强,有许多奇怪的语言特点,即使是 Bruce Mckinney 在他的《Hardcore Visual Basic》这本书的最后一章也叫它《抄起你的斧头》。

最后,一些 VB 开发者在 1990 年代末期发现,Borland 公司的一款名叫 Delphi 的工具在几乎所有方面都优于 VB:更强大,运行速度更快,编译出来的原生代码应用程序更易于部署。Delphi 的表单设计师是受 VB 影响的,并且它的发明者 Anders Hejlsberg 后来加入了微软,创建了 C# 以及后来的 TypeScript。

微软尽力让 VB 可用,确保其运行环境到今日仍被支持,并持续让 Office 中的宏语言使用它。而 .NET 平台在应对 Java 的挑战方面比 VB 更好,甚至最终以 .NET Core 的形式成为了跨平台解决方案。

但这些并没有动摇 VB 的卓越和影响力。微软仍努力追寻着 VB 对于现称为 “群众开发者” 的人群所展现出的简洁与高效,尽管有很多尝试,一直难以复制成功。你也可以在 这里 找到 更多 关于 VB 的命运和缓慢死亡的信息。

(题图:DA/7f8b8625-f569-418b-b06d-9437435473fd)


via: https://devclass.com/2023/03/20/microsofts-visual-basic-why-it-won-and-why-it-had-to-die/

作者:Tim Anderson 译者:ChatGPT 校对:wxy

一段超级严肃的关于样本序列化的集合、子集和超集的文字

我是一名开发者,我读代码,我写代码,我写会写代码的代码,我写会写出供其它代码读的代码的代码。这些都非常火星语,但是有其美妙之处。然而,最后一点,写会写出供其它代码读的代码的代码,可以很快变得比这段文字更费解。有很多方法可以做到这一点。一种不那么复杂而且开发者社区最爱的方式是数据序列化。对于那些不了解我刚刚抛给你的时髦词的人,数据序列化是从一个系统获取一些信息,将其转换为其它系统可以读取的格式,然后将其传递给其它系统的过程。

虽然数据序列化格式多到可以埋葬哈利法塔,但它们大多分为两类:

  • 易于人类读写,
  • 易于机器读写。

很难两全其美,因为人类喜欢让我们更具表现力的松散类型和灵活格式标准,而机器倾向于被确切告知一切事情而没有二义性和细节缺失,并且认为“严格规范”才是它们最爱的口味。

由于我是一名 web 开发者,而且我们是一个创建网站的机构,我们将坚持使用 web 系统可以理解或不需要太多努力就能理解的特殊格式,而且对人类可读性特别有用的格式:XML、JSON、TOML、CSON 以及 YAML。每个都有各自的优缺点和适当的用例场景。

事实最先

回到互联网的早期,一些非常聪明的家伙决定整合一种让每个系统都能理解的标准语言,并创造性地将其命名为 标准通用标记语言 Standard Generalized Markup Language (简称 SGML)。SGML 非常灵活,发布者也很好地定义了它。它成为了 XML、SVG 和 HTML 等语言之父。所有这三个都符合 SGML 规范,可是它们都是规则更严格、灵活性更少的子集。

最终,人们开始看到非常小、简洁、易读且易于生成的数据的好处,这些数据可以在系统之间以编程的方式共享,而开销很小。大约在那个时候,JSON 诞生了并且能够满足所有的需求。而另一方面,其它语言也开始出现以处理更多的专业用例,如 CSON,TOML 和 YAML。

XML:不行了

原本,XML 语言非常灵活且易于编写,但它的缺点是冗长,人类难以阅读、计算机非常难以读取,并且有很多语法对于传达信息并不是完全必要的。

今天,它在 web 上的数据序列化的用途已经消失了。除非你在编写 HTML 或者 SVG,否则你不太能在许多其它地方看到 XML。一些过时的系统今天仍在使用它,但是用它传递数据往往太重了。

我已经可以听到 XML 老爷爷开始在它们的石碑上乱写为什么 XML 是了不起的,所以我将提供一个小小的补充:XML 可以很容易地由系统和人读写。然而,真的,我的意思是荒谬的,很难创建一个可以规范的读取它的系统。这是一个简单美观的 XML 示例:

<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>

太棒了。易于阅读、理解、写入,也容易编码一个可以读写它的系统。但请考虑这个例子:

<!DOCTYPE r [ <!ENTITY y "a]>b"> ]>
<r>
<a b="&y;>" />
<![CDATA[[a>b <a>b <a]]>
<?x <a> <!-- <b> ?> c --> d
</r>

这上面是 100% 有效的 XML。几乎不可能阅读、理解或推理。编写可以使用和理解这个的代码将花费至少 36 根头发和 248 磅咖啡渣。我们没有那么多时间或咖啡,而且我们大多数老程序员们现在都是秃头。所以,让它活在我们的记忆里,就像 css hacksIE 6 浏览器真空管一样好了。

JSON:并列聚会

好吧,我们都同意,XML = 差劲。那么,好的替代品是什么? JavaScript 对象表示法 JavaScript Object Notation ,简称 JSON。JSON(读起来像 Jason 这个名字) 是 Brendan Eich 发明的,并且得到了伟大而强力的 JavaScript 意见领袖 Douglas Crockford 的推广。它现在几乎用在任何地方。这种格式很容易由人和机器编写,按规范中的严格规则解析也相当容易,并且灵活 —— 允许深层嵌套数据,支持所有的原始数据类型,及将集合解释为数组或对象。JSON 成为了将数据从一个系统传输到另一个系统的事实标准。几乎所有语言都有内置读写它的功能。

JSON语法很简单。方括号表示数组,花括号表示记录,由冒号分隔的两个值分别表示属性或“键”(在左边)、值(在右边)。所有键必须用双引号括起来:

  {
    "books": [
      {
        "id": "bk102",
        "author": "Crockford, Douglas",
        "title": "JavaScript: The Good Parts",
        "genre": "Computer",
        "price": 29.99,
        "publish_date": "2008-05-01",
        "description": "Unearthing the Excellence in JavaScript"
      }
    ]
  }

这对你来说应该是完全有意义的。它简洁明了,并且从 XML 中删除了大量额外废话,并传达相同数量的信息。JSON 现在是王道,本文剩下的部分会介绍其它语言格式,这些格式只不过是 JSON 的简化版,尝试让其更简洁或对人类更易读,可结构还是非常相似的。

TOML: 缩短到彻底的利他主义

TOML( Tom 的显而易见的最小化语言 Tom’s Obvious, Minimal Language )允许以相当快捷、简洁的方式定义深层嵌套的数据结构。名字中的 Tom 是指发明者 Tom Preston Werner,他是一位活跃于我们行业的创造者和软件开发人员。与 JSON 相比,语法有点尴尬,更类似 ini 文件。这不是一个糟糕的语法,但是需要一些时间适应。

[[books]]
id = 'bk101'
author = 'Crockford, Douglas'
title = 'JavaScript: The Good Parts'
genre = 'Computer'
price = 29.99
publish_date = 2008-05-01T00:00:00+00:00
description = 'Unearthing the Excellence in JavaScript'

TOML 中集成了一些很棒的功能,例如多行字符串、保留字符的自动转义、日期、时间、整数、浮点数、科学记数法和“表扩展”等数据类型。最后一点是特别的,是 TOML 如此简洁的原因:

[a.b.c]
d = 'Hello'
e = 'World'

以上扩展到以下内容:

{
  "a": { 
    "b": {
      "c": { 
        "d": "Hello"
        "e": "World"
      }
    }
  }
}

使用 TOML,你可以肯定在时间和文件长度上会节省不少。很少有系统使用它或非常类似的东西作为配置,这是它最大的缺点。根本没有很多语言或库可以用来解释 TOML。

CSON: 特定系统所包含的简单样本

首先,有两个 CSON 规范。 一个代表 CoffeeScript Object Notation,另一个代表 Cursive Script Object Notation。后者不经常使用,所以我们不会关注它。我们只关注 CoffeeScript。

CSON 需要一点介绍。首先,我们来谈谈 CoffeeScript。CoffeeScript 是一种通过运行编译器生成 JavaScript 的语言。它允许你以更加简洁的语法编写 JavaScript 并转译成实际的 JavaScript,然后你可以在你的 web 应用程序中使用它。CoffeeScript 通过删除 JavaScript 中必需的许多额外语法,使编写 JavaScript 变得更容易。CoffeeScript 摆脱的一个大问题是花括号 —— 不需要它们。同样,CSON 是没有大括号的 JSON。它依赖于缩进来确定数据的层次结构。CSON 非常易于读写,并且通常比 JSON 需要更少的代码行,因为没有括号。

CSON 还提供一些 JSON 不提供的额外细节。多行字符串非常容易编写,你可以通过使用 # 符号开始一行来输入注释),并且不需要用逗号分隔键值对。

books: [
  id: 'bk102'
  author: 'Crockford, Douglas'
  title: 'JavaScript: The Good Parts'
  genre: 'Computer'
  price: 29.99
  publish_date: '2008-05-01'
  description: 'Unearthing the Excellence in JavaScript'
]

这是 CSON 的大问题。它是 CoffeScript 对象表示法 CoffeeScript Object Notation 。也就是说你要用 CoffeeScript 解析/标记化/lex/转译或其它方式来使用 CSON。CoffeeScript 是读取数据的系统。如果数据序列化的目的是允许数据从一个系统传递到另一个系统,这里我们有一个只能由单个系统读取的数据序列化格式,这使得它与防火火柴、防水海绵或者叉匙恼人的脆弱叉子部分一样有用。

如果这种格式被其它系统也采用,那它在开发者世界中可能非常有用。但到目前为止这基本上没有发生,所以在 PHP 或 JAVA 等替代语言中使用它是不行的。

YAML:年轻人的呼喊

开发人员感到高兴,因为 YAML 来自一个 Python 的贡献者。YAML 具有与 CSON 相同的功能集和类似的语法,有一系列新功能,以及几乎所有 web 编程语言都可用的解析器。它还有一些额外的功能,如循环引用、软包装、多行键、类型转换标签、二进制数据、对象合并和集合映射。它具有非常好的可读性和可写性,并且是 JSON 的超集,因此你可以在 YAML 中使用完全合格的 JSON 语法并且一切正常工作。你几乎不需要引号,它可以解释大多数基本数据类型(字符串、整数、浮点数、布尔值等)。

books:
  - id: bk102
  author: Crockford, Douglas
  title: 'JavaScript: The Good Parts'
  genre: Computer
  price: 29.99
  publish_date: !!str 2008-05-01
  description: Unearthing the Excellence in JavaScript

业界的年轻人正在迅速采用 YAML 作为他们首选的数据序列化和系统配置格式。他们这样做很机智。YAML 具有像 CSON 一样简洁的所有好处,以及与 JSON 一样的数据类型解释的所有功能。YAML 像加拿大人容易相处一样容易阅读。

YAML 有两个问题,对我而言,第一个是大问题。在撰写本文时,YAML 解析器尚未内置于多种语言,因此你需要使用第三方库或扩展来为你选择的语言解析 .yaml 文件。这不是什么大问题,可似乎大多数为 YAML 创建解析器的开发人员都选择随机将“附加功能”放入解析器中。有些允许标记化,有些允许链引用,有些甚至允许内联计算。这一切都很好(某种意义上),只是这些功能都不是规范的一部分,因此很难在其他语言的其他解析器中找到。这导致系统限定,你最终遇到了与 CSON 相同的问题。如果你使用仅在一个解析器中找到的功能,则其他解析器将无法解释输入。大多数这些功能都是无意义的,不属于数据集,而是属于你的应用程序逻辑,因此最好简单地忽略它们和编写符合规范的 YAML。

第二个问题是很少有解析器完全实现规范。所有的基本要素都有,但是很难找到一些更复杂和更新的东西,比如软包装、文档标记和首选语言的循环引用。我还没有看到对这些东西的刚需,所以希望它们不让你很失望。考虑到上述情况,我倾向于保持 1.1 规范 中呈现的更成熟的功能集,而避免在 1.2 规范 中找到的新东西。然而,编程是一个不断发展的怪兽,所以当你读完这篇文章时,你或许就可以使用 1.2 规范了。

最终哲学

这是最后一段话。每个序列化语言都应该以个案标准的方式评价。当涉及机器的可读性时,有些 无出其右 the bee’s knees 。对于人类可读性,有些 名至实归 the cat’s meow ,有些只是 金玉其外 gilded turds 。以下是最终细分:如果你要编写供其他代码阅读的代码,请使用 YAML。如果你正在编写能写出供其他代码读取的代码的代码,请使用 JSON。最后,如果你正在编写将代码转译为供其他代码读取的代码的代码,请重新考虑你的人生选择。


via: https://www.zionandzion.com/json-vs-xml-vs-toml-vs-cson-vs-yaml/

作者:Tim Anderson 选题:lujun9972 译者:GraveAccent 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在世界移动大会 MWC16 上 Intel 展示了称之为“大屏体验”的一款的 Android 智能手机,它在插入一个外部显示后运行了一个完整的 Linux 桌面。

这个概念大体上与微软在 Windows 10 手机中的 Continuum 相似,但是 Continuum 面向的是高端设备,Intel 的项目面向的是低端智能机和新兴市场。

在巴塞罗那的这场大会上展示的是拥有 Atom x3、2GB RAM 和 16GB 存储以及支持外部显示的的 SoFIA(Intel 架构的智能或功能手机)智能机原型。插上键盘、鼠标和显示,它就变成了一台桌面 Linux,并可以选择在大屏幕的一个窗口中显示 Android 桌面。

Intel 的拓荒小组(Path Finding Group)经理 Nir Metzer 告诉我们:“Android 基于 Linux 内核,因此我们运行在一个内核上,我们有一个 Android 栈和一个 Linux 栈,并且我们共享同一个环境,因此文件系统是相同的。电话是全功能的。”

Metzer 说:“我有一个多窗口环境。只要我插入显示器后就可以使用电子表格,我可以进行拖放操作,播放音频。在一个低端平台实现这一切是一个挑战。”

现在当连上外部显示器时设备的屏幕显示是空白的,但是 Metzer 说下个版本的 Atom X3 会支持双显示。

其使用的 Linux 版本是由 Intel 维护的。Metzer 说:“我们需要将 Linux 和 Android 保持一致。框架是预安装的,不是一个可以下载的应用。”

英特尔在移动世界大会上向手机制造商们推销这一想法,但却没有实际说希望购买该设备的消费者。Metzer 说:“芯片已经准备好了,已经为量产准备好了。明天就可以进入生产。但是这要看商业需求。”


via: http://www.theregister.co.uk/2016/02/23/move_over_continuum_intel_shows_android_smartphone_powering_bigscreen_linux/

作者:Tim Anderson 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出