文字列の変数sが与えられた時に 変数a(符号付き32bit整数)、 変数b(符号なし64bit整数)、 変数c(64bit浮動小数点数)へそれぞれ変換するコード 【Rust】 let s: &str = "12345"; let a: i32 = s.parse()?; let b: u64 = s.parse()?; let c: f64 = s.parse()?; 【Kotlin】 val s: String = "12345" val a: Int = s.toInt() val b: ULong = s.toULong() val c: Double = s.toDouble() 【Swift】 let s: String = "12345" let a: Int32 = Int32(s)! let b: Uint64 = Uint64(s)! let c: Double = Double(s)! 【Go】 var s string = "12345" var err error var a int32 a, err = strconv.ParseInt(s, 10, 32) var b uint64 b, err = strconv.ParseUint(s, 10, 64) var c float64 c, err = strconv.ParseFloat(s, 64)
オーバーロードが無いと、 例えばライブラリ無いからシステムコール利用する便利ラッパー機能を提供しようとする。例えばソケット関係のAPIをまとめたやつとか。 で socket(2)の場合、 第3引数なんていつも0しか使わないからと第2引数までを取るAPIとして公開、後になって第3引数必要になった(例えばSCTP利用)ってなった場合、オーバーロードできないとAPI変える必要あるじゃん。
>>3 プログラムを書いたことのないキチガイだな socketの第3引数はgetaddrinfoで得たai_protocolを引き渡すのが常識 あるいはgetaddrinfoを使わないならばgetprotobynameの結果を引き渡すものだ まともなコードを書けないからそんな意味不明な主張になる なんでオーバーロードが無いCでうまくやっている例を挙げてオーバーロードの必要性を主張しようと思ったんだろう
/ ,.----―‐、ヽ. \ / / ヽ ヽヽ、_ヽ / _,.-‐''" ヽ ヽ `ヽ / _,,.-‐'" ヽ ヽ ヽ / _,.-'" ヽ ヽ ヽ / _,.-‐'" i! i! .._ i 人_,.-‐" _,,... _;;.::='' \ i! i!/ >' / _,,..-''_,.-‐''" 入 /_____/ ,.イ' | ,.-ヽ、 _,.-'"_,.- ‐┬:.:ァ‐──┬: :ァ= ┬─―-|ヾ r i! |/ ヽ.. ,.-'" r |/ ,L:厶\_, |: / _/二│ / | .| | i ヽ | |; 〃  ̄`ヾ |/ 〃 ̄`∨ i | |ヽ i! ヽ | .| {{ }} {{ }} { | | | また新スレだ!いつもいつも! | i | | ゞ' ==彡 ゞ ==彡 l | | | 1000にも届かないで!!わたしを弄んで!! ヽ | | |! ヽヽ ヽヽ l | | i! ヽ、 | | | /⌒¨¨¨¨¨¨¨¨¨⌒ヽ / | i/ ヽ、 / ヽ ヽ、 { 丿 / /,! ,i! ヾ`ヽー' `ヽ、 `ヽ、 ェ-―‐-く / ./ / ``―、_ ` ‐、_ ` ー--/ __ `ヽ/ ./ / `゙゙‐-、 ゙`ー、.._/ i'" `ヽ /,/
>>4 あくまでも例なのに的外れな回答だな。 fcntlでもいいわ。あれは第2引数によって第3引数の型が変わる。 >>6 うまくいってねーから。 だから閉じる時はcloseなのに開く時はopenじゃなくてsocketって別の名前になってんじゃん。 思考力無さすぎ。 例がアカンわそれ オーバーロードがある言語でもオーバーロードすべき時とメソッドを分けるべき時が当然ある fcntlなんかはオーバーロードを考えるより先に分割を検討すべきものだから議論がとっちらかる
>>9 >例がアカンわそれ >オーバーロードがある言語でもオーバーロードすべき時とメソッドを分けるべき時が当然ある 当たり前だろ >>8 いまさらで申し訳ないんですが s/ライブラリ無いから/ライブラリ内から/ ですか? 求めてるのはオーバーロードじゃなくてデフォルト引数だね
オーバーロードできるからと、いつもオーバーロードするわけではない。 だがオーバーロードが適切な場合はオーバーロードできたほうが良い。 単にそれだけ。 原理主義者になるな。
>>11 ライブラリ無いから薄いラッパーを作って提供するんだと思った。 知らんけど。 オーバーロードは関数を値として持とうとしたときに関数の実体を取得するのがくそほど面倒臭かった記憶
オーバーロードの追加はAPIの変更に含まれますか?
ジェネリクス以外でわざわざ同じ関数名使う必然性がないわな。
Objective-Cの関数名って長かったよなあ(遠い目)
オーバーロードの有無で使用する言語を選ぶ人っているのか? いないなら些末な議論
>>8 よく考えてから反論の例を挙げよう fcntlこそオーバーロードに不向きだろ まずfcntlの引数は代数的データ型になっていることを理解できるか? つまりRustならばそれはenumなので例えばこんな風に解決される enum FcntlArgs { F_GETFL, F_SETFL(O_Flag), F_DUPFD(FileDescriptor), F_SETLK(Flock), ... } これでlibcインタフェースよりもシンプルかつ分かりやすく間違いなく表現できる 関数の引数はもちろんfdとこのFcntlArgsの2つに固定される fn fnctl(fd: FileDescriptor, args: FcntlArgs) -> Result<FcntlReturn, Error> と戻り値も様々なものが返るからenum FcntlReturnを用意すればミス防止になるだろう エラーもそのenumに混ぜる手もあるがここでは分けて汎用的にResultとしている その場合の使い方はこんな感じのコードになるだろう if let O_Flag(o) = fcntl(fd, F_GETFL)? { o |= O_NONBLOCK; fcntl(fd, F_SETFL(o))?; } >>15 関数を値として持つ場合は関数シグニチャ的なものを型として使うので その時点でどのオーバーロード用か明確になってるよ >>19 >オーバーロードの有無で使用する言語を選ぶ人っているのか? ドカタは低脳、ゆとり、基地外でも大歓迎な職業なもんだから、 へんな奴が多い。そして、5chのム板に来る奴にはそれの重度な奴が多い。 そんな奴(重度の基地系)だと些細なことでも異常ににこだわる(超粘着する)のが普通なんだよ。 で、俺的にはオーバーロード必死な人が使っている言語(メイン言語)が何なのか興味あるが >>20 wrapper APIとして公開するならそれぞれ別のメソッドにすべきでしょ メソッドという概念がなかった頃の遺物をそのまま使う必要ない >>13 オーバーロードの使い道は型違いのサポートとオプション引数のサポートの2つ 前者はジェネリック後者はオプション引数が言語機能にあればオーバーロードがなくても困らない >>23 別のメソッドにしなくても もし使用ミスがあればコンパイル時エラーとなるため>>20 の仕様でも全く問題ない そしてこの手法はRustでは常套 例えばHTTPのメソッドはGETやPOSTやDELETEなど39種類が定められているが Rustでは39種類のメソッド関数を用意せず今回の例のようにenumに39種類を並べて用いている 今回のfcntlでも大量のメソッド関数を作るのは好ましくないと考える さらに今回は>>8 がオーバーロードがない場合は関数を分けてfcntl_getfl()やfcntl_setfl()などと大量に作らざるを得なくなる例として持ち出してきた流れ だからオーバーロードなんか無くてもfcntl()一つで済むことを示した そしてこれは汎用的な手法である オーバーロードが無いと嫌だ嫌だな人はオーバーロードを変態にした C++の可変引数テンプレート(可変長ジェネリクス引数)のようなものが実は欲しいってことなんじゃないのか
新しく作る前提ならfcntlみたいに責務の異なる複数の処理は 1つの関数ではなく1つのクラスやモジュールにまとめたほうがいいのは間違いない ただ既存APIのラッパーなら使いやすい形にAPIを変更した方がいいケースもあれば 既存と同じ感覚で使える形に留めたほうがいいケースもあるから 分割がいいかどうかはケースバイケース
結局>>2 の例も>>20 の例も 元は「オーバーロードのないRustは一つの関数名にできずに多数の関数名を必要とする!」攻撃から始まったのに 結果はRustの方が一つの関数で対応できちゃっていて不思議 >>27 なるほどこういうことか template <class ... Ts, class U> U do_anything(Ts ...); >>29 Rustはtraitを用いたジェネリクスやenumなど便利で強力な機構を備えているため 具体的な現実の問題のほとんどはオーバーロードを使わずともそれらを用いてもっと良い解決を取ることが出来てしまう flutter で dart だろ。Swift UIとか覚える気ない、というかApple終わってるし
nimダウンロードできない。 なぜか、消える。ノートンが削除してるの?
>>37 この文面からして明らかにプログラミング向いてなさそう GUIフレームワークがついてる言語が少ないので嫌だな
ノートンなどアンチウイルスソフトが必ず隔離や削除する、インストールの際はインストール先を例外にする必要があります 全部誤判定なんだがアンチウイルスソフトの会社は殿様商売だな
>>40 ここまで日本語不自由だと生きるのつらそう ClojureもElixirもいいけど次世代かって聞かれるとう~ん なんだろうね次世代って
>>42 毎年恒例の1位となってるな >世界中のIT技術者から愛されているプログラミング言語はなにか。 >プログラミング関連のQ&Aサイト「Stack Overflow」を運営する米Stack Exchangeが >そのような調査結果を発表した。 >各言語の「Loved」(愛している)と「Dreaded」(恐れている)の比率で >Lovedが最も高かったのは「Rust」(86.73%)で7年連続で1位になった。 >回答数は7万1467件。 >>44 なんかもうネタみたいになってるけどこれってアメリカンジョークなのか? Rustは自分では使いたくないかな 仕事でコーディングしてる人が使ってくれたらいい 食わず嫌いだったけど 使うようになってRustが最もコーティングしやすいプログラミング言語だとわかった
どのへんがとは全く言わない、糞言語Rustアゲおじさん
次世代って響きは良いけど従来の言語の穴を塞いだ発展型の方が好まれそうと感じる でもその結果C++とかObjective-Cが生まれたと思うとその考えも合ってるんだか自信がない
その意味合いでいうなら v言語が宣伝してる内容を全部まともに実装できたら次世代と言っていいんじゃないすかね
過去にない新たなパラダイムを開く言語こそ次世代言語 それが何かは知らんが
YouTube で有名な雑食系エンジニア・KENTA が、既に結論を言ってる。 文系のキャリアパスは、Ruby on Rails → Go のみ Rust, Elixir は普及のキャズムを越えなかった。 越えたのはGo だけ いつも思うけど、Stack Overflow にいる香具師は、プロじゃないと思う。 転職に適さない
AWS Lambda のデフォルト言語は、 Node.js, Python, Ruby, Java, Go, PowerShell, C# Rust, Elixir, PHP は入っていない。 カスタムコンテナを作るしかない でも、Elixirは5千万プロセスが、130GB ぐらいのメモリ使用量らしいから、 32GBでも、1千万プロセスぐらい動くかも IoT で、Nerves には期待している。 Ruby on Rails の本を書いている、黒田努の本も出たし
GoはLambdaの新しいAL2環境においては単なるカスタムランタイム扱いに格下げされており、Rustとの違いは無くなっている キチガイに触るつもりはないが他の人への情報提供として
Erlang系の話題も少ないけどGleamとかどうよ 程々にホットだけどフレームワークはまだできてない、現状はそんな感じ BEAMで動いて型が付いてて開発が動いてるってだけで機能として珍しい所はあんまり無いんだけどさ そんな関数型関数型しい仕様でもないしギークが喜ぶリッチな型があるわけでもない あとはjsがこないだ吐けるようになった
未だにKENTAのゴミ動画を当てにしてるやつが湧くのか
>>55 rustとの違いがないってことはRAIIパターン使えるようになるの? >>59 全然関係ない AWS Lambdaでの実行環境の話 Rust is coming to Linux, says Torvalds https://cloud7.news/linux/rust-is-coming-to-linux-says-torvalds/ Torvalds also announced some changes he plans to implement into Linux soon. Most significantly, the open-source programming language, Rust might be included in the next release. Torvalds stated that Rust will be introduced in a limited way. KENTA の天敵・モローも、遂にRuby on Rails のキャリア相談までやり出したw 2020年には、Railsはオワコンと言っていたが、 Railsの仕事が増えたため、急きょRailsに鞍替えw 主張が、KENTAと全く同じになったw 【2022年版】Ruby on Railsの将来性 VIDEO スタートアップ企業の第一選択肢で、リモートワークも多い。 給料450〜500万円、業務委託は月50〜60万円 データベース設計、React, TypeScript も勉強すると良い キャリアパスは、 Rails → Go, SRE、エンジニアリング・マネージャー
今までのモローの主張は、 KENTA がRuby on Rails サロンをやる目的は、 ポートフォリオを作るための学習期間が長いので、 サロンに長期間入ってもらって、KENTAがもうかるので、Railsを勧めている Railsはオワコンなので、サロンに入っても、仕事は減っていく一方と言ってたのに、 今じゃ、KENTAと全く同じ事を言ってるw
Linux開発にRustで掛かれたコードが解禁された しかし Cで書かれたものを置き換えることはしない APIを変えることはしない
相変わらず三流ユーチューバーを引き合いに出すやついるのな
>>65 どこでも同じシンプルな結論が出てるな ・既存のものを書き換えるのは無意味 ・新たに作るものはRust一択 あまりにも既存コードが膨大だからね 長らくあらゆる環境で機能してたコードをリプレイスするほどまでのメリットはないだろう もし仮にそこまでメリットあるんだったら、即刻世界中からC/C++のコードを絶滅させてほしいわ
そうやってCOBOLのコードが維持それ続けてるんだよなぁ