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