Re: [閒聊] 真的有扯到...

看板Soft_Job作者 (喲)時間12年前 (2012/03/29 00:19), 編輯推噓14(140127)
留言141則, 10人參與, 最新討論串10/13 (看更多)
※ 引述《erspicu (.)》之銘言: : 我覺得學習語言真的從稍微低階一點的學習 : 在某些方面會學習的比較多 : Java比較高階 把很多東西包起來 : 有些細節部分 有些人根本不知道所以然來 : 這些人就是會覺得探討compiler 實作行為根本沒必要的人 : 當 | 兩邊都是boolean時 而且也只是要求取boolean結果時 : 能否套用short-circuit evaluation : 就結果來說 答案是可以的 : 跟 || 一樣 因為並不影響結果 : 前提是 若前條件為 true(1) 可以省略後條件 : 反之 前條件為 true(0) 則還是得看後條件 我實在看不懂你一下說true(1)一下寫true(0)什麼意思. 這樣說好了,在晚近的人寫的文章中,有以下的方式定義 or 的語意: 用[,]包起expression,表示目前正在評估這個expression的語意, X = { true, false } [true or X] -> true [false or X] -> false or [X] -> X 這個就叫作short-circuit evaluation. 而且應該不是你高興我高興就自己把 compiler發明成這個樣子. 而且這個究竟干Java高階什麼屁事? 低階語言就不做short-circuit evaluation嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.108.204

03/29 00:24, , 1F
你還看不懂嗎? 我是回應 有人問 | 兩邊為BOOLEAN的情況
03/29 00:24, 1F

03/29 00:26, , 2F
如果確定 | 兩邊為boolean 說真的 兩種方式本來就可以阿
03/29 00:26, 2F

03/29 00:27, , 3F
哪兩種方式?
03/29 00:27, 3F

03/29 00:27, , 4F
你高興遇到TRUE回傳TRUE跳掉 或是 繼續做後面的 都可以
03/29 00:27, 4F

03/29 00:28, , 5F
這就是我說的,可以忽略的情況不忽略也沒關係. 然後呢?
03/29 00:28, 5F

03/29 00:29, , 6F
所以你這篇文章到底重點是什麼?
03/29 00:29, 6F

03/29 00:29, , 7F
但是我已經告訴你,|有位元求值的意義. 所以可能你的前輩是
03/29 00:29, 7F

03/29 00:30, , 8F
在講說左邊即使為true,右邊也會做下去,因為|是位元值的意義.
03/29 00:30, 8F

03/29 00:30, , 9F
我的前輩知道你幫忙護行會很感激吧 不過就觀念錯誤而已
03/29 00:30, 9F

03/29 00:31, , 10F
但是,看樣子你只是在抱怨為什麼false|Any->false而已.
03/29 00:31, 10F

03/29 00:31, , 11F
觀念錯誤 被捧成 見樹也見林 夠奇妙了
03/29 00:31, 11F

03/29 00:31, , 12F
但說穿了這一句弄錯了,就代表全部觀念全錯了嗎? 還好吧.
03/29 00:31, 12F

03/29 00:32, , 13F
有看到有人推一句話嗎?
03/29 00:32, 13F

03/29 00:32, , 14F
→ shemale:如果我是老闆,大概會叫他們走路了
03/29 00:32, 14F

03/29 00:33, , 15F
別人推什麼話干你什麼事又干我什麼事?
03/29 00:33, 15F

03/29 00:33, , 16F
真相是你不是老闆,並且你也沒證明他們全錯.
03/29 00:33, 16F

03/29 00:33, , 17F
GOOGLE一下的確不是所有程式都有做short circuit evaluation
03/29 00:33, 17F

03/29 00:34, , 18F
而別人一句玩笑推文,你還認真解起來...
03/29 00:34, 18F

03/29 00:34, , 19F
惱羞成怒了嗎?
03/29 00:34, 19F

03/29 00:34, , 20F
據我所知,不是全都做SCE. 早期BASIC就沒有做.
03/29 00:34, 20F

03/29 00:34, , 21F
另外erspicu提到embedded我大概知道他要提的意思 bitwise跟
03/29 00:34, 21F

03/29 00:35, , 22F
true,false在電腦中當然是以數值表達. 邏輯式中所寫的true,
03/29 00:35, 22F

03/29 00:35, , 23F
logical"用途"本來就不大一樣 一個是bitwise運算完後 如果為
03/29 00:35, 23F

03/29 00:36, , 24F
false其實也可以解為二個class,那就可以用許多符號代換.
03/29 00:36, 24F

03/29 00:37, , 25F
哼,我可沒被打臉何必腦羞 XD
03/29 00:37, 25F

03/29 00:38, , 26F
非零數值 才會在IF判斷裡被判斷為TRUE 但||運算則是左右兩
03/29 00:38, 26F

03/29 00:38, , 27F
有時候Compiler -O0 -O2 -O3結果會不同...(昏)
03/29 00:38, 27F

03/29 00:40, , 28F
優化策略不一樣,跑出來的值也不一樣?
03/29 00:40, 28F

03/29 00:41, , 29F
這是正常的 也聽過 編譯器版本不同 跑出結果不同的
03/29 00:41, 29F

03/29 00:41, , 30F
結果一群人在論壇上戰起來
03/29 00:41, 30F

03/29 00:42, , 31F
端先做TRUE或FALSE的判斷 所以才一定會有SCE
03/29 00:42, 31F

03/29 00:42, , 32F
那你意思是否說a|b某策略跑出true,換另一個策略跑出false?
03/29 00:42, 32F

03/29 00:45, , 33F
if ((a=1)|(a=0))
03/29 00:45, 33F

03/29 00:47, , 34F
不做SCE情況下 a會變0 我看過compiler出來的assemble會把同一
03/29 00:47, 34F

03/29 00:49, , 35F
好玄妙的碼..
03/29 00:49, 35F

03/29 00:50, , 36F
在 C 是不行的吧, 未定義行為
03/29 00:50, 36F

03/29 00:50, , 37F
if ((a=1)|(b=0))
03/29 00:50, 37F

03/29 00:51, , 38F
VB是 if a is nothing or a.method() = "" then 會炸
03/29 00:51, 38F

03/29 00:51, , 39F
樓上說到重點 並不是spec就決定一切 很多細節真的看設計者
03/29 00:51, 39F
還有 63 則推文
還有 1 段內文
03/29 01:17, , 103F
看吧...一直跳針undefine的東西...不會很奇怪嗎...
03/29 01:17, 103F

03/29 01:17, , 104F
答案只有一種, 不是用自然語言還是什麼形式語言去解
03/29 01:17, 104F

03/29 01:17, , 105F
唉,辭彙發明大王zekewang來亂入...
03/29 01:17, 105F

03/29 01:18, , 106F
請問答案只有哪一種?
03/29 01:18, 106F

03/29 01:18, , 107F
你倒是滿喜歡幫人取外號的, 不如以後尊稱你幻想大王好了
03/29 01:18, 107F

03/29 01:18, , 108F
你可別說你是鍵盤柯南啊,什麼真相只有一個之類的...
03/29 01:18, 108F

03/29 01:18, , 109F
不用理那個什麼y的...什麼都要問, 人生,數學,語言,實作
03/29 01:18, 109F

03/29 01:18, , 110F
答案只有該 lang 的 spec 上有寫的那種
03/29 01:18, 110F

03/29 01:19, , 111F
zekewang: 之前也是有討教過, 他愛吵這些我也很熟悉了
03/29 01:19, 111F

03/29 01:19, , 112F
有意思了,有人來我的文推文說不用理我本人,那是幹嘛的?
03/29 01:19, 112F

03/29 01:19, , 113F
就說logic operator是語言定義好的東西..連compiler都要
03/29 01:19, 113F

03/29 01:19, , 114F
沒事無聊上來磕牙, 等等就要去休息了 XD
03/29 01:19, 114F

03/29 01:19, , 115F
好,就你這句,我再問你,哪個lang的spec?
03/29 01:19, 115F

03/29 01:19, , 116F
遵守定義規範的來做.還在跳針compiler以及undefine的行為
03/29 01:19, 116F

03/29 01:20, , 117F
你用哪個 lang 就是哪個啊 ? 原 po 不就有 context 嗎?
03/29 01:20, 117F

03/29 01:20, , 118F
何苦自己幻想一堆情境呢 ?
03/29 01:20, 118F

03/29 01:20, , 119F
ledia我是覺得你怎麼講都跳不出C的範圍. 可是這裡主題是Java
03/29 01:20, 119F

03/29 01:21, , 120F
那我用Prolog
03/29 01:21, 120F

03/29 01:21, , 121F
這裡是哪裡? 我現在天天用 Java ... XD
03/29 01:21, 121F

03/29 01:21, , 122F
那,在Java中,這裡所談的哪個部份未定義?
03/29 01:21, 122F

03/29 01:22, , 123F
你用 Prolog 就不用來這邊告訴寫 Java 的人哪邊想錯啦
03/29 01:22, 123F

03/29 01:22, , 124F
想法就是不同嘛
03/29 01:22, 124F

03/29 01:22, , 125F
在 Java 都有定義啊, 不過 (a=1)|(a=0) 的 context 是 Java?
03/29 01:22, 125F

03/29 01:22, , 126F
錯,你這樣講就錯了.
03/29 01:22, 126F

03/29 01:23, , 127F
你確定在 Java, (a=1)|(a=0) 會不同 compiler 不同結果?
03/29 01:23, 127F

03/29 01:23, , 128F
我有講這樣的話嗎?
03/29 01:23, 128F

03/29 01:24, , 129F
ledia別跟小朋友灰了..晚了該睡了.不然等下問的可多了
03/29 01:24, 129F

03/29 01:24, , 130F
有啊, 你不是一直跟我說這裡在討論 Java ? XD
03/29 01:24, 130F

03/29 01:24, , 131F
沒關係, 以前我就常常回答他問題, 日行一善
03/29 01:24, 131F

03/29 01:24, , 132F
可是以上我提到那句話都是在發問,而不是在陳述.
03/29 01:24, 132F

03/29 01:25, , 133F
這就表示你中途岔進來,沒抓到重點.
03/29 01:25, 133F

03/29 01:25, , 134F
原來 "可是這裡的主題是Java" 是發問, 對不起文字沒表情
03/29 01:25, 134F

03/29 01:26, , 135F
我中途插進來都是我的錯, 只好去睡覺了, 掰掰~~ XD
03/29 01:26, 135F

03/29 01:26, , 136F
好了,話不投機,走吧走吧,愛撒野就撒野吧
03/29 01:26, 136F

03/29 01:33, , 137F
只是人不要都老摳摳了還去別人文中亂. 有本事自己po嘛,好嗎?
03/29 01:33, 137F
※ 編輯: yauhh 來自: 59.112.228.79 (03/29 19:24)

03/30 00:24, , 138F
但說穿了這一句弄錯了,就代表全部觀念全錯了嗎? 還好吧.
03/30 00:24, 138F

03/30 00:24, , 139F
只推上句
03/30 00:24, 139F

03/30 00:24, , 140F
說老實話只要能當老闆眼中的超強工程師就行了
03/30 00:24, 140F

03/30 00:24, , 141F
是否真的那麼強一點都不重要
03/30 00:24, 141F
文章代碼(AID): #1FSpeKnq (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1FSpeKnq (Soft_Job)