这个帖子是干嘛的?
目前文档首页中 主页 · Julia中文文档 的外链大多是指向英文维基百科,对国内用户十分不友好。
这些链接主要是解释对应的专有名词。
我感觉可以直接从英文维基摘取一小段翻译、或者复制中文维基的内容放到论坛单独的帖子里,然后替换这些连接。
帖子里还可以加上可供搜索的关键词和比较好的介绍这些名词的文章。
比起点击链接然后打不开,这样可能阅读的体验会更好一些。维基是 CC 的许可,标注好来源即许可就行。
维基百科内容许可证
文档主页
LLVM
LLVM 是一个自由软件项目,它是一种编译器基础设施,以 C++ 写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、运行时期以及“闲置时期”的最优化。它最早以 C/C++ 为实现对象,而目前它已支持包括 ActionScript、Ada、D 语言、Fortran、GLSL、Haskell、Java 字节码、Objective-C、Swift、Python、Ruby、Crystal、Rust、Scala 以及 C# 等语言。
LLVM 项目的发展起源于2000年伊利诺伊大学厄巴纳-香槟分校维克拉姆·艾夫(Vikram Adve)与克里斯·拉特纳(Chris Lattner)的研究,他们想要为所有静态及动态语言创造出动态的编译技术。LLVM 是以 BSD 许可来发展的开源软件。2005年,苹果电脑雇用了克里斯·拉特纳及他的团队为苹果电脑开发应用程序系统,LLVM 为现今 Mac OS X 及 iOS 开发工具的一部分。
LLVM 的命名最早源自于底层虚拟机(Low Level Virtual Machine)的首字母缩写,由于这个项目的范围并不局限于创建一个虚拟机,这个缩写导致了广泛的疑惑。LLVM 开始成长之后,成为众多编译工具及低端工具技术的统称,使得这个名字变得更不贴切,开发者因而决定放弃这个缩写的意涵,现今 LLVM 已单纯成为一个品牌,适用于 LLVM 下的所有项目,包含 LLVM 中介码(LLVM IR)、LLVM 调试工具、LLVM C++ 标准库等。
—— LLVM - 维基百科
Just-in-time compilation
在计算机技术中,即时编译(英语:just-in-time compilation,缩写为 JIT ;又译及时编译、实时编译),也称为动态翻译或运行时编译,是一种执行计算机代码的方法,这种方法涉及在程序执行过程中(在运行期)而不是在执行之前进行编译。通常,这包括源代码或更常见的字节码到机器码的转换,然后直接执行。实现 JIT 编译器的系统通常会不断地分析正在执行的代码,并确定代码的某些部分,在这些部分中,编译或重新编译所获得的加速将超过编译该代码的开销。
JIT 编译是两种传统的机器代码翻译方法——提前编译(AOT)和解释——的结合,它结合了两者的优点和缺点。大致来说,JIT 编译将编译代码的速度与解释的灵活性、解释器的开销以及额外的编译开销(而不仅仅是解释)结合起来。JIT 编译是动态编译的一种形式,允许自适应优化,比如动态重编译和特定于微架构的加速——因此,在理论上,JIT 编译比静态编译能够产生更快的执行速度。解释和 JIT 编译特别适合于动态编程语言,因为运行时系统可以处理后期绑定的数据类型并实施安全保证。
—— 即时编译 - 维基百科
Lisp
Lisp(历史上拼写为 Lisp)是具有悠久历史的计算机编程语言家族,有独特和完全括号的前缀符号表示法。起源于公元1958年,是现今第二悠久而仍广泛使用的高端编程语言。只有FORTRAN编程语言比它更早一年。 Lisp 编程语族已经演变出许多种方言。现代最著名的通用编程语种是Clojure、Common Lisp 和Scheme。
Lisp 最初创建时受到阿隆佐·邱奇的lambda演算的影响,用来作为计算机程序实用的数学表达。因为是早期的高端编程语言之一,它很快成为人工智能研究中最受欢迎的编程语言。在计算机科学领域, Lisp 开创了许多先驱概念,包括:树结构、自动存储器管理、动态类型、条件表达式、高端函数、递归、自主(self-hosting)编译器、读取﹣求值﹣输出循环(Read-Eval-Print Loop,REPL)。
“Lisp” 名称源自“列表处理器”(英语:LISt Processor)的缩写。列表是 Lisp 的主要数据结构之一, Lisp 编程代码也同样由列表组成。因此, Lisp 程序可以把源代码当作数据结构进行操作,而使用其中的宏系统,开发人员可将自己定义的新语法或领域专用的语言,嵌入在 Lisp 编程中。
代码和数据的可互换性为 Lisp 提供了立即可识别的语法。所有的 Lisp 程序代码都写为S-表达式或以括号表示的列表。函数调用或语义形式也同样写成列表,首先是函数或操作符的名称,然后接着是一或多个参数:例如,取三个参数的函数 f 即为
(f arg1 arg2 arg3)
。Lisp 语言的主要现代版本包括 Common Lisp , Scheme,Racket 以及 Clojure。1980年代盖伊·史提尔二世编写了 Common Lisp 试图进行标准化,这个标准被大多数解释器和编译器所接受。还有一种是编辑器 Emacs 所派生出来的 Emacs Lisp (而 Emacs 正是用 Lisp 作为扩展语言进行功能扩展)非常流行,并创建了自己的标准。
—— LISP - 维基百科
Perl
Perl 是高端、通用、解释型、动态的编程语言家族。最初设计者拉里·沃尔为了让在 UNIX 上进行报表处理的工作变得更方便,决定开发一个通用的脚本语言,而在1987年12月18日发表。目前, Perl 语言家族包含两个分支 Perl 5以及 Perl 6。虽然 Perl 不是正式的首字母缩略词,但仍有各种各样的逆向首字母缩略词,包括“实用的提取和报告语言”。
Perl 借用了 C、sed、awk、shell 脚本、Lisp 以及很多其他编程语言的特性。其中最重要的特性是 Perl 内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN。
2000年开始,拉里·沃尔着手开发 Raku 来作为 Perl 的后继,Perl 6语言的语法有很多转变,也被视为 Perl 家族中的另一个语言。
Perl 语言应用广泛,涵盖 CGI、图形编程、系统管理、网络编程、金融、生物等领域。由于其灵活性, Perl 被称为脚本语言中的瑞士军刀。
鉴于 Perl 在实际工程应用中广泛使用,苹果公司的 MacOS,Linux,FreeBSD 等现代化操作系统默认安装 Perl 。
—— Perl - 维基百科
Python
Python 是一种广泛使用的解释型、高级编程、通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。Python 是 ABC 语言的后继者,也可以视之为一种使用传统中缀表达式的 LISP 方言。Python 的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于 C++ 或 Java,Python 让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
与 Scheme、Ruby、Perl、Tcl 等动态类型编程语言一样,Python 拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。其本身拥有一个巨大而广泛的标准库。
Lua
Lua 是一个简洁、轻量、可扩展的脚本语言。Lua 在葡萄牙语中的意思是月亮。
Lua的目标是成为一个很容易嵌入其它语言中使用的语言。很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。
Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用ANSI C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。和许多“大而全”的语言不一样,网络通信、图形界面等都没有默认提供。但是Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。
Lua是一种多重编程范式的程序设计语言:它只提供了很小的一个特性集合来满足不同编程范式的需要,而不是为某种特定的编程范式提供繁杂的特性支持。例如,Lua并不提供继承这个特性,但是你可以用元表来模拟它。诸如名字空间、类这些概念都没有在语言基本特性中实现,但是我们可以用表结构(Lua唯一提供的复杂数据结构)轻易模拟。Lua可以在运行时随时构造出一个函数,并把它看作一个对象(正是所谓的first class function),这个特性可以很好的满足函数式编程的需要。正是提供了这些基本的元特性,我们可以任意的对语言进行自需的改造。
Lua原生支持的数据类型非常之少,它只提供了数字(缺省是双精度浮点数,可配置)、布尔量、字符串、表、子程序、协程(coroutine)以及用户自定义数据这几种。但是其处理表和字符串的效率非常之高,加上元表的支持,开发者可以高效的模拟出需要的复杂数据类型(比如集合、数组等)。
Lua是一个动态弱类型语言,支持增量式垃圾收集策略。有内建的,与操作系统无关的协作式多线程(coroutine)支持。
Lua可以用于嵌入式硬件,不仅可以嵌入其他编程语言,而且可以嵌入微处理器中,例如NodeMCU开源硬件项目将Lua嵌入到Wi-Fi SoC中。
—— Lua - 维基百科
Ruby
Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本计算机科学家松本行弘(Matz)设计并开发。
遵守 BSD 许可证和 Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及Lisp语言。由Ruby语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的Ruby语言替代品。
减少编程时候的不必要的琐碎时间,令编写程序的人高兴,是设计Ruby语言的Matz的一个首要的考虑;其次是良好的界面设计。他强调系统设计必须强调人性化,而不是一味从机器的角度设想[11]。
“人们特别是电脑工程师们,常常从机器着想。他们认为:“这样做,机器就能运行的更快;这样做,机器运行效率更高;这样做,机器就会怎样怎样怎样。”实际上,我们需要从人的角度考虑问题,人们怎样编写程序或者怎样使用机器上应用程序。我们是主人,他们是仆人。”
遵循上述的理念,Ruby语言通常非常直观,按照编程人认为它应该的方式运行。
Ruby的作者认为
Ruby > (Smalltalk + Perl) / 2
,表示Ruby是一个语法像Smalltalk一样完全面向对象、脚本运行、又有Perl强大的文字处理功能的编程语言。—— Ruby - 维基百科
Multiple dispatch
多分派 或 多重派发 (Multiple dispatch)是某些编程语言的一种特性,函数或者方法的分派取决于运行时参数的对象类型。它是对方法调用只能由调用者决定的单分派的扩展。多分派涵括了两个或多个对象的动态分派。
软件工程师通常把代码写进代码块中,代码块通常称作过程,函数,方法。代码通过被调用来执行,调用时将控制权传入函数中,当函数执行完成后将控制权返回给调用者。
函数名通常用来描述函数的目的。有时会将多个函数起同样的名称。比如同名函数在逻辑上处理相同的任务,但是操作在不同类型的输入值上。在这种情况下,无法单单通过函数名来判断目标代码块。那么,函数参数的个数和类型也就被用来判断。
通常,单分派面向对象语言,在调用一个方法时,方法参数中一个参数会被特殊对待并用来决定哪一个方法(如果有多个同名方法)会被调用。在许多语言中,这个特殊的参数是在语法上指明的,许多编程语言在调用方法时把特殊参数放在小圆点(
.
)之前。例如special.method(other, arguments, here)
,这样lion.sound()
将会发出狮吼,同时sparrow.sound()
只会吱吱地叫。一般来说,对于面向对象的编程语言,这个小圆点之前的参数(上例中的lion和sparrow)被称为receiver。相反,在实现了多分派的语言中,被调用的函数即是那些参数个数一样多并且类型也匹配的调用。在调用中并没有特殊参数来决定那个方法被调用。也就是说,所有参数的运行时类型都参与分派。
Common Lisp Object System (CLOS) 是早期和著名的多分派语言。
—— 多分派 - 维基百科
coroutine
协程(英语:coroutine)是计算机程序的一类组件,推广了协作式多任务的子程序,允许执行被挂起与被恢复。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。
—— 协程 - 维基百科
Unicode
Unicode,中文又称万国码、国际码、统一码、单一码,是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。
UTF-8
UTF-8(8-bit Unicode Transformation Format)是一种针对 Unicode 的可变长度字符编码,也是一种前缀码。它可以用一至四个字节对 Unicode 字符集中的所有有效编码点进行编码,属于 Unicode 标准的一部分,最初由肯·汤普逊和罗布·派克提出。由于较小值的编码点一般使用频率较高,直接使用 Unicode 编码效率低下,大量浪费内存空间。UTF-8就是为了解决向后兼容ASCII码而设计, Unicode 中前128个字符(与ASCII码一一对应),使用与ASCII码相同的二进制值的单个字节进行编码,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字优先采用的编码方式。
—— UTF-8 - 维基百科