2010-04-09 79 views
0

我正在設計和重新思考與彙編程序相似的低級解釋編程語言。語言設計:結合Gotos和函數

我很快越過功能/循環/ goto的決定,問題就來了,並認爲,而像whilefor循環會太高層次,不合宜的,goto方法是等級太低,難以維護和一般邪惡的一次。 像你一樣的函數從大多數具有返回值和參數的語言中都知道它們不適合語言的概念。

於是,我就一個函數和一個轉到它能夠

  • 遞歸
  • 高效循環

之間什麼事情弄清楚後一些思考,我想出了子程序的想法:

  • 它們有一個像功能一樣的開始和結束
  • 他們有一個名稱,但像一個goto沒有參數
  • 你可以進入一個連跳和結束前再出去它與return(不給回任何結果,只會停止子程序)
  • 處理就像正常的代碼 - >像轉到

所以我想知道全球範圍:

  • 以上是好想法? (dis)的優點是什麼?
  • 會有更好的功能和goto組合,甚至是一個全新的想法嗎?
+0

所以你基本上實現GOSUB? – David 2010-04-09 15:18:23

+0

你的意思是來自BASIC的東西?可能的,但我不知道GOSUB是否支持遞歸。 – sub 2010-04-09 15:18:45

+0

如果你的子程序沒有參數或變量,那麼關於遞歸的問題是無關緊要的。 – PauliL 2010-04-09 15:35:22

回答

0

上面的想法是否好?

或者至少直到你給什麼問題你正試圖通過設計一種新的語言解決的一個更好的解釋。

什麼是(dis)優點?

沒有功能抽象,沒有遞歸,只通過共享可變狀態編程。非常薄弱的​​構成原則。難以用於人類程序員,並且沒有意義作爲編譯器目標。


要想在某個地方找到像這樣的項目,必須有一個目標。如果你的目標是學習某些東西,那麼你最好學習一些優秀的語言,並試圖弄清楚你可以竊取什麼,你可以結合什麼,或者你可以實現什麼。如果你有一個真正的問題需要解決,而且它不能用標準的彙編語言來解決,那麼有趣的是—告訴我們它是什麼。

你可以嘗試使用谷歌搜索「便攜式彙編語言」,看看你有沒有什麼有趣的東西。

0

我認爲,當你在裝配層面時,GOTO會停止變得邪惡,並開始只是程序實際上如何工作工作

但無論如何,你的子例程是否需要參數?即使他們沒有,你的商店如何註冊狀態以避免遞歸溢出?

+0

我用跳轉位置的堆棧,所以解釋器知道子例程後返回的位置。但是,爲了避免內存佔用,緩慢和溢出,子程序調用自身 - >循環時不使用堆棧。 – sub 2010-04-09 15:24:37

+0

Sub,如果你在子程序自己調用時沒有存儲返回地址,它不是真正的遞歸。通過使用「遞歸」來實現循環沒有意義。改用goto。 – PauliL 2010-04-09 15:40:22

0

要實現的子程序只是一樣GOSUB在Basic或CALL在大會。

遞歸僅在遞歸算法中使用時纔有意義。這需要具有參數,局部變量和返回值的函數。

然而,在一些簡單的腳本語言,只有具有全局變量,有PUSHPOP存儲在堆棧(就像寄存器推和彙編語言彈出)變量指令。這些可以用於局部變量和遞歸的低級實現。

我在Rosetta Code的一些Vedit宏語言例子中使用了這種方法,例如參見Towers of HanoiBezier curve