目录
26 关系: 垃圾回收 (計算機科學),及早求值,多重编程范式,多态,一阶逻辑,异常处理,函數程式語言,C++,Caml,Clojure,米兰达,类型推论,罗宾·米尔纳,爱丁堡大学,Erlang,類型系統,記憶體管理,F♯,Haskell,Hello World,ISWIM,ML语言,Nemerle,OCaml,求值策略,指令式編程。
- 1973年建立的程式語言
- ML語言家族
- 函数式编程语言
- 学术的编程语言
- 模式匹配编程语言
- 过程式编程语言
- 静态类型编程语言
垃圾回收 (計算機科學)
垃圾回收(Garbage Collection),在計算機科學中,縮寫為GC是一種自動的記憶體管理機制。當一個電腦上的動態記憶體不再需要時,就應該予以釋放,以讓出記憶體,這種記憶體資源管理,稱為垃圾回收。垃圾回收器可以讓程式員減輕許多負擔,也減少程式員犯錯的機會。垃圾回收最早起源于LISP语言。目前許多語言如Smalltalk、Java、C#和D语言都支援垃圾回收器。.
及早求值
及早求值(eager evaluation),又譯热情求值,也被稱為貪婪求值(greedy evaluation)或严格求值,是多数传统编程语言的求值策略。 在热情求值中,表达式在它被约束到变量的时候就立即求值。这在简单编程语言中作为低层策略是更有效率的,因为不需要建造和管理表示未求值的表达式的中介数据结构。 热情求值的优点在于节省内存和提高执行速度,比如下面的 Basic 代码: 因为第一行代码 x.
查看 ML语言和及早求值
多重编程范式
多范式编程语言(Multi-paradigm programming language)是一種可以支持超過一種編程范型的程式語言。「Multi-paradigm」这个词是由比雅尼·斯特劳斯特鲁普博士在其著作中提出的,用于表述C++可以同时使用多种风格来写程序,比如面向对象和泛型编程。.
查看 ML语言和多重编程范式
多态
#重定向 多型.
查看 ML语言和多态
一阶逻辑
一阶逻辑是使用於数学、哲学、语言学及電腦科學中的一种形式系统。 過去一百多年,一階邏輯出現過許多種名稱,包括:一阶斷言演算、低階斷言演算、量化理論或斷言逻辑(一個較不精確的用詞)。一階邏輯和命題邏輯的不同之處在於,一階邏輯有使用量化變數。一個一階邏輯,若具有由一系列量化變數、一個以上有意義的斷言字母及包含了有意義的斷言字母的純公理所組成的特定論域,即是一個一階理論。 一階邏輯和其他高階邏輯不同之處在於,高階邏輯的斷言可以有斷言或函數當做引數,且允許斷言量詞或函數量詞的(同時或不同時)存在。在一階邏輯中,斷言通常和集合相關連。在有意義的高階邏輯中,斷言則會被解釋為集合的集合。 存在許多對一階邏輯是可靠(所有可證的敘述皆為真)且完備(所有為真的敘述皆可證)的演繹系統。雖然一階邏輯的邏輯歸結只是半可判定性的,但還是有許多用於一階邏輯上的自動定理證明。一階邏輯也符合一些使其能通過證明論分析的元邏輯定理,如勒文海姆–斯科倫定理及緊緻性定理。 一階邏輯是數學基礎中很重要的一部份,因為它是公理系統的標準形式邏輯。許多常見的公理系統,如一階皮亞諾公理和包含策梅洛-弗蘭克爾集合論的公理化集合論等,都可以形式化成一階理論。然而,一階定理並沒有能力去完整描述及範疇性地建構如自然數或實數之類無限的概念。這些結構的公理系統可以由如二階邏輯之類更強的邏輯來取得。.
查看 ML语言和一阶逻辑
异常处理
异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。 各种编程语言在处理异常方面具有非常显著的不同点(错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束)。某些编程语言有这样的函数:当输入存在非法数据时不能被安全地调用,或者返回值不能与异常进行有效的区别。例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法时可以返回0。在这种情况下编程者需要另外进行错误检测(可能通过某些辅助全局变量如C的errno),或进行输入检验(如通过正则表达式),或者共同使用这两种方法。 通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。 从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。 从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。.
查看 ML语言和异常处理
函數程式語言
函數式編程(functional programming)或称函数程序设计,又稱泛函編程,是一種編程典範,它將電腦運算視為數學上的函數計算,並且避免使用程序状态以及易变物件。函數程式語言最重要的基礎是λ演算(lambda calculus)。而且λ演算的函數可以接受函數當作輸入(引數)和輸出(傳出值)。 比起指令式編程,函數式編程更加強調程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。.
查看 ML语言和函數程式語言
C++
C++是一種使用廣泛的计算机程序設計語言。它是一種通用程序設計語言,支援多重编程模式,例如程序化程序設計、数据抽象、面向对象程序設計、泛型程序設計和设计模式等。 比雅尼·斯特勞斯特魯普博士在贝尔实验室工作期间在20世紀80年代發明並實現了C++。起初,這種語言被稱作“C with Classes”(“包含‘類’的C語言”),作為C語言的增強版出現。随后,C++不斷增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多繼承(multiple inheritance)、标准模板库(standard template library, STL)、异常处理(exception)、运行时类型信息(Runtime type information)、命名空間(namespace)等概念逐漸納入標準。1998年,國際標準組織(ISO)頒布了C++程序設計語言的第一個國際標準ISO/IEC 14882:1998,目前最新标准为ISO/IEC 14882:2017。根據《C++編--程思想》(Thinking in C++)一書,C++與C的代码执行效率往往相差在±5%之間。 C++語言發展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向对象語言,並且憑藉着接近C語言的效率,在工業界使用的開發語言中佔據了相當大份額;第二階段從1995年到2000年,這一階段由於標準模板庫(STL)和後來的Boost等程式庫的出現,泛型程序設計在C++中佔據了越來越多的比重。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的衝擊;第三階段從2000年至今,由於以Loki、MPL(Boost)等程式庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最複雜的一員。.
查看 ML语言和C++
Caml
Caml,名稱源自類別抽象機語言(Categorical Abstract Machine Language,Caml)的縮寫,一種函數式程式語言,是ML语言的方言之一。1985年,最早在法國高等師範學校(ENS)發展出來,現在主要由法國國立計算機及自動化研究院(INRIA)負責維護與發展。 Caml的直譯器最早是以LISP實作,因為它使用太多CPU與記憶體資源,被暱稱為重量級Caml(Heavy CAML)。Xavier Leroy與Damien Doligez,以C語言重新發展的直譯器,相對而言,被稱為輕量級Caml(Caml Light)。在完整重寫之後,它成為特別輕量化Caml(CAML Special Light),成為核心語言外的一層應用程式模組系統。 Caml的主要實作為OCaml。.
查看 ML语言和Caml
Clojure
Clojure(發音類似"closure")是一套現代的Lisp語言的動態語言版。它是一个函数式多用途的语言。 Clojure可以執行於Java虛擬機,通用語言運行時以及JavaScript引擎之上。與其他Lisp一樣,Clojure認為同像性,同時擁有複雜的巨集。 Clojure最新的稳定版本是1.8,发布于2016年1月19日。第一个稳定版本1.0于2009年5月4日发布。 Clojure是一个在Eclipse公共许可证下发行的自由软件。目前其开发进程是社区主导的,在作者Rich Hickey以一个“终身的仁慈独裁者”的身份监督下进行。.
查看 ML语言和Clojure
米兰达
米兰达可以指:.
查看 ML语言和米兰达
类型推论
类型推论、型別推斷、或隐含类型,是指编程语言在编译期中能够自动推导出值的数据类型的能力,它是一些强静态类型语言的特性。一般而言,函数式编程语言也具有此特性。自动推断类型的能力让很多编程任务变得容易,让程序员可以忽略类型标注的同时仍然允许类型检查。 具有类型推论的语言有:Rust, Haskell, Cayenne, Clean, ML, OCaml, Epigram, Scala, Nemerle, D, Chrome,Visual Basic 2008和 Boo。计划支持类型推论的有 Fortress, Vala, C# 3.0, C++11和Perl 6。 显式的转换到另一种数据类型叫做“强制”。.
查看 ML语言和类型推论
罗宾·米尔纳
亞瑟·約翰·羅賓·葛瑞爾·米爾納(Arthur John Robin Gorell Milner,),生于英国普利茅斯,计算机科学家。1991年获得图灵奖。他是英国皇家学会成员,ACM会士。.
查看 ML语言和罗宾·米尔纳
爱丁堡大学
爱丁堡大学(University of Edinburgh)坐落在苏格兰首都爱丁堡市,是一所创建于1583年的公立研究型大学。2019年QS世界大學排名位居第18位,英國前5名,蘇格蘭第1位。爱丁堡大学是苏格兰的第四所也是整个英语圈的第六所大学。在苏格兰排名通常位于第一或第二位,竞争者为同样是古典大學的格拉斯哥大學和圣安德鲁斯大学。此外亦被《ARWU》、《QS排名》和《泰晤士大学排名》这三大排名列在英国国内前5位,世界排名位于20至50之间。它是唯一的同时身为罗素集团、科英布拉集团及欧洲研究型大学联盟成員的蘇格蘭大學。还与世界上最优秀的学术机构保持联系,包含美国的常春藤盟校及加拿大的U15。 爱丁堡大学在欧洲启蒙时代具有相当重要的领导地位,使爱丁堡市成为了当时的启蒙中心之一,享有「北方雅典」之盛名。其著名的毕业生,包括:自然学家查尔斯·达尔文、物理学家詹姆斯·克拉克·麦克斯韦、哲学家大卫·休谟、数学家托马斯·贝叶斯、作家阿瑟·柯南·道尔、发明家亚历山大·格拉汉姆·贝尔、英国前首相戈登·布朗、美国独立宣言签署人约翰·威瑟斯庞及本杰明·拉什。爱丁堡大学共有二十三名诺贝尔奖得主、二名图灵奖得主和一名阿贝尔奖得主。其与英国皇室保有良好关系,菲利普亲王在1953到2010年担任校监,2010年至今则由长公主安妮公主就任。.
查看 ML语言和爱丁堡大学
Erlang
Erlang()是一種通用的----,它由喬·阿姆斯特朗(Joe Armstrong)在瑞典電信設備製造商愛立信所轄的電腦科學研究室開發,目的是創造一種可以應付大規模開發活動的--和執行環境。Erlang於1987年釋出正式版本,最早是愛立信擁有的私有軟體,經過十年的發展,於1998年發表開放源碼版本。 Erlang是運作於虛擬機的--,但是現在也包含有烏普薩拉大學高性能Erlang計劃(HiPE)開發的原生程式碼編譯器,自R11B-4版本開始,Erlang也支持--。在編程範型上,Erlang屬於多重典範程式語言,涵蓋函數式、--及--。循序執行的Erlang是一个及早求值, 單次賦值和--的函數式程式語言。.
查看 ML语言和Erlang
類型系統
在计算机科学中,--系統用于定義如何將程式語言中的數值和zh:運算式;zh-tw:運算式;zh-cn:表达式-归類为许多不同的型別,如何操作这些型別,这些型別如何互相作用。型別可以确认一个值或者一组值具有特定的意义和目的(雖然某些型別,如抽象型別和--型別,在----中,可能不表示為值)。型別系統在各種語言之間有非常大的不同,也許,最主要的差異存在於編譯時期的語法,以及執行時期的操作实现方式。 編譯器可能使用值的靜態型別以最佳化所需的儲存區,並選取對值運算時的較佳演算法。例如,在許多C編譯器中,「浮點數」資料型別是以32 位元表示,與IEEE 754規格一致的單精度浮點數。因此,在數值運算上,C應用了浮點數規範(浮點數加法、乘法等等)。 型別的約束程度以及評估方法,影響了語言的型別。更進一步,程式語言可能就型別多態性部分,對每一個型別都對應了一個極度個別的演算法的運算。型別理論研究型別系統,儘管實際的程式語言型別系統,起源於電腦架構的實際問題、編譯器實作,以及語言設計。.
查看 ML语言和類型系統
記憶體管理
内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 一個執行中的程式,譬如網頁瀏覽器在個人電腦或是圖靈機(Turing machine)裡面,為一個进程將資料轉換於真實世界及電腦記憶體之間,然後將資料存於電腦記憶體內部(在電腦科學,一個程式是一群指令的集合,一個进程是電腦在執行中的程式)。記憶體能被實際組織在許多方法裡頭,例如磁帶或是磁盤,或是小陣列容量的微晶片。 從1950年代開始,計算機變的更複雜,它被連線於許多種類的記憶體。記憶體管理的任務也變得複雜,甚至必須要在同一台機器上相同的時間執行多個进程。 在記憶體內,一個程式(作業系統)在每一個資料區段持續地追蹤實體位置,及移動實體上的資料去改善其效能及保證可靠性,對於每個用户層(user-level)的程式,作業系統分配一段虛擬記憶體空間,當行程起始時,不需要移動資料到實體裝置間,資料存於磁碟內的虛擬記憶體空間,也不需要去配置主記憶體空間給該行程,當使用者有需要用到時,他們才会很自由地載入到主記憶體內。 可以想像一個很大的程式,當他執行時變成行程,而大部分的記憶體空間都被存到磁碟內虛擬記憶體位址,需要用到的部分才被載入到記憶體內部提供服務。.
查看 ML语言和記憶體管理
F♯
F#是由微软发展的为.NET语言提供运行环境的程序设计语言,是函數程式語言(FP,Functional Programming),函數程式語言最重要的基礎是Lambda Calculus。它是基于OCaml的,而OCaml是基于ML函数程式语言。有時F#和OCaml的程式是可以交互編譯的。 F#已經接近成熟,支援高阶函数、柯里化、惰性求值、Continuations、模式匹配、闭包、列表处理和元编程。这是一个用于显.NET在不同编程语言间互通的程序设计,可以被.NET中的任意其它代碼編譯和調用。 2002年微软開始由Don Syme帶領研發F#,從C#,LINQ和Haskell中獲取了經驗,2005年推出第一個版本,2007年7月31日释出1.9.2.9版。2007年底,微軟宣布F#進入產品化的階段。 F#已被集成在Visual Studio 2010中,版本是2.0,含有对.Net Framework的完全支持。 F#现在在Visual Studio 2015中,版本是4.0。 F#现在在Visual Studio 2017中,版本是4.1。.
查看 ML语言和F♯
Haskell
Haskell()是一种标准化的,通用的纯函數程式語言,有非限定性语义和强静态类型。它的命名源自美国逻辑学家哈斯凱爾·加里,他在数理逻辑方面上的工作使得函数式编程语言有了广泛的基础。在Haskell中,“函数是第一類物件”。作为一门函數程式語言,主要控制结构是函数。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算为基础发展而来。这也是为什么Haskell语言以希腊字母「λ」(Lambda)作为自己的标志。Haskell具有“证明即程序、命题为类型”的特征, with 2 sections by William Craig, see paragraph 9E。.
查看 ML语言和Haskell
Hello World
Hello, World是指在電腦螢幕顯示「Hello, World!」(你好,世界!)字串的電腦程式。相關的程式通常都是每種電腦編程語言最基本、最簡單的程序,也會用作示範一個編程語言如何運作。同時它亦可以用來確認一個編程語言的變電器、程序開發環境及運行環境是否已經安裝妥當。因為寫法簡單可見,這也是很多初學者首次接觸程式語言時會撰寫的程序。.
ISWIM
ISWIM 是 Peter J. Landin 设计并描述于他在1966年于ACM通讯中出版的文章《The Next 700 Programming Languages》中的抽象计算机编程语言(或编程语言家族)。名称是如下首字母缩写“If you See What I Mean”。 尽管没有实现,它被证明为在编程语言特别是函数式编程语言开发中非常有影响力的语言,比如 SASL,Miranda,ML,Haskell 和它们的后继者。 ISWIM 是带有由加了语法糖的 lambda 演算组成的函数式核心的指令式语言,它增加了(i)可变变量和赋值,(ii)强力控制机制 — Landin 的 J 算子,它能够捕获当前的续体(Scheme 的 call/cc 算子是简化版本的 Landin 的 J 算子)。因为基于 lambda 演算,ISWIM 有高阶函数和词法辖域变量。 ISWIM 的操作语义是使用 Landin 的 SECD抽象机定义的,并且使用了传值调用因而是及早求值的。ISWIM 的目标之一就是看起来更像数学表示,所以 Landin 放弃了 ALGOL 的语句间分号和 begin...
查看 ML语言和ISWIM
ML语言
ML是一个通用的函數式編程语言,它是由爱丁堡大学的Robin Milner及他人在二十世纪七十年代晚期开发的。它的语法是从ISWIM得到的灵感。作为元语言的ML是为了帮助在LCF定理证明机中寻找证明策略而构想出来的。(之前的元语言是pplambda,它联合了一阶逻辑演算和有类型的多态的λ演算)。它使用了Hindley-Milner类型推论算法来推测大多数值的类型,而不需要四处使用注解。 ML一般被归为非纯函数式编程语言,因为它允许副作用和指令式编程。这一点和纯函数式编程语言——例如Haskell——很不一样。 ML特性包括:傳值呼叫(Call by value)的求值策略,一级函数,带有垃圾收集的自动内存管理,参数多态,静态数据类型,类型推论,代数数据类型,模式匹配和异常处理。 不像Haskell,ML使用及早求值,也就是说所有的子表达式总是被求值。导致的一个结果是你不能使用无穷表。然而,惰性求值产生的无穷表可以通过使用匿名函数来模拟。 今天在ML家族中有好几种语言:两种主要的方言是Standard ML和Caml,其他的包括F#-针对Microsoft.NET平台的开放研究项目。ML中的思想影响了众多的语言,例如Haskell,Cyclone和Nemerle。 ML的实力大多被用于语言设计和操作(编译器、分析器、定理证明机),但是它作为通用语言也被用于生化,金融系统,和宗谱数据库,一个P2P的客户/服务器程序等等。.
查看 ML语言和ML语言
Nemerle
Nemerle,是微軟公司提出.NET平台上的新語言,由Wrocław大學的Kamil Skalski、Michał Moskal、Prof.
查看 ML语言和Nemerle
OCaml
OCaml,最早稱為Objective Caml,是Caml编程语言的主要实现,由Xavier Leroy,Jérôme Vouillon,Damien Doligez,Didier Rémy及其他人于1996年创立。OCaml是开放原始码项目。此项目的管理和大部分维护工作交由INRIA。.
查看 ML语言和OCaml
求值策略
在计算机科学中,求值策略(Evaluation strategy)是确定编程语言中表达式的求值的一组(通常确定性的)规则。重点典型的位于函数或算子上——求值策略定义何时和以何种次序求值给函数的实际参数,什么时候把它们代换入函数,和代换以何种形式发生。经常使用用来研究函数的形式系统λ演算来建模求值策略,这里它们通常叫做归约策略。求值策略分为两大基本类,严格的和非严格的,基于如何处理给函数的实际参数。一个语言可以组合多种求值策略;例如C++组合了传值调用和传引用调用。多数语言对布尔表达式和if语句使用某种形式的非严格求值。.
查看 ML语言和求值策略
指令式編程
指令式編程(Imperative programming),是一種描述電腦所需作出的行為的編程典範。幾乎所有電腦的硬體工作都是指令式的;幾乎所有電腦的硬體都是設計來執行機器碼,使用指令式的風格來寫的。較高階的指令式編程語言使用變數和更複雜的語句,但仍依從相同的典範。菜譜和行動清單,雖非電腦程式,但與指令式編程有相似的風格:每步都是指令,有形的世界控制情況。因為指令式編程的基礎觀念,不但概念上比較熟悉,而且較容易具體表現於硬體,所以大部分的編程語言都是指令式的。 大部分的高级语言都支援四種基本的語句:.
查看 ML语言和指令式編程
另见
1973年建立的程式語言
- ML语言
ML語言家族
- Caml
- F♯
- ML语言
- OCaml
- Standard ML
函数式编程语言
- APL語言
- Agda
- Arc
- BBN LISP
- Caml
- Clojure
- Common Lisp
- Coq
- Curl语言
- C♯
- Erlang
- F*
- F♯
- Haskell
- Haxe
- ISWIM
- Idris
- JavaScript
- J语言
- LISP
- ML语言
- Maple
- Nemerle
- Nim
- OCaml
- REBOL
- Racket
- Ruby
- Rust
- R语言
- Scala
- Standard ML
- Swift語言
- Wolfram语言
- XSLT
学术的编程语言
模式匹配编程语言
- AWK
- Agda
- Erlang
- F♯
- Haskell
- Haxe
- Idris
- ML语言
- OCaml
- Prolog
- Python
- Racket
- Rust
- Scala
- Sed
- Swift語言
- 編譯器編譯程式
过程式编程语言
- A-0 系統
- ABC (程式語言)
- ALGOL
- ALGOL 60
- ALGOL 68
- ALGOL W
- BCPL
- BOO
- B語言
- CLU
- COBOL
- Common Lisp
- C语言
- D語言
- Fortran
- FoxPro
- Gambas
- Go
- JOVIAL
- ML语言
- Mesa语言
- Nemerle
- Nim
- Oberon
- Occam
- PHP
- PL/I
- PL360
- Perl
- PowerShell
- PureBasic
- Rust
- SPARK
- Standard ML
- Tcl
- Visual Basic
- Visual FoxPro
- 資訊處理語言
静态类型编程语言
- Ada
- Agda
- BOO
- C++
- COBOL
- C♯
- C语言
- D語言
- Fortran
- FreeBASIC
- F♯
- Go
- Haskell
- Haxe
- Java
- Kotlin
- ML语言
- Mesa语言
- Modula-2
- Nim
- OCaml
- Oberon
- Rust
- SPARK
- Scala
- Solidity
- Swift語言
- TypeScript
- Vala
- Visual Prolog
亦称为 Standard ML。