it-swarm.cn

有几种类型的编程语言?

基本上,我想学习很多编程语言以成为一名优秀的程序员。我只知道极少数的深度和我希望有人能详细说明多少类型的编程语言。就像您必须分组学习时,如何将它们组合在一起。

来自Java)背景,我熟悉静态类型,但是我知道,除了动态类型外,可用语言中还必须有如此多的种类,我希望看到这种类型的分类如果可能的话。

30
sova

这取决于您要如何对语言进行分类。从根本上讲,语言可以分为两种类型:命令式用来指示计算机如何执行任务的语言,以及声明式您告诉计算机做什么的语言。声明性语言可以进一步细分为functional语言(其中通过组合函数来构建程序)和logic编程语言(其中通过一组程序来构建程序)逻辑连接。命令式语言更像是解决问题的步骤列表,有点像食谱。命令性语言包括C,C++和Java。功能语言包括Haskell;逻辑编程语言包括Prolog。

命令式语言有时分为两个子类:过程诸如C的语言,和面向对象的语言。但是,由于存在面向对象的功能语言(OCaml和Scala是示例),所以面向对象的语言与分组有点正交。

您还可以通过键入以下内容来对语言进行分组:静态动态。静态类型的语言是在运行程序之前(通常在编译阶段)检查(通常是强制执行)类型的语言;动态类型语言会将类型检查推迟到运行时。 C,C++和Java是静态类型的语言; Python,Ruby,JavaScript和Objective-C是动态类型的语言。还有ntyped语言,其中包括Forth编程语言。

您还可以按语言的键入学科对语言进行分组:类型(支持隐式类型转换)和strong类型(其中禁止隐式类型转换。两者之间的界线有点模糊:根据某些定义,C是一种弱类型的语言,而其他人则认为它是强类型的。无论如何,输入纪律并不是对语言进行分组的有用方法。

73
mipadi
  • 组装
  • 程序性
    • 基本的
    • C
  • 面向对象
    • C#
    • Java
  • 声明性
    • 序言
    • 的SQL
  • 功能性
    • LISP
    • 哈斯克尔

这些是主要的,但是还有很多其他范例,它们之间有很多重叠之处。

12
user1842

有关编程语言的类型(范例),请参见此处:
http://en.wikipedia.org/wiki/Programming_paradigm

有关编程语言(例如类型系统)的其他特征,请参见: http://zh.wikipedia.org/wiki/Programming_language

11
Robert Harvey

点击图片查看PDF。Programming paradigms poster

您应该看一下Peter Van Roy的 傻瓜编程范例:每个程序员都应该知道的 。这将为您提供有关外部情况的概述。

如果想走得更远,可以阅读 计算机编程的概念,技术和模型 。您不会通过这种方式学习大量的语言,但是您将学习各种语言背后的范例。因此,学习新语言对您来说将更加容易。

9
mmdemirbas
  • 程序:汇编,Java,C#,F#,LISP,Fortran。

  • 基于集合:SQL。

  • 基于模式:Perl,Regex,Snobol。

  • 基于树:XSLT。

  • 基于数组:APL。

6
Tangurena

有不同的答案方法,但可以将它们归类为:

机器语言:机器语言是一种低级编程语言。它很容易被计算机理解,但很难被人们阅读。这就是为什么人们使用高级编程语言的原因。用高级语言编写的程序也可以编译和/或解释为机器语言,以便计算机可以执行它们。

汇编语言:汇编语言是机器语言的表示。换句话说,每个汇编语言指令都转换为机器语言指令。尽管汇编语言语句是可读的,但这些语句仍然是低级的。汇编语言的一个缺点是它不能移植,因为每个平台都带有特定的汇编语言。

高级语言:高级语言是当今大多数程序员使用的语言。诸如C,C++和Java)都是高级语言。高级语言的优点在于它们易于阅读和可移植。高级语言的缺点在于它们易于使用。比汇编语言更强大,因为高级语言中的单个语句被翻译成许多机器语言语句。

高级语言可以进一步分类为:

  1. 功能语言:在功能语言中,程序分为功能定义。功能语言是一种声明性语言。它们主要基于带有常量的类型化lambda微积分。一些著名的函数语言是Scala,F#,Clojure和LISP。

  2. 过程语言:在过程语言中,程序是按照一系列步骤来编写的,应遵循这些步骤来产生结果。 COBOL,FORTRAN和C是一些过程语言。

  3. 面向对象的编程语言:在OOP=语言中,程序分为包含数据和方法的Object) Java,C#和C++是OOP语言。

  4. 逻辑编程语言:逻辑语言用于创建使计算机能够进行逻辑推理的程序。例如:逻辑语言

要进行深入研究,请查看:

4
Badar

我倾向于从功能方面考虑:

语法:

基于C或您拥有什么。 Java具有基于C的语法。我强烈建议尝试使用Python或Ruby之类的内容,以使您的语法从头开始,并更多地考虑给定语言如何工作的基础知识。我认为没有语法比基于C的语法更庞大,并且围绕空白的构建块也没有问题。

编译与解释与构建过程与解释/控制台:

我对编译时与运行时环境的关注非常不熟悉,但是我发现那里有很多我很少考虑的关注。

同样,有许多解释型语言仍具有像Java一样在虚拟机中运行的某种类似于编译的过程。您仍然必须重新构建才能看到更改。

然后是JavaScript和Python,您可以在实时环境中的控制台中通过命令来即时执行。这三种方式都可能导致完全不同的代码编写方式。

动态与严格输入:

我倾向于将两者视为设计折衷。当您处于较低水平并且性能至关重要时,静态类型很有用。我从未理解过这种说法比另一种说法“更安全”的概念,但是我想到的是一种非常可塑性/动态的语言,您在这里只学习打字系统的工作原理和基本期望。在JS中,对于我来说,类型恶作剧很少引起关注。在某些方面,灵活性可以使事情变得更健壮,尽管如果您不了解该语言的某些缺陷,可以承认,对于更高级别的Jr.开发人员来说,这可能会有些不可思议。

块级作用域与功能作用域与?:

块级是最常见的(在大多数基于c的语法语言中,{}之间的任何值)。 JavaScript范围是围绕函数构建的(函数也用于构建对象,因此也可以有效地构建对象)。从内部范围到外部范围,您具有哪种访问方式也有很大的不同。我不熟悉其他范围界定方案,但我确定它们存在。

Classical OOP与原型OOP与Almost-OOP(C语言中的结构)与Non-OOP:

即使在基于类的OOP中,仍有很大的变化空间。是否可以进行多重继承(ew,过量,ew),定义接口等...

在JavaScript中,我们有一种受阻的混合原型OOP,其中对象更加简单,高度易变,但是我们仍然能够将接口与内部问题分开,这是IMO封装的重要方面。

关于OOP的事情是,实际上可以有很多东西是面向OOP的,而从技术上来说并不是OOP。当然有纯粹主义者,但归根结底,设计模式是要实现在某些情况下可以很好地工作的某些抽象。不要太快地假设基于OOP的语言的想法在面向过程的东西中没有用。而且我不是在谈论JavaScript。它完全不受基于OOP范式的高飞版本的限制。

一流的功能:

对于我来说,放弃这些语言是一件很难的事情。您可以像传递数据那样在其他上下文中使用函数。这使得事件处理方案特别容易实现,但也使调整语言以您想要的方式工作变得非常容易。尽管我在两周内就设计了JavaScript,并且将Java近似语法作为一种营销方案打在了JavaScript上,但使JavaScript最终获得成功的东西比我怀疑的要多。

关闭:

我不确定Java的争论在哪里,但是我知道一两年前很多Java开发人员都在呼吁使用此功能。在非闭包语言中,当一个函数关闭时,任何能够以某种方式从该函数内部引用内容的东西都将无法访问,因为它是垃圾收集的。在闭包中,执行上下文是受约束的,这样,如果您能够从另一个范围(如返回的对象或函数)中引用该闭包函数中的内容,则基本上可以得到那些与函数关闭时相同的变量。这就像在垃圾收集的门上a脚,尽管我怀疑它的实现方式更像是将这些var的副本制作为引用实体的本地var。

刚性/严格/安全与给您所有想要的绳索:

JS开发人员和Java开发人员往往一点都不了解彼此,我认为这与这两种语言在该特定设计领域的近乎相反的方面有很大关系。我不希望您保护我免受自己或团队中其他开发人员的侵害。我想用更少的代码做更多的事情,并根据情况以完全不同的方式(但对于给定的域是一致的)来完成所有这些工作。两者都有绝对的权衡,许多语言倾向于更多地落入中间。

3
Erik Reppen

我认为所有这些的捷径是学习足够的LISP来做一些半有用的事情。这些范例中的大多数都是从使用LISP的方式开始的,因此这是一种尝试的简单方法。

周围有许多种“语言”,但总是会出现新的语言。基本上,语言的目的是尽可能直接地编码思想,概念或需求。为此,在某些情况下可能需要现有的范例,可能需要一个新的范例。

一种观察方法是表面结构。它如何直接使您简洁地编码思想,这样,如果您改变了想法,对代码的相应更改也很容易,几乎没有机会引入错误。

另一种看待它的方法是控制结构。当执行语言(如果是)时,事情发生的顺序是什么,以完成您想要的?示例包括:简单的直接执行,递归,回溯,并行性。我发现(轻微咳嗽)是 微分执行力

另一个有用的观点是,只要设计了数据结构,就诞生了一种语言。数据是由梳理数据并执行操作的应用程序“执行”的,就像程序只是一堆数据(如字节码)一样,解释程序使用这些数据来执行操作。

2
Mike Dunlavey

我必须补充说,有针对特定应用程序的编程语言。我想到的是APT(自动编程工具),一种用于机床制造的语言。

1
Dave