程式語言漫談
程式語言是電腦的符號,是人與電腦溝通的語言。我們學習新的程式語言時,我們應該觀察這門語言的那些特性呢? 《SICP》一書的作者列舉了一下三點: * primitive elements. (基本元素) * means of combination.(組合手段) 以上3個特性,基本上涵蓋了所有程式語言的特性,也是語言設計者從開始就要考慮的。我對這三點的理解:primitive elements表示語言的基本符號(基本資料型,關鍵字等)也就是詞法部分。 means of combination利用基本元素透過組合的過程建構大型程式的手段,不同的語言提供的組合手段是不同的。 means of abstraction表示抽象,抽像是解決軟體複雜度的重要手段,讓軟體的可讀性,可擴展,可重複利用等提升。下邊會從組合元素和抽象手段來對比語言特性。
二、 組合手段
彙編語言:算是最簡單的詞法和語法形式了,被稱為低級作語。彙編器透過直譯的過程將彙編程式碼翻譯為native code(cpu指令集)。 提供的primitive elements有:數字,字符,-, ,*,/ , case,if, break, go,指令等基本元素;透過這些元素組合成計算機執行序列符號。 java語言自稱是物件導向語言,所以比c語言更進一步,透過強大的類型系統手段來組合屬性和方法。 go語言和ML語言非常相仿,“介面”,"高階函數“,”閉包“,"duck type","返回多值”,並提供goroutine等組合。 prolog語言完全是模式匹配的邏輯語言。他的思想基於:世間所有的定理都給予一個最簡單的定理推理而來,就像數學的基礎是“1 1=2”,然後才能推導出“萬有引力”,“相對論”等定律。 lisp方言以s-expression(著名的S表達式)來組合資料和函數。在lisp中不區分資料和函數,一切皆為資料。 題外話:lisp方言是和圖靈機的思想一脈相承的,編碼的時候完全感受不到電腦體系結構。而其他語言更多的是馮·洛伊曼的計算,存儲思想而設計,要么是“堆疊”結構,要么是“寄存器”結構。 物件導向程式設計:基本上隱藏了電腦的細節,開發者透過物件來抽象化特定業務。但嚴格意義上來說java也屬於imperative-lang的範疇而且都是傳值呼叫。相比來說,python,ruby更面向對像一些,python融合了物件導向和函數式程式設計範式,更接近自然語言些。 以lisp為代表的函數式語言:以函數為基本且唯一的抽象;common-lisp也基於巨集發展了一套object-oriented的程式設計方式。我比較傾向於函數式程式設計理念:函數的無副作用(不用考慮線程安全,特別是對於變態的Haskell),高階函數,閉包,lambda等。 計算機是結構化的,堆疊上一個二進位位元的錯誤就會導致溢出,bus等錯誤。所以語言層面的自由得益於編譯器或解釋器的功勞。例如java,c等語言有很強的編譯時類型檢測機制,強類型的好處驅使編碼人員寫出很少有語法,語意錯誤的程式碼,對IDE的支援也便捷,是大型技術團隊的合作基石。 弱型別語言讓我們獲得了自由(不需要型別資訊),讓程式設計師少敲了許多鍵盤。自由是有代價的,編譯器或解釋器中內含類型推理(infer type); (類型推理是利用歸一方法,基於上下文中的變量顯式類型,操作符,返回值等信息,利用棧和逐漸替換的過程來推到出類型。所以弱型別語言結構化不強,編碼時很難確保型別無誤,IDE支援較難。但是透過一些分析器可以不斷的偵測語法,語意錯誤,相當於達到了強型別語言的IDE效果。近幾年語言的方向朝著逐漸脫離電腦體系結構,朝著自然語言方向在演進,程式設計師像藝術家一樣用程式碼自由描繪。 五、編譯/解釋 java語言是解釋型還是編譯型的呢? 這個很難說,從java source code -> class byte code 的過程式javac編譯器的過程。但是byte code 在jvm上執行的過程可能是解釋執行也可能是編譯執行的。解釋型和編譯型的內部都遵從編譯原理的過程:詞法分析-> 語法分析->語意解析 -> 編譯器後端-> native code的過程。 但有各自的優點: 解釋器:載入code速度快;解釋器需要維護運行時上下文等資訊。所以載入必要的程式碼,片段解釋執行。但是對於相同的程式碼都經過編譯過程就很多餘,造成時間浪費。 編譯器:執行速度快速。而且編譯器後端也更容易優化中間程式碼,因為優化過程式一個結構化流程:往往需要遍歷整個中間程式碼,整體最佳化程式碼,提高運作效率。 hotspot-jvm結合了每個解釋和編譯的優點;最先解釋執行過程,如果方法被頻繁執行,而且達到熱點(hotspot),jvm會啟動編譯過程,將次碼編譯為native-code,然後快取起來,下次的呼叫直接執行即可。 hotspot-jvm執行基於堆疊指令bytecode, 這一點也是基於跨平台的考慮而犧牲了寄存器指令; (而基於android作業系統上的dalvik虛擬機是基於寄存器指令的);
所以說,語言的設計往往是權衡過程;獲得的「自由」越多,"犧牲「也更大。
六、 總結: 最初從圖靈為了解決萊布尼茨提出的:是否存在一個通用模型來解決一切計算任務這個命題,發明了圖靈機理論。到馮洛伊曼模擬人腦神經元思考過程產生第一台基於記憶體,運算器的電腦ENIAC,至今,電腦硬體技術並沒有實質的變化,只是隨著摩爾定律的破滅,人們發展了多級高速緩存,多核心,多cpu技術來支撐越來越大的運算任務。 在這個過程中,隨著人們對邏輯學,符號學,演算法的不斷研究,用來和電腦互動的語言也越來越抽象和豐富。我們透過這個形象的符號來抽象化時間和空間,透過這個形象的符號來解決軟體的複雜性問題,透過這個符號來和電腦傳達我們的思想。 由於上傳附件及文字限制,有時部分圖片、文字可能顯示不了,詳情請見:http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000725&idx=2&sn=fde9b217a000000725&idx=2&sn=fde9b2 rd
歡迎大家一起交流。 掃描以下二維碼,獲取更多更精美文章! (掃碼關注有意不到的驚喜的哦!!) ![]() 關注我們微信訂閱號碼( uniguytech100) 與服務號碼(uniguytech),獲取更多更精美文章! 也歡迎加入【大家技術網討論QQ群】,群號:256175955,請備註你個人的介紹!讓我們一起聊聊it的那些事吧! |

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。
