What have you found for these years?

2010-03-22

placeholder, underscore, and trace

剛剛不小心把 trace 打成 pace XDDD
我很喜歡這個名字 XD
==

scala 用 underscore 表示 argument placeholder,
比方說 ((_:Int) + 1) 即是一個 Int => Int 的 function,
就像 haskell 裡面的 (+1), 只是極其 verbose.
在 c++ 的 boost, TR1 中,則用 _1, _2, _3 來表示。

雖然 c++ 的 _1, _2, _3, _4, _n 做得非常複雜,
不過是比 scala 的厲害得多。畢竟你能寫:

(_2 - _1)(1, 2)

但在 scala 裡可沒辦法讓兩個 placeholder 反過來。
(或許有?但難道要用 flip 嗎?再複雜一點會 flip 到瘋掉)
c++ 是寫成一種特殊的 object, 類似 adapter.
而 scala 看起來像是一種特殊的 syntax... (沒有深究)

就這點而言,我覺得 c++ 的實在比較容易理解也比較好用。

前一陣子,看人在吵 scala 是否 functional.
我是覺得滿沒意義的,因為爭執的點我覺得不算是概念,
只是細節... 感覺硬要這樣講下去,那好像只有 haskell 是 functional?

後來看到這篇:
Robert Fischer Finally Admits that Scala is Functional
他說 Robert Fischer 說 functional language 需要能夠寫成
point free 的形式。然後看到這篇的這段話:
Crap, there's an underscore. Is it a "point"?
Good question. And the answer is no.

仔細想想,這樣的 placeholder 確實不算是 point (argument).

不過... 總還是覺得哪裡怪怪的。我想就如第一個 comment 裡說的吧:
(他的 avatar 看起來是 Darwinia
看起來是一個古字。我覺得打起來很悶有點無聊的遊戲...)
The whole syntax is definitely biased toward the
object-oriented side of things, which is a shame.
I would have certainly preferred a bias in the other
direction, but that's just me.

我覺得這就是最大的問題吧!
scala 的 syntax 實在是 verbose 到極點,寫起來很不順手。
如果用 OO 的方式去寫,基本上可以看成 better java...
但如果想用 FP 的方式去寫,真的會寫到想翻桌,雜音實在太多了。
沒錯,該有的東西都有,但問題是用起來真的就是很不方便。

跳過戰火,文中提到 Oleg 有一篇在講 scala 的 underscore
delimited continuations 的關係...
Montagovian semantics and Scala programming
請原諒我還是看不懂 delimited continuations 是什麼,
也不知道 shift 和 reset 意所何指。不過裡面提到 trace
讓我很感興趣。根據 Curry–Howard isomorphism,
可以讓 program, programming language 與數學連接,
看來 linguistics 也很合理地可以連在一起。很能想像,
但細節就超過我的能力範圍了。

文中介紹了 Chung-chieh Shan 的一本書,其中一個章節
``Linguistic Side Effects.''....
真的常常有 Oleg 可以把任何東西都輕描淡寫地講出來的感覺 XD

這又讓我想到之前提到 natural languages 裡 multi-level...
Deriving Compilers and Virtual Machines for a Multi-Level Language
還有穆老師的 Deriving a Virtual Machine
VM circle 那篇我從來沒看懂過就是了 ><
next 來 next 去的,頭昏眼花 @@

還有 open audio 在 buzz 裡提到自然語言常常會需要提到其他句子。
我想大概就像是說「前幾天我聽到他說:「我看到上面寫:「」」」
這樣確實就產生了 multi-level, 而我們程式很少會這樣寫的。
原因非常簡單,就是太抽象難懂了。meta-programming,
或 code generator 就經常會碰上一些問題,更何況是 meta-meta?

另一方面是通常我們會用 A 語言去描述 B 語言,
而不是像自然語言中用同一個語言來描述。
大概也只有 lisp 會用來描述自己吧?我猜?
又或許是為了方便,是為了避免 nonsense,
bullshit (in Jonathan Blow's word)
還是 reflection 也算是一種描述自己的方式嗎?

我覺得 natural language 跟 programming language
同樣令人著迷...
儘管我確信我沒什麼語言能力的天份。

之前在看語言本能時,曾有人問我這跟我學的東西有關嗎?
那時候我就說有關,當然有關。雖然也想反問,就算無關又如何?
為什麼我一定要看有關的東西......

ptt CSSE 開始,然後到 iis, 真的讓我發覺過去實在太過無知。
從隱隱約約覺得應該可以連在一起(這是為什麼高中時拿起那本書),
到慢慢發現確實可以連在一起,然後覺得這好像太夢幻,
再到發現好像並不是那麼夢幻... 這點真的覺得很有趣。

也許我進不了細節裡,但只是遠遠地想著概念或許就夠了。

==
儘管同時還摻雜著各種個人情感...
儘管或許永遠 resolve 不了。離題了

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0