Programming languages 编程语言的显著特征

Programming languages 编程语言的显著特征,programming-languages,syntax,Programming Languages,Syntax,除了每种语言的语法(例如print v.echo),要区分编程语言还需要注意哪些关键的区别特征 作为一名编程初学者,我仍然对每种编程语言的优缺点以及如何在常见本机函数的别名之外区分它们感到困惑。我认为根据一组独特的特征对语言进行分类要容易得多,例如oopv。功能性。定义PL的因素很多,这里我列出一些: 它是程序性的、面向对象的、命令式的吗 是否具有强类型检查(C,C++,Delphi)或动态(PHP,Pythong,JS)< /LI> 如何处理推荐信?(它是否隐藏像C#?)这样的指针) 它需要

除了每种语言的语法(例如print v.echo),要区分编程语言还需要注意哪些关键的区别特征


作为一名编程初学者,我仍然对每种编程语言的优缺点以及如何在常见本机函数的别名之外区分它们感到困惑。我认为根据一组独特的特征对语言进行分类要容易得多,例如oopv。功能性。

定义PL的因素很多,这里我列出一些:

  • 它是程序性的、面向对象的、命令式的吗
  • 是否具有强类型检查(C,C++,Delphi)或动态(PHP,Pythong,JS)< /LI>
  • 如何处理推荐信?(它是否隐藏像C#?)这样的指针)
  • 它需要运行时(C#,Java)还是操作系统的本机(C,C++)
  • 它是否支持线程(例如Eiffel需要额外的库)
可能还有其他功能,如垃圾收集器的预感知、参数的处理等。埃菲尔语言有一个有趣的功能,它是按合同设计的,我在任何其他语言上都没有见过这种功能(我认为C#4.0现在已经有了),但如果使用得当,它会非常有用

我建议您看看Bertrand Meyer的工作,以更深入地了解PL的工作方式以及定义PL的内容。另一个可以定义PL的东西是与系统的交互级别,这就是低级语言和高级语言之间的区别

希望我能在某个领域(命令式、函数式、连接式、术语重写)中提供帮助,有时最好看看是否存在任何特定的功能集。例如,对于主流命令

  • 一阶函数
  • 闭包
  • 内置类、原型继承或工具包(示例:C++、//JavaScript、Lua/Perl)
  • 复杂数据类型(多于数组)
  • 内置并发原语
  • 未来
  • 按值传递、按名称传递、按引用传递或其组合
  • 垃圾收集与否?什么样的
  • 基于事件
  • 基于接口的类型、基于类的类型或无用户类型(Go、Java、Lua)

  • ET/

    < P>你可以考虑类似的事情:

    • 你能调用函数吗
    • 你能把函数传递给其他函数吗
    • 你能创建新函数吗?(在C语言中,可以将函数指针传递给函数,但不能创建新函数)
    • 你能创建新的数据类型吗
    • 您能否使用对其进行操作的函数创建新的数据类型?(OO语言的典型基础)
    • 您能否执行编译时不可用的代码(可能使用
      eval
      函数)
    • 必须在编译时知道所有类型吗
    • 类型在运行时可用吗
    低级语言和高级语言之间的差异。(尽管“低”和“高”是相对术语。)


    高级语言将使用抽象来隐藏低级语言将向用户公开的细节。例如,在Matlab或Python中,可以在单个命令中初始化N维数组。在C语言或汇编语言中并非如此。

    我认为一门语言的力量取决于你能用它做多少事情;你完成目标的速度和容易程度


    一种语言的缺点是当你试图实现你的目标时遇到的(各种类型的)约束的总和。

    一种编程语言可能支持许多特性。此外,这些功能并不总是相互排斥的。例如,OCaml和F#都是功能性和面向对象的。在这里列出一种语言可以支持的所有范例也是非常详尽的,不过有一本书全面介绍了编程语言中的许多范例

    但是,对我来说,在使用一种语言时,我需要知道以下重要事项:

    • 它是动态类型还是静态类型
    • 它是一种类型化语言吗?如果是类型化语言,它是强语言还是弱语言
    • 是垃圾收集吗
    • 它是否支持按值传递或按引用传递语义,或者两者都支持
    • 它是否支持一阶函数(即函数可以被视为变量)
    • 它是面向对象的吗
    • 多态性。它是参数化的还是临时的
    • 类型系统的表达能力如何(例如,我可以创建无泄漏的抽象)
    • 重载方法
    • 泛型(模板)
    • 异常处理
        • (类型化与非类型化、静态与动态类型化、弱类型与强类型)
        • (过程、面向对象、功能、逻辑、多功能)
        • (编译器对解释器对JIT编译器)
        • 内存管理(vs自动(或))
        • 预期(数字处理、原型、脚本、DSL等)
        • 生成(,)
        • 使用自然语言(英语vs。然而,它是关于语法的

        一般说明:该分类方案中的许多并不全面,也不是很好。链接大多在维基百科上。所以,请注意。

        你可以考虑其他特性,如:

        • 强类型与弱类型、静态类型与动态类型,支持泛型类型
        • 内存是如何处理的(它是抽象的还是您可以直接控制数据,按引用传递还是按值传递)
        • 编译vs解释vs两者兼而有之
        • 用户定义类型的可用形式。。。类、结构、元组、列表等
        • 无论线程工具是内置的还是需要使用外部库
        • 生成性编码设备。。。C++模板元编程是这个
        • 的一种形式。
        • 在OOP的情况下,单继承与多继承、接口、匿名/内部类等
        • 一种语言是否是多范式的(即C#