Closed zaoqi-unsafe closed 5 years ago
新發明特性,設計列表
停機問題的避免
请先在https://github.com/program-in-chinese/overview/issues/106 说明怎样算"避免". 之后再讨论其他的.
@nobodxbodon 通過允許編譯解釋器分步的替換沒有值的表達式。 一般的,沒有值是在n次替換後,如果不繼續替換,永遠得不到結果。 實現這個替換可以留到很久以後,因爲比較不重要,難度有點大。
@nobodxbodon 在a=b,b=a等情況時,替換可以產生幾種不同的結果,所以對語言的定義有一些影響。
@nobodxbodon 說明完畢
如果停機問題"被解決",那麼根據模糊的定義,下面定義的(x)
會被替換。所以和停機問題不同。
(define (x)
(if (run-forever? x) '() (x)))
@zaoqi-unsafe
通過允許編譯解釋器分步的替換沒有值的表達式
如何判断一个表达式"没有值"? 举个例子?
我已經說了
實現這個替換可以留到很久以後,因爲比較不重要,難度有點大。 一般的,沒有值是在n次替換後,如果不繼續替換,永遠得不到結果。
@nobodxbodon
@zaoqi-unsafe
實現這個替換可以留到很久以後,因爲比較不重要,難度有點大。
意思是打算把这个特性暂时跳过?
沒有值是在n次替換後
"替换"的意思是? 这个n怎么取?
@nobodxbodon 替換爲錯誤。 n是任意自然數
@nobodxbodon 替換爲錯誤。 n是任意自然數
@nobodxbodon 替換爲錯誤。 n是任意自然數
@nobodxbodon 替換爲錯誤。 n是任意自然數
@zaoqi-unsafe 先从简单例子开始吧. 如何判断下面是死循环?
while(true) {
;
}
@nobodxbodon 核心語言是lazy函數式的。
是打算把这个特性暂时跳过
實現此特性的方法足夠寫一個什麼樣的Paper,然後發表在什麼什麼地方
這種例子通過直接比較代碼可解決
@zaoqi-unsafe 可否将列表中其他不打算在寒假期间完成的先删去? 再对剩下的每项加些说明(或举个例子), 以便继续讨论?
停機問題的避免 現在是語言文檔中的文字,不需刪去。
文本的表示中允許沒有計算完的東西 是這種東西:(偽Scheme代碼)
(不是被eval的東西 $(() (+ 1 1)))
等於
(不是被eval的東西 2)
核心語言是lazy無副作用的。某些情況下需要這個特性。
macro是值:
macro是一種非基本數據類型。
偽代碼(new-data 'macro '(f))
。f是一個函數,類型為Env, ... -> Any
。返回的為已經計算好的,不會再eval。
用一種與使用函數不同的語法使用macro。
優化可用爲平臺定製,並且不混在實現裏
編譯解釋器可以優化特定的代碼,因為自然數等東西不是內建的。也允許其他人寫的優化。在代碼更新時,優化自動失效,不會因此產生bug。
無政府的包管理器
這是一個包,可以選擇的一個方案,非內建。 依賴以某種結構直接嵌入代碼里。 編輯器可以自動隱藏依賴的代碼。會實現一個工具自動更新依賴的代碼。 需要無政府的包管理器的一個原因是在某些情況下(航天等),通訊需要很多時間
這是已經存在於動態作用域語言的設計
比如某些lisp的(lambda ...)
是'(lambda ...)
核心語言沒有動態靜態作用域。沒有提供方便的實現動態作用域的特性,靜態作用域被包
實現。
@nobodxbodon 部分没有值的情况已经可以被检测到
@zaoqi 尚未找到相关论文, 但有不少讨论, 如这里的思路:
For example you could write an algorithm that returns "Yes, it terminates" for any program which contains neither loops nor recursion and "No, it does not terminate" for any program that contains a while(true) loop that will definitely be reached and doesn't contain a break statement, and "Dunno" for everything else.
请问你的功能有哪些不同?
这样设计不影响正常算法的书写,也可能可以使解释器能做到总是停机
部分情况是在化简表达式过程中发现循环
在force_all函数里
@zaoqi
如果确定要将"可以判断某些无法停止的程序"作为一个特性, 请先说明可判定的程序&输入值范围, 最好有实例(伪代码亦可).
quora链接的例子如下:
Consider the following simple string-rewriting algorithm:
rules = { 'a':'bc', 'b':'a', 'c':'aaa' } n = int(input()) S = 'a'*n # a string of n 'a's while len(S) > 1: S = S[2:] + rules[S[0]]
It doesn't get much simpler than this: in each step, remove two letters from the beginning, and append a few new letters at the end. Here's what the program does for n=10 if we print S after each iteration of the while-cycle:
aaaaaaaabc aaaaaabcbc aaaabcbcbc aabcbcbcbc bcbcbcbcbc bcbcbcbca bcbcbcaa bcbcaaa bcaaaa aaaaa aaabc abcbc cbcbc cbcaaa caaaaaa aaaaaaaa aaaaaabc aaaabcbc aabcbcbc bcbcbcbc bcbcbca bcbcaa bcaaa aaaa aabc bcbc bca aa bc a
@nobodxbodon 是"没有值",核心是函数式。
替换为错误会影响语言的定义,所以需要写出来。
我的那个解释器现在可以检测
^(#(化滅 (甲) (甲 甲)) (#(化滅 (甲) (甲 甲))))
这种
^(#(化滅 (甲) (甲 甲)) (#(化滅 (甲) (甲 甲))))
这种
可否用等价的scheme代码演示? 否则新用户估计很难理解.
替换为错误会影响语言的定义,所以需要写出来。
不理解. "替换为错误"是编译器对代码进行的转换? 对程序输出有何影响? 又为何会"影响语言的定义"?
(define (f x) (x x)) (f f)
@nobodxbodon 没有值和那种错误 本来是不等价的
(define (f x) (x x)) (f f)
仅看此例猜不出范围. 是"所有不能收敛的递归"? 自身递归还是可以多函数互相调用的递归? 参数必须是函数本身还是可以是任意值? 如楼上所言, "请先说明可判定的程序&输入值范围"
(define (f x) (x x)) (f f)
仅看此例猜不出范围. 是"所有不能收敛的递归"? 自身递归还是可以多函数互相调用的递归? 参数必须是函数本身还是可以是任意值? 如楼上所言, "请先说明可判定的程序&输入值范围"
@nobodxbodon 語言本身的標準沒有限制。 現在的實現可判斷化簡過程中出現的循環
@nobodxbodon 沒有給語言使用者判定,是替換(解釋)沒有值的表達式為錯誤
這里的值是The Little Typer中的value
你真是愚昧无知到了不可理喻的地步,不仅在我斥责后还来骚扰我,而且竟然还骚扰Dan Friedman。
听着:
你的issue不会被reopen也不应该被reopen。你应该就此彻底闭嘴,认真读书,反省你的愚昧言行,将现在的错误想法彻底抛弃。
@bctnry 我可能確實沒有說清楚 替換是由編譯解釋器實現的,使用者不能直接選擇。 我只要可計算的東西能和之前一樣寫出來,並且還可以計算,不需要你說的“Turing完全”。
@bctnry 你認為
* 假如你做出来了,你的语言就一定不会是图灵完全的,
那麼肯定會影響語言本身,所以需要寫出來
@bctnry
你口口声声说将「没有值」的部分替换成错误,但是「不停机」就一定「没有值」,所以你一定会需要解决不停机的情况,因此你是在用能解决一个更为困难的问题的方法解决一个不那么困难的问题,而这两个问题在图灵完全的情况下都是绝对不可能解决的。
(define last-try (lambda (x) (and (will-stop? last-try) (eternity x))))
這裡(will-stop? last-try)
和 (last-try '())
都是沒有值的東西,導致我暫時找不到證明完整的算法不存在的方法
@xieyuheng
好多人沒讀懂,好像有點奇怪:
@bctnry 和Chariette XuQQ:3150038535
和@nobodxbodon等人
@zaoqi 这个特性, 如果是学术探索, 需要对目标和解决方案进行严谨的描述, 最好引用参考资料, 阐述与前人工作的不同之处; 如果是一个工程特性, 是为了推广而给潜在语言使用者的看的, 最好尽量易懂地将它的好处与应用范围描述出来, 并用实例进行演示, 使对语言不了解的人可以清楚了解它的用法.
@zaoqi 你车轱辘话来回说,还敢怨别人没看懂???
與github.com/the-language/js正在重寫。希望能在下個學期開始前完成 文檔未開始寫。 產生了幾種新的語言,它們的單詞將會可以顯示爲各種自然語言的。