Code Monkey home page Code Monkey logo

jshistory-cn's Introduction

JavaScript 二十年

GitHub stars

纸质版

本项目已与博文视点合作推出纸质版,其版税收入将有 10% 捐献给 Mozilla,点击购买

原文简介

本书由 JavaScript 之父 Brendan Eich 与 ES6 规范首席作者 Allen Wirfs-Brock 联合编写,详细记载和解读了自 1995 年语言诞生到 2015 年 ES6 规范制定为止,共计 20 年的 JavaScript 语言演化历程。全书不仅讲解了大量语言技术细节层面的演进,更复盘了更高层面上规范制定与标准博弈中的历史成败,是一部讲述人类如何在商业与技术上的竞争合作中促进产业发展的故事。

这个故事相当漫长而复杂。全文分为四个部分,每部分都对应 JavaScript 演化历程中的一个主要阶段。各部分之间还有一段简短的插曲,介绍彼时的开发者们是如何看待与使用 JavaScript 的。

这四个部分依次如下:

  1. 语言诞生(The Origins of JavaScript),介绍了 JavaScript 的创建与早期发展,包括语言的诞生背景、命名方式、初始特性及其设计理念等。这一节还追溯了它在 Netscape 与其他公司最初的演化,例如微软的 JScript。
  2. 创立标准(Creating a Standard),介绍了从 JavaScript 到 ECMAScript 标准的历程。这主要涵盖 JavaScript 标准化工作的启动、规范的创建、相关贡献者以及决策方式等。
  3. 改革失败(Failed Reformations),介绍了在 Eich 离开后,缺乏「仁慈**者」的 ECMAScript 委员会修改语言的失败尝试。这主要涉及委员会的分裂、对 ES4 的两轮投入,以及 Flash 与 ActionScript 在其中的渊源等。
  4. 继往开来(Modernizing JavaScript),介绍了 2009 年 ES5 与 2015 年 ES6 这两个成功标准背后的故事,主要包括对 ES5 与 ES6 的目标、重大基础性更改与重要新特性的介绍与回顾。

目录

许可

本文基于 CC-BY-NC 4.0 许可,不限制非商用转载。

Allen Wirfs-Brock and Brendan Eich. 2020. JavaScript: the first 20 years. Proc. ACM Program. Lang. 4, HOPL, Article 77 (June 2020), 189 pages. DOI:https://doi.org/10.1145/3386327

jshistory-cn's People

Contributors

conorzhong avatar cyansalt avatar doodlewind avatar hyisen avatar hylerrix avatar liajoy avatar liby avatar maxchang3 avatar myst729 avatar xcatliu avatar zzzzzshpig avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jshistory-cn's Issues

很好的书

学习一个新知识,了解历史,了解来龙去脉,太重要了。完全以一个更高的维度去思考这些新的知识点

Contribution to this project?

Hi this is a great project. From the readme.md, is part 4 already finished or waiting for translation?

Is it possible to contribute to the translation work (If so, is there guidance for committing?)?

Thanks.

标题翻译问题

The first 说的是第一个20年。开篇标题翻译不太准确,内容吸引力就降低了。

如何参与翻译

RT,是直接提PR么?但是不知道会不会和你的翻译进度有冲突。

[火狐] 跳转到附录和备注并后退,会跳转到页面开头

  • 使用火狐浏览器打开网站
  • 向下滚动以阅读文章
  • 点击某个附录或备注的链接
  • 看完了,使用「后退」功能跳回之前阅读的地方
  • 页面会跳转到页面开头而不是刚刚看到的位置

这个问题在 Google Chrome 上不存在。

我在 webcompat 报告了这一问题( webcompat/web-bugs#74843 ),他们发现脚本中显式地滚动到了开头。

示例代码有误

https://github.com/doodlewind/js-20-years-cn/blob/master/part-2.md#%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8D%9A%E5%BC%88%E8%AE%BA 浏览器博弈论 上面的代码有误

// 使用模块模式定义 services
var Services = function () {
  var privateJobCount = 0; // 「模块」的私有状态
  return { // 命名空间对象
    jobCount: function {return privateJobCount},
    job1: function() {this.jobCount++}
  }
}(); // Services 被初始化为调用该函数时的返回值

// 从命名空间里获取实体
Services.job1();
console.log(Services.jobCount()); // 显示 1

首先 jobCount: function {return privateJobCount} 这里 function 后面缺少 ()
其次,应该是 job1: function() {privateJobCount++} 吧?

最终代码是不是这样的?

var Services = function () {
  var privateJobCount = 0; // 「模块」的私有状态
  return { // 命名空间对象
    jobCount: function() {return privateJobCount},
    job1: function() {privateJobCount++}
  }
}(); // Services 被初始化为调用该函数时的返回值
Services.job1();
console.log(Services.jobCount());

静态站美化与章节拆分

Hi! 感谢辛苦的翻译!我最近也从头到尾看完了,亲眼见证最近 Star 数蹭蹭的往上涨,挺激动。

在阅读过程中,也看到了 cn.history.js.org 的正式启动,现在总算有个静态页面咯。

我最近使用的 Pagic 建站工具感觉用来部署这本书的在线版本会很好!

  • 支持中英文双语言:同时部署两个英文原版和中文翻译版;
  • 支持左侧导航条查看:很方便进行导航式浏览,同时拆分章节目录(现在每章一页太庞大);
  • 支持白色/夜间主题:符合现在的多主题潮流;
  • 很少的仓库侵入式:只需一个 pagic.config.tsx 在根目录 + github actions 就可以持续部署;
  • 支持官网首页:这样到时候国内出版书的话首页宣传起来也更酷;
  • 支持评论区:互相交流,社区友好,实体书卖的更好 😍;
  • 统计页面浏览量:方便知道有多少人关注,思考用户转化率;
  • Deno + React 技术支持:React as Pages 的想法,到时候拓展页面内容的话写 tsx 就好;
  • ...

我自己的一本电子书也已经通过 Pagic 上线咯 -> http://deno-tutorial.js.org。

所以,用 Pagic 来美化界面,怎么样呢?我可以帮忙提交相关 PR,到时候只需要一个简单的合并就好咯。

P.S: 我发现翻译后的文章里大部分标题都没有原文里类似于 5.1.1 这种目录,我也可以帮忙一次性加上,怎么样哈?

期待回复 👍🏿

关于 Membranes 的翻译

Membranes 是ES6比较隐晦概念,个人感觉到现在也没几个人懂。我也一直没搞懂。中文文献里我也没看过对它的翻译,把它翻译成 隔离层 是不是妥当我不知道,但最好增加下说明。

比如这段 Proxies and WeakMaps were designed, and initially motivated, to support the creation of membranes. Proxies used standalone cannot be transparent, and cannot reasonably approximate transparency. Membranes come reasonably close to transparently emulating a realm boundary. For classes with private members, the emulation is essentially perfect. 本身就比较难懂晦涩了 ,翻译它就难上难。

Proxy 和 WeakMap 的最初设计动机,是支持隔离层的创建。单独使用的 proxy 不可能是透明的,也不能合理地达到接近透明的程度。隔离层能合理且几乎透明地模拟 realm 的边界。对于具备私有成员的类而言,这种模拟基本上是完美的。

另 关于 Membranes 我自己看的比较好理解文档是这篇 What is a membrane?

This wrap-unwrap behavior is precisely what a membrane is.

捐赠相关问题同步

本书纸质版推出时有捐赠社区的承诺,这里维护后续的细节事宜。

本书销量数据在出版社后台可见,基于和出版社之间的版税协议,其金额是透明可追溯的(译者和原作者之间的捐赠协议和出版社无关,故出版社在这一点上没有利益相关)。

目前想法是由译者个人名义按固定期限(如每年)直接捐赠,细节可在此贴出。

首次捐赠暂定年底,届时会更新这个 Issue,如果有更好的想法也欢迎告知!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.