2012-12-25 43 views
3

正如comments on this question討論的offshot。我想問一下副作用和深奧功能之間的關係。特別是:副作用和深奧的語言

1)你能使用ook/brainfuck訪問GPU(並導致圖形副作用)嗎?

2)可以讓您使用空白系統調用? 3)基本上歸結爲,你可以使用任何圖靈語言完成所有常見的副作用嗎?

4)獎金問題:如果可能,你可以提供一個鏈接到一個工作示例/代碼?

+0

這不可能被回答。 'X'語言是否允許你捅GPU,或者完全取決於運行時的實現,而不是某種總體原則。如果空白語言提供調用OS的約定,則可以調用它。如果沒有,不是。 – bmargulies

+0

@bmargulies是不可能知道空白是否提供調用OS的約定?這不是某種語言正式定義的一部分嗎? (語調在文本中很難,這不是一個悲哀的問題),但如果是這樣,這並不意味着問題1和問題2有絕對是或否的實現依賴的答案嗎? – Oren

回答

6

bmargulies的評論與一般問題有關。從技術上說,Turing-complete意味着該語言可以用來模擬單張圖靈機。實際上,這意味着你可以在Turing完成語言Y上模擬Turing完成語言X上的任何計算。但是,你所談論的所有事情都不是計算 - 它們是系統接口。要在特定系統中執行特定的事情,您需要有一個界面。這些語言不提供通用接口;他們提供了一些系統調用,我們將在下面看到。

讓我們用一個比喻弱。考慮航天飛機。航天飛機的每次計算都可以用你的iPhone完成(可能不及時);但它需要一個專門的系統來實際發射火箭和斷開助推器。你可以爲iPhone輸出一個應用程序,其輸出是宇航員的指令,如「火箭右舷火箭10秒!」並以這種方式飛行航天飛機。但是你不能只將iPhone插入航天飛機的碼頭。

所以,如你所料,回答您的所有問題分別是:

  1. 「不可以,但你可以,如果你想破解它。」
  2. 「不可以,但你可以,如果你想破解它。」
  3. 「不可以,但你可以,如果你想破解它們。」
  4. 「去破解它!」

whitespace是一種解釋型語言,除了讀寫字符到控制檯外,該語言不提供任何系統集成。 (也不會產生傳統的彙編代碼,您可以根據原始問題輕鬆整合到C程序中,您需要使用系統調用來從C程序運行解釋器並將輸出返回到您的過程中。 )語言和解釋器是開源的,所以在技術上你可以修改語言以通過解釋器支持通用的OS調用。

Brainfuck實際上編譯,所以理論上你可以更容易地將其包括在其他程序中,如果你感覺俏皮。像空白一樣,它只支持讀寫字符。這將是有趣的(也許值得一篇論文)來修改Brainfuck以支持完整的系統調用。

這是編譯器的源代碼。有它:

希望幫助!

+0

+1在完全證明它錯誤之前(至少不可能回答部分),積極提及bmargulies的評論。精彩的答案,它有很大的幫助。謝謝! – Oren

1

你總是可以編寫一個包裝來解釋ook/brainfuck/whitespace /等程序的輸出,作爲訪問gpu/make系統調用/ brew咖啡/等等的命令。

但是,不,沒有內置的機制來做任何這些腦袋的事情,我不相信你提到的任何其他語言都有。作爲「圖靈完備」只是意味着該語言可以在理論上,計算任何一個正常的計算機可以計算。這並不意味着語言必然提供了一種機制來執行計算機可能具有的任何非計算性功能,如繪製圖形,播放聲音或者實際上正在沖泡咖啡。