4

小众语言集中营, Javascript(二)

 2 years ago
source link: http://antkillerfarm.github.io/language/2016/10/25/lang_misc.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

小众语言集中营

自从John Warner Backus创立计算机语义学以来,人们发明的计算机语言已不下千种。基本上没有人能够对所有的语言都精通,实际上也没有这个必要。

但我同样不赞成只会一种语言的工程师。因为每种语言之所以存在,必然有其合理之处,只会一种语言会严重局限程序员的眼界。

比如说这篇文章中提到的:

https://www.cnblogs.com/rosee-1224/p/5167878.html

程序员思考、学习新技术的原则和方式

“他的单位有一位写Ruby的老员工,一个庞大的工程,代码里面居然只有一个上帝类,就搞定了所有的问题。”

上面这句话,在文中被作者引用来作为不会设计的典范。但是看看作者的知识背景就会发现,这个作者的眼界实际上局限在了面向对象的笼子里,他以为所有的东西都要组成对象才是合理的,反而忽视了设计的目的。

我对这件事的解读是:如果那个老员工的代码能够只用一个类搞定所有的问题,且代码运行、功能扩展都没有大问题的话,那这个老员工就是一个优秀的设计者。即使他的设计思想不是面向对象的。

Linus Torvalds在批评C++的时候,曾说过“好的设计才是第一位的,糟糕的设计用什么语言写出来都是垃圾。”

反过来理解这句话,那就是:语言和设计思想都只是设计的外皮,而不是灵魂。

面向过程的语言

1.编译型

首推C语言,没有之一。其次可以学学Pascal。其他的诸如Basic、Fortran、COBOL,基本上已经成为了历史,如果没有工作上的需要,就不要理会了。

2.解释型

一般用的比较多的是bash、Tcl、perl。随便学一个即可,这三个的使用都挺广泛的。

面向对象的语言

1.编译型

首推C++。C++支持的编程泛型非常多,从某种意义上说,不是个纯粹的面向对象的语言。如果需要开发Mac和iPhone程序的,可以学学Objective-C。

2.虚拟机型

C#和Java,随便学一个。VB.NET、Groovy、Scala都属备选,各有各的好处,尤其后两者属于现在的热点,学学没准就用上了。

3.解释性

Python、Ruby,随便学一个。

首推Matlab。这是一种面向矩阵的语言,它的所有数据类型都被理解为矩阵,而不是对象。

函数式语言

1.Haskell

这种语言认为所有的数据类型都是函数。

2.Lisp

这种语言认为所有的数据和函数都是列表,也就是“数据结构”课程上所说的广义表。

1.Tex

这是《The Art of Computer Programming》一书的作者Donald Knuth的杰作。从中可以看到后来的HTML、JavaScript、CSS等的影子。MS Office中的格式刷也是参考了Tex的设计。

Tex最为称道的是数学公式的排版。MS Office直到2007版本才有了类似的效果。

Tex广泛应用于欧美国家科学论文的排版领域,成为顶级科学期刊事实上的格式标准,可说是科研狗的必备技能。

2.数据描述类

INI和Json。这两个比较简单,也非常好用,不多说了。备选有BSON、YAML、

3.网页类

XML、HTML、JavaScript必修。PHP、ASP、JSP,选修其中之一。Nodejs近来比较流行,值得投资。

嵌入式语言

首推Lua。它首先在游戏领域得到广泛使用,现在在其他领域用的也比较多了。我一直在想,如果Lua早发明30年,Emacs会不会使用Lua,而不是Lisp做为内置语言呢?

并非所有的编程语言都具有实用性,有些语言的创制,另有其目的。

比如Brainfuck语言。这个语言以出名难用著称,在网上,一般被归为奇技淫巧类语言。然而从语义学的角度,这个语言证明了在冯·诺依曼模型上,最多使用8个符号,就可以构建一个图灵完备语言。

更多这类语言的知识参见:

http://www.15yan.com/story/5Y8BZqIGwjg/

那些奇奇怪怪的编程语言

类型系统(type system)

https://zhuanlan.zhihu.com/p/34679052

一个讲述编程语言类型系统的专栏

Lambda Calculus

Lambda calculus我们一般称为λ演算,最早是由邱奇(Alonzo Church,图灵的博导)在20世纪30年代引入,当时的背景是解决函数可计算的本质性问题,初期λ演算成功的解决了在可计算理论中的判定性问题,后来根据Church–Turing thesis,证明了λ演算与图灵机是等价的。

https://liujiacai.net/blog/2014/10/12/lambda-calculus-introduction/

编程语言的基石——Lambda calculus

https://zhuanlan.zhihu.com/p/34679052

Lambda calculus

https://blog.csdn.net/universsky2015/article/details/100933589

函数式编程的基石——Lambda Calculus(Functional Programming)

Javascript

WebAssembly

WebAssembly,简称Wasm,是一种能在浏览器上执行的二进制虚拟机字节码。

https://webassembly.org/

https://www.ibm.com/developerworks/cn/web/wa-lo-webassembly-status-and-reality/index.html

WebAssembly现状与实战

https://www.jianshu.com/p/bff8aa23fe4d

几张图让你看懂WebAssembly

https://www.zhihu.com/question/31415286

如何评论浏览器最新的WebAssembly字节码技术?

https://mp.weixin.qq.com/s/LRGNOuFwHXALs_lhPyN3Zw

爱奇艺直播WebAssembly优化之路

https://mp.weixin.qq.com/s/I0grz0IfFZo98sfaCNh-Vw

可能是世界上最简单的用Go来写WebAssembly的教程

https://mp.weixin.qq.com/s/yTebereUkcyvwJbLssZjPQ

5分钟看懂WebAssembly

https://mp.weixin.qq.com/s/QDjxfoY7gjcCmOeV0kq1pw

web多媒体技术在视频编辑场景的应用

https://mp.weixin.qq.com/s/G3NGVV9wSHMMtFtq0MB6SA

快速上手WebAssembly应用开发:Emscripten使用入门

https://zhuanlan.zhihu.com/p/25800318

WebAssembly系列(一)生动形象地介绍WebAssembly

https://zhuanlan.zhihu.com/p/25669120

WebAssembly系列(二)JavaScript Just-in-time (JIT)工作原理

https://zhuanlan.zhihu.com/p/25718411

WebAssembly系列(三)编译器如何生成汇编

https://zhuanlan.zhihu.com/p/25754084

WebAssembly系列(四)WebAssembly工作原理


V8开发者Vyacheslav Egorov和Mozilla Hacks之间的source-map之战了。对于同一份source-map库的JS代码,Vyacheslav所魔改出的纯JS版本,其性能一举反超了Mozilla重写的Rust版。

https://www.zhihu.com/answer/1322391162

有没有让JavaScript在JS引擎上稳定、更快运行的Style Guide?

Javascript在客户端的使用

Javascript在服务器前端的成功,促使人们思考其在客户端的使用。

最早的尝试,是MS提供的web broswer控件(例如MFC的CHtmlView类)。然而,当时的目的,并不是美化应用程序外观,而只是给程序提供一个访问互联网的机会。其最常见的用处,就是给About添加一个网站链接。这种方式不光用途简陋,更关键的是从外观来看,网页和应用程序完全是两种风格。

网站的外观在随后的几年中进化的很快,由于CSS和Javascript的出现,网页前端不再是一成不变的静态网页,而是具有了一定的动画和交互能力。强大的功能促进了分工的发展,网站设计逐渐分成了前端和后端两大工种。这种分工又促进了网页交互技术的进步。

反观普通的应用程序,由于受限于编程的复杂度,前端人员一直难于介入,很多年都处于停滞阶段。这期间一些不甘平庸的公司,在UI技术方面也做了一些尝试。

首先是DirectUI。这个是MS对于Win32窗口模型的一个重大改进。

在原始的Win32窗口模型中,每个控件都是一个窗口,拥有一个窗口句柄(相当于窗口资源的描述符)。窗口事件的处理和资源管理都在OS层面进行,开销比较大。(比如包含10000个按钮的窗口怎么处理的问题)窗口之间的交互,比如透明、动画,也由于需要跨窗口句柄,而变得非常复杂。

DirectUI的思路,是将控件降级为贴图,并接管整体窗口事件的处理,以模拟的方式实现控件的行为。开销和扩展性得到了很大的提升。

DirectUI技术最早出现在Windows XP中。比如,“我的电脑”左侧的控制面板。由于它的HWND的名字叫做DirectUI,故名。GTK项目实际上也采用了类似的方案。

各种DirectUI技术,普遍引入了UI配置文件的概念,而且UI配置文件的功能也越来越强。比如,GTK的设计器Glade,早期的时候是根据UI设计,导出代码,但现在已经改为导出UI配置文件了。

然而,由于低层实现的限制,这些UI配置文件语法各异,虽然有设计器来简化设计难度,但注定不能做的太复杂。因此,功能上无论如何都无法与网页相比,更不必说和HTML 5相比了。

2012年以后,以CEF(Chromium Embedded Framework)和XULRunner为代表的浏览器派,开始逐渐崭露头角。从此,开发桌面应用程序,不再是Javascript的禁区。桌面应用UI和网页前端开始呈现融合的局面。

TypeScript

TypeScript是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。

https://www.typescriptlang.org/

npm install -g typescript

TypeScript文件的后缀是.ts,它不能直接在浏览器中运行,而需要编译成JS才能运行。也正因为如此,TS并没有什么兼容性问题。

tsc helloworld.ts

D3.js

D3.js是一个数据可视化的库。原理上可以将之看成是是svg版的jQuery,然后进行相应的dom操作即可。

https://d3js.org/

https://www.cnblogs.com/fastmover/p/7779660.html

D3.js从入门到“放弃”指南

https://blog.csdn.net/qq_31052401/article/details/93786425

可视化工具D3教程

React、Angular、Vue.js似乎是目前最流行的三个框架了。

https://zhuanlan.zhihu.com/p/35551654

基于React的高质量坦克大战复刻版

https://mp.weixin.qq.com/s/zfOZAmgpndcqgxHHaS1j3g

用Vue和React构建相同应用程序,区别在哪?

https://mp.weixin.qq.com/s/zDt92-5NVaAFZJRfEHCUvg

什么是Native、Web App、Hybrid、React Native和Weex?

https://mp.weixin.qq.com/s/RC3eVNfYeVx4mQT3WQHMcw

6个常用的React组件库

https://zhuanlan.zhihu.com/p/28305975

Vue.js&jQuery比较

https://zhuanlan.zhihu.com/p/20197803

VUE(现代库) VS jquery(传统库)

https://zhuanlan.zhihu.com/p/359540593

2021年Angular vs. React vs. Vue前端框架对比


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK