日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

老版本fortran语言 内存无效_编程语言的分类

發(fā)布時(shí)間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 老版本fortran语言 内存无效_编程语言的分类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編程語言世代

第一代和第二代語言又稱低級(jí)語言(Low-level language),其余被視為高級(jí)語言(High-level language)

第一代編程語言

即機(jī)器語言,由0和1構(gòu)成,通過面板、打孔帶或者打孔卡輸入。

第二代編程語言

即匯編語言,是機(jī)器語言的簡(jiǎn)單替換,目前在內(nèi)核/驅(qū)動(dòng)中會(huì)被用到。

第三代編程語言

架構(gòu)無關(guān)的語言,更加面向程序員,而非機(jī)器。第三代語言將很多細(xì)節(jié)交由計(jì)算機(jī)(編譯器)把控,同時(shí)變得更加抽象。從Fortran、ALGOL、COBOL到C、C++、C#、Java、Basic和PASCAL都是第三代語言。大多數(shù)第三代語言支持結(jié)構(gòu)化編程,不少支持面向?qū)ο缶幊獭?/p>

第四代編程語言

是一個(gè)比較模糊而不斷變化的概念,本質(zhì)上說,任何在第三代語言的概念上有所改進(jìn)的語言都可被視為第四代語言。

第四代語言可能包括對(duì)數(shù)據(jù)庫(kù)處理、報(bào)告生成、GUI開發(fā)、網(wǎng)絡(luò)開發(fā)等的支持。某些人認(rèn)為第四代語言是domain-specific語言的子集。而且這些支持在第三代語言中都有以庫(kù)的方式體現(xiàn),這模糊了第三代和第四代的區(qū)別。

第五代編程語言

第五代語言被認(rèn)為可以讓計(jì)算機(jī)在不需要程序員的情況下獨(dú)立解決一個(gè)問題,也就是說計(jì)算機(jī)只需要了解這個(gè)問題的約束,而無需程序員寫出算法。

廣義上來說,大部分constraint-based和logic-programming和某些其他的declarative語言都是第五代語言。第五代語言通常被用作在人工智能的研究上,一些這樣的語言(比如OPS5)基于Lisp。

狹義上來說,第五代語言尚未誕生。因?yàn)槠涮攸c(diǎn),第五代語言曾被認(rèn)為是未來的語言,將取代所有之前的高級(jí)語言,日本曾在第五代語言方面投入了大量的研究和資金,但事實(shí)上因?yàn)榈谖宕Z言和Strong AI息息相關(guān),其難度非常之高。

編譯型和解釋型

所有語言最終都需要轉(zhuǎn)變?yōu)闄C(jī)器碼,基于其轉(zhuǎn)換為機(jī)器碼的方式,高級(jí)語言可大致分為編譯型和解釋型兩類(匯編語言無須編譯或解釋,僅需匯編成機(jī)器碼)。

通常來說,編譯型語言的運(yùn)行速度更快(因?yàn)橐呀?jīng)預(yù)先編譯好,運(yùn)行時(shí)無須執(zhí)行解釋這一步驟),而因此,編譯型語言的開發(fā)/調(diào)試時(shí)間也較長(zhǎng),因?yàn)槊看握{(diào)試之前都需要編譯一次。而解釋型語言則可以快速的測(cè)試和調(diào)試。

理論上來說,任何語言都可以是編譯型的或者解釋型的。許多語言同時(shí)采用編譯器和解釋器來實(shí)現(xiàn):先將代碼編譯為(虛擬機(jī)一致的)字節(jié)碼,在運(yùn)行時(shí)再用解釋器解釋執(zhí)行,即所謂的JIT(Just-in-time,即時(shí)編譯)。

編譯型語言(Compiled language)

編譯型語言利用編譯器先將代碼編譯為機(jī)器碼,再加以運(yùn)行。比如C、C++、C#(編譯成字節(jié)碼)、Java(編譯成字節(jié)碼)等

解釋型語言(Interpreted language)

解釋型語言利用解釋器,在運(yùn)行期間,動(dòng)態(tài)將代碼逐行解釋(Interpret)為機(jī)器代碼并執(zhí)行。比如Python、BASIC、JavaScript等。

編程范式

Programming Paradigms,或叫編程范型、編程典范,基于編程語言的特點(diǎn)而進(jìn)行分類的方式。一種語言可以可以支持超過一種編程范型。

命令式和聲明式

這是兩個(gè)相對(duì)/并列的范式,命令式編程描述過程 ,聲明式編程描述目標(biāo)。

命令式編程(Imperative programming)

命令式編程描述計(jì)算所需作出的行為。幾乎所有的計(jì)算機(jī)硬件都是命令式的。

子范式:過程式和面向?qū)ο笫?#xff0c;過程式更靠近機(jī)器,面向?qū)ο笫礁N近程序員。

過程式編程(Procedural programming)

來源于結(jié)構(gòu)化編程,其概念基于過程(procedure、routine、subroutine、function),過程由一系列可執(zhí)行可計(jì)算的步驟構(gòu)成。

Fortran、ALGOL、COBOL、BASIC、Pascal和C等語言采用過程式編程。

面向?qū)ο笫骄幊?#xff08;Object-oriented programming)

具有對(duì)象概念的編程范式。

重要的面向?qū)ο缶幊陶Z言包括Common Lisp、Python、C++、Java、C#、Perl、PHP、Ruby、Swift等。

聲明式編程(Declarative programming)

聲明式編程描述目標(biāo)的性質(zhì),讓計(jì)算機(jī)明白目標(biāo),而非流程。聲明式編程通常被定義為所有的“非命令式編程”。

聲明式編程包括數(shù)據(jù)庫(kù)查詢語言(SQL)、正則表達(dá)式、邏輯式編程、函數(shù)式編程和configuration management。聲明式編程通常用作解決人工智能和約束滿足問題。

子范型:函數(shù)式編程、邏輯式編程、約束式編程、數(shù)據(jù)流式編程

函數(shù)式編程(Functional programming)

又稱泛函編程,它將計(jì)算視為數(shù)學(xué)上的函數(shù)運(yùn)算,避免變量或狀態(tài)(只有函數(shù)及其參數(shù))。其最重要的基礎(chǔ)是λ演算(lambda calculus),λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入和輸出。

分為純函數(shù)式編程(Purely functional programming)和函數(shù)邏輯式編程(Functional logic programming,函數(shù)式編程和邏輯式編程的組合)

邏輯式編程(Logic programming)

邏輯式編程基于數(shù)理邏輯,它設(shè)置答案所須匹配的規(guī)則來解決問題,而非設(shè)置步驟來解決問題。過程為:事實(shí)+規(guī)則=結(jié)果。

最常用的邏輯式編程語言是Prolog,Mercury則較適用于大型方案。

約束式編程(Constraint programming)

在這種范式中,變量之間的關(guān)系是以約束的形式陳述的,它們并非明確說明了要去執(zhí)行步驟的某一步,而是規(guī)范其解的一些屬性。

數(shù)據(jù)流式編程(Dataflow programming)

將程序建模為一個(gè)描述數(shù)據(jù)流的有向圖。例如BLODI。

結(jié)構(gòu)化和非結(jié)構(gòu)化

這是兩個(gè)相對(duì)的范式,非結(jié)構(gòu)化編程是最早的編程范式,現(xiàn)今的計(jì)算機(jī)科學(xué)家都同意結(jié)構(gòu)化編程的好處。

非結(jié)構(gòu)化編程(Non-structured programming)

是最早的編程范式,相對(duì)于結(jié)構(gòu)化編程,特點(diǎn)是其控制流是通過(容易引起混亂的)goto語句跳轉(zhuǎn)實(shí)現(xiàn)的。非結(jié)構(gòu)化編程包括機(jī)器語言、匯編語言、MS-DOS batch、以及早期的BASIC及Fortran等等。

結(jié)構(gòu)化編程(Structured programming)

通過子程序、代碼塊、for循環(huán)、while循環(huán)等結(jié)構(gòu)來取代之前的goto語句,以提高代碼的清晰程度,獲得更好的可讀性。現(xiàn)今的大部分高級(jí)語言都是結(jié)構(gòu)化的。

結(jié)構(gòu)化編程的流程包括順序、選擇(if, else, switch)、循環(huán)(for, while)幾類。

元編程(Metaprogramming)

元編程是一種讓程序視其他程序?yàn)閿?shù)據(jù)的編程技術(shù)。也即是說一個(gè)程序可以被設(shè)計(jì)為讀取、產(chǎn)生、分析、改變其他程序,甚至在運(yùn)行時(shí)改變自己。元編程所用的語言叫做元語言。

最著名的元語言是Lisp。

元編程的子范型:自動(dòng)式編程、反射式編程

自動(dòng)式編程(Automatic programming)

自動(dòng)式編程的定義并不清晰,而且隨時(shí)間在演變。

反射式編程(Reflection programming)

反射式編程指的是程序具有在運(yùn)行時(shí)檢查/修改它自身的結(jié)構(gòu)及行為的能力。

泛型編程(Generic programming)

泛型允許程序員在用強(qiáng)類型語言編寫代碼時(shí)使用一些以后才指定的類型。

Ada、Delphi、C#、Java、Swift、http://VB.NET稱之為泛型(generics),Scala和Haskell稱之為參數(shù)多態(tài)(parametric polymorphism),C++稱之為模板()

動(dòng)態(tài)語言(Dynamic programming language)

動(dòng)態(tài)語言在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)、對(duì)象甚至代碼可以被引進(jìn),已有的函數(shù)可以被刪除或有其他結(jié)構(gòu)上的變化。JavaScript、PHP、Python、Ruby屬于動(dòng)態(tài)語言,而C和C++則不屬于動(dòng)態(tài)語言。

大部分動(dòng)態(tài)語言都使用動(dòng)態(tài)類型,但也有些不是。

類型系統(tǒng)(Type system)

動(dòng)態(tài)和靜態(tài)類型檢查

對(duì)類型的檢查可能發(fā)生在編譯時(shí)(靜態(tài)檢查),或者程序運(yùn)行時(shí)(動(dòng)態(tài)檢查)進(jìn)行。動(dòng)態(tài)類型檢查經(jīng)常出現(xiàn)在腳本語言和解釋型語言中,編譯語言則通常使用靜態(tài)類型檢查。

大部分動(dòng)態(tài)語言都使用動(dòng)態(tài)類型,但也有些不是。

強(qiáng)弱類型

強(qiáng)類型(Strongly typed)和弱類型(Weakly/Loosely typed)并沒有非常明確地定義。主要用于描述編程語言對(duì)于混入不同數(shù)據(jù)類型的值進(jìn)行運(yùn)算時(shí)的處理方式。強(qiáng)類型的語言遇到函數(shù)形參和實(shí)參的類型不匹配時(shí)通常會(huì)失敗,而弱類型的語言常常會(huì)進(jìn)行隱式的轉(zhuǎn)換(并可能造成不可知的后果)。

類型安全和內(nèi)存安全

第三種對(duì)語言的類型系統(tǒng)進(jìn)行分類的方法,就是類型運(yùn)算和轉(zhuǎn)換的安全性。如果它不允許導(dǎo)致不正確的情況的運(yùn)算或轉(zhuǎn)換,計(jì)算機(jī)科學(xué)就認(rèn)為該語言是類型安全的。

內(nèi)存安全則指的是程序不被允許訪問沒有分配給它的內(nèi)存,比如:內(nèi)存安全語言會(huì)做數(shù)組邊界檢查。通常來說,類型安全和內(nèi)存安全是同時(shí)存在的。

比如以下例子:

var x:= 5

var y:= “37”

var z:= x + y

上例中的z的值為42,不管編寫者有沒有這個(gè)意圖,該語言定義了明確的結(jié)果,且程序不會(huì)就此崩潰,或?qū)⒉幻鞫x的值賦給z。就這方面而言,這樣的語言就是類型安全的。

再比如:

int x = 5

char y[] = “37”

char* z = x + y

在這個(gè)例子中,z將會(huì)指向一個(gè)超過y地址5個(gè)字節(jié)的存儲(chǔ)器地址,相當(dāng)于指向y字符串的指針之后的兩個(gè)空字符之處。這個(gè)地址的內(nèi)容尚未定義,且有可能超出存儲(chǔ)器的定址界線,這就是一個(gè)類型不安全/內(nèi)存不安全的語言。

顯式聲明和隱式暗示

許多靜態(tài)類型系統(tǒng),如C和Java,要求變量聲明類型:編寫者必須以指定類型明確地關(guān)系到每一個(gè)變量上。其它的,如Haskell,則進(jìn)行類型推斷:編譯器根據(jù)編寫者如何運(yùn)用這些變量,以草擬出關(guān)于這個(gè)變量的類型的結(jié)論。

例如,給定一個(gè)函數(shù)f(x,y),它將x和y加起來,編譯器可以推斷出x和y必須是數(shù)字——因?yàn)榧臃▋H定義給數(shù)字。因此,任何在其它地方以非數(shù)值類型(如字符串或鏈表)作為參數(shù)來調(diào)用f的話,將會(huì)發(fā)出一個(gè)錯(cuò)誤。

在代碼中數(shù)值、字符串常量以及表達(dá)式,經(jīng)常可以在詳細(xì)的前后文中暗示類型。例如,一個(gè)表達(dá)式3.14可暗示浮點(diǎn)數(shù)類型;而[1, 2, 3]則可暗示一個(gè)整數(shù)的鏈表;通常是一個(gè)數(shù)組。

總結(jié)

以上是生活随笔為你收集整理的老版本fortran语言 内存无效_编程语言的分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。