{eval=Array;=+count(Array);}
軟件是用編程軟件寫成的,那么編程軟件是怎么來的呢?
這個吧,我真的沒辦法一個個給你解釋到底,不然你要是打破沙鍋問到底,可能一頓火鍋的功夫我也沒辦法給你說完。舉個例子哈,IntelliJ IDEA和Eclipse都是Java的IDE,用這兩個IDE可以寫非常多的軟件,比如Android Studio先后分別基于這兩個軟件,Android上所有的軟件都是用這玩意兒開發(fā)的,但是這兩個IDE本身也都是Java語言開發(fā)的,這兩個IDE呢最初肯定是在Vim/Emacs+Java開發(fā)的,咱就先說到這里,不然要喋喋不休了。
我給大家提一個思路,大家按照這個思路可以自己去找自己感興趣的問題。我給大家說一說Google實(shí)現(xiàn)Go 1.5自舉、去除所有的C語言程序的過程,大家慢慢就明白了,基本上計算機(jī)技術(shù)都是這樣迭代出來的,比如怎么先有了C語言、現(xiàn)有了Unix,又如何在這些基礎(chǔ)上,誕生了Emacs、C++等眾多新的軟件和技術(shù)。
事實(shí)上現(xiàn)在所有新的編程語言,基本上都會考慮在C語言的基礎(chǔ)之上構(gòu)建,Go語言也不例外,何況Go語言的重要設(shè)計者之一肯湯普森老爺子,還是C語言、Unix之父。Go語言發(fā)展的第一階段,就是開發(fā)一個從C語言到Go語言的翻譯器,將C語言編譯器翻譯成Go語言的,不過了Go語言核心設(shè)計團(tuán)隊的三位大神非常機(jī)智,他們最大程度避免了在Go語言編譯器設(shè)計中,大量使用未來很難移植到Go語言的一些特性,比如宏、比如指針,這些都是C、C++留下的一些糟糕的設(shè)計,不符合現(xiàn)在的編程語言設(shè)計潮流。轉(zhuǎn)換編譯器源碼樹產(chǎn)生一個Go語言編譯器,不過這時候還是典型C語言風(fēng)格。
接下來,Google對編譯器進(jìn)行了優(yōu)化,將編譯器CPU、內(nèi)存等硬件資源占用的問題解決了,并且引入了并行概念。為了改進(jìn)編譯器在消除邊界檢查等問題下的能力,同時在不依賴架構(gòu)的node*s、prog*s之間引入一個中間表示。這些事情完成之后,Google就做了最后一步,用Go 1.5、也就是當(dāng)時Go語言最新版本,用go/parser和go/types替換了編譯器前端,至此Go語言實(shí)現(xiàn)了自舉,并且獲得了一個穩(wěn)定高效的編譯器實(shí)現(xiàn)。
Go語言本身編程難度要比C更簡單,這是因為Go語言跟很多高級語言一樣,摒棄了指針、規(guī)避了內(nèi)存泄漏、解決了緩沖區(qū)溢出,深度遞歸時棧的溢出,摒棄了宏這些定義。Go語言工具鏈對模塊化、單元測試、以及性能分析支持更好,在修改內(nèi)部API或重構(gòu)時,應(yīng)用自動化程序重構(gòu)前景更加值得期待。
你看這就是Go語言從C語言寫編譯器 ,到最終實(shí)現(xiàn)Go語言完全自舉的過程,當(dāng)然大家都知道圖靈完備的編程語言都可以實(shí)現(xiàn)自舉,理論上符合圖靈完備的編程語言都是這么發(fā)展的,C++就是這么發(fā)展的,滿足這個條件的編程語言,你才能作為其他編程語言的基礎(chǔ)。
那么我們回到最初的問題上,編寫軟件的編程軟件又是在什么環(huán)境下開發(fā)的呢?計算機(jī)技術(shù)發(fā)展至今,在機(jī)器語言的基礎(chǔ)上,弄出了匯編語言,接著兩位祖師爺弄了C語言和Unix系統(tǒng),接著在這個基礎(chǔ)上,又有人弄了Emacs、Vim、GCC,你看基本上現(xiàn)代計算機(jī)技術(shù)的所有根基技術(shù)就有了。
接著就是用C語言寫各種操作系統(tǒng),為了各種需求寫各種編程語言,又根據(jù)各種需求開發(fā)各種集成開發(fā)環(huán)境,然后又根據(jù)各種應(yīng)用需求用集成開發(fā)環(huán)境寫其他應(yīng)用軟件,這就是一個完整的計算機(jī)技術(shù)發(fā)展進(jìn)化流程。
編程軟件也是,先有了機(jī)器語言,打孔時代創(chuàng)造和發(fā)明了匯編語言,匯編語言的基礎(chǔ)上又有了B語言,然后B語言的基礎(chǔ)上發(fā)明了C語言,C語言重寫Unix,于是現(xiàn)代計算機(jī)的雛形也就有了。早期是一生一、機(jī)器語言生匯編,然后機(jī)器和匯編語言生C語言,到C語言時代就是一生萬物、C語言生萬物,現(xiàn)在就是多生萬物。這就是計算機(jī)技術(shù)發(fā)展的過程。
首先要明確幾個概念,計算機(jī)語言、軟件和開發(fā)平臺,計算機(jī)語言是軟件開發(fā)的基礎(chǔ),通過計算機(jī)語言才能實(shí)現(xiàn)和計算機(jī)硬件的通訊,實(shí)現(xiàn)對硬件的操作,一般計算機(jī)語言分為低級語言和高級語言,低級語言如:機(jī)器語言、匯編語言,可以直接操作硬件,速度快,但是編寫和理解困難;高級語言如:C、C++、JAVA等,需要通過編譯轉(zhuǎn)換為機(jī)器語言實(shí)現(xiàn)對硬件操作,速度慢,但是更便于理解。
軟件是通過計算機(jī)語言開發(fā)的,通過對計算機(jī)硬件的操作而實(shí)現(xiàn)某些功能的計算機(jī)程序的集合體,如:手機(jī)APP、PC端的應(yīng)用、網(wǎng)站,甚至操作系統(tǒng)等都是軟件。
一般所說的編程軟件都是指的開發(fā)平臺,也被稱為IDE(集成開發(fā)環(huán)境),它的主要作用是通過集成一些開發(fā)常用的環(huán)境或者工具來提升軟件開發(fā)的效率,如JAVA開發(fā)必須的JDK等。
所以說軟件的基礎(chǔ)是計算機(jī)語言,通過計算機(jī)語言結(jié)合一系列的算法從而實(shí)現(xiàn)對計算機(jī)硬件的操作,實(shí)現(xiàn)某些功能,而開發(fā)平臺只是將代碼的編輯過程進(jìn)行了簡化,使其更符合開發(fā)人員的思維邏輯。開發(fā)平臺本身也是一個軟件,也是通過某種計算機(jī)語言來寫的,并且很多開發(fā)平臺都是支持多語言的,如eclipse平臺,除了支持JAVA開發(fā),還支持C/C++、PHP、Python等,甚至可以開發(fā)eclipse自身的插件。
題主可能搞混了概念。軟件確切地說是編程語言編寫完成。只不過在編程代碼的時候,為了方便高效,我們會使用ide或編輯器等輔助工具,這些ide和編輯器應(yīng)該就是題主理解的編程軟件。所以,題主這個問題應(yīng)該是想問“ide或編輯器是用什么開發(fā)的?”
常用的ide有microsoft visual studio、eclipse等,前者主要是c++,后者主要是java。但是,事實(shí)上隨著go等新生態(tài)語言的蓬勃發(fā)展,和手機(jī)、可穿戴設(shè)備的發(fā)展,現(xiàn)在ide的發(fā)展趨勢是跨平臺,比如flutter、react native、weex等開發(fā)框架,而這些開發(fā)框架往往不是以一種語言為主開發(fā),c/c++、js(vue、react、node)、typescript等的運(yùn)用都較為普遍。
總結(jié)下來,就是軟件借助ide、編輯器等使用編程語言開發(fā),而ide、編輯器、開發(fā)框架的實(shí)現(xiàn)目前通常由多種編程語言共同完成。
在這美好的一天很榮幸為大家解答這個問題,讓我們一起走進(jìn)這個問題,現(xiàn)在讓我們一起探討一下。
以下我為大家分享,我個人對這個問題的看法與想法,希望我的分享能給大家?guī)韼椭蚕M蠹夷軌蛳矚g我的分享。
我認(rèn)為程序的本質(zhì)是給定輸入,用指定邏輯給出輸出。所以用basic寫匯編編譯器,JavaScript寫c的編程工具完全做得到。c的編譯器是c寫的,go的編譯器是go寫的,Java的編譯器是Java寫的。
編程語言首先需要編譯器把代碼翻譯成機(jī)器語言。而第一個編譯器是慢慢迭代出來的,就是開始寫一個簡單的功能,然后逐步加強(qiáng),直到完成一個完整的編譯器。最早的C語言編譯器就是這樣寫出來的。
其次,計算機(jī)語言、軟件和開發(fā)平臺,計算機(jī)語言是軟件開發(fā)的基礎(chǔ),通過計算機(jī)語言才能實(shí)現(xiàn)和計算機(jī)硬件的通訊,實(shí)現(xiàn)對硬件的操作,一般計算機(jī)語言分為低級語言和高級語言,低級語言如:機(jī)器語言、匯編語言,可以直接操作硬件,速度快,但是編寫和理解困難;高級語言如:C、C++、JAVA等,需要通過編譯轉(zhuǎn)換為機(jī)器語言實(shí)現(xiàn)對硬件操作,速度慢,但是更便于理解。
軟件是通過計算機(jī)語言開發(fā)的,通過對計算機(jī)硬件的操作而實(shí)現(xiàn)某些功能的計算機(jī)程序的集合體,如:手機(jī)APP、PC端的應(yīng)用、網(wǎng)站,甚至操作系統(tǒng)等都是軟件。
一般所說的編程軟件都是指的開發(fā)平臺,也被稱為IDE(集成開發(fā)環(huán)境),它的主要作用是通過集成一些開發(fā)常用的環(huán)境或者工具來提升軟件開發(fā)的效率,如JAVA開發(fā)必須的JDK等。
所以說軟件的基礎(chǔ)是計算機(jī)語言,通過計算機(jī)語言結(jié)合一系列的算法從而實(shí)現(xiàn)對計算機(jī)硬件的操作,實(shí)現(xiàn)某些功能,而開發(fā)平臺只是將代碼的編輯過程進(jìn)行了簡化,使其更符合開發(fā)人員的思維邏輯。開發(fā)平臺本身也是一個軟件,也是通過某種計算機(jī)語言來寫的,并且很多開發(fā)平臺都是支持多語言的,如eclipse平臺,除了支持JAVA開發(fā),還支持C/C++、PHP、Python等,甚至可以開發(fā)eclipse自身的插件。
所以總結(jié)一下,編程軟件通過硬件的支持,創(chuàng)造了我們使用的程序和其他的編程軟件。
在以上的分享關(guān)于這個問題的解答都是個人的意見與建議,我希望我分享的這個問題的解答能夠幫助到大家。
在這里同時也希望大家能夠喜歡我的分享,大家如果有更好的關(guān)于這個問題的解答,還望分享評論出來共同討論這話題。
我最后在這里,祝大家每天開開心心工作快快樂樂生活,健康生活每一天,家和萬事興,年年發(fā)大財,生意興隆,謝謝!
計算機(jī)最早的時候是純用的開關(guān)按鈕,就是一開一合的多種組合代表不同的功能,后來使用0和1代表開關(guān)的組合,但是人們覺得不方便記憶,于是乎發(fā)明了匯編語言,就是說利用簡單的英文字母去代表0和1的組合集,隨著計算機(jī)的功能增加和普及,又用發(fā)明了c語言,然后又用c語言和匯編語言發(fā)明了各種各樣的高級語言。
用一句話回答,就是: 編程軟件是從0和1來的。
實(shí)際上,再復(fù)雜再高端的計算機(jī)(或叫電腦)技術(shù),都是基于0和1兩個二進(jìn)制數(shù)碼。 因為0和1 兩個狀態(tài)最容易用電路實(shí)現(xiàn),電平(電壓)高低、電流有無、開關(guān)通斷,等等。其中最常用到的就是半導(dǎo)體管的通斷。
0和1 既可以表達(dá)數(shù)值(比如 2位二進(jìn)數(shù) 00、01、10、11,可以表示0~3,4個十進(jìn)數(shù) 。以此類推,8位二進(jìn)數(shù)可以表示0到255 ,256個十進(jìn)數(shù)。等等);這構(gòu)成計算機(jī)運(yùn)算和處理的數(shù)據(jù)來源,計算機(jī)的各種數(shù)據(jù)(或信息)都建立在這基礎(chǔ)上。
0和1 又可以表達(dá) 2個邏輯狀態(tài)(比如 有、無;高、低;是、否;開、關(guān),等等)。這構(gòu)成計算機(jī)邏輯(邏輯:簡單理解就是因果關(guān)系)運(yùn)算的基礎(chǔ),計算機(jī)的各種功能都建立在邏輯運(yùn)算(或叫邏輯推理)基礎(chǔ)上。
為什么說二進(jìn)制數(shù)碼,而不叫數(shù)字,就是因為二進(jìn)制 0和1 的數(shù)值和代碼(要做的事)兩個屬性。
比如,在某 CPU 中,面對 0010 0100 。如果認(rèn)作數(shù)值,就是十進(jìn)數(shù)36;如果認(rèn)作代碼,就是將隨后的2個數(shù)相加。
怎么區(qū)分?jǐn)?shù)值和代碼,是依據(jù)事先規(guī)定好的位置決定的。按照一定的規(guī)則,規(guī)定要做什么和要用到的數(shù)據(jù)在哪,就構(gòu)成了面向CPU的計算機(jī)基礎(chǔ)指令(簡稱計算機(jī)指令)。
有了計算機(jī)指令,就要考慮如何實(shí)現(xiàn)規(guī)定好的計算機(jī)指令。這需要一整套能夠?qū)崿F(xiàn)各種邏輯和算術(shù)運(yùn)算的電路。這種電路,從1946年第一臺電子計算機(jī)誕生,先后歷經(jīng)電子管(形似過去的長筒狀燈泡,具備現(xiàn)在半導(dǎo)體管功能)、半導(dǎo)體分立元件(三極管、二極管)、小規(guī)模集成電路、中大規(guī)模集成電路、大超大規(guī)模集成電路時代。
無論哪一個階段,無非都是圍繞計算機(jī)如何實(shí)現(xiàn)規(guī)定的指令功能。首先,要選擇計算機(jī)指令的規(guī)格:長度(以字節(jié)計,見下說明)、操作碼(處于指令中首部,定義指令做什么)、操作數(shù)(定義指令需要的數(shù)據(jù)或指明數(shù)據(jù)在哪里)。
一種CPU對應(yīng)一套指令(幾十到幾百條不等),稱為指令系統(tǒng)。以8位計算機(jī)為例,操作碼通常為1字節(jié)(可以擴(kuò)展為2字節(jié))。一條指令操作碼必有(表明做什么),操作數(shù)視情況可以0字節(jié)(用不到數(shù)據(jù))、1字節(jié)、2字節(jié)。
有了CPU 能夠執(zhí)行的指令,就象漢語文有了基本的單字(詞)。編程,最終愿望無非是要用這些字(詞),書寫流芳百世的長篇巨制。但是,且慢!一口吃不成一個胖子! 你必須從識字開始(就是要精準(zhǔn)理解每一條(類)指令的含義,這要舉一反三而后死記);要學(xué)會組詞、造句(編寫簡單程序);要學(xué)會看圖說話、學(xué)會寫作短文(編寫有一些具有應(yīng)用價值的程序);要學(xué)會寫作各種題材記敘文、散文、小說直至長篇巨制。 好了,這就是一個35~40年前程序員的成長歷程。太艱難了!
本人曾用“死去活來”形容進(jìn)階過程:1)廣義的—首先要死死記住指令系統(tǒng)每一條(類)常用指令的精確定義,然后是靈活運(yùn)用指令編寫能完成各種任務(wù)、實(shí)現(xiàn)不同功能的程序。 2)狹義的—熟練掌握這門技術(shù),必然要學(xué)得死去活來。
還沒完! 指令采用二進(jìn)制數(shù)碼或十六進(jìn)數(shù)碼(0~9、A~F)表達(dá),稱為機(jī)器碼(CPU能直接識別執(zhí)行的形式),早期也采用機(jī)器碼編程。但采用機(jī)器碼編程,難認(rèn)難記非常不便(00~FF,256種組合對應(yīng)256條指令,要背下來真心不易。本人倒是用得實(shí)在太多了,不經(jīng)意間就背下來了)。
于是,人們構(gòu)造了能幫助識別與記憶的英文助記符代替機(jī)器碼(或稱機(jī)器指令),只要能認(rèn)三五十個英文單詞,就能較好的記住這些指令。助記符又稱符號指令,它和機(jī)器指令是一一對應(yīng)的,所以運(yùn)用符號指令編程也就意味著運(yùn)用機(jī)器指令編程。 符號指令配套編程所需的輔助符號(稱偽指令)和數(shù)據(jù),構(gòu)成所謂 匯編語言。
只不過,符號指令程序(稱匯編語言程序)要通過一個簡單的匯編程序(傳統(tǒng)術(shù)語)轉(zhuǎn)換成CPU能直接執(zhí)行的機(jī)器指令程序。這個過程,就是最底層的程序設(shè)計(編程),凡是涉及計算機(jī)處理的系統(tǒng)(包含手機(jī)),都必須具備涉及計算機(jī)系統(tǒng)最底層硬件資源(CPU內(nèi)部資源、內(nèi)存、外存、IO接口等)的操作(BIOS:基本輸入輸出系統(tǒng))。
匯編語言固然可以直接作用于CPU底層(匯編語言又稱低級計算機(jī)語言),但畢竟事無巨細(xì)都要面面俱到,太過繁瑣了,編程效率也太低了。于是人們又開發(fā)了許多中級計算機(jī)語言(如C)和高級計算機(jī)語言。 直到編寫出很多很多優(yōu)化后的高效功能模塊(積木塊),定義好通信接口,供使用者直接調(diào)用,實(shí)現(xiàn)相應(yīng)功能。現(xiàn)如今,編程,不過是根據(jù)需求選擇相應(yīng)功能模塊搭搭積木而已(當(dāng)然,要搭得好搭得妙,悟性靈性也必不可少)。只有開創(chuàng)性的大型軟件架構(gòu)(框架)的規(guī)劃設(shè)計才真正屬于高端技術(shù)。
至此,對于題目問題的已經(jīng)有了答案,縱向而言(語言層次的提升方向,而不是擴(kuò)大應(yīng)用面),自底而上,語言層次的不斷提升,都是對編程軟件的貢獻(xiàn)!而編程軟件的不斷凝聚、升華,終將形成自動化、智能化編程氛圍。但是,智能化終究僅僅是集合了人類智慧并且受控于人類智慧。
如果有那么一天,智能化編程導(dǎo)致智能發(fā)散而反制人類,那將何嘗不是人類的悲哀。
附錄1) 長度:以字節(jié)計,1字節(jié)為8位二進(jìn)數(shù)。為方便讀寫常表達(dá)為十六進(jìn)數(shù),4位二進(jìn)數(shù)一組為十六進(jìn)數(shù),如二進(jìn)數(shù)0000~1001及1010~1111 分別對應(yīng)十六進(jìn)數(shù) 0~9 及A~F 。咱們車牌號就是十進(jìn)數(shù)不夠用擴(kuò)展為十六進(jìn)數(shù)的。
附錄2) 世界上第一臺電子計算機(jī)埃尼阿克(ENIAC),誕生于1946年2月14日。ENIAC長30米,寬6米,高2.4米,占地面積約170平方米,重達(dá)30英噸,耗電量150千瓦。它包含了18000 個電子管(形似過去的長筒狀燈泡,具備現(xiàn)在半導(dǎo)體管功能),計算速度是每秒5000次加法。
最終編譯成計算可以直接識別的機(jī)器碼,也就是0,1序列,在存貯在計算機(jī)的地址空間上,地址計數(shù)器讀到地址位了,就執(zhí)行機(jī)器代碼。
高級語言-匯編語言-機(jī)器碼,基本就是這個結(jié)構(gòu)。
現(xiàn)在大多數(shù)編程軟件,也是用編程軟件編寫的,因為現(xiàn)在的編程代碼都是高級語言來了。用高級語言來實(shí)現(xiàn)高級語言,就是這樣了。
計算機(jī)最開始是以0和1為基礎(chǔ),也就是機(jī)器碼,也可以說是機(jī)器語言,以這些機(jī)器碼編出了操作系統(tǒng),簡而言之就是從機(jī)器碼到最早的操作系統(tǒng),再到編程工具,編程工具也是以這些機(jī)器碼從0和1開始的,但是它是在最早的操作系統(tǒng)上完成的。從嚴(yán)格的角度說,機(jī)器語言不算是真正的語言,,但是利用它卻可以開發(fā)出最早的編程工具,也就是匯編語言。所以你應(yīng)該問,最早的編程工具叫什么名字,是用什么開發(fā)出的。
記住:0和1→編程工具,再到到其他軟件或者編程工具,編程工具也是軟件的一種
你這個問題和以前我想過的一個問題很類似:
1.系統(tǒng)都是用類似于pe的引導(dǎo)盤安裝的。2.可以用系統(tǒng)刻錄引導(dǎo)盤。
那第一個引導(dǎo)盤是怎么編寫出來的呢。
問題答案就是用紙帶,上面刻出洞,向計算機(jī)輸入010101這樣的機(jī)器語言編寫的。
最后,計算機(jī)是如何識別0和1的機(jī)器語言呢,是電路上控制的。最原始的計算機(jī)上,基礎(chǔ)的電路都是手工做的。這樣就出現(xiàn)了最原始的操作系統(tǒng)。
有了操作系統(tǒng),就可以開發(fā)更復(fù)雜的軟件和系統(tǒng)了。
早期,最困難的時期造就最厲害的程序員,最厲害的程序員創(chuàng)造了最厲害的開發(fā)工具,最厲害的開發(fā)工具極大的方便了開發(fā),結(jié)果造就了垃圾程序員。
10
回答10
回答5
回答1
回答2
回答3
回答6
回答10
回答1
回答5
回答