PTT評價

Re: [討論] 有沒有讀工程的覺得學python很難/煩的呢

看板Tech_Job標題Re: [討論] 有沒有讀工程的覺得學python很難/煩的呢作者
KanzakiHAria
(神崎・H・アリア)
時間推噓22 推:24 噓:2 →:46

※ 引述《champdessert (朱安)》之銘言:
: 如題
: 小弟唸工程的,之前學C++拿來處理實驗數據、玩arduino或用matlab都覺得還不錯用,因為就那幾個指令,只要靠邏輯就可以慢慢土法煉鋼拼湊出來要的東西。
: 但最近碰到大家說很好學的python,卻覺得它東西都過度包裝所以不好用,正因為都是人「定義」包裝好的東西,一定要照著他的方法寫,反而用起來覺得煩。如果遇到bug因為都是包裝好的指令所以無法用直觀的邏輯去debug或推論,還要上網查一堆資料,還不一定有解。而且這樣就會變成case by case,在不同的應用就要學一系列不同的函式定義,情境稍有不同可能就無法套用,沒辦法用最基礎的一套解決。
: 為什麼大家都說c++比較難python簡單,而我的感覺卻相反呢?是我之前都用得太淺了嗎?
: --------------------------------
: 更:感謝大家的回覆,看來真的是我學得太基礎的關係才會這麼覺得。要來努力學習了~

你肯定是不會C++ C++是一個高度需要理解編譯器運作的語言 隨便舉個例子

template <typename T, typename... Args>
constexpr auto add(T&& first, Args&&... rest) {
return std::forward<T>(first) + add(std::forward<Args>(rest)...);
}

template <typename T>
constexpr T add(T&& value) {
return std::forward<T>(value);
}


這是template使用可變參數(...)來處理多個不同型態參數

所以需要遞歸終點<>,確保模板遞歸能正常結束

constexpr就是編譯時期決定

std::forward跟std::move是C++11的 move symantec 是compiler優化的概念


到了C++17 多了摺疊表達式(Variadic Template)可以簡化每次需要定義遞迴終點

template <typename... Args>
constexpr auto add(Args&&... args) {
return (std::forward<Args>(args) + ...);
}

現實情況兩種都要會 不能只會Variadic Template的版本

然後因為早期(C++20以前) 會造成噴大量的compiler error又很難找問題

所以這段會再升級先定義concept來讓compile error問題更明確在哪

template<typename T, typename U>
concept Addable = requires(T a, U b) {
{ a + b } -> std::same_as<decltype(a + b)>;
};

template <typename... Args>
requires (Addable<Args, Args> && ...)
constexpr auto add(Args&&... args) {
return (std::forward<Args>(args) + ...);
}

以上只是C++少量編譯器針對的feature

其他還有很多是針對編譯時期優化的工具 std::less<> 編譯時期比大小

有專門給編譯器看的程式碼 [[fallthrough]] 強制要求編譯器跳過的attribute

<=>(三向比較運算符或太空船運算符)這也是針對編譯器後端的的智障語法

--

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

Dracarys 10/26 13:16推這篇

ejnfu 10/26 14:02光lvalue rvalue reference和move semantics 就很煩

ejnfu 10/26 14:02了,再加上template metaprogramming 讓我想起不好

ejnfu 10/26 14:02的回憶了

giantwinter 10/26 14:18他把c當成c++

ian41360 10/26 14:21跟我想的差不多,樓下碼農幫我judge一下

JustBecauseU10/26 14:25只能說雖然很難 但是比python酷

JustBecauseU10/26 14:26不然這年頭隨便一個人都說自己會python

johnjohnlin 10/26 14:27所以後來才有if constexpr讓事情沒有那麼糟糕 XD

C++白爛之處 還要知道哪些寫法是存活在哪些C++版本...... 甚至還有 (since C++17)(deprecated in C++20) 這種只存活一版的鬼東西=.=

https://i.imgur.com/U2lxAXe.png

有圖有真相 std::variant_alternative

qwe78971 10/26 14:28寫C++很想大聲說我看懂了 但實際上不懂

teddy 10/26 14:33嗯對 跟我想的一樣

※ 編輯: KanzakiHAria (36.231.99.2 臺灣), 10/26/2024 14:48:32

furnaceh 10/26 15:01好難 我第一次看到c++就知道要放棄了

bigbite 10/26 15:02metaprogramming真的走偏了我個人覺得

NexusPrime 10/26 15:19C++語法太繁雜啦,加上很多把c++當c用的,浪費c++

NexusPrime 10/26 15:19的OOP特性

NexusPrime 10/26 15:21單純資料處理用python即可,甚至c#都可以

donkilu 10/26 15:38完全看不懂 我果然不會寫C++...

abccbaandy 10/26 15:59好奇deprecated會怎樣? 下版移除?

gn01705529 10/26 16:08身為C++ 10年+開發者,只能說C++走到有點偏了

gn01705529 10/26 16:09開發反應速度完全比不上python

gn01705529 10/26 16:09你還在debug template,人家產品都快上線了

ko27tye 10/26 16:11我只覺得近幾年的c++一直往python的方向靠

gn01705529 10/26 16:14更別說一些奇妙的語法,你係。一個90%的人看不懂的

gn01705529 10/26 16:14東西是要搞誰

gn01705529 10/26 16:14*你寫

profiles 10/26 16:24還是C直覺,所見code即所執行code

zaiter 10/26 17:03全世界應該統一一種語言 那就是python

Lipraxde 10/26 17:09原 po 就比錯東西啦,把程式語言本身的複雜性,和

Lipraxde 10/26 17:09外掛 package / 程式庫的複雜性混為一談,他就不是

Lipraxde 10/26 17:09嫌語法難,是覺得看人家程式、文件麻煩

Lipraxde 10/26 17:16喔對了,原來 concept 是這樣用啊...說真的覺得他

Lipraxde 10/26 17:16有點多餘,template error 就 CRTP 寫比較複雜的時

Lipraxde 10/26 17:16候比較難看懂,所以一直沒想去學 concept

wei115 10/26 17:16https://i.imgur.com/NDhMBE7.jpeg

HGD1021 10/26 17:18什麼啦,亂打一串英文跟數字,害我都看不懂

dildoe 10/26 17:49cxx 就是永遠都有 modern XD

wulouise 10/26 18:29concept出問題的時候好查很多

jhengME 10/26 18:30剛學時光virtual就頭暈,結果後面還有C09、C11、C

jhengME 10/26 18:3017、C21 ,到底

jimjim95135710/26 18:34樓上,還有23、26

youarefat 10/26 18:48真的開發時,絕大多數那些新東西都用不到

pig2014 10/26 18:50媽的還一堆人說戰語言沒意義。cpp就是王者,其他人

pig2014 10/26 18:50慢慢去旁邊嘴戰語言沒意義,真正了解metaprogrammi

pig2014 10/26 18:50ng的人誰敢把其他語言跟cpp放同一個等級。py那個me

pig2014 10/26 18:50taclass是三小,強者隨便看30分鐘doc就能重載__new

pig2014 10/26 18:50__瞎改行為了。cpp得先花30天K完effective modern

pig2014 10/26 18:50c++,後面還想成佛還有C++ Templates 2/e可以讓你

pig2014 10/26 18:50用半年慢慢細品

pig2014 10/26 18:53原po立場太簡單了,就是一個perfect forwarding小

pig2014 10/26 18:53品而已,其實還能用CRTP為例來強暴台積板的鄉民

dou0228 10/26 18:53這就是torvalds批評C++原因啊

pig2014 10/26 18:54*例子

labbat 10/26 18:55開公司是要賺錢,誰有那個時間慢慢學新東西當然是

labbat 10/26 18:55拿asci c語言硬幹下去

johnjohnlin 10/26 19:33CRTP也是難用,很多子型別的東西不能access

peter98 10/26 19:35template metaprogramming真的地獄 但我的C++停留

peter98 10/26 19:35在C++13就是~

peter98 10/26 19:37但說實話啦~ 我最喜歡的語言是Scala跟Kotlin

peter98 10/26 19:37雖然跟c++比 這兩個語言都小眾就是。。。

id41030 10/26 19:43我硬體都看無

CoNsTaR 10/26 20:46python 難是難在沒有 static typing,C++ 大部分人

CoNsTaR 10/26 20:46覺得難卻也是因為它的 static typing

CoNsTaR 10/26 20:46個人認為如果把 python 拿來寫產品,它根本神難,連

CoNsTaR 10/26 20:46參數的 type 是什麼都不知道,傳回來是什麼東西也

CoNsTaR 10/26 20:46不知道

CoNsTaR 10/26 20:46但如果把 C++ 拿來當腳本語言寫,也是神難,明明就

CoNsTaR 10/26 20:46簡單直覺只跑一次的垃圾程式也要在那邊搞旁支末節

CoNsTaR 10/26 20:46的 type checking

CoNsTaR 10/26 20:48但我個人是很 appreciate C++ 的 template metaprog

CoNsTaR 10/26 20:48ramming 的,讓你不需要用到 coq, idris, agda 之

CoNsTaR 10/26 20:48類的語言也有類似 dependent types 可以用,雖然只

CoNsTaR 10/26 20:48有 compile time