作者:
sxy67230 (charlesgg)
2022-06-16 00:03:43※ 引述《KennethC (Smith)》之銘言
: 安安安安,就是那個資工系啦!
: 聽聞資工系的資工人,
: 會去寫電腦要使用的 code,
: 其中有可能會有 code 叫做 x = x + 1
: 額......
: 這真的不是寫錯嗎???
: 資工人是數學糟糕還是邏輯糟糕??
: 有沒有資工系的八卦
阿肥外商碼農阿肥啦!最近都在打DI沒空上線發廢文。
因為對於任何的program他的理解"="這個概念叫做assign,也就是我把原本的x加上1以後再
賦值給x,這東西在上升就是計算機哲學的定義了,你接受這套體系才有談下去的資格。
這個還延伸到lvalue跟rvalue的概念,如果你去寫
int x;
x = 1;
1=x;
這樣肯定會報錯,然後C++會告訴你lvalue 是不正規的操作,你在回想program 在解析你的
code的時候是基於賦值由rvalue 操作後賦值給宣告一段記憶體的變數,但是數學上卻可以
等價1=x或x=1,但是如果你修過compiler的課程就知道,在現代Program進入編譯器前都要
做preprocessor。
經過lexical analysis跟parsing,雖然正規LL或LR Parser並沒有限制1=x這種方式不能par
ser,但是為了效率C語言採用了比較弱的語法解析來處理這類複雜的問題,當代其他語言也
都沿用C語言的規範,而你仔細看所有compiler探討都把這個叫做一種Grammar而不是Mathem
atics,原因就是為了符合計算機的天然性而且避免了使用者需要面對機械碼操作。
不過你其實如果懂compiler你也可以自己去定義一個x = x + 1會爆syntax error的,不過
你的這套語法勢必要挑戰當前的C語言體系,成功你就是新的規則的奠基人。
以上