Update faq_syntax.md

This commit is contained in:
Cai Bingjun 2022-09-09 23:02:08 +08:00 committed by GitHub
parent d020e19e93
commit 9783813ae0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,11 +4,14 @@
## 當我們有所有權系統時,為什麼要與 GC 共存?
因為 Erg 推出所有權系統的動機並不是為了 Rust 那樣的“不依賴 GC 的內存管理”。最初,由於 Erg 是一種語言,目前使用 Python VM因此最終仍使用 GC。 Erg 引入產權系統的目標是“可變狀態的局部化”。在 Erg 中,可變對象具有所有權概念。這是根據共享可變狀態容易成為 bug 的溫床,甚至是類型安全性的侵犯(詳見)來判斷的。
Erg 引入所有權系統的動機不是像 Rust 那樣“不依賴 GC 的內存管理”。
首先Erg 目前唯一可用前端編譯Erg為Python字節碼因此使用了 GC。
Erg 所有權系統的目標是“可變狀態的本地化”。 Erg 有一個附屬於可變對象的所有權概念。
這是因為共享可變狀態容易出現錯誤,甚至違反類型安全(參見 [此處](../syntax/type/advanced/shared.md#SharedReference))。這是一個判斷決定。
## 為什麼類型參數周圍的括號不是 <> 或 []
## 為什麼類型參數要大括號 || 而不是 <> 或 []
因為在和中會發生語法衝突。
這是因為 `<>``[]` 會導致語法衝突。
```python
# []版
@ -46,9 +49,9 @@ assert S.i == Int
## 為什麼 Erg 沒有異常機制?
在許多情況下,錯誤處理類型是更好的解決方案。類型<gtr=9/>是一種錯誤處理方法,通常在較新的編程語言中使用
因為在許多情況下,使用 `Result` 類型進行錯誤處理是更好的解決方案。 `Result` 類型是相對較新的編程語言中使用的常見錯誤處理技術
在 Erg 中,運算符使你可以在不太注意錯誤的情況下編寫
在 Erg 中,`?` 運算符使編寫無錯誤
```python
read_file!() =