為什麼像 Java C C 這樣的靜態語言會比 Python Ruby 這樣的動態語言流行得多?

時間 2021-05-11 16:20:44

1樓:Macsnake

動態語言結合FFI是很不錯的選擇,C/C++的效能優勢在計算密集,io密集,裝置相關性強的領域是無可替代的。但它們也是刻板的語言,在語言表達能力方面則完全不是動態語言的對手。

2樓:ijrys

咱感覺py也挺流行的

動態語言的執行是要基於靜態語言寫的引擎的吧(哪怕你用py寫了個js引擎,最終不還是c++寫的py引擎去執行)

他們各自都有不可被對方替代的領域(比如靜態語言適合作業系統這類的底層的支援,動態語言在跨平台,快速開發and維護上有優勢,所以現在誰也替代不了誰)

(順,js個aji,CSS個大aji

(再順,worinimeifu的js

3樓:

我現在就有乙個問題,用python寫了乙個東西想編譯成exe,試了py2exe和pyinstaller都不行,誰來給解決一下(逃

4樓:moby

兩種不同型別語言,一類是編譯型程式語言,一種是解釋型指令碼語言,兩者的應用場景,效率,可靠性,健壯性都不同。編譯型程式語言通常功能更全面,應用領域更廣泛;指令碼語言通常語法更簡單靈活,通常專注於某一領域的應用。

5樓:當星星划落

反駁高票回答中對python動態型別的吐槽。python也是可以使用靜態型別的。

在Python 3.6中,你宣告乙個這樣的變數型別:

variable_name: type

如果您在建立變數時分配初始值,那麼這麼簡單:

my_string: str = "My String Value"

宣告乙個函式的輸入和輸出型別,如下所示:

def function_name(parameter1: type) -> return_type:

這很簡單 - 只是對普通Python語法的乙個小小的調整。但是現在,型別被宣告,看看當我執行型別檢查器會發生什麼:

$ mypy typing_test.py

test.py:16:

error: Argument 1 to "get_first_name" has incompatible type Dict[str, str]; expected "str"

沒有執行該程式,它知道第16行沒有辦法工作!您可以立即修復錯誤,而無需等待使用者在三個月後才能發現。 如果您正在使用像PyCharm這樣的IDE,它會自動檢查型別,並在您打到「執行」之前顯示錯誤的地方:

宣告str或int變數很簡單。當您使用更複雜的資料型別(如巢狀列表和字典)時,令人頭痛的事就會發生。幸運的是,Python 3.

6的新語法不是太糟糕 - 至少不是事後新增型別的語言。

基本模式是從中匯入複雜資料型別的名稱typing模組,然後在括號中傳入巢狀型別。

您將使用的最常見的複雜資料型別是Dict,List和Tuple,以下是使用它們的方式:

from typing import Dict, List

# A dictionary where the keys are strings and the values are ints

name_counts: Dict[str, int34;Adam": 10,

"Guido": 12

}# A list of integers

numbers: List[int] = [1, 2, 3, 4, 5, 6]

# A list that holds dicts that each hold a string key / int value

list_of_dicts: List[Dict[str, int34;key1": 134;key2": 2}

]元組有點特別,因為它們可以分別宣告每個元素的型別:

from typing import Tuple

my_data: Tuple[str, int, float] = ("Adam", 10, 5.7)

您還可以通過將其分配給新名稱,為複雜型別建立別名:

from typing import List, Tuple

LatLngVector = List[Tuple[float, float]]

points: LatLngVector25.91375, -60.15503),

(-11.01983, -166.48477),

(-11.01983, -166.48477)

]有時您的Python函式可能足夠靈活,可以處理幾種不同的型別或任何資料型別。你可以使用Union型別以宣告可以接受多種型別的功能,並可以使用Any接受任何東西。 Python 3.

6還支援您可能在其他程式語言(如通用型別和自定義使用者定義型別)中看到的一些奇特的靜態型別。

6樓:Weibin Wu

寸有所長,尺有所短。

現在這個時代,程式語言百花齊放。現在要是某個人說他(參與,主導,獨自)開發的專案,全部只用到了一種語言,則可以斷定TA開發的肯定不是什麼大系統。

在合適的領域用合適的語言,事半功倍。

7樓:王忠家

最早使用計算機進行大規模計算的應該是石油勘探領域了,你想想算1年才能算完的作業,如果能用效率高的變成語言提高一倍的效率,一年的時間就變半年,誰會敢用py做資料處理啊,都是C語言或c++

8樓:淘李福

這個問題如果放在幾年前,估計就要倒過來問了......

哪個工具好,要看解決的問題是什麼,最近什麼技術流行,只能說明這個技術適用的問題域變成了普遍問題而已。

9樓:大姚

從流行角度來說我認為是因為語言歷史問題,python和ruby在之前並沒有得到大範圍的推廣,就拿招聘來說,乙個公司有人力需求時,很難招到合適的python程式設計師,但是很容易招到合適的c,c++程式設計師,應該考慮專案成本和後期人員離開風險

為什麼像《CLANNAD》 《AIR》這樣的動畫非常難推薦出去?

因為受眾群體不同了,這屆觀眾靜不下來看這種慢熱的作品,像我這種劇情黨,剛開始看的時候都被前面幾集勸退好幾次,後來一天看完 王貳曉 恐怕還是因為慢熱和畫風勸退,我見過許多因為key社樋媽臉而破口大罵的人,是真的破口大罵。不過我認識的字幕組壓制組的人裡一堆key廚啊不會安利不出去因為人家都看過2333 ...

為什麼像DNF這樣的遊戲也有噴子?

李偉 網上動動手指就能發洩心中怨氣的方式,門檻低,風險低,無關利益。有這麼簡單的發洩方式,你用不用?所以說黑名單是個好東西,下次再遇見也不用抱怨了,老想著心裡還不痛快呢,你直接回他一句 嗯,你說的對。畢竟中國有13億人口,拋去不上網的,你覺得噴子多不多。 書生 你問我為什麼DNF也有噴子?作為乙個十...

為什麼Java內部類要設計成靜態和非靜態兩種?

王二 除了邏輯和可讀性上的需求之外。也實現了單例模式下對資源的優化。比如 Math 裡的 RandomNumberGeneratorHolder 就是靜態內部類。 BWH.Steven 我們所知道static是不能用來修飾類的,但是成員內部類可以看做外部類中的乙個成員,所以可以用static修飾,這...