精华内容
下载资源
问答
  • 如何创造一门编程语言

    千次阅读 2016-08-14 03:46:00
    编程语言,作为人与计算机沟通的桥梁,有着重要和深远的意义。有过计算机编程经验的人,多少学习或...想必有不少人对那些主流编程语言的创造者十分倾佩,也相信有不少人会好奇一门编程语言是如何诞生的。那么如...

     

    编程语言,作为人与计算机沟通的桥梁,有着重要和深远的意义。有过计算机编程经验的人,多少学习或掌握过一到多种编程语言。计算机专业领域的编程语言成百上千种,主流的编程语言也有数十种之多。每种编程语言面向的领域和特性都不尽相同,不过归根结底是为了解决人与计算机之间沟通的效率问题,提高计算机的生产力。想必有不少人对那些主流编程语言的创造者十分倾佩,也相信有不少人会好奇一门编程语言是如何诞生的。那么如何创造一门编程语言呢?

    总的来看,创造一门编程语言需要有以下几个过程:

    1)设计语言的特性。

    2)定义语言的单词、语法和语义。

    3)实现编译器或者解释器将程序翻译为计算机底层表示。

    4)生成计算机程序的二进制存储格式。

    5)完善语言的运行时环境和标准库。

     

    一、语言特性设计

    所谓语言特性,就是编程语言为开发者提供了什么样的原子性功能特征。比如是否支持数学表达式计算、字符串处理,是否支持变量、函数和递归,是否支持分支、循环复合语句等。语言的变量类型是强类型、弱类型,还是动态类型,程序是过程式、函数式,还是面向对象的。是否支持模板、泛型和反射机制,是否支持多线程和并发特性,是否支持错误和异常处理机制等等。

    语言特性设计是一门编程语言最关键的环节,直接决定了语言的基本特征和雏形。当然,这也是最难的一个环节,因为语言设计是面向具体问题领域的,是语言设计者从大量的编程实践中的获得的总结和升华。比如C语言设计者希望面向计算机底层,拥有对操作系统和硬件的直接操纵能力。而Python的设计者则希望尽可能地减少操作计算机资源的繁琐过程,以获得语言的简洁性、高度的灵活性和扩展性。SQL的设计者面向具体的数据查询和分析领域,希望帮助开发者获得快速检索和操纵数据的能力。而Go语言的设计者则希望在保留C语言优秀功能的基础上,扩展编程语言对高并发环境的支持,并拥有垃圾回收和快速编译的能力。

    凡此种种,编程语言特性的设计都是面向具体的问题领域的,是语言设计者构建于开发者和计算机之间的中间层,是对开发过程中重复功能逻辑的原子性“封装”,最终的目的是为了提升具体问题领域内的软件开发效率。

     

    二、单词、语法和语义

    和人类使用的自然语言类似,编程语言也有自身的单词、语法和语义,专业上称为词法记号、语言文法和语义。

    常见的词法记号可以分为数字、字符、字符串、标识符、关键字,以及用于连接表达式的运算符、分割语句或者程序段落的界符等符号。这些是编程语言程序的基本单位,通过它们的有序组合,构建出了一门编程语言形形色色的代码片段。

    编程语言的文法是用来描述语言的语法规则的,具体来说是规定词法记号之间的排列组合的顺序与规则。它描述了编程语言程序的基本模式,不符合该模式的词法记号的排列被挡在了合法语言程序的大门之外。同时,它也是各种编程语言对于开发者最明显的差异化特征。一个有经验的开发者可以很容易地通过扫视一段代码,就能分辨出这是哪种编程语言编写的计算机程序。

    编程语言的语义描述了一段符合语言语法的程序,对于计算机而言的真正含义,是开发者最终要传达给计算机的意愿和指令。语言的语义必须是准确的、无二义性的,编译器也正是通过语义的指导,将计算机程序翻译为计算机可识别的表达形式。

     

    三、程序的翻译

    计算机程序是用来供人阅读和修改的,计算机硬件并不能理解程序内的思想和含义。因此,必须有一个翻译转换的过程,将人所表达的意愿准确无误地传递给计算机,让计算机明确并执行人下发的指令。实现这种翻译工作的工具就是编译器或解释器。

    对于编译器来说,它的输入是人类书写的计算机语言程序,输出则是计算机可识别的底层表示。首先,它需要识别出程序中的单词,即词法分析。然后,根据单词的组合模式识别出程序的语法结构,即语法分析。最后,根据不同的语法结构对应的语义,将程序按照每个语法模块的形式转换为计算机可识别的指令序列,即语义分析和目标代码生成。

    众所周知编译器的实现具有一定的复杂度,其根本原因来自于语言语法的结构灵活性和计算机底层表达形式的多样性,这也是创造一门编程语言最核心的环节。

     

    四、二进制存储

    编译器将语言程序翻译转换后,需要将转换后的结果存储起来,以便计算机在需要的时候将其加载、执行。这里不可避免的涉及到两个问题:

    1)转换后的结果是什么样的形式?

    2)转换后的结果保存在哪里?

    第一个问题描述的是计算机程序被转换为怎样的形式,才是计算机可以识别的。由于计算机中实际运行程序的硬件模块是CPU,因此计算机程序只有被转换为CPU的二进制指令格式才能被正确识别、执行。比如常见的Intel体系的CISC指令格式、ARM体系的RISC执行格式等。

    第二个问题描述的是计算机程序转化为二进制指令格式后,以什么样的方式保存在计算机的磁盘上。由于绝大多数的计算机程序是需要通过运行在计算机硬件之上的操作系统加载运行的,因此计算机程序的二进制表达形式必须以对应操作系统可识别的文件格式存储。比如常见的Windows操作系统的PE文件格式、Linux操作系统的ELF文件格式等。

     

    五、运行时环境和标准库

    理论上讲,一门编程语言如果能提供出完备的操纵操作系统和硬件的原子性功能就已经成功了。但是不提供强大的运行时环境支持和标准库,是很难让一门编程语言真正的好用和流行的。没有人希望简单地打印一行字符串,还需要使用编程语言提供的基本特性实现调用操作系统提供的打印接口的逻辑。Java语言之所以久兴不衰,正是因为它不仅提供了完善的运行时环境和开发库支持,甚至提供了更强大的开发框架和工具支持。

    因此可见,除了完备的语言特性,为开发者提供更方便好用的库和框架支持,消除软件构建过程中复杂和重复的逻辑,才是一门优秀编程语言的长盛之道。

     

    六、自己动手,立即开始!

    《自己动手构造编译系统——编译、汇编与链接》一书详细阐述了一门编程语言从无到有的过程,从语言的功能特性设计,到词法、文法、语义分析;从编译器、汇编器的设计实现,到目标文件的链接生成可执行文件;甚至编译优化器的实现、二进制指令、可执行文件格式以及语言运行时和标准库的概念,都在书中做了认真细致地剖析。相信对本书的阅读,将是一次不错的获得知识的体验!

     

    展开全文
  • 一个编程语言是如何被创造出来的?在创造这些语言时是否有工具可以借鉴?求大神指点如何创造一门编程语言!!!!
  • 《用 C 语言开发一门编程语言 — 交互式解析器》 《用 C 语言开发一门编程语言 — 跨平台的可移植性》 《用 C 语言开发一门编程语言 — 语法解析器》 《用 C 语言开发一门编程语言 — 抽象语法树》 《用 C 语言开发...

    目录

    前文列表

    用 C 语言开发一门编程语言 — 交互式解析器
    用 C 语言开发一门编程语言 — 跨平台的可移植性
    用 C 语言开发一门编程语言 — 语法解析器
    用 C 语言开发一门编程语言 — 抽象语法树
    用 C 语言开发一门编程语言 — 异常处理
    用 C 语言开发一门编程语言 — S-表达式
    用 C 语言开发一门编程语言 — Q-表达式
    用 C 语言开发一门编程语言 — 变量元素设计
    用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计
    用 C 语言开发一门编程语言 — 条件分支
    用 C 语言开发一门编程语言 — 字符串与文件加载

    原生类型

    目前我们的语言只封装了 C 语言中的原生 long 和 char* 类型。对于你想要做任何更加有用的计算的情况来说,这是非常有限的。更何况,我们对这些数据类型的操作也非常有限。理想情况下,我们的语言应该封装所有原生 C 数据类型,并允许操作它们的方法。其中一个最重要的补充是允许操作十进制数。为此,您应当封装 double 类型和相关运算。而且,随着数据类型的增多,我们需要确保运算符例如 + 和 - 能够很好地在它们各自或者集合上起效。

    对于希望使用其语言中的十进制和浮点数进行计算的人来说,添加对原生类型的支持应该是相对来说比较有趣的。

    用户定义的类型

    除了添加对原生类型的支持之外,最好让用户能够添加自己的新类型,就像我们在 C 中使用结构体一样。用于执行此操作的语法或方法将取决于程序员。这是一个非常重要的部分,能使我们的语言可用于任何大小合理的项目当中去。

    这个任务对于那些对如何开发语言有特定想法的人,以及对语言本身,希望其最终设计看起来像什么的人来说,这可能会很有趣。

    [] 方括号的补充

    有些语言使用方括号 [] 表示列表。这种语法糖用于例如 list 100 (+ 10 20) 300 的情况。通过 [],你可以写成 [100 (+ 10 20) 300]。对于希望尝试添加额外语法的人来说,这应该是一个简单的补充。

    操作系统交互

    这意味着封装所有 C 的功能,例如fread,fwrite,fgetc等在 Lispy 中的等同物。这是一项相当直观的任务,但确实需要编写大量的封装函数。这就是为什么到目前为止我们还没有为我们的语言做过类似的工作。

    在类似的说明中,让我们的语言能够有权限并且适当地进行系统的调用是很好的。我们应该让它能够更改目录,列出目录中的文件以及诸如此类的功能。这是一项简单的任务,但同样需要封装大量的 C 函数。这对于任何想要将语言当作真实情况下的脚本语言来说,是极为重要的。

    希望利用他们的语言进行简单的脚本编写任务和字符串操作的人可能对实现此项目感兴趣。

    许多其他 Lisps 允许编写类似于 (def x 100) 定义值 100 到 x 上。在我们的 Lispy 中,这不会起作用,因为它会尝试计算 x 在环境中的存储为 x 的任何值。在其他 Lisps 中,这些函数称为宏,当遇到它们时,它们会停止对其参数的计算,并对它们进行未计算的操作。它们让你编写看起来像普通函数调用的东西,但实际上做的是复杂而有趣的事情。

    语言中如果有这些将会很有趣。它们使语言可以为某些工作赋予一些魔力。在许多情况下,这可以使语法更好或允许用户不需要太过于单调。

    我喜欢我们的语言在没有宏的时候,处理 def 和 if 的过程。但是如果你不喜欢它,也就是语言当前的工作方式,并希望它与传统的 Lisp 更相似,那么这可能是你有兴趣实现的东西。

    变量哈希表

    当我们查找变量名的时候,我们只是对当前环境中的所有变量进行线性搜索。我们定义的变量越多,这就变得越来越低效。

    更有效的方法是实现哈希表。此技术将变量名称转换为整数,并使用此函数将索引转换为已知大小的数组,以查找与此符号关联的值。这是编程中非常重要的数据结构,并且由于其在重负载下的出色性能而无处不在。

    任何有兴趣了解更多有关数据结构和算法的人都会很聪明地尝试实现这种数据结构或其中一种变体。

    池分配

    我们的 Lispy 很简单,但速度不快。它的性能与 Python 和 Ruby 相似。我们程序中的大多数性能开销来自这样一个问题:几乎任何过程都需要我们构造和析构 lval。因此,我们必须经常调用 malloc,这是一个很慢的函数,因为它需要操作系统为我们做一些管理。在进行计算时,会有很多 lval 类型的复制,分配和释放。

    如果我们希望减少这种开销,我们需要降低 malloc 的调用次数。执行此操作的一种方法是让在程序开始时就调用一次 malloc,分配大量内存。然后我们应该调用一些函数来替换我们所有的 malloc 调用,这些函数分割并分配这个内存以便在程序中使用。这意味着我们正在模拟操作系统的一些行为,但是只是以更快的本地方式进行。这种想法称为内存池分配,是游戏开发和其他对性能特别重视的应用程序中常用的技术。

    垃圾回收

    几乎所有其他 Lisps 实现都为我们的变量分配不同的变量。它们不会在环境中存储值的副本,而是实际上直接指向它的指针或引用。因为使用指针而不是副本,就像在 C 中一样,使用大型数据结构时所需的开销要少得多。

    如果我们存储指向值而不是副本的指针,我们需要确保在某些其他值尝试使用之前,指向的数据不会被删除。我们希望在不再引用它时删除它。执行此操作的一种方法称为 Mark 和 Sweep,用于监视环境中的值以及已分配的每个值。当一个变量被放入环境中时,它和它引用的所有内容都会被标记出来。然后,当我们希望释放内存时,我们可以迭代每个分配,并删除任何未标记的内容。

    这称为垃圾回收,是许多编程语言不可或缺的一部分。与池分配一样,实现垃圾回收器不需要很复杂,但确实需要仔细完成,实现这一点对于使这种语言适用于处理大量数据至关重要。

    尾调用优化

    我们的编程语言使用递归来进行循环。虽然这在概念上是一种非常聪明的方法,但实际上它很差。递归函数调用自身来收集计算的所有部分结果,然后才将所有结果组合在一起。当部分结果可以累积在一个循环中时,这是一种浪费的计算方法。对于旨在运行许多或无限迭代的循环而言,这尤其成问题。

    一些递归函数可以自动转换为相应的 while 循环,这些循环逐步累积总数,而不是完全累积。这种自动转换称为尾调用优化,对于使用递归进行大量循环的程序是必不可少的优化。

    词法作用域

    当我们的语言查找到未定义的变量时,它会抛出错误。如果能在评估程序之前告诉我们哪些变量未定义,那应当会更好。而且,这将让我们避免拼写错误和其他烦人的错误。在程序运行之前查找这些问题称为词法作用域,并使用变量定义的规则来尝试和推断哪些变量已定义,哪些完全没在程序中用上,从而不进行任何计算。

    静态类型

    我们程序中的每个值都要有一个相关的类型。我们在进行任何计算之前都必须确保这一点。我们的内置函数也只将某些确切的类型作为输入。我们应该能够使用此信息来推断新用户定义的函数和值的类型。在运行程序之前,我们还可以使用此信息检查是否用户使用了正确的类型调用函数。这将减少在计算之前调用具有不正确类型的函数所产生的任何错误。此检查称为静态类型。

    类型系统是计算机科学中非常有趣和基本的一部分。它们是我们在运行程序之前检测错误的最佳方法。任何对编程语言安全和类型系统感兴趣的人都会发现这个项目非常有趣。

    展开全文
  • 如果编程语言一门武功绝学

    万次阅读 多人点赞 2021-05-22 16:30:06
    在编程的学习过程中,我们何尝不是从一招一式的函数、语法、特性等学起,掌握了一门编程语言后,再学习另一门语言就会快很多,如同拥有内功后,习得其他武功也会轻松很多。 如果编程语言是一门武功绝学,各语言分别...

    学习编程与武功绝学

    武侠小说中,各路侠客绿林好汉都是从基本功开始一招一式学起,掌握了足够多的招式后,加之勤学苦练,量变引起质变,会有一天打开任督二脉顿悟出这些招式背后的哲学逻辑,成为一代宗师。在编程的学习过程中,我们何尝不是从一招一式的函数、语法、特性等学起,掌握了一门编程语言后,再学习另一门语言就会快很多,如同拥有内功后,习得其他武功也会轻松很多。

    如果编程语言是一门武功绝学,各语言分别是哪门武功绝学呢?

    程序员必备资源,值得收藏!点击下载

    汇编语言

    汇编语言 - 易筋经

    汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用计算机的所有硬件特性并能够直接控制硬件的唯一语言。采用它编写的程序具有存储空间占用少、执行速度快的特点,这些是高级语言所无法取代的。通常用在最底层的程序优化,硬件操作或嵌入式编程的场合,已经很少有人直接编写汇编。

    《天龙八部》中扫地僧练的就是少林派的独家秘法易筋经。扫地僧除了扫地之外,做的唯一一件事,就是参悟易筋经,几十年的修为,练就一门绝世武功,高深莫测,无坚不摧,高效,无招胜有招。

    C 语言

    C 语言 - 九阳神功

    C 语言是一门面向过程的计算机编程语言,与 C++、Java 等面向对象编程语言有所不同。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C 语言主要用途除了实现编程语言底层功能,还应用在实现操作系统,还在通讯领域也有很大的用武之地。虽然相对用来开发应用层面稍微显得笨拙一点,但是在讲究效率的底层发挥空间非常巨大。

    C 语言高效、灵活、功能丰富、表达力强、作为一门基础的底层语言与九阳神功偏内功是一致的,九阳真经着重内力,不重招法,里面阐述的其实也主要是“刚柔并济”的道理。一代武当宗师张三丰,就是以九阳内功为基础,才创制了武当一脉功夫。所以学好 C 语言,有强大的内功后,再学习其他语言就会相对轻松。

    C++

    C++  - 九阴真经

    C++ 是 C 语言的继承,它既可以进行 C 语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。与 C 语言相比 C++ 增加了以下方面:

    • 类型检查更为严格

    • 增加了面向对象的机制

    • 增加了泛型编程的机制(Template)。

    • 增加了异常处理。

    • 增加了运算符重载。

    • 增加了标准模板库(STL)。

    如果 C 语言是偏内功的九阳神功,那么 C++ 无异于《九阴真经》,两者都是很基础的,并且两者间有近缘,这两门掌握精通之后天下武学皆能容易掌握。。

    《九阴真经》偏重招式,威力强大、博大精深,包含无数神奇招术(内功、轻功、拳、掌、腿、刀法、剑法、杖法、鞭法、指爪、点穴密技、疗伤法门、闭气神功、移魂大法等等),诡秘莫测,义理艰深难学,C++ 同样包含很多内容,还在不停的延申,复杂、强大、百科全书式的语言、在大规模项目面前几乎无其他语言可及。

    C++ 跟《九阴真经》一样,有很多误区容易陷入,比较突出的问题就是内存泄漏,如果使用不当,很容易落得跟周芷若、欧阳锋、梅超风等一样走火入魔。

    java

    java - 小无相功

    Java 是一门面向对象编程语言,不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

    Java 具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java 可以编写桌面应用程序、Web 应用程序、分布式系统和嵌入式系统应用程序等。

    小无相功是金庸武侠小说《天龙八部》中「逍遥派」的一门内功,威力强大。只要身具此功,再知道其他武功的招式,倚仗其威力无比,可以模仿别人的绝学甚至胜于原版,没有学过此功的人很难分辨。这一特点与 Java 的分布式、解释性、可移植性、多线程、动态执行类似。

    Java 体系庞大又提供很多网络技术的支持,正如小无相功为根基运行少林七十二绝技,而jvm体系又如同逍遥派体系。门下弟子众多又出类拔萃,名声显赫,博采众长,独步天下。

    python

    python - 太极

    Python 是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。可以应用于以下领域:

    • Web 和 Internet开发

    • 科学计算和统计

    • 人工智能

    • 桌面界面开发

    • 软件开发

    • 后端开发

    • 网络爬虫

    Python 语言的简洁性、易读性与太极入门简单类似,但是要达到一定高度也需要长期锻炼,同样达到的效果也极高,精通后威力也巨大,可以以柔克刚,与太极一样 Python 速度慢。

    Go语言

    Go语言 - 北冥神功

    Go(又称Golang)是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

    Go 的语法接近 C 语言,但对于变量的声明有所不同。Go 支持垃圾回收功能。

    与 C++ 相比,Go 并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。

    GO 语言的关键特性主要包括以下几方面:

    • 并发与协程

    • 基于消息传递的通信方式

    • 丰富实用的内置数据类型

    • 函数多返回值

    • defer机制

    • 反射(reflect)

    • 高性能HTTP Server

    • 工程管理

    • 编程规范

    语言容易上手,解决了并发编程和写底层应用开发效率的痛点,有 Google 这个世界一流的技术公司在后面支撑,杀手级应用 Docker 的生态圈在这几年完全爆棚。所以,Go 语言的未来是不可限量的。可能会吞食很多 C、C++、Java 的项目。

    北冥神功,金庸小说《天龙八部》中「逍遥派」最高武学,练成北冥神功后,全身每处穴道皆可吸人内力,且兼容天下武功。剧毒不侵。强凶霸道,随手攻击便有莫大威力。真气护体防御大增,受到攻击时反震敌人。速度大增。这些特点与 Go 语言速度极快、性能强、效率高、先进的并发支持模型和丰富的标注库有类似的地方。

    object-c

    object-c - 独孤九剑

    Objective-C 感觉是 C 语言体系中比较出色的大师兄,然后自立门户,不过还会 C 语言,Objective-C 是一种在C的基础上加入面向对象特性扩充而成的编程语言,可以把 Objective-C 看成是 ANSI 版本 C 语言的一个超集,它支持相同的 C 语言基本语法,同时它还扩展了标准的 ANSI C 语言的语法。

    独孤九剑在武功体系里比较独特与 object-c 是苹果开发软件的语言类似,与 object-c 类似风清扬的独孤九剑剑法同样潇洒、优雅、进攻大于防守。

    JavaScript

    JavaScript - 吸星大法

    JavaScript 直译式脚本语言,是一种动态类型、弱类型、基于原型的语言。动态性和跨平台性强。

    JavaScript的优势:

    • 快速的终端反应:Java 脚本为客户端编写,不需要服务器端支持就可运行。也不需要在客户端被编译提高速度优势。在用户电脑上作为脚本执行,依靠任务,结果几乎是立即完成的。

    • 简洁性:JavaScript 很容易学习和实现。提供大量的预编制的功能性对象代码,使得开发一个满足用户需要的脚本变得轻而易举。

    • 用途广泛:JavaScript 和其他语言可以很好的交互,并且广泛应用于各个领域。

    由于 Javascript 的发展非常快,Javascript推出一年半之后,国际标准就问世了。过早的标准化,Javascript 的规格还没来及调整,就固化了。设计缺陷还没有充分暴露就成了标准。例如:

    • 不适合开发大型程序,没有名称空间,很难模块化;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。

    • 非常小的标准库,只能完成一些基本操作,很多功能都不具备。

    • 全局变量难以控制。

    • 数组和对象的区分,由于 Javascript 的数组也属于对象(object),所以要区分一个对象到底是不是数组,不是很清晰。

    吸星大法,出自金庸的武侠小说《笑傲江湖》,是日月神教教主任我行修习的武功,任我行仗以威震江湖的绝学。修炼者有任我行、令狐冲,唯一害处是有内力反噬之险。同为吸取别人内力的一流武功。给人的感觉就是北冥神功是正版,化功大法是盗版,吸星大法是删减版。

    JavaScript 如同吸星大法 用好了神奇,能最简单实现目的,标准有删减的缺陷,用不好控制,还可能反噬。

    C#

    C# - 蛤蟆功

    C# 的声音,如同蛤蟆功不受待见一样。是微软公司发布的一种由 C 语言 和 C++ 衍生出来的面向对象的编程语言、在继承 C 语言 和 C++ 强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C# 综合了 VB 简单的可视化操作和 C++ 的高运行效率,以 .NET 框架类库作为基础,拥有类似 VB 的快速开发能力,完全面向对象和类型安全。

    由于 C# 是后生,所以其很多语法都是其它语言的改进。从整体看,C# 语法比 java 更优雅。支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。

    仅能运行在Windows平台)使其渐渐被排斥于主流之外。如今偏居一隅,难以影响中原大势。

    蛤蟆功,欧阳锋独创,成为南宋时期天下武林五大高手之一,号称西毒。是一门极厉害的功夫。威力足以跟降龙十八掌打成平手,精神出问题的欧阳锋和洪七公一战也能打成平手,两人内力耗尽最终死在华山上,可见蛤蟆功的威力。

    与蛤蟆功一样,C# 功力深厚,刚出现时风光无限,但在 .net 庞大的类库下也显得有些臃肿,再加上仅能运行在 Windows 平台所以发展相对缓慢,出现了很多看不起 C# 的声音,如同蛤蟆功不受待见一样。

    PHP

    PHP - 降龙十八掌

    PHP 实用性强,跨平台强,效率高,容易部署,完全开源,支持几乎所有的流行的数据库及操作系统。

    PHP 是在服务器端执行的脚本语言,独特的语法混合了 C、Java、Perl 以及 PHP 自创的语法。利于学习,使用广泛,专注于 Web 开发,写中小型网站后台的首选。PHP 主流框架依然基于 MVC 模式,但也在不断地创新,比如 Codelgniter 框架,性能高、速度快,适用于共享主机;Seagull 则功能更加强大,代码库的标准化和模块化更高,同时也有较多的文档提供支持。

    缺点:

    • 对多线程支持不太好,大多数时候只能简单的模拟去实现的。

    • 语法不太严谨。

    • PHP的解释运行机制繁琐。

    每当有编程语言之争时,总有人说“ PHP 是世界上最好的语言”,当然,也有很多批评的声音,没有一种语言是被所有人接受,影响 PHP 声誉可能和 PHP 薪资有关,从“ PHP 是世界上最好的语言”这一点来说勉强与被扫地僧称为天下第一的降龙十八掌匹配。

    侠客 - 程序员

    如果把编程语言比喻为武功绝学,那么一代大师都是很牛逼的程序员。

    在武侠小说中,张三丰是位武学奇才,技击之术冠绝天下。如果放到现在来看,张真人的角色很可能是个天才程序员。师从觉远大师,学习了九阳神功,如果是程序员就是精通 从语言这门偏内功的语言,对以后的发展至关重要。后来张真人又学习了很多其他武功,自创了《太和功》、《九转玄功》、《纯阳功》等内息功法,是一位编程能力很高,创新能力不可小觑的程序员。

    在武侠小说中,绝顶高手,都不止会一门武功,天下之术,皆为我用,但是绝对有一门武功达到炉火纯青的地步,作为程序员不要想着集成和借鉴别人的东西,自己也需要“练武”。

    代码的世界,也是江湖。对编程思想理解越透彻,内功便深厚,多掌握一门语言,便是多了一门武艺。

    最后推荐一个很有料的资源仓库给大家:

    资源仓库,点击进入

    图片来源于网络,如有侵权,联系删除。

    免喷申明:本文纯属娱乐,水平有限,只写了几种语言,欢迎点赞,收藏,评论转发。

    展开全文
  • 一门编程语言的通用知识点

    千次阅读 2019-07-22 11:45:18
    也就是说如果精通某一门编程语言的话,那么在学习其它门语言时就可以类比该门语言来学习,进而做到一通而百通。现在就来分析一下一门编程语言的公共知识点有哪些。 1.编程语言自身的语法规则 一门编程语言的语法...

    在当今IT行业,编程语言的基本内容大多数都是相通的,可以触类旁通。也就是说如果精通某一门编程语言的话,那么在学习其它门语言时就可以类比该门语言来学习,进而做到一通而百通。现在就来分析一下一门编程语言的公共知识点有哪些。

    1.编程语言自身的语法规则

    一门编程语言的语法规则是这门语言最基本的内容,要想阅读这门语言的程序,掌握这门语言的语法规则是必须的。虽然每门编程语言的语法规则都不尽相同,但是有一部分的语法规则是十分像似的。如果精通某一门语言的语法规则,那么再学习其它门语言时就容易许多了。

    2.编程语言自身自带的函数库

    一般情况下,开发出某一门编程语言的开发者们在开发这门语言的同时也会制作出一系列该门语言的开发工具包以帮助开发者进行项目开发。这些开发工具包是最基本的,是对计算机中的各类资源进行了一个良好的封装。开发者在使用时无需关心底层的具体实现细节,使用起来十分方便。因此掌握这一点也是十分必要的且必须

    3.第三方提供的函数库

    一门语言问世后,一般会有很多开发者针对这门语言开发出各种各样的库以方便其他人的使用。然而由于第三方库的数量实在是太多了,全部学会显然是不可能的,也不切实际。因此在实际中我们只需掌握几个比较热门的库,然后在通过这些库来触类旁通,举一反三

    最后,在实际开发中不可能只会用到某一单一的知识点或技术,往往会结合其它通用的技术进行整合开发。通用技术可以见我的另一篇文章IT行业通用技术

    4.模块化开发

    无论使用哪种编程语言进行程序开发,要想开发一个大型完整的程序,就必须要将各个功能模块进行划分开来,然后采用模块化的方式来进行开发。即模块化开发。而要进行模块化开发,那么编程语言自身就必须能够提供进行模块化开发的语法或用法。掌握好它十分的有用和重要。

    展开全文
  • 总有人会告诉你,你应该学习这个,学习那个,亦或者是刷题根本没用,你应该去做项目,亦或者你看这个视频没什么卵用,你应该自己去实现一遍,亦或者是你应该使用xxx框架,xxx语言,做一个xxx系统,这样你才能学到很...
  • 怎样学习一门编程语言

    万次阅读 多人点赞 2015-04-06 02:12:38
    选择一门语言确定你感兴趣的领域你可以开始学习任何编程语言(尽管其中一些被描述地比其他的更加“易学”),你得去问自己自己想用通过学习这门语言完成什么样的工作。这将会帮助你确定你应该追求的编程方式并且提供...
  • 如何学习一门编程语言

    千次阅读 多人点赞 2018-09-28 12:56:00
    但是最近跟同事讨论了一下到底应该如何学习一门编程语言。考虑到之前的几篇文章可能对初学者没什么帮助,而大神又不需要看。所以感觉这篇文章说一说如何学习编程语言还是挺有必要的。 首先给初学者推荐一本书:...
  • 快速学习一门编程语言

    千次阅读 2015-12-11 00:26:50
    快速学习一门编程语言 流程 语法 调用 用例 流程能够把一个最简单的程序编辑, 编译, 运行起来, 强调的是掌握编程的环境和流程计算机基础知识 操作系统 计算机, 内存, 硬盘 目录, 文件 程序设计语言, 程序, 编辑, 源...
  • 《用 C 语言开发一门编程语言 — 交互式 Shell》 《用 C 语言开发一门编程语言 — 跨平台》 语法解析 当我们学习一门自然语言的时候,我们往往从语法开始。当我们开发编程语言也一样,首先要考虑的就是语言的语法、...
  • 快速掌握一门编程语言

    千次阅读 2011-03-16 09:26:00
    现在的开发工作要求我们能够快速掌握一门编程语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个编程语言学习一遍,做到胸有成竹,...
  • 一门编程语言如何理解?

    千次阅读 2019-05-22 12:10:28
    后来我发现,不只我一个人这样学习,身边不少同学都是如此,认为学习一门编程语言最重要的就是掌握其语法。所以为了将语法烂熟于心,最直接的方法就是记忆。 我们记忆了什么是常量,什么是作用域,什么是多态.........
  • 如何科学的学习一门编程语言

    万次阅读 多人点赞 2019-06-14 13:23:44
    如何学习一门编程语言 第一步:找一本书 其实有难度,你怎么知道哪本书是好书?好书有什么标准?排行榜靠前的是不是好书?别犹豫这些,先找一本书。比如参加读书训练营,就是“被找了一本书”。找到这本书之后,...
  • 如何快速学习并掌握一门编程语言

    千次阅读 2019-06-23 17:02:57
    工欲善其事必先利其器,编程语言就是程序员手中的“器”,用来实现软件编程的工具。学习和掌握编程语言的能力是基本功,也是技术进阶的先决条件。 计算机现代编程语言基本从上世纪50年代就开始成型,起初的目的就是...
  • 如何把一门编程语言学习好?

    千次阅读 多人点赞 2017-03-12 14:20:39
    这一周来被发烧感冒扁桃体炎折磨到半生不死的,十分之难受。现在刚好点,接下来要准备大腾讯的2017实习生招聘,虽然觉得可以进入的机会可能比较渺茫,...逛一些技术群的时候,经常有人问这一门语言该怎么学,这个知识点
  • 怎样学好一门编程语言

    千次阅读 2016-10-14 19:04:01
    怎样学好java编程语言 1.兴趣是学习的最好老师  培养自己对编程语言的兴趣,其实最大的困难是在于克服自己。只要你有恒心,学好JAVA并不难。就算你没有基础,没有经验,没有任何概念。可是即使是发明JAVA的人,...
  • 如何快速掌握一门编程语言

    千次阅读 2015-06-05 13:58:12
    现在的开发工作要求我们能够快速掌握一门编程语言。怎样才能快速掌握一门编程语言呢?  一般来说应对这种挑战有两种态度:  其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;  其二是花很多时间...
  • 现在的开发工作要求我们能够快速掌握一门编程语言。怎样才能快速掌握一门编程语言呢?一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言...
  • 《用 C 语言开发一门编程语言 — 交互式 Shell》 实现跨平台的可移植性 使用预处理器来解决程序跨平台的可移植性(Portability)问题。 预处理器(CPP)也是一个程序,它在真正编译程序之前运行,所以称之为预处理或...
  • Java,不仅仅是一门编程语言

    千次阅读 2007-03-13 20:33:00
    Java,不仅仅是一门编程语言Java是一门发明于1995年的计算机编程语言,去年它刚刚度过了十周年生日。2005全球JavaOne开发者大会移师中国举行,足于说明SUN公司对于Java技术在中国的发展的信心。1995年刚问世的Java...
  • 如何学习一门编程语言?给PHP初学者的几个建议: 编程和任何新的技术一样,很难知道从何处开始。这里有些步骤适合初学编程语言的人:从“拖拽”编程开始、Python作为入门的语言、JavaScript是非常有用的语言之一、...
  • 一门编程语言的诞生总是有理由的

    千次阅读 2012-12-26 09:49:21
    Kevin Kelleher suggested an interesting way to compare ... 以上所有语言都是英文编程,没有中文编程简单易懂。 原文转载自 http://www.paulgraham.com/fix.html ,Liigo稍作修补润色。
  • 怎样才算会一门编程语言

    千次阅读 2014-02-08 21:34:01
    今天, 同事问我会不会Python, 我犹豫了一下:不会。   实际上我曾经学习过这个语言,当时还用它写了些小工具, 可现在我对这个语言的...会一门语言, 当需要它时, 应该能很快用该语言解决某个问题, 这个是最基

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,389
精华内容 62,155
关键字:

如何创造一门编程语言