PTT推薦

Re: [閒聊] 結論是C#比Java厲害嗎

看板C_Chat標題Re: [閒聊] 結論是C#比Java厲害嗎作者
arrenwu
(最是清楚哇她咩)
時間推噓41 推:42 噓:1 →:60

※ 引述《arrenwu (最是清楚哇她咩)》之銘言:
: 而如果追求更方便、同時短短幾行就能引出很大效果的程式語言,
: 那從Python入門也行。這個對程式麻瓜最友善
: 缺點就是使用者對於電腦處理整數、小數點、字串的方式,
: 以及記憶體管理會很沒有概念。
: 有人可能覺得這些計概會教,我個人覺得是...
: 這些東西只有摸了才會知道在幹嘛,讀過計概就只有「反正底下就是01010101」
:
: 推 phoenix286: 就算不清楚電腦處理資料型態及記憶體管理的方式 12/20 08:33: → phoenix286: 這對使用者會有什麼影響嗎? 12/20 08:33整數簡單,會出現問題通常是浮點數

------ Pytthon 3.9.7 ------

>> x = 0.1 + 0.2
>> x - 0.3 == 0.0
False


表面上看起來是 "0.1 + 0.2 - 0.3 不等於 0.0"的怪事,
但實際上是你打進一個浮點數,實際上程式存進去的數值跟人想的不一樣。
這必須要知道電腦怎麼處理資料


另外關於記憶體管理的部分,我講記憶體管理可能容易造成誤解,
我想描述的是在 C 裡面 malloc 或 new 算子在記憶體裡面創造物件的機制

最終是要了解 pass by reference 和 pass by value 的差異。
C/C++ 會強迫使用者要理解這差異

但是Java以上隱藏了pointer的存在後,這部分就比較模糊

這差異的重要性在於...

x = 3;
y = x; # 複製x到y
y = 9; # 現在設定y的數值為9

x -> 3
y -> 9

非常直覺的結果

但換成 numpy 的矩陣:

import numpy as np
A = np.array([[1,2],[3,4]])
B = A # 複製A到B

B[0,0] = 9 # 改動B的第一個entry為9

B -> [9,2]
[3,4]

A -> [9,2] <---- 你只有改B,但A也被改動了
[3,4]

要理解這個情況,使用者無論如何都要理解pointer的概念


啊對了,矩陣那個例子,在MATLAB不成立
MATLAB 矩陣的等號算子是 deepcopy 嘻嘻

不過記憶體管理也確實該要了解啦
因為有時候你一個不小心還是會在Python造成memory leak。
如果沒有記憶體管理概念的話,你連你的程式可能造成memory leak都不知道

--
角卷綿芽Line貼圖上市囉~
24種可愛貼圖,只要30元!
https://pbs.twimg.com/media/FTwzC2AUYAAF5AY.jpg

購買連結:https://t.co/lNGU5jN7b2

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.45.195.96 (美國)
PTT 網址

SangoGO12/20 10:22只好出動邏輯大師javascript了

smart0eddie12/20 10:28js不好嗎

說來慚愧 javascript雖然夯到爆 但我沒用過

Ericz700012/20 10:29大大都用什麼

個人娛樂用Anaconda Python

JustBecauseU12/20 10:30js 1=='1' 嘻嘻

msbdhdfceb12/20 10:31C#有decimal可以用,不會出現0.3那個例子的問題,如

msbdhdfceb12/20 10:31可你很在意十進位精度時可使用(金融計算時尤其重要

madrac12/20 10:32我覺得浮點數是另個單獨的問題啦

ccpz12/20 10:32js 0=="0", 0==[] 都是 true, 但是 "0"==[] 會是 false

==

madrac12/20 10:33我通常都是教人: 沒必要的話就全部用整數記資料

s750322812/20 10:33js爛死了幹

但是js超爆幹夯耶

ccpz12/20 10:33NaN==NaN 也是 false

madrac12/20 10:33真的要寫需要大量數值方法的程式就是開 Matlab 了

用Python也可以啦

devilkool12/20 10:33我還看過全部用字串記的= =

SangoGO12/20 10:36因為js是用在前台的,戰場不同

usoko12/20 10:38js真的是邏輯大師 py算什麼

usoko12/20 10:39不過這年頭IDE都會跳warning告訴你memory leak

s750322812/20 10:40我也常用所以知道問題 不過還好現在我只搞後端 前端不用

s750322812/20 10:40弄了 基本上可以跳過 JS只適合搞一些簡單的東西 再多都

s750322812/20 10:40要套件去弄

msbdhdfceb12/20 10:40動態型別語言都會有很多魔法 JS只是裡面巫力特別高的

Python 的函數,變數可以不用宣告型別。 這點有時候會搞得debug滿痛苦的

rabbithouse12/20 10:40傳址跟傳值搞得懂的話 C++用起來會有人機一體的感覺

rabbithouse12/20 10:40很舒服

我...嗯...只覺得C++的macro能搞得error log很難懂而已 倒是從來沒有人機一體的感覺

※ 編輯: arrenwu (98.45.195.96 美國), 12/20/2023 10:41:48

s750322812/20 10:41現在寧願值都在後端處理完在丟到前端做簡單處理就好 JS

s750322812/20 10:41本身能不用就不用==

SangoGO12/20 10:41越方便就越不清楚...,畢竟是js,一個var包山包海

usoko12/20 10:41以算力來說 複雜的事情本來就該在後端做完

usoko12/20 10:42這年頭type safe對軟體開發很重要 py其實不能亂寫

usoko12/20 10:42經典js meme

madrac12/20 10:45我這邊 C++ 趨勢都是沒在寫 macro 了, 太難維護

zyxx12/20 10:46只有var是幾年前的事了 現在有let const

Issarc072112/20 10:46js真的是很多奇葩的玩法可以搞人XD

bpk12/20 10:48js在瀏覽器按F12就可以用console測一些指令

thelittleone12/20 10:49這個不是基本之一嗎?不管學Python Java都會遇到

thelittleone12/20 10:50寫JavaScript 就自求多福,自己不搞不表示同事不搞

ccaao31112/20 10:52補另個點,R跟matlab一樣不會改動到前者的array

inte629l12/20 10:54python記得有參照機制吧

mikuyoyo12/20 10:56值本來就是越後面處理越好吧,js 用途就是網頁框架都用

mikuyoyo12/20 10:56他,又沒人在用別的語言

lay1052112/20 10:58原來拍森也會這樣==

entaroadun12/20 11:00學過其他語言再看js會覺得這是啥小XD

kirimaru7312/20 11:05這邊可以測試一下用浮點數玩弄電腦

kirimaru7312/20 11:06https://bit.ly/41sFKvp

kirimaru7312/20 11:060.1 0.2 0.3 0.4 0.6 0.7 0.8 0.9 都是不準的

herbleng12/20 11:07那個浮點數的問題其實c也會有,畢竟電腦處理小數的方式

herbleng12/20 11:07都是2的負次方在做

kirimaru7312/20 11:07但是0.5 0.25 0.75 1.5 2.125 等等就會是準的

kirimaru7312/20 11:08所以不會有人開0.25 + 0.5 != 0.75的玩笑

kirimaru7312/20 11:08浮點數就是效率>>精確度 各語言也都有精確度>>效率的

kirimaru7312/20 11:08資料型態,算錢的時候如果需要就會改用那些

kirimaru7312/20 11:0964bit浮點數雖然算一次看起來好像是準的,但你連算100

kirimaru7312/20 11:09次還是會大爆炸

dosiris12/20 11:10都2023了 浮點問題還沒克服 笑鼠

kirimaru7312/20 11:13你可以寫出完全沒有浮點問題的程式,然後如果是遊戲引

kirimaru7312/20 11:13擎的話FPS保守比競爭者少了三倍左右

kirimaru7312/20 11:14那你是要克服浮點問題還是老老實實賣遊戲

kirimaru7312/20 11:16不過如果是計算無人機去冥王星探測一圈這種應用,我就

kirimaru7312/20 11:16不知道會採用哪種策略了,這個貪效率可能真的會出事

broian12/20 11:16我只想知道為什麼要一直出不同的程式語言

lightdogs12/20 11:18浮點問題的確很麻煩 能用int 就用int 判斷式能用str

lightdogs12/20 11:18 就用str 純粹數字有時候就是會搞人

lightdogs12/20 11:19這就要去問各家廠商了 不管硬體軟體 很多廠商就是喜歡

lightdogs12/20 11:19自創自己的語言 然後87%跟ja python c++很類似

kirimaru7312/20 11:21最簡單的例子 顯示卡又看不懂C++ 你想要他高效率地做

kirimaru7312/20 11:21牛做馬,你就要幫他創造他能懂的語言

Suleika12/20 11:24新語言的發展通常跟解決效能還有特化某領域有關,語言跟

Suleika12/20 11:24產業有關,產業跟錢有關

kirimaru7312/20 11:27近代的發展已經開始自創天生願意做牛做馬的卡(已經不

kirimaru7312/20 11:27叫顯示卡了),畢竟人類的慾望無窮無盡,顯示卡表示我

kirimaru7312/20 11:27就一介算螢幕畫面的,你們怎麼要求越來越多

sarafciel12/20 11:29沒到一直出吧 主流語言裡最年輕的rust也有8年了XD

sarafciel12/20 11:31不過近期是有些人打算弄點新東西幹掉C++就是

kirimaru7312/20 11:31湊數量的話可以請esoteric language出來開趴

broian12/20 11:32感謝解答!

hollen912/20 11:47現在最有機會取代 C++ 的不就是 Rust 嗎

hollen912/20 11:48Linux內核, 微軟Windows系統元件都有相關新聞

hollen912/20 11:49可以根絕人為開發疏失 造成記憶體洩漏

tsubasawolfy12/20 11:52wsl: memory leak 叫我?

hollen912/20 11:52更不要講還有防禦性寫程式 故意埋地雷甚至開後門的

hollen912/20 11:53不要相信任何東西

kirimaru7312/20 11:54這牽涉到效率問題,C++允許你直接插腦控制記憶體內容

kirimaru7312/20 11:54有時候就是真的要這樣才能逼出極限的運算效率

kirimaru7312/20 11:55當然手一滑就leak到天邊了,不過你需要效率時就是需要

kirimaru7312/20 11:56「絕對不會memory leak」且 「效率永遠發揮到極限」的

kirimaru7312/20 11:56程式語言,如果真的存在,我也想要去跪舔啊

hollen912/20 11:56Rust之所以會討論到取代 C++ 就是沒有犧牲自由調度空間吧

Suleika12/20 12:01扯一堆不如看人家報告為啥用rust做kernel module比較實在

as8011068012/20 12:35C++你想人機一體,先去搞懂左值右值再說

spfy12/20 12:36防禦性程式碼到底是不是從中國開始的阿 超虎爛欸

nthank12/20 13:06C++複雜是它的缺點也是優點 光是保留字就有60幾個 相比C只

nthank12/20 13:07有30幾個 語法多元實際平常會用的語法可能只有20% 如果只

nthank12/20 13:08有自己寫倒還好 最怕的是你旁邊那個老哥平常用的20%跟你用

nthank12/20 13:08的20%是空集合

smallreader12/20 13:29浮點數rounding不是很基本的嗎

henry4204aaa12/20 14:41之前沒用deepcopy de到天荒地老

ejnfu12/20 15:18C++比Java難多了 lvalue rvalue reference, universal ref

ejnfu12/20 15:18erence先搞懂再說..

louner12/20 17:00沒碰過JS 但看過很多JS相關的玩笑或鬼故事XD

b092007512/20 17:17為什麼要出不同語言?這問題就像明明就有菜刀為什麼要

b092007512/20 17:17弄柴刀、鐮刀、生魚片刀、開山刀一樣

zxc878712/20 18:54Python也有decimal, 你第一個例子根本不是Python獨有的

zxc878712/20 18:54問題

micbrimac12/22 00:58C++跟C誰比較強?