Go 語言的設計為什麼沒有虛擬機器?

時間 2021-05-12 01:07:42

1樓:Davie

如果Golang還是要設計乙個類似JVM的虛擬機器,就變成了比著別的語言來做乙個新語種,名字叫Golang了。那麼Golang還有必要被發明嗎,學起來還需要付出時間成本,得不償失。

正確的理解應該是:Golang的創造者在Google內部創造出這門語言來是,就是衝著極簡原則來的,省略一切繁雜冗餘的設計,強調高效和簡潔。這才有了現在我們看到的Golang語言。

2樓:2gua

Go剛開始想要乙個更好更簡單的C艹,所以上VM就會極大制約自己。

然而人算不如天算,Go沒法替代C艹,可卻也贏得了一席之地,特別是在服務中介軟體領域。

因為Go的極簡原則及關注效能,Go也不支援泛型。不知道用不用channel跟VM嘛關係?併發的幾種模式是設計上的理論問題,實現則是另乙個路子了。

3樓:靈劍

不太明白你的意思,使用pid還是使用channel本質上來說跟是否使用VM是無關的。

VM主要是為了引入中間位元組碼,在VM中執行VM指令集而非機器碼,通過解釋執行或者JIT進行。目的以提供動態特性或跨平台為目標。這些目標中沒有任何乙個是Go的設計目標。

4樓:銀杏林守望者

虛擬機器之前主要的設計目的是在OS上再提供乙個統一的執行環境,解決跨平台等問題。

虛擬機器+語言+SDK可以幾乎不用關注作業系統提供的介面實現功能。

go是一種小而美的,不相容c的「c++」,設計思路是解決c++的痛點,滿足google在linux上軟體開發的需要的獨特語言。不使用虛擬機器是可以理解的。

5樓:獨孤劍

同意圓胖腫的大部分看法。

順便說一下,看乙個工程師架構和設計能力的好壞,就看他敢於「舍」的部分能否做到足夠乾淨利落。因為敢於「取」實在是太廉價和容易思維偷懶了。

6樓:李晨曦

比如有了虛擬機器,輕量級程序之間就可以通過pid直接通訊了,不需要管道不是很懂這句話的邏輯

Go 不允許我們獲取 goroutine 的 gid 是因為 Go 的併發模型是 CSP,不是 Actor

虛擬機器有很多事情可以做,go為什麼當初設計裡沒有呢?

建議修改題目,列出其它題主認為只有虛擬機器可以做到的事

7樓:圓胖腫

瀉藥因為go發明的初衷,主要是用來解決Google自身面臨的問題尤其是它們系統後台面臨的問題,簡單說就是c++太過於複雜導致他們覺得,嗯還是搞乙個語言來替代c++做他們的後台比較好以及它打算如何解決這個問題

也就是說,你考慮的這些問題,可能對於Google來說,它不是個問題就比如為什麼go不搞乙個圖形引擎啊?因為Google本身不是做遊戲的就比如為什麼go不允許我們碰執行緒啊?因為Google後台系統又沒用到actor model,它沒有這個需求

所以問各種為什麼,考慮到go產生的環境,上下文以及它要解決的問題,就大概能理解了

go從本質上說,並不是乙個為了普羅大眾的需求而發明出來的語言主要是為了解決Google自身後台的問題,你在用這個語言的時候,應該先對比一下

你面臨的環境,是不是跟Google後台當時面臨的環境類似如果不是的話,go可能不是特別適合你

這種情況下,你用dart可能都比用go合適

KVM 的 基於核心的虛擬機器 是什麼意思?

雲天明 高票說的對啊,hypervisor分type 1和type 2兩種,type 1是原生hypervisor,在任何核心啟動之前就開了vmx指令的,從開機自己就是ring 0,最著名的的type 1應該是vmware esx吧。type 2是在host啟動之後啟動的,屬於後入式,需要使用執行特...

虛擬機器的出現是為了解決什麼問題?

你說的是哪個虛擬機器?是JVM 之類的高階語言虛擬機器 HLLVM 還是像VMware,KVM之類的虛擬機器?兩者出現的目的雖然有些不同,但作用都差不多 做一層抽象與封裝,讓使用者忽略底層繁複的細節,專注於自己的目的 1.提供乙個可控的沙盒環境,可以用來作實驗。比如測試個病毒什麼的。2.在一台機器上...

容器雲端的部署方式與虛擬機器有什麼區別嗎?

Paco Li 虛擬機器虛擬出一套硬體環境,在此基礎上跑完整的作業系統,上面是執行時環境,再上面是應用。容器直接就虛擬出來執行時環境,共享系統核心,所以比虛擬機器方案輕量級得多。虛擬機器的記憶體幾乎是固定分配的,容器通過cgroup限制記憶體使用,在限制以內所有容器共享系統記憶體。所以容器比虛擬機器...