- 論壇徽章:
- 2
|
回復(fù) 54# starwing83
前面那一堆,除了const fold,還是沒說出與lua的差別。
>> (define (foo a b) (+ a b))
lua里面 function(a,b) return a+b end
也只是固定了一個OP_ADD而已,也就只是知道它對兩個number會數(shù)字+, 對有元表的看元表定義。 具體會做什么依然不清楚。
(defun foo (a b) (funcall #'+ a b))
(define foo (let ((+ +)) (lambda (a b) (+ a b))))
取出+的定義,對兩個number(fixnum/bignum/real...)會數(shù)字+, 對其他無定義。 +的function cell不再影響foo函數(shù)。
>> 惟一的辦法就是不允許修改這些值,那其實和lua(以及l(fā)ua ast)沒啥差別了。
這段,連著后面那樓
>> 說到靈活性,你能假設(shè)沒有人會有需求去改變+么?也許有也許沒有,照你的理論這個就得支持,不然就是“限制程序員”,我的意思是,這里面的確需要有個度。如果說只要“有可能”會用到的都要支持,那語言就很難在語義和實現(xiàn)上取得平衡了。
一起回復(fù)了。
有差別,而且你怎么想不到呢…… 支持了又不是說所有地方就必須都有這種靈活性……
你這等于是在說: C/C++支持指針運算,支持類型轉(zhuǎn)換,沒有限制程序員, 所以是不安全的。 但其實良好的C/C++程序里這些不安定因素只在很小范圍內(nèi)。
那個cl反匯編的例子, 沒說add以外的函數(shù)中的+的行為全都被固定了啊, 也沒說不允許const fold啊, 只是那個例子沒有掩飾而已。
你怎么和327一樣呢…… 要么C,要么C++了就必須全private…… 不是的,private也是在你需要時才用的。
>> 惟一的辦法就是不允許修改這些值,那其實和lua(以及l(fā)ua ast)沒啥差別了。
lua有辦法讓foo函數(shù)告知編譯器: 我這函數(shù)就用內(nèi)建+了, a,b就只支持整數(shù)了, 給我優(yōu)化到addl?
>> lua照樣可以生成lua代碼,而且根本不難。lisp除了語法和編譯器支持以外,看不出什么優(yōu)勢。操作程序表只是在提取信息而不是構(gòu)造程序方面有優(yōu)勢。然而只要有了ast,連這種優(yōu)勢也沒了。
什么叫這種優(yōu)勢也沒了?這也不是第一次與你說這個了: 能獲得ast的語言早就有了, 為什么在元編程(code transformation)方面依然沒超過lisp?
lua的宏,等它出來之后再說好嗎?這只是說lua有這個能力, 并不能肯定lua能夠很容易的使用這個能力。
上面的,什么使得lisp不同,貌似是第8點,特有的代碼記法。 代碼中寫的樣子就是讀的樣子,已經(jīng)被人肉parse過了。
不僅僅是能夠獲得, 而且是在代碼文本中能夠清晰看見。 這就是被人詬病的lisp難看的語法的優(yōu)勢。
|
|