次世代言語27 TypeScript Swift Go Kotlin Rust Nim
レス数が1000を超えています。これ以上書き込みはできません。
ここは歴代ずっとワッチョイ無しの自由な雑談ができる次世代言語スレ
あと特定の言語を排除しようとするおかしな人は無視していい 新世代プログラミング言語 【日経Tech】
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/042800230/042800001/
https://cdn-xtech.nikkei.com/atcl/nxt/mag/nc/18/042800230/042800001/01.jpg
21世紀に生まれた新しいプログラミング言語を採用する企業が日本でも少しずつだが増えている。
手軽にアプリケーションを開発する用途には不向きだが、システムプログラミングにおいては抜群の適性を発揮する。
新世代プログラミング言語の使いどころを、先進企業の実例を通してみていこう。
新世代言語が得意とするのは、大量のトラフィックを多数のプロセッサコアを活用して並行処理したり、
高速な処理を実現しつつメモリーを安全に管理したりするプログラムの開発だ。
米グーグルは2021年4月、AndroidOSの開発言語にRustを追加したと発表した。
これまでは主にC/C++を使っていた。Rustであればバッファーオーバーランなど
メモリー管理に起因するセキュリティー脆弱性が生まれにくくなる点を考慮して採用したという。
グーグルはLinuxカーネルの開発にRustを適用しようともしている。
米マイクロソフトも2019年、RustをWindows OSの開発に使用する研究を始めたことを明らかにしている。
Goはグーグルが開発を始めたプログラミング言語で、動画配信サービスのYouTubeや
コンテナ管理ツールであるKubernetesの開発に使っている。 >>6
さがっていろケンシロウ
みることもまた戦いだ
わたしの拳わたしの戦い方は
いずれ必ず
おまえの役に立つ時がくるだろう >>5
設計図共有サイト、謎の半導体メーカー・エヌビディア!www >>10
そのこころは?
WASMが勢いつけてるから? >>5
こんな記事に真面目にケチ付けても仕方ないけど、この面子ならC#は右上のグループだろう
最近のC#は非同期処理のパフォーマンスが極度に最適化されていて、Goに引けを取らない >>10
WebブラウザでJavaScriptかWasmが必須だからTSは欠点あれど重要な位置を保つでしょう
Wasm by Rustだけでも行けるけど両者の異なる利点を両取りするハイブリッドが主流になると予想 マルチスレッドで使えないからウェブアセンブリ意味ないじゃんっていわれてたけど解決したんかい? >>5
Java C# より微妙に右に行ってるのは理由があってのことなのかね? Rustがパフォーマンスも生産性も最強ならISUCONで全然使われてないってのは何でなの? 生産性も指す範囲が認識違ってるからじゃない。
動くものを短い時間で作れるかじゃなくて、継続開発におけるメンテコストが小さくなるのが特徴なんでは。 難解でスパゲティ化しやすいからメンテコストは上がると思う。 >>19
なぜ真逆のことを言うのかしら
例えばもしスパゲティしてるとRustコンパイラによってスパゲティを無くす方向に誘導されたり見通しの良いコードになりますよね
メンテコストが低く済むのも特徴 >>20
従来のプログラミング言語より開発期間が延びることは、開発者も認めてる。 GoがISUCONでは圧倒的みたいだけど、Goは素早くパフォーマンスが出るプログラムを作れるってことが証明されてるな
またGoは継続的メンテの生産性も非常に高い
グーグルのような大企業やKubernetesなどクラウド関連のツールで使われていることから証明されてる
継続メンテの生産性を上げるためにはコードの可読性が重要なわけだけどGoほど他人の書いたコードが読みやすい言語を俺は知らない
機能を削りまくってオーバーエンジニアリングを不可能にさせてるってのがかなり可読性に寄与してると思う
あと標準ライブラリが充実してるのも可読性あげてる
つまり生産性で最強なのはGo。 >>16
nikkeiにそういうの求めちゃダメだから Rustを流行らせようと頑張ってるのは、セミナー商法の人たちだろ。
成果なんか出ないから、長期にわたって相談があり、報酬が得られる。 >>21
Rustは抽象的に開発効率よくプログラミングしやすいため開発期間は短くなってるな 逆効果になってる事をいまだに分からないバカ専用言語 基本的にはプログラムは書いた通りに動く
想定を超えた効果が生じるという主張自体が、基本からかなり乖離している >>29
"ストリーマー rust"
のトレンドと比較して相関を見ればハッキリとわかるけど、ゲームのRustに見事に引きづられてるだけだぞ >>30
プログラミング言語のRustと指定されてる。
絶対何か工作してる。
韓国面に落ちてる==統一教会の影。 統一教会がセミナー商法で儲けようとして自民党の先生方とタッグを組んだってことでは? 行き過ぎた金儲けは経済の失敗でしょ
エンジニアリングの失敗みたいに言うなよ Rustは世界で全く注目されない失敗言語。
日本でのみ注目されてるのは、何らかの工作がある。
統一教会の信者になっても、幸福にはならない。 RustはC++のサブセットだから、普通は「C++でおk」ってなる。
それが世界標準。
日本だけ異常値を示すのは、何らかの事情がある。
統一教会とか統一教会とか統一教会とか。 統一教会のマネー部門が「プログラミング教育必修化に伴う新規事業の立ち上げ」と関連して「Rustの国家言語化」を推進してるんだろ。 「ファミリー」「世界」「みんなの」ってつく教材が出てきたら、統一を疑え。
全国の小中学生が統一の教科書で学ぶ異常事態。 hello worldをhello 世界って書いたらアウトってことか 安全性と可読性がトレードオフになるケースについてrust厨は全く考慮してないんだよな。 それ以前に、メモリーでバグるのは初心者だけなので、戦力化した後は必要とされなくなる機能。
そこに全振りした言語が受け入れられるわけはなく、実際、世界では受け入れられていない。 ちなみにわたくしはC++で書く時も、newとかdeleteとか、もはや書いていませんから。 >>43
全く同じことをしているのにoptimized.cやoptimuzed.cppの可読性が低いのはC/C++が原始的というか抽象度が低いためだろう 何故か、ここのスレでは銀の弾丸みたいに叫んでる人が目立っているのが、気になる。 >>39
教科書にそんなもんぶっこんで来るのは統一教会くらいしかないからな。
サタンがどうとかメシアがどうとか、必修プログラミング教育にぶっこんできたら、99%統一教会と思え。 なんか単なる手続き型から外れれば外れるほど流行らなくなるのを見てると初心者を取り込むことがいかに大事かということを考えさせられる 銀の弾丸って単語だけ流行らせて
「人数を2倍にしても時間は半分にならない」って事実を教えなかったことを反省しろよ
逆に時間を何倍かにすれば猿が人に進化するのでは? >>51
手続き型の方が分かりやすいと勘違いしてしまうのは手続き型で学習を始めた場合の初心者のうちだけで
次のステップでだらだらと手続き型で書くのは分かりにくく保守性も悪いと気付く
そして手続き型な部分を完全に排除してしまうと効率悪いことも理解できると最善に組み合わせたハイブリッドへ進む 昔話では、正直者を完全に(排除ではなく)コピーするのが非効率と思い込んで
ハイブリッドへ進んでしまう物語が多い >>53
そうは言うけどもパラダイムを変えたりちょっとしたルールをつけ足したりすると途端にユーザーが減ってるように思うんだよな
プログラミングが暗にCを前提にしているというか >>55
C++は安全でないコードをコンパイラが通してしまい実行時に苦しむ古い言語
基礎がしっかりしていないのに増築を重ねて洗練されていない悪い言語 >>56
末端のユーザーなんてどうでもよい
自分たちがいかに全体(デバッグ時、メンテ時、実行時リソースなど含む)を効率よく出来るかが重要
様々な点で効率の悪い言語が簡単だからという理由で世間で普及していてもどうでもよい話 >>58
その全体の環境を良くしていくのはその言語のユーザーたちで、結局頭数の多い言語が優位になると思うんだが
いやこの辺りは卵が先か鶏が先かみたいな所もあるけれども >>59
C++のように筋が悪いと
頭数の多さで色んな仕様拡張をしても
使われないものを増やすばかりで
環境も良くなっていないし優位にもなっていない 次世代とスレタイあるのに何故今の言語を必死にアピールしてるのかね。
せめてその言語の将来のバージョンでの新機能とか廃止される機能について書けないのかね。 次世代wと書くだけでおバカさんが爆釣だからに決まっとるやん 隔離スレあるからRustアンチ装ってネガキャンしていいよね ジェネリクスを採用するか落とすか
実数クラスは複素数クラスを継承するか
この辺りで時間が止まってるのが現実 C++はメタ言語でもあるので、言語設計者が使い方を決めるのではなく、ユーザーが使い方を決めるのですよ。 メタ言語なので、頭の良い人が使えば次世代を今使えるし、頭の悪い人が使えば昔のパラダイムで使うことになるのでは? そもそもRustはC++のサブセットなので、最終的にはC++を使いこなせるようになることを目指すのでは? >>68
サブセット?
C++コンパイラはメモリ解放とデータ競合の安全性を保証できるのてすか? >>16
Rustはまだ分かるがGolangがさらに右に行くのはおかしいな。 最近のC#は値型のサポートが強化されていて、GCを避けたRust的なタスクもある程度カバーできるようになっている
少なくともGoよりは右だな あたりまえだけどGCはあった方がいいに決まってる
そんなにGCがないことが重要ならISUCONはみんなRustを使ってる
Webやサーバーサイドのプログラムは他にボトルネックがあるからGCの有無なんてどうでもいいんだよ
そんなの気にせず適当にかけたほうがよい
Rustは適当に書くことはできない
だから適していない GCが走ることで一時的にレイテンシが増大することがあるから、
安定したレイテンシでレスポンスを返すことが重要ならGCを避けることも検討する必要があるかもしれない
まあWeb程度ならプロファイル取ってGCに大きな負荷をかけている「極一部の」コードについて実装を修正するだけの話なので、
Rustに書き換えようぜとか言い出す極論馬鹿は無視してよい >>75
現実にRustへ書き換えるケースが多い理由は
サーバコスト・クラウドコストの激減など様々な理由があります
特にRust利用によるコスト激減は大きいです >>74
GCがあったほうがよいとの主張を初めて見ました
GCは無い方が当然有利です
ただしRust登場以前はGC無しだとC/C++となりメモリ解放がプログラマーの責任となり複雑な場合は穴が発生しがちでした
今は自動メモリ解放されるRustがありますからGC無しでもそのような問題を避けられます >>80
生産性のことを言ってるけど
C++やCをあらゆるプログラムで使う人ってなかなかいないよね?
RubyやPythonが流行ってたのはGC言語だからでは?
Rustはその流れに逆行してるのでC++やCを置き換えてもRuby Python. Node Goを置き換えることはないね あとRust信者はGCを毛嫌いしているが最近はどんどん進化してる
コンピュータ側の進化に期待しないのはなぜ?
それに対してユーザーに責任を丸投げしてるのがRust
OSやドライバ開発者には良いが大半の開発者にとってそれは無駄な負担となる >>82
ウソはよくないな
Rustの世界的な利用調査結果を見てもOSやドライバなんかではなく
圧倒的なRust利用トップがサーバーサイド/バックエンド分野
軽くて速くてプログラミングしやすいRustが使われる
そしてリソースコスト激減から反応性の良さまで恩恵を得られるのがRust Rustで書くとスパゲティ化を防いで読み書きメンテしやすい良いコードになる利点もありますね >>78
クラウド利用料なんて大抵はDBが大半を占めるし、人件費に比べたら安いもんだよ
仮にAWS費用が月100万円として、そのうち20%がアプリのコンピューティング費用だとしよう
もしRustへの書き換えでコンピューティング費用が50%になれば月10万円の節約だ
単価200万の凄腕Rustプログラマが一ヶ月で作業したらペイするまでに20ヶ月かかる
そして以後もRustを使える高単価の人間を飼う必要があるわけだ
Rust信者としても、GC言語しか使えないプログラマよりも自分達の単価が大幅に高いことは否定したくないだろう? なんでもかんでもRustが良い、っていってるのはどうみても仕事経験の薄いキッズだろ
納得なんか不可能だから構うなよ >>86
クラウドでDBのコストが高いのはRDB利用時だけだぞ
RDBはコストが高いだけでなくパフォーマンス面でも不利だから利用を最小限にする
そしてクラウド提供の安く高パフォーマンスの非RDBなDBを用いたり自前の非RDBなDBサーバをクラウドに構築
いずれにしてもRustが活躍する領域 正直Rustの仕事なんて一度も見た事が無い
業務に使われている事が本当にあるのか?
少なくとも日本で採用するような会社殆ど無い気がする >>81
RubyやPython以前にもGCあり言語はいっぱいあった。
ってかGCの有無で言えばGCあり言語のほうが数だけは多そう。
でもそれら全てが流行ったかというとそうでは無い。 >>86
それDBサーバー費用が高くなっているは何でもかんでもSQLに押し付けているパターンの時ですよ
技術力のないところはそれで仕方ないでしょうけどそれは無駄で非効率ですから普通は可能な限りNoSQLにして費用を下げるとともに効率を上げます
SQLを使わない代わりにその様々な処理のコードを書くことになりますが最適化が出来るため高速化と費用激減の両方を得られます
そこで使われている言語はGC言語よりもRustが好ましいことは言うまでもないでしょう じゃあISUCONでRust出て予選通過してみたらどうなの
100万円もらえるし学生でも優勝してたりするぞ
Rustキッズ頑張れよ笑 そんなにコストコスト気になるのに人件費を気にしないのはなぜ?
個人開発ならともかくRustキッズ曰くエンタープライズでバックエンドサーバーサイド分野で広まりまくってるらしいじゃん Rustでエスケープ解析に触れない奴は勉強不足だから無視していいよ。 十分な実務経験があってRust推す人はどちらかというとRDB好きな人が多い印象だな
RDBは固定長レコード時代の設計思想を色濃く受け継いでいて、
変なORMを噛まさずに正しく使えばクライアント側のメモリ管理が極めて効率的だからRustとは思想的な相性が良いと思うよ Rustキッズも草だがISUCONキッズも草
二人ともまともな仕事探しなよ >>97
大手ITの様々なサービスがなぜ非RDB利用なのか
クラウドでなぜ非RDBが提供されているのか
クラウドが提供するRDBの高コストなど現実を理解していれば
RDBの利用を必要最小限にした方が有利なことが理解できるだろう >>94
Rustで予選突破しましたという記事がすぐみつかるんたが… Perlが1/5に対してRustは1/19
つまりPerlエンジニアの方がRustより強い Goの半分ぐらい通過するようになってから普及してると言ってくれ 競技プログラミングもISUCONも実際にある仕事と離れすぎていてゲームの範疇といった感じ
もちろんアルゴリズムを考え付き実装する能力やシステムの問題点を見つけ出し改善する能力は非常に重要だけど時間で競うものではないね
ましてやそこでの使用言語の状況に意味はないでしょう 何かと優劣付けたがる生き物っているけど
割と煙たがられてたイメージだわ >>103
煽ったつもりが単なる無知だったという話だから
そのあたりどうでもいいよな 2019年のRust参加者は0組だったことを踏まえると、ISUCONでのRust利用者は異常にめちゃくちゃ増えてるから、これからどうなるかはわからんけどね
2019年はRustの参加者0組だった >>103
むしろそこにCもC++も無いのになぜ非GC言語からRustだけが参戦できているのか?が重要なところだ
Rustという言語がカバーできる領域の広さ強さを示している
過去にはC++での参戦もあったがC++は消滅したのもそれを裏付ける
あとISUCONではこの前までRustには参考実装すら用意されなかった
今はGoの参考実装から移植してくれる人のおかげで用意されるようになったようだ
とはいえど初期状態ではGoが起動といったように扱いに差がある
そのほか様々なハンデがありつつもRustはむしろ健闘しているといえる Goの利用者なんてもはやペチパーみたいなもんだし、本当にRustが強いというなら他言語利用者よりもダントツな通過率を見せてほしいものだ ISUCONよく知らんけど
言語の速度が直接影響を与えるような課題はまずないでしょ
しかしなぜそこまでGoが多いのか理解不能ではある >>113
グーグルトレンド見ればわかる。
Rustユーザーは殆ど存在しない。
一方、Goはすでにメジャー言語のひとつになってる。 >>114
なぜ>>103のISUCONで使用された言語一覧に
SwiftもKotlinもC#もC++もCも出てこないのに
なぜかGoやRustやPHPやPerlがあるの?? >>115
ISUCONが何か知らないけど、キミの情報だけ見ると、アプリ用言語とウェブ用言語で使われる使われないが分かれてるように見えるよ。 勉強会と称して会社でセミナー開いて社員から参加料徴収してそう >>116
その分類だとGoやRustはどっちなの?
ウェブ用言語? >>118
HTMLの次に手を出すのがJavascriptやRustじゃないかな? Goももう終わりそうな感じがするのだが
webでもAPI用途で使う分にはアリかも知れないがそこまで高速化がアプリで必要無いんだよね
ボトルネックは大体RDBとかだしPHPで十分なんだよね >>115
運営が実装を提供してる言語に限定されるからだよ ウェブの人たちって信仰に篤いでしょ。
このスレのRust民の書き込み見る感じ、ウェブの人たちじゃないかなあと思うよ。 >>121
ISUCONでの使用言語は自由で制限なし
運営が需要から判断していくつかの言語で参考実装を提供するけど
それは無視して自分で自由にコードを書いてもよい
例えば以前はRustの参考実装は提供されなかったけどその時からRust利用での参加者はいた
ISUCONで使用する言語は任意であり各参加者が自由に選べる >>120
PHPはないわ
Typescriptならともかく
今時型推論のある静的言語以外ありえないわけだよ
PHPなんてゴミは早く撲滅しないといけない >>124みたいな型を連呼する奴ってロクにプログラム組めないんだろうなぁ
現実的な話サーバーサイドにjsも無いけどTSとか余計に無いw
こんなトランスパイル前提の言語なんて確実に消えるから
PHPすら扱えないならこの板来るなよw >>127
C10k問題知ってる?Nodeが流行った理由が非同期プログラミングに強いことだけど
何でトランスパイラ前提だと消えるんだ?
そんなことより動的型でPHPだとまともに保守ができないゴミプログラムが生産されるだけ
まさにゴミそのもの そもそもRubyやPHPみたいな動的型付け言語が流行った理由ってのは
C++やJavaだと変数の宣言ですら型定義が必要で面倒臭いところ
それに対して最近では静的型付けも進化して型推論装備が当たり前となった
これに伴い簡単に扱えるため動的言語をあえて使うメリットも無くなった
Pythonとか型ヒント機能を追加して静的型付けの特徴も取り入れてることから
今時動的型付けなんて時代遅れだということがわかる
型ヒント追加したなんちゃってPHPよりTypescriptやGoやRustの方が生産性は高い
新規プロジェクトでPHPなんてどこも採用してないわ うわコイツ絶対仕事してないわw
普通にサーバーサイドはPHPが一番多いし
お前どこの世界にいるの?w
型連呼する奴は仕事していない事が良く分かるw 昔ながらのLAMP環境ならそりゃPHPしかないよね >>94
isuconみたいに瞬発力重視のコンテストでRustで参戦するとか狂気な気はするんだよな。
納期の縛りなくベストを尽くすならいい言語だよ。 自社サービスなら比較的コードと密になるNoSQLの判断も可能やけど
SI案件だと無責任すぎてキャッシュ以外には導入躊躇するよ 当然だけどRDBMSの上位互換なNoSQLなんて存在しないしケースバイケースだよ
用途にジャストフィットするなら採用を検討すればいいけど、
ノウハウがないなら耐久試験や障害復旧のシナリオテストなんかもしたいし、かなり時間がかかるね
そもそもRDBでは実現困難なものがあるからそういうのでは使うべき
Redisにあるデータ構造が必要ならRedisを使うし、全文検索が必要なら検索エンジンを使う
RDBで十分なのに無理やりNoSQLをなんでもかんでも使おうとすると、正規化やトランザクション処理が得意なRDBと違って、データが冗長になったりロック処理でわけわからんくなる
あとコストについても、速度がウリなmemcachedやRedisなんかは全部メモリに載せないといけないから大量データを処理するとメモリバカ食いになってメモリたくさん積んだマシンが必要になる
そこも結局はトレードオフだ >>89
トヨタとかいう地方にある会社で募集してたらしいぞ 既存システムは過去資産からPHPが多いね。
でもまぁ過去に安易に書いちゃってたから、うちの他部署もバージョンアップするのに苦労してるわ。動的言語はダメだなと思った。 アップデートってバージョン0からバージョン100に飛んだ方が安上がりだよな
1ずつ増やしてたらコスト100倍 rust案件、なくはないがこれ明らかに前任者が逃げ出したなって案件ばっか。 新規はいいが保守案件なんて誰がやりたがるんだろう
お前らやりたいか? >>139
そんな嘘を付いてまで逆恨みしている理由を知りたい >>141
現実を見ましょう。
ttps://jp.indeed.com/Rust%E8%A8%80%E8%AA%9E%E9%96%A2%E9%80%A3%E3%81%AE%E6%B1%82%E4%BA%BA?vjk=31e817738ecb93b4 Rustの引継案件はやりたくないな
今では誰も使ってない変なライブラリだらけになってそう
Goなんかはその点では古くなりにくいよね >>142
Rustの求人多いんだな
高給でいいな 型付けって、静的動的よりも強いか弱いの方が重要じゃないの? >>144
かなり高待遇だけど、こんな高待遇じゃないと、人来ないって事? >>146
Rustは高速かつ安全で保守性もよいためその認識と需要が広まりつつある
リソースコスト削減となる点と需給バランスにより今後も高給の傾向が続くだろう フリーランスで業務委託って責任負わせるって事か?w
準委任しかやってられんよw 整数は整数と明示したいが32ビットとか64ビットとか明示したくない
そこで型名をTとする >>149
おまえ業務委託も知らんのかw
そんくらいは勉強しとけ >>147
こんなフワッとした内容で業務委託とか、振る方も受ける方も怖くない?
>>148
大手以外、メリット出すの難しそうだね。スタートアップとか大手とか、開発得意にいているところ向けなんかね? >>153
小規模なところはcrypt関係みたいに速度が最重要でもなければ技術力があってもメリットでにくい
今なら技術力アピールになるというメリットはある >>120
単語カウントのベンチで実はPHPがめちゃくちゃ速いことがわかったけどWeb系の人はそこには何も言わないのな
あれはマジで予想外だった
スクリプト言語最速と言われるV8と五分だった シェルスクリプトでは、Cと同じ速さのコマンドがあるのは常識で分かる
だがそれを他のスクリプト言語で真似したら多くの人が認知的不協和に陥る >>156
速くても生産性の観点で論外
静的型付け以外うんこ あと非同期プログラミングがまともにできないのでゴミ 大手で素のPHPが選ばれないのはメンテナンス性が低いから
PHPが7以降速いのはある程度やってる人なら知ってるよ >>159
じゃあお前はシェルスクリプトも使わないのかよ >>162
使うわゴミ
ただしシェルスクリプトはちょっとしたものしか使わない
PHPはちょっとしたものも大規模なソフトウェアでもどちらでも話にならない 正直、Cに型は無いようなもんだしな。
PHP良いぞ。単ファイル単機能で作ったら保守性もそこまで下がらん。
あれはHTML返すから地獄になる。
そもそも本当にPHPやってる会社は静的解析ぐらい内製してるでしょ。 >>164
metaくらいしかPHPやってないってこと? facebookは型付きの独自PHPを実装してそれ使ってるらしいからね
過去の資産が多すぎてそうするしかなかったのだろうけど PHPを開発に使ってる会社って事業初期に大量のPHP資産が作られてメンテせざるを得ない会社、っていうイメージしかない ウェブって、当たるも八卦当たらぬも八卦だから。
PHPで始めるのは合理的。
PHPは速いので、当たった場合もリファインまでの時間を稼いでくれるし。 YouTube で有名な雑食系エンジニア・KENTA が、PHP, Scala をオワコン認定した。
これにより、優秀なプロが使わなくなるので、
ZOZO はLaravel だけど今後、良い開発者を集められなくなる
TIOBE の5つの絶滅する言語が、Ruby, Haskell, Objective-C, R, Perl
PHP, Scalaは、これに入っていなかったのに、KENTAに認定された
KENTAの天敵・SES のモローも、Rubyはオワコン、
これからは、Java, PHPの時代と言っていたが、
下の動画では、Railsのキャリア相談まで始めたw
【2022年版】Ruby on Railsの将来性
www.youtube.com/watch?v=YWKxh3KoNsY
日本では益々、Rails 1強へ進んだ。
でも外人でも、試作品をJavaScript で8週間掛かったのが、
Railsで2週間で作れたという香具師もいる。
サーバーをJSで作るのは馬鹿らしい
上場して時価総額1兆円のGitlab も、Railsを使い続ける宣言をしている HaskellはRustと同じコンセプトだから廃れないだろ。 >>161
>>169
PHPは遅いだろ
この前の単語カウントのベンチでもC++より5倍以上も遅かった
> 0.27 C++
> 1.40 PHP 商用はZend Server使うので、滅茶苦茶速いっすよ。 >>174
ベンチでも使われた普及しているphpはZend Serverと同じZend Engineが使われている 待望の新言語
オブジェクト崇拝は罪! 古ヘブライ文字で記述する創世的プログラミング言語が降臨
そこはかとなく神聖な感じのするソースコードがやんごとない
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1431426.html >>176
オブジェクト指向ではない理由が
「偶像崇拝は禁止されている」
ってのがいいね、徹底してるわw >>168
そういうのはわりと仕様がシンプルだから全リニューアル難しくないし
余りに酷い作りだったら全リニューアルすればいいんじゃないかと思う 確かに、ペチパーって難しいシステム構成をやりたがらないから、意外とPHP資産って扱いやすいんだよね
過去にSIerが入って無茶苦茶になったシステムに比べたら遥かにマシ その点で言うとJavaとかRubyで組まれたものがわりと厄介 そうそう、それなりに頭使って真面目に作られた、しかし複雑さを制御できるだけのスキルが開発者にないシステムが一番厄介なんだよねえ
難しいものを難しいまま実装して変なデータ連携が大量に生じ、そのくせ目的は正しいことが多いから業務と切り離せなくなる Javaの場合標準ライブラリの設計が汚いからそれに習って作られてるシステム自体も設計が汚くてどうしようもないんだよなあ
オブジェクト指向が主流じゃない時代にようわからんヤツが指揮を執って無理やりクラス書いてたってのもあるだろうけど Rustをやり始めてわかったんだけど
一般的に設計が下手だとデータの依存関係がぐちゃぐちゃになりGC言語はそれでも通っちゃうのに対して
Rustで通すにはデータの依存関係を整理するのが一番の近道となるため良い設計にさせられしまう
結果的にRustで書いたコードはメンテナンス性も良くなるという良い副作用が 文盲か?
データの依存関係が整理されてるなら、そうでないやつよりいい設計と言えるだろ。
俺はRust使ったことないけどね。 依存関係がぐちゃぐちゃだとRustでは通らないというのはAがBに依存していてBがAに依存しているというような循環参照があるとRustでは通らないってこと?
循環がある複雑な設計ができないというのはメリットかもしれないけど、どうしても循環が必要な場合はRustは使えないってこと? >>187
共通部分Cを別に括りだしてAとB両方がCを参照するようにすれば大半の場合循環参照は回避できるはずだけど GCは関係なさそう
無理矢理こじつけるならvirtualデストラクタに関係あるが
重要なのはvirtualの方だ >>187
Rustでもそういう互いに依存しあう形も可能だがその分だけ少しだけ複雑な型となる
つまりRustではそんな形を取るよりもスッキリと依存関係が整理された良いデータ設計をした方が書きやすい
そのためRustで書くと自然に良い設計のプログラムになるよう誘導される つまり、rustはenterprises向けではない RefCellとか使うと、実行時に借用チェックしてパニックが起きうるんでしょ?
そうするとRust使う意味がなくなっちゃうしな >>192
いうてもGoogleやMSやFBなんかは積極的にRust導入していくって言ってるしな gotoはスパゲッティだがcomefromは良い設計という説がある
これを拡大解釈すると
traitとかinterfaceとかの実装側だけが依存関係を宣言するのはスパゲッティである
逆にエンドユーザー側から依存関係を列挙したい
つまり、追放されていたCの共用体の汚名返上をした方がいいのでは >>195
共用体はC++じゃなくCじゃなきゃダメな組込みやカーネルなんかの分野だといつでも現役だけどね >>195
Cの共用体は時代遅れの遺物。
例えばRustでは、排他データ共用であるタグ付き共用体=ボディ付きenumと、同一データ共用であるtransmuteの、
役割の異なる二つの機能に分化され利便性も安全性も向上している。 >>187
Weakとか使えば良いがこれまでみたいな雑な処理はまず無理
全てのデータの参照を完全に頭の中で再現できる設計にしなきゃダメ Rust使うかどうかに関係なく互いに依存しあうコードとかぐちゃぐちゃな設計は書かないでってみんなに呼びかければいいじゃん。 プロトタイピングレベルだと設計なんて気にしてられない。
Rustはそういうのには使えんな。 いやいや設計のためにプロトタイピングするんだろ。
本来プロトタイプは捨てるのが前提だから。
捨てる前提だからRust使うまでもないのは同意で、それこそ動的型言語でさくっと作るのでもよい。 Rustで実用的なソフトウェアを作るにはC/C++の10倍の労力と注意深さが必要。 >>201
違うよ。設計のためじゃなくて問題領域の情報収集のためにやるんだよ。
プロトタイピングの段階で設計を考えるのは「早すぎる最適化」の典型。 >>202
むしろ静的型付け言語の中でRustはそのあたりについてかなり楽な言語やろ
注意深さなんて無くてもコンパイラが教えてくれる
コンパイル時点で問題を取り除いてくれるから労力も少なくて済む >>204
「プロトタイピング」て知ってる?
「問題領域」て分かる? >>205
Firefoxめっちゃ使ってるんだけど
HTML、JSのデバッガとしてはChromeよりも遥かに優秀なんだがな >>205
Rustは実用的になったのがようやくここ数年だからまだ少ないと思うけど
逆にここ数年に出てきたものの中だとDenoとかTauriとかRust製が目立ってるかな Firefoxって、そんなにRustで置き換えられてる?
元が大きいのもあって、大して置き換わってなかったような。 >>209
むしろ個人と個人の戦いを回避したいから集団を作らせようとしている印象だが >>203
お前の言う設計は範囲が狭いな。逆に俺の言う設計は広くておおざっぱ過ぎるか? >>212
なんで安全のために全部Rsutに置き換えないの? >>215
目的のためなら何でもするとは言ってないから
何でもするとかいう方針自体が全然安全じゃないから >>214
設計の範囲も狭いが
プロトタイピングという言葉の範囲がめちゃ狭いから噛み合わんのやろ Cloudflare WorkersがC, C++, Rustに加えて
Python, Scala, Kotlin, Reason, Dartに対応したけど
Reasonなんて使ってる奴おるんか?
https://blog.cloudflare.com/cloudflare-workers-announces-broad-language-support/ >>220
Rustでは無理な部分もあるんですよ。
HTMLの仕様を読めばわかるけど。 >>222
プログラミング言語によってHTMLを扱えたり扱えなかったりすることはありません >>223
仕様書を読めばわかるんですけど、HTMLは相互参照の山なんですよ。
ですからRustには荷が重いというか、HTMLはRust殺しなんですよね。
これ、Rustが悪いのかHTMLが悪いのかというと、自分はHTMLの設計が古臭いと思いますね。
理論的にはRustの方が正しいと思います。 そもそも現在のHTML仕様はJSとC++を前提に書かれていて、その他の言語で取り扱うには、特有の事情を考慮しないといけないんですよね。
C#で取り扱おうとか、Javaで取り扱おうとか、そういうのはあまり問題ないんですよ。
C++同様、フルコースの言語なんで。
ところが、Cで取り扱おうとか、Rustで取り扱おうということになると、いろいろ考える必要がある。
これはいずれHTML仕様のほうを修正していくべきなんでしょうね。 >>225
初期のwebサーバーはCで組んでたけど、特に支障はなかったよ
何か勘違いしてないかい? Rustでちょっと複雑なことさせると
すぐスパゲティになっちゃうんだろうな >>225
C++が一番向いていない
C++でDOMを扱おうとすると参照カウント必須
そうじゃないと使われなくなった断片を回収できない >>229
参照カウントを使えばC++でも実現できるのだから全く問題ない
誰から参照されているのか一覧リストを管理するよりも参照カウントが一番軽い
カウントがゼロになったらメモリを解放できる こんな感じだと、Rust好き的には、まず現実世界をRustで扱いやすいように修正するところからだね~ >>227
彼はプログラミング経験があまりないいつもの妄想バカ
だからC++では扱えるけどCやRustや他の言語では扱えない!とかバカなことを主張している >>230
それならC++以外の言語でも実装できてしまう
C++でしか扱えないって嘘じゃん >HTMLは相互参照の山なんですよ。
複オジなみのアホ迷言だなww C/C++のプログラム用のライブラリをRsutで書こうとするとグルーコードまみれになって危険と言いたいのか? このスレに場違いなC++君がいつも頓珍漢なことを言ってるのは
叩き道具としてC++を持ち出しているだけであってC++でプログラミングしているわけではなく無知なため >>222
無理なところまでRust使う必要ないだろ?
なんで全部Rustでないとだめなのよ?
100と0しかない世界線の住人か? 効率的市場ってやつ?
0秒で100年先を織り込むという >>222 >>237
Rustで無理な部分なんて無いです
全部Rustで行けます C++で枯れてるモジュールをRustなどで書き直す必要はないわな そういうこと
Rustに全て書き換えることは可能だけど
既にそういう状況にあるものを書き換える労力に意味はない
だからどこの企業やプロジェクトでも同じで新たなシステム改変部分からRust使用となっている >>234
まあ、<a href="...">...</a> のことを言ってるならあながち間違いじゃないけど、プログラムから扱う話しとはあまり関係ないよね >>224
違いますRustの方が間違いです
doubly linked list作れない時点でまともな言語ではありません HTMLってw
またおじさんが知ったかで暴れてるのか
何回論破されて負けてもこの調子だし話にならんな
本物はさっさと消えてくれ AWSがプログラミング言語「Rust」を使っている理由
https://japan.zdnet.com/article/35183866/
Amazon Web Services(AWS)は、同社のエンジニアたちがプログラミング言語「Rust」を
使っている大きな理由として、エネルギー効率の高さを挙げる。
AWSは早くからRustを採用し、Rust Foundationの創設にも携わった。
現在もRustの普及に熱心に取り組んでいる。
AWSのソフトウェアエンジニアで、Rustの普及に取り組む
Shane Miller氏と主任エンジニアのCarl Lerche氏の投稿によれば、
Rustはメモリー安全性を高め、セキュリティ関連の不具合を減らす役に立つだけでなく、
PythonやJavaよりもはるかに「エネルギー効率に優れている」という。
Amazonは、2025年までにデータセンターの100%を再生エネルギーでまかなうという目標を掲げ、
データセンターの環境負荷の軽減に取り組んでいる。
Rustの採用はその一翼を担うという。
Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」がある。
「CやRustが他の言語よりもエネルギー効率に優れていることに驚きはない。
衝撃的なのは、その違いの大きさだ。CとRustを広範に採用すれば、
控えめに見積もってもコンピュートに使用されるエネルギーの量を50%削減できる可能性がある」と
Miller氏は述べ、その根拠として、C、GoogleのGo、Lua、Python、Ruby、Fortranなどをはじめとする
複数の言語のエネルギー効率を相対的に示した研究結果を紹介している。 弱参照の目的が「強参照のバグを回避するため」と誤解されてるんだな
生ポインタを安全にすることが目的だと思った方が現実に近い
unsafe生ポインタでできることは安全な弱参照でもできる >>194
ここで言うエンタープライズは、月数十万のバカにいつまでも確定しない要件を曖昧に実装させるような泥団子システムを作る業界のことだと思う。
Rustだとコンパイルが通らないからゴミを検収に出して時間稼ぐみたいなテクニックが使えない。 >>245
そうか?いうほどFirefoxはエネルギー効率良くないです。なんやかんやいうても一番はOS標準搭載のブラウザーでmacOSならSafariでWindowsならEdgeです
いうほどFirefox常用してるけど早くもないし、終了時が重いのはやめてほしい Web開発でのデバッグ用途ならFirefoxの方が使い勝手がいい >>229
その通りですが、仕様がC++向けに書かれているので、問題ないんですよ。
ご存じの通り、現在のHTML仕様は実装をそのまま仕様にするようなものなので。 ちなみに相互参照が多用されているので、参照カウントでは解決できないですよ。
そこがHTML仕様の厄介なところです。 >仕様がC++向けに書かれているので
この妄想の元ネタってなんなんだろうか。ちょっと気になる。 任意の妄想を書き込み可能な脆弱性
に反応して脆弱性を突くだけの機械的なムーブなのでは >>245
AmazonもRust派なのかよ
AWSの各サービスが次々とRustで書かれているのか GAFAMの中だとAmazonが一番Rust推しだと思う
MozillaのリストラのときもRust開発者大量に採用してたし >>245
エネルギー効率が高いって、もっとソフトウエア的にわかりやすくいうと何を表してるの?
同じことをやろうとしたときのCPUの演算回数とか? Rust草創期、財団設立に関わったことで、引くに引けなくなってるのでは?
損切りできない体質は悲劇を招きますよ。
もっとも、一部門の話に過ぎないとは思いますが。 >>258
Rustは実行が速く省メモリで効率がいい
使用リソースが少なく済み
エネルギーも少なく済み
料金コストも少なく済む >>258
アマゾンは一人一人に対して個別のHTMLを返すんですよ。
もちろん、JSで読み込むような部分もあるんですが、そういうのは広告のようなもので、価格の提示など本質的な部分はサーバ側でHTMLに組み込みます。
したがって電気代が大変でしょうね。
従来の産業では、製鉄所が自前あるいは共同の発電所を持つことが当たり前ですが、アマゾンも発電所をお持ちかもしれませんね。 >>260
Rustで実用的なソフトウェアを書くことは難しく、Rustの開発主体であるMozillaでさえ自身のブラウザの二割しかRustを適用できていません。
いまとなっては、失敗だったと認めざるを得ないでしょう。 >>262
みんなそこまで言わないように気を使ってるのに… はっきり言わないと、統一教会みたいに詐欺師がのさばりますよ。 >>259
Rust FoundationをGoogle・Microsoft・Amazonなどが共同で設立したのは昨年2021年2月ですが
あなたの言うRust草創期にAmazonがRustの財団の設立に関わったとはこのことを意味していますか? >>267
ドッグイヤーと言われるIT業界ですからね。 >>261
無知すぎて笑った
それはアマゾンの通販ページの話
アマゾンといっても>>245の記事に明記されているようにAWS (Amazon Web Services)つまり世界最大のクラウドサービスの話を他の皆がしている
AWSすら知らないで連投していて爆笑 まぁ日本ではPHPばかり使われるのがこのスレの流れでもわかるわ。
次のスレタイからは 次世代 の冠は外せよ。 Rust叩きしてる人がいつもおかしなことばかり書き込むので素性を怪しんでいたけど、
クラウドのトップシェアのAWSを知らないとは驚いた。
そういう常識のない人がRust叩きしていたと分かり納得できた。 Rustは一部の天才向けの言語
AWSの開発者なんて一部の天才しかいない
大半の開発者はAWSを開発する側ではなく利用して問題解決をする側
後者の人間がRustを使いこなしてサービスを作れるわけがない Webサービス音痴になっても言語まで音痴になるな! >>273
次世代言語の本命3つが公式サポートされたよ
AWSがついにRust、Kotlin、Swiftの公式SDKを導入
https://www.infoq.com/jp/news/2022/01/aws-rust-kotlin-swift-sdks/
Rust、Kotlin、Swift向けの新たなAWS SDKでは、AWS APIの固有のラッパーが提供される。
これにより、開発者がより使い慣れた一貫した方法でAWSサービスを操作できるようになる。
Amazonによると、各SDKは、各言語に共通のベストプラクティスを取り入れ、高度な言語構文を活用している。
たとえば、Rust SDKでは、非同期/待機、ノンブロッキングIO、ビルダーなどの最近の機能が使用される。
同じように、Swift SDKではSwift 5.5の同時実行機能が使用され、マルチプラットフォームがサポートされる。
さらに、Rust SDKは高速シリアライザーとデシリアライザーによって、
不要なコピーと割り当てを最小限に抑え、CPUとメモリの使用率を削減する。 Rust叩きの人はRustは知らないを通り越して
なんにも知らない人が多いな AWS Lambda がデフォルトで採用している言語は、
Java, Go
Node.js, Python, Ruby
C#, PowerShell
YouTube で有名な雑食系エンジニア・KENTA がオワコン認定した、
PHP, Scala は元から採用されていない
Laravel を使っているZOZO とか、Scala を使っているTwitter などは、
良い開発者が集まらないから、ヤバイ
AWS Solution Architect の米国年収が、
Ruby on Rails の1,300万円を超えて、1,400万円になった。
今は円安で、1,800万円まで高騰している
一方、Node.js は言語の平均の900万円。
Rails なら2週間で作れる試作品が、JavaScript で8週間掛かる
バグが多い・長時間掛かるなど、効率が悪いと年収が下がる >>277
AWSでHaskellサポートされたことあったっけ? AIが過去に何度か失敗していて今回も失敗するという主張と同じ道 アメリカでオワコンになると日本でごり押しが始まるけど、どういう仕組みなんだ? >>278
それらの支援が必要な言語と異なり
C++とRustは自力でCustum Runtimeを実装できるし
AWSによっても提供されており問題なく使える
AWS Lambda C++ Runtime
https://github.com/awslabs/aws-lambda-cpp
Rust Runtime for AWS Lambda
https://github.com/awslabs/aws-lambda-rust-runtime >>281
まず日本の原発が爆発する
次にアメリカはゴリ押しやめる
日本はゴリ押しを続ける ウェブサービスを作るのに、
C++ みたいなポインターとか、デバイスは関係ない
AWS とかウェブサービスなどは、
デバイスを抽象化して貸し出している層の話 アプリで通用しないからウェブへ逃げた言語のひとつでは? >>284
AWS Lambdaにしても課金単位が使用メモリ✕時間なので
高速で省メモリなC++とRustが圧倒的に有利
>>285
そのアプリのサーバーサイドAPIがクラウド上などにありRustが有利
あるいはデスクトップ上での完結アプリだとTauriのようにメイン部分がRust こんなことずっと言ってるのにまだコンテナエンジンさえまともに作れてないっていうね。。 少なくとも次世代言語は動的型付言語じゃなく型推論のある静的型付言語だろうな。 Node.jsより速くて色々と便利なDenoとか
Electronより速くてバイナリ生成も小さいTauriとか Tauriって本体はWebkitかChromiumだろ。
Firefoxならまだしも。 別に新興宗教を作らなくても伝統的なやつをコピーするだけでいいんだよ LinuxのカーネルはCでしょw
肝心なところにRustなんて使われない Rustは所有権システムのせいで他システムから移行するのがなかなか難しい
新規に作るならいいが既存システムをそのまま変えるのは厳しく構造を変えていかないといけない 人間同士の会話で詭弁と嘘をじゃんじゃん使う汚い手口を知ってるなら
Rustでもルールの抜け道を使って
PHP並みに汚い今まで通りの書き方ができるんだよ >>297
どんな言語でも既存システムそのまま別の言語へ変える労力はムダであり馬鹿げたプロジェクトとなる
一方でシステムを改変する機会に別の言語へ変えるのは問題ない >>247
検収する側としては、ソースにunsafeが入っていないかgrepして入ってたら検収しないとか、アホな事言うのも出てくるかもね。
最近も暴れてた人はRust擁護しているのかと思ったら、叩いてる方だったのか… 既に動いてる一体的システムを改変なしに他の言語へ移すのは移行用の後継言語へ移す以外だとコスパ悪いからあまり行われないね
もちろんAPIで分離されている別システムなら話は別で高速化のためにC++やRustなど含めて自由に他の言語へ可能 参照カウントしないポインタが欲しいだけならunsafeではなくWeakを使う >>301
コーダーにunsafe使われたらRust採用する利点無いだろ。
そのあたりは優秀なライブラリ開発者に限定して実装させるんじゃないの? 自分が使いたい時に使うでしょ
自分が何をやりたいのかを他人に判断させるな >>305
ならRustは要らないなぁ。
Rustは他人に「自分が使いたい時に使うでしょ」なんて言わせないための言語だよ。
自分でコーティングするならc/c++で十分だわ。 何の話かよくわからないけど
不便な旧言語のままでいい人はそれで構わないんじゃないの?
もちろんC++は不便だからCarbonなどが出てきている
そしてCarbonの公式FAQにもあるようにあくまでも既存C++コードのためのものであってRustが使えるならRustの方が好ましいと明記されている Javaの文化が歪んでいるのをRustに投影しているように見える
static変数が利用可能なのはstatic変数を使わせないためである
JNIが利用可能なのはJNIを使わせないためである unsafeが利用可能なのはunsafeを使わせないためである 目的は何々であるという説には陰謀論レベルの信憑性しかない ScalaとかHaskell好きだけどねえ
初心者が使いこなすのは大変だから流行らないよね 一定数に名前が知られている時点で流行ってると言って良いと思うよ Scala vs Haske vs Rustみたいなスレを作った方がいいかもね C vs C++ vs Rust だけでいいだろ
大方の興味はこの1点につきる >>315
RustはC++のサブセットだから意味ないと思う。 Zig が存在するのに、なぜ他の言語でプロジェクトを開始するのでしょうか? >>316
C++はデータ競合すらコンパイラが指摘できない
>>318
Zigは手動メモリ管理だから論外 そのとおりです。 Rust では、プログラムは常に malloc と free を呼び出します。 Zig では、メモリを最初に 1 回割り当てることができます。 Rust ユーザーが jemalloc を使用する必要があるのはなぜですか >>321
多数決主義じゃないかなあ
マイノリティの知識を利用できない アホジャップが生産性低いのは
メタプログラミングできないとの
JIS配列でアホみたいな足枷はめられてるから
USキーボードでDvorak配列は当たり前
俺たちタイプライターの時代じゃなくて
コンピューターの時代に生きてるんだよな
アップデートして時代に追いつこう >>322
一般論として全ての用途に有利なメモリアロケータはもちろん存在しない
またアプリケーションプログラムの方もその用途によっては標準とは別のメモリアロケータ利用が最適化に効くものも当然ある
したがってもし必要と判断した時に利用するメモリアロケータを変えられることが好ましい
調べてみると
Rustもそのようなメモリアロケータを変更可能な言語
jemallocはある種の用途で有利になりうるメモリアロケータ
そして両者を組み合わせて用いることに支障はないようだが何を問題にしているのか? Haskellのときも、世界が見限ったころに5chで流行り始めた。 Haskellは大量のgarbageを撒き散らすうえにGCが遅いため実行時間が遅いのが致命的な古い言語
しかし代数的データ型やパターンマッチに型クラスなど有用なものが多く後の言語に影響を与えた
30年前の言語をわざわざ次世代言語スレに持ち出してきて叩く人はおかしい Rustも世界が見限ったので5chで流行り始めてる。 937 デフォルトの名無しさん 2022/08/02(火) 15:13:23.73 ID:EoK+AbMq
>>936
>>1によるとRustは現世代最強言語だから比較として出てくるのは当たり前だろ
比較として過去世代言語を持ち出すのはレギュレーション違反ではありません
よろしくお願いします >>329
昨年Rust FoubdationをGoogleやMicrosoftやAmazonなど
世界の大手IT各社が共同で設立したばかりですが
どこの世界がRustを見限ったの? FacebookがRustを採用。
↓
Facebookの失墜。
↓
世界がRustを見限る。
Facebookが戦犯。 >>245の記事によると
世界でトップシェアのクラウドAWSがその提供サービス実装にRustを使っているようだぜ AWSだけでなくLinux OSもAndroid OSもRustを採用したから終わりの始まり Linux OSもAndroid OSもCで書かれてる。 Rustで書かれてるメジャーなOSって何かあるの? あったら何なの?無かったら何なの?
関係ないんだよお前には なんかGoもRustも違うんだよな~
求めてる言語じゃないっていうか
Cをベースにして欲しいんだよ俺は
C++は論外 >>325
メモリ安全を売りにしているRustだから、メモリアロケータもRust製に拘った方が良いとかは無い? ■Rust使用実績
<OS>
- Linux
- Android
<基盤、ミドルウェア>
- AWS
<アプリケーション>
- Firefox
<Webアプリ>
- Cookpad
- Dwango GCがメモリ解放を「遅延」する特性を
プログラミング全般に応用した遅延評価は
GCの失墜を象徴する芸術作品なんだよ >>350
メモリ解放の遅延と評価の遅延は対象も効果も目的も違うだろ。
同一視するのはさすがに無知過ぎない? GCが適さない環境でメモリ管理するいいやり方が所有権システムってだけなのでは?
GCが特に問題ならない環境でその所有権システムをわざわざ利用するメリットは? Haskellの場合は構文木のグラフ簡約がなければGCのグラフ探索もほとんど不要だよね >>352
静的型付けとか所有権とかは
難しいものでもなく慣れだけで簡単で
実際に使っていると大した手間も無く
メリットばかりが得られるんだよ
コンパイル時点で静的に全て決まるから
実行時にその分の無駄なデバッグなども不要
どの分野とか全ての分野で同じ
更にオマケとして
高速と省メモリが付いてくる
もちろん安全性も付いてくる 信者曰くデメリットなくてコストもかからずメリットしかないらしいけど
競プロでもISUCONでも全然人気ないし、エンタープライズでもほとんど見ないね UnityがC#からRustに乗り換えでもしたら、
私でもRustを扱える難易度かもしれない。 そもそもGCがボトルネックになるケースって相当なレアだと思うんだけど
GCをなくしたいモチベーションがよくわからない GCかどうかはどうでもいい話
高速&省メモリ
だと
エコ&利用者も快適&リソース料金コストも安い
つまり良いこと尽くしなので高速&省メモリを選ぶ
結果として非効率なGCは論外 エンタープライズでは開発コスト重視するからRustはコストの観点では論外だね
開発メンバが抜けた時に継続してメンテできるか?新たな人材の確保は容易化?を最優先に考えるから
コストで有利に働くのはあくまでも個人開発の場合だね NoSQL最強でRDBは不要おじさんw
無知そのものw なにがし言語が使える人材、なんて人材の探し方してるの?
それでエンタープライズは笑う >>352
メモリ以外のリソース、コネクションやファイルハンドラやらも所有権の枠組みで管理できるので並列処理でリソース管理周りのバグを出したくなければRustが理に適ってるシーンもある。
GC付きの言語でメモリ以外のリソースをGC的に管理しようとする取り組みとか無いのかね。
tryで囲んだりdefer書くとかで責務をいつまでも書き手に委ね続けるのは言語設計者の怠慢だわ。 イキってRustなんて使ったところで技術的負債になるだけ
あくまでもC++を置き換えるだけだからイキって採用しないようにしろよ エスケープ解析に触れないでGCと所有権を比較するのはさすがに無能すぎる。
あと、所有権に言及して設計の制約を無視する奴は詐欺師。
Rustはまず効率化のために制約の下でできる範囲で設計して、無理なら設計を破棄してやり直す(か、そもそもコーダーにやらせない)思想だろ。 >>360
現実世界だと大手IT各社がRustを採用しているのはどうしてなの? >>363
デストラクタ内でポインタをいじる処理を許せばGCの性能が死ぬ >>367
メモリ以外のリソースを持つオブジェクトを型付けしてやって効率的にするとかできないもんかね。
何にせよRustの適用領域が狭いのは確かだけどハマる領域だとこれ一択レベルだろうな。 >>369
Rustはほとんどの領域に向いている汎用的な言語
そもそも特定向け専用言語なんて非常に珍しい存在 >>368
C#のusingやkotlinのuseが正解っぽい感じはするんだけど、GCみたいにそもそも普段は意識しなくて済む感じになってほしい。 >>370
向いていると専用の違いがわからない馬鹿 ここにあるファイルを末尾に日付を入れてネットワーク上のNASにコピーした後、削除し空ファイルを作ってください。
これをRustでやる奴はウンコ、普通にbashで書く Pythonの__del__の仕様を確認したらむちゃくちゃ大雑把だった
こんなのスクリプト以外で許されるわけねえだろ >>374
エラー処理の要件次第ではbashだと辛くなりそうな予感がするんですが >>372
普通にストリームとかを使いっぱにしとけばいいんじゃね?
まともな実装ならその変数がGCで回収される時にクローズされるだろ >>326
日本が伊達にIT後進国じゃないってことだよな >>374
それだとファイルの末尾だと誤読しうる
おそらくファイル名の末尾の意味だろう
そういう処理は用途によってはbashスクリプトも当然使っている
ただし色んなエラー処理をしだすとシェルスクリプトでは面倒なこともある
そのためプログラミング言語を使う場合もある
Rustを使っているものもある >>377
GCはいつ起こるかわからない
そしてその使い方ではGCが起きるまでクローズが遅延される
すると色んな問題が起こる
OSリソースがその間占有され続ける
占有オープンなら他者が利用できないなど
GC言語を使うなら面倒でもdeferやusingなどで明示的に後処理するしかないだろう
もちろんC++やRustならばRAIIにより即座に解放されクローズ処理もされるため面倒な記述は不要である >>381
> GCはいつ起こるかわからない
> そしてその使い方ではGCが起きるまでクローズが遅延される
そんなことは分かってるよw
話の流れくらい読めよ >>382
RAII言語の方が優秀だと認識できているならばよろしい >>383
アホなの?
C# の using も知らん無能はいちいち絡んでくるなよ >>384
君は>>381を最後まで読まずに
途中で反射的に書き込んでいると分かったのでもういい
反省しなさい >>385
お前は>>372に既に書いてあることをアホみたいに再度書いてるから揶揄されてることも分からん知能しかないことがよくわかったよw >>375
そんな雑なものがたくさんあるのに、Rustにすべきなんて言う人とはいつ迄も平行線な気がするよね。 >>363
それが怠慢とかw
どこでメモリ(リソース)を確保してどこで解放するかをプログラマが選択出来なきゃ
それこそ自由度が無く使いにくい言語になる
GCがあるから解放しなくてもいつかやってくれるから明示的に書かないという思想が
正しいと思っているならおかしい >>388
Rustやれぇとか命令されても
命令を無視する自由度のある人間はいちいち気にしない
命令無視しようが平行線だろうが何も問題ない useとかusingとかdeferとか
書き忘れていたら実行前にエラーとなってくれればいいんだけどね
忘れずに書いていることに依存させる言語仕様はよくないね GCは結局メモリとGCの二つを管理しなきゃいけなくなって非効率なんじゃないか? 量子プロセッサ時代のプログラミング言語とか、意義のある会議は出来ないものか。 ここ隔離スレなので特定のトピックに興味あるなら専用スレ立てた方が良いよ ファイルの自動クローズがRAIIで無条件かGCなので何らか明示指定かの話を見ていて思ったんだけど、
メモリの自動解放はこれまでGC言語だけの特権でGCにはデメリットもあれどメモリの自動解放という何もかもを上回るメリットが前面にあったのよね。
ところがGCがないのにメモリを自動解放するプログラミング言語が登場しちゃって危機感を覚える人も登場しちゃって、 GCがない(?)のにメモリを自動解放するプログラミング言語は昔からありますが……C++と言いましてね。
C++で(Rustみたいに)スタックフレームに何でも押し込むスタイルにするとどうなるのかねぇ。 そもそもRustもC++も含め、RAIIは何でもスタックに積んでいるわけではない
スタック上の値のように振る舞うように作られているだけで、内部的にヒープにメモリを確保しポインタを保持しているケースが多い Rustは自動メモリー管理が売りなんだから、C++のように自由に何でも出来たらダメでは? JavaとHaskellの良いとこ取りのように宣伝されてたけど、悪いところを併せ持ってしまったのでは? >>396
C++はメモリを自動解放しない。
unique_ptrやshared_ptrを忘れずに利用し間違えずに使用した場合のみ自動解放されるが、
それはその正しく作られたプログラムがメモリを自動解放しているのであり、
C++という言語自体がメモリを自動解放することはない。
一方でGC言語やRust言語などはプログラムの記述と関係なくメモリが自動解放される。 事実上今時のプログラムで生ポインタなんて使わないしアスペの>>401は知らんけど普通のプログラマにとってメモリー解放はC++程度で充分 >>402
それはプログラマーの問題。
プログラマーの作ったプログラムにより自動解放している。
C++という言語はメモリを自動解放しない。 >>401
一般ユーザーがめったに使わないnewで言いがかりつけるなよ。Rustのunsafeみたいなものだろ。 はいはい、アスペは何を指摘されているかも理解できないからどうでもいいわ RAIIみたいなありふれたものじゃなくてxor mutabilityをアピールした方が良いのでは >>407
実運用としては難しすぎて逆効果だとわかっているから言わないんだよ。
あるいはそもそも理解していないか。 >>409
難しすぎて逆効果ってどういうこと?
ワイRust大好きマンだけど、趣味ってだけで業務ではRust使ってないからよくわからない.... >>410
もちろん難しいことはなくとてもシンプルな原理
そして実運用で非常に大きなメリットをもたらしている
Rustが大手IT各社に支持されている理由の一つ >>412
Rustの世界的大規模な調査結果により
Rustの利用対象はサーバーサイド/バックエンドが最多で
以下クラウド、分散システム、WebAssembly/Webフロント、組み込みといった状況になっている >>414
>>413のソースは毎年調査が行われているRust Annual Survey Report before == afterのことをimmutableというなら
==の定義とかあるんですか?
まさか、大手企業を観測すれば==の定義が分かると思ってるマッドサイエンティストはいないよね >>416
一般的にデータ競合を起こさないための条件は
multiple readers XOR single writer
そしてRustも同じくこのシンプルな原則に従っている 現実には複数の状態のストアに跨がる論理的な競合の方がずっと問題で、単一データの読み書きの競合なんてアトミック変数くらいで十分 実行時に同時に読み書きしうるかどうかをコンパイラが厳密に検知することは不可能
Rustがやってるのは大幅に安全側に倒すアプローチで、それでいいんだったら関数型みたいにそもそもミュータブルなデータを共有しない、でも立派に対策になってるよね
実際それで十分なケースが殆どでしょ Rustはdata raceはふせげてもrace conditionは防げない
銀の弾丸でも何でもない >>419
アトミック変数を忘れたら競合する
さらにアトミック変数を使ってもそのコストがかかる
Rustでは静的にコンパイル時にデータ競合を必ず排除する
アトミック操作を必要とするならば指摘してくれる
multiple readers XOR single writerを守っていれば当然(コストの高い)アトミック操作を必要とせずにコンパイルが通る
したがってRustは他の言語よりもコストを低くデータ競合の安全性を常に満たせる 並行処理をしてないのにいちいちいらない制約かけられる方がコスト高いわ >>422
いつものキッズかな
単一変数のデータ競合が生じなくても多くのロジックは競合するんだよ 並行処理を安全に実装するのが難しいから、需要があってGoとかRustみたいな言語が登場してるのであって、直列なコードしか書かないなら昔の言語でもよくね >>425
そうじゃなくて、並行処理をしている場合、現実には競合するタイミングが生じないと分かっていても制約がかかることになるんだよ
コンパイラは静的なスコープを検査することしかできないからな >>424
そんな当たり前のことで問題のすり替えをするのは行儀がよろしくない
>422では明確にデータ競合の話をしている
どの話であってもまずはデータ競合を起こさないことが必須
しかしこれまでの言語はプログラマー任せであり言語として実行前に静的にデータ競合を防ぐ機能を持たなかった
Rustはそれを実現するとともにコストの高いアトミック操作無しでもデータ競合を避ける形もサポートした >>427
多くの場合はより高水準の制御や抽象化を必要とするため、君が思っているほどデータ競合可能性の回避は重要じゃないってことだよ
制約に対して得るものが小さい >>428
実際にそれらのプログラミングをしていればわかる
データ競合の回避は重要どころか必須 やっぱRAIIを意識しないと会話が成立しないぞ
読みたい情報が消されたり書き換えられているバグよりも危険なのは
情報を記憶する領域自体が消滅しているバグだから
書き換えを制限する効果よりもmoveやdropを制限する効果を見なければ本質が見えない >>428
データ競合可能性の回避は重要か重要じゃないかではない
データ競合可能性の回避は必ずすべきこと
Rustを叩きたいからといってこれを重要じゃないと主張するのは頭が狂っている データ競合可能性の回避をしてないシステムやアプリって存在するの? 並列処理しなくてもmutable aliasingにまつわるバグは起こりうるよね
典型的にはコレクションのイテレート中の要素追加とか
これを防ぐ仕組みを整えたらうまいこと並列処理にも応用できたという話であってデータ競合を防ぐことが本質ではない >>432
回避し切れてないシステムやアプリはそこそこ存在するけどw mutable aliasingはGC言語でも防げないからなぁ
これが一度Rustに慣れてしまうと他に戻れなくなる原因の一つかも
他言語も積極的に取り入れてほしいところ コレクションが変更されたら
影響のあるすべてのイテレータに何か通知するべき
ここで、すべてのイテレータのリストを強参照してるとメモリが解放されないバグを作れる
GC言語でも弱参照大事 >>436
GC言語ってそこまでケアしてくれるのが普通なの? そういうレベルで設計する人たちだと、RustやReactなんかが良いのかもしれないな。
「レベルが高い」と思ってそうなのがアホだけど。
「弊社はアホが多いから、これで行くしかない」というのが正しい態度では? 実際「自分はアホなのでバグのないC++は書けない」と思ってRust書いてるよ
年とともに集中力も維持し続けられなくなるし、コンパイラに助けてもらわないとどうしようもない 昔の静的型付けvs動的型付け論争思い出すね
開発者は十分賢いと仮定しレビューやテストでバグを見つけられれば十分とする立場と、
実行前に機械的に抽出できるバグは潰しておきたい立場の違い Rustで「簡単」になるのははチームやコードを管理するリーダーやマネージャーで、実装するコーダーにとっては「簡単」じゃないのにな。 レビューやテストでなんとかできるなら現世代言語で十分だよね
次世代言語という観点では、実行前により多くの問題点を検出することや、検出できる問題の量を保ったままコード記述の自由度を高めることが期待されてることのひとつだと思う IT大手企業が揃って同じ主張
人手に頼るC++等ではバグを無くせない
良い人材を揃えているところでもミスをゼロには出来ないから言語による支援がある方が良い
メモリ管理でもデータ競合でも同じ
ソース
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
Rustは、プログラムに必要なメモリーの確保や解放に関連するバグが生じない「メモリー安全」が保証されたプログラミング言語である。
それに対してこれまでのOS開発に使われてきたC/C++は「大規模な開発においてメモリー安全なコードを記述することがほぼ不可能」
(Microsoftのブログ「We need a safer systems programming language」より)なのだという。
GoogleによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。
同様にMicrosoftも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。
C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、Rustを採用するに至ったというわけだ。 イテレータなんてないし、for rangeで回ってくるのは常にコピーだよ。 Rustはモダンとか言っておきながら今時セミコロン入力を強要するゴミ言語
セミコロン省略するとreturnを省略できる?何のメリットがあんのそれ
可読性が悪くなるだけだよね
JSみたいにフォーマッタで自動入力もできないしゴミ >>448
Rustを書いたことないか、チュートリアルレベルでしか触ってなさそう 文法や記述は様々な言語をやっていれば誤差と慣れだけの問題となる
それに文句をつけるのは初心者と異常者のみ
そのRustに関して言えばセミコロンや中括弧(波括弧)は機能面で必要だからある
逆に例えば「 if (条件) 」の丸括弧は不要だから「 if 条件 」 関数型のElixir は、データを書き換えられない。immutable。
新規作成しかできない
だから、並行処理に強い >>448
こういう議論も地味に重要だと思う
セミコロンなしでreturn必須な言語の方が可読性高いのかな?
returnを書くことで読み手にとって何が明確になるんだろうか
フォーマッタでの自動入力って何? >>451
すなわち値を書き換えるたびにガベージを撒き散らしGC
さらにElixirにはGCされず溜まる一方のAtomがあり枯渇すると死ぬ 文法はフォーマッタやコード生成、静的解析などのツールの作りやすさ影響してくるからあまり馬鹿にしない方が良い 日本人は一部はセンスあるが
RustやElixer等メタプログラミング言語が理解できないやつが多すぎる 外国人でも抽象的な概念についての難易度は同じだゾ・・・ セミコロンを省略するとreturnになるわけではないぞ
・Rustでは式にセミコロンをつけると文になる
・ブロック({stmts}のこと)の最後の式が、そのブロックを評価したときの式となる
この二つのルールが原則で、関数のブロックの最後のセミコロンを省略すると、関数を評価した値になるってだけ
let a = {
let mut b = Builder::new();
b.add(foo);
b.add(bar);
b.build()
};
このルールのおかげでこのようなコードが書けるようになる(return文は関数から抜けるためにしか使えないので、ブロックの評価には使えない)
一時変数のスコープを最小限に抑えることができるし、mutableで宣言した変数を、スコープを抜けたらimmutableに戻すこともできる
慣れれば見やすいし、意味的なメリットも多い >>456
ウィキペディアの英語版と日本語版比べてみて、
メタプログラミングについて書かれている事が全然違うから。
日本は本当に遅れてる >>457
その意味不明な記法が可読性が悪くてゴミなんだが?
信者以外からはメリットを対して感じないよね。
この恩恵を受けるためだけにセミコロン全てにつけないといけないのめんどいんだけど。 >>459がどの言語の文法を理想と考えているのかが気になる
golang? なぜRustに対する批判が具体的なものじゃなくて、「意味不明」とか「不要」とか主観的で何を指しているのかわからないような言葉ばかりなんだろう 文末のセミコロンが必須な主なプログラミング言語
C C++ Java Perl PHP など
この状況でRustのセミコロンを叩いているのはこれらの言語を知らない初心者?
しかもRustは文と値の区別のためセミコロンの有無を活用して意味付けしている >>463
最近の言語が一切なくて草
モダン言語はない方が普通でそれと逆行してるから批判してるんだが Python Ruby JavaScript Scala Kotlin あとなにがあったっけなぁ >>457
逆にセミコロンなしをデフォルトにしてセミコロンとかつけると式になるとかでもいいのでは?
その書き方ができると便利なのは否定しないけど、その恩恵を得るためだけに全てにセミコロン付けるのを押し付けるのは余計なコストだっていいたいわ セミコロンを省略可能にしたプログラミング言語は色々と苦しんでいる
昔からJavaScriptのセミコロン省略により起こる問題は有名だが
Goなどもセミコロンを省略可能な言語なので問題がよく起きている
例えばGoでは
foo := 111111111 + 222222222 + 333333333
が何らか長い行として長いので改行して書こうとして
foo := 111111111
+ 222222222
+ 333333333
と書いてしまうとこれは以下のセミコロンの省略と解釈されてしまう
foo := 111111111;
+ 222222222;
+ 333333333;
つまりエラーとなる
他にもGoでは
bar := []int { 111111111, 222222222, 333333333 }
が何らか長い行として長いので改行して書こうとして
bar := []int {
111111111,
222222222,
333333333
}
と書いてしまうとこれは以下のセミコロンの省略と解釈されてしまう
bar := []int {
111111111,
222222222,
333333333;
}
これもエラーとなる >>467のようにGoは「セミコロンが必須だけど、省略可で、自動セミコロン挿入される言語」であるため
うっかり改行すると自動セミコロン挿入により文法エラーとなってしまう Rustで文と式が混在するのは最適化のため?文でエラーが発生したときはどうなるんかね?
resultとかの戻り値用変数があると自然だけど、末尾呼び出し最適化が面倒になるので痛し痒し。 >>467
それの何が問題なの?
文法エラーになるなら何の問題ではない、エラーにならずにコンパイルされて変な挙動をするとかだったら問題だけど >>466
文にセミコロンをつけると式になるって文法を整合性を保ったまま定義できるとは思えない....
1とかtrueみたいな一つの値は式として扱う
ifやmatchはデフォルトで文として扱い、セミコロンをつけると式になるって文法にすると
let x = f(if cond { ... } else { ... };)
みたいな文で、どこが文でどこが式なのか曖昧さを持ってしまう気がする 構文解析の簡単さってかなり大事なことだと思う
language serverも軽くなるしコンパイルも早くなる
適当に書いてフォーマッタで整形するって書き方もできるようになる
セミコロンをつけるのが面倒なのは分かるけど、それ以上の恩恵があるのは事実 文法エラーになってからわざわざ直すのは面倒くさくないの?
JS/TSでもASIの罠にはまらないように考えるほうが面倒だから基本セミコロン付けているな >>466
言語設計した事ある?
a = b の b は式だからお前の仕様だと ; が必要になるんだけどw >>469
Rustでは文は
Item(関数の定義や構造体の定義など)
LetStatement(let文)
ExpressionStatement(式にセミコロンつけたやつ)
MacroInvocation(hoge!();みたいにマクロの使用にセミコロンつけたやつ)
しかないから、そもそも文はエラーを生成しない
文の中の式がエラーを生成することはあるけど、文法上はハンドリングも式の中で行われる
https://doc.rust-lang.org/stable/reference/statements.html >>474
したことねえけど、式として表現できるようにしたいからセミコロンを全てに強要するとかうんこだなって言いたいだけ
利用者にとっては面倒なだけ >>476
式の全てにセミコロンが強要されているわけではないぞ
Block(ifとかmatchとかの{}を使うやつ)を含む式であるExpressionWithBlockではセミコロンの省略が可能とされている
だから、式を文として扱うべき場所で必要最低限のセミコロンが強制されている
https://doc.rust-lang.org/stable/reference/statements.html#expression-statements >>476
だからお前の方法だと余計面倒になるだろw
問題提起はまあいいとして解決策がアホすぎる セミコロンは面倒だし書かなくていいならそれに越した事ないけど
JSみたいに罠に嵌るくらいなら明示的に書くのでも別にいい
Rustはじめた当初はセミコロンの有無で戻り値が変わるのはめちゃイライラしたけど2週間もすれば慣れる
セミコロン不要言語ではRubyやSwiftは縛りが少なくて扱いやすい
Pythonは改行できるケースがかなり限定されてるから扱いにくい(そのくせ1行80文字にしろとかアタオカ) 話題か全然次世代言語っぽくないな
次世代言語は人間の考えを忖度して良い感じにコードを解釈して欲しい
セミコロンとか些細な文法レベルじゃなくて、自動的に最適なアルゴリズム選んでくれるとか どういうトレードオフの上に成り立ってるかを理解しようとしない人とは技術的な議論はない立たないわな 長い行を途中で改行したくなったらどうなるか?
・JavaScriptだと正しく333333333と出力
let foo = 111111111
+ 222222222
console.log(foo)
・Goだとエラー(+222222222が使われていない)となる
foo := 111111111
+ 222222222
fmt.Println(foo)
・Pythonだと111111111と出力
foo = 111111111
+ 222222222
print(foo)
・Rubyだと111111111と出力
foo = 111111111
+ 222222222
p foo
・Kotlinだと111111111と出力
var foo = 111111111
+ 222222222
println(foo)
セミコロンがある言語ならば長い行を自由に改行できる foo = (111111111
+ 222222222)
print(foo)
1つの評価式としたいのに途中改行を入れることを利点だと主張するなんてバカげている....
素直にC/C++の古めかしい記述を引き継ぎたい人が多いだけというのは、公式も認めてるのに セパレータ無しで改行を無視するようにしたいなら、yamlのブロックスタイルぐらいが妥当かと。 セミコロンが面倒とは言っても、インデントのタブと同じで頭使わないから楽だと思うんだがなぁ。
そんなに毛嫌いするようなことなんだろうか。 もうここら辺の話は好みの問題もあるからこっちが正しいとか言っても揉めるだけ
>>483にしても無駄なカッコはヤダって奴が出るかも知れんし
foo = 111111111 +
222222222
で正しく処理できる言語もあるけどプラスの位置が気に入らんとか言う奴がいるかも知れんしな セミコロンがいるいらないなんてそんなに気にする事なのかな?
Cスタイルで無い書き方する言語の方がよっぽど見にくいんだよねぇ Dartもそうだけどセミコロンなし言語に慣れてると忘れる時にいちいちエラーになってうざい
JSはprettierで自動入力できるけど、エラーになるのがめんどくさい
まあただの慣れの問題だけど PowerShell(; 不要) と C#(; 必要) 使ってるとたまにあれ?って思うことあるけどたいして混乱しないよ
そんなのにいちいち引っかかってたら他にもっと引っかかるところあると思うが Rustはセミコロンレスにする実装が面倒ってだけやろ
エルゴノミクス的にはセミコロンなしのほうがいいに決まってる むしろ482のような何も考えられない熟練者が、他の多くの言語を全否定してるのであって、Cスタイルを否定しているわけではない。
Cスタイルで無い書き方する言語の方が見にくいというのはよほど経験が足りないか、組み込みかシステムプログラミングでC/C++の
沼にどっぷりハマってるか....いまどきbashもTypescript/JSもLuaも書くだろうし、DeepleanningしたいならPythonぐらい触るでしょう? フリーフォーマットスタイルになったのだって、B言語の毛の生えたC言語初期がブロック表す{}でさえ、当時の多くのコンピュータのキーボードで
打てなかったのに採用しており明らかにパーサーを簡単にしたいがためだけで、確かに欠陥は無いが、他の言語を否定する有益な要素には
全く成り得ない。「頭がCスタイル=だから個人的にはそれが一番見やすい」という理論なら分かるが、一般化できるものではない 些細なことで盛り上がってるな
昨日のRust叩きがすぐ論破されてRustは高機能で優秀だと決着してしまったから
今日のRust叩きはセミコロンと波カッコがテーマなのかい? >>494
「誰にとって」高機能で優秀なのかを考えんとな。
リーダーとかマネージャーとかの管理者にとって、Rustはルールを強制して一定の安全性と性能を担保できる便利なルール。
その裏返しになるけど、コーダーみたいな実装者にとって、Rustは窮屈な制約や複雑な概念を押し付けられる不便な扱いづらいツール。
優れたプログラマーはコーダーであるとともにマネージャーでもリーダーでもあるからRustの利点は分からんでもないけど、普段使いにはしたくないツールだよなぁ。
今の複雑さじゃHaskellとかc++とかと大して変わらんから、そのうちもっと洗練された言語が出てくるんじゃない? ルールは強制じゃないんだよなあ
税金を払ってない金持ちがいるのと同じ >>495
複雑な概念を押しつけられるというよりも、現実の複雑さを処理系が覆い隠さずそのまま見せている、ただしデフォルトでは安全装置付き、というのが自分の感覚には近いかなぁ
カジュアル用途にはshared xor mutabilityを採用したGCあり言語があれば良いと思うんだけどそれでも敷居高いと言われてしまうのかな >>495はrustのチェックが過剰と言いたいのか、プログラムがエッジケースでクラッシュしても良いからプログラマーの自由にさせろと言いたいのか、どっちなんだろう >>491
>>482はべつに全否定なんかしていないだろう。
セミコロンを省略できることが無条件で優れているかのような主張に対して、そこにはやはり
トレードオフが存在することを示しているだけだと思うが。 >>497
shared reference, mutable reference, ownedの3種類を常に分けるのは作る側も使う側も面倒でしょ
GC言語でdata raceを避けるためだけに許容できる面倒臭さではないと思う >>499
>>482はサンプルが悪い
エアプじゃなければもう少しマシなの持ってきなよ >>501
全否定とサンプルが悪いのと全然関係ないが。
それはそうとして>>482はセミコロンを省略できる言語で改行するのに構文を意識しなければならない例として
わかりやすいと思ったが、どこがどうダメだと思った? >>497
コーダーにとっては押し付けられるのも覆い隠さずむき出しなのも同じ。
運転するならマニュアルよりオートマの方が楽に目的地に行けるからねぇ。 >>500
まともなプログラマーならば
mutableかimmutableを必ず区別するしスクリプト言語にすら区別がある
GC言語だからそんな面倒な区別をしないなんてことはない
更にそのもの自体かreference (pointer)かの区別をする言語も多い >>504
immutableかmutableかの区別とはまた別
例えばPythonのiter()やC#のGetEnumerator()に相当するメソッドを
Rustではshared reference用のiter(),
mutable reference用のiter_mut(),
owned用のinto_iter()と3つ用意してその3つを使い分ける必要がある
他にも3種類の構造体を用意したり3種類ずつtraitをimplしたりする必要がある
Rustで3つを使い分ける主目的はメモリ安全性であってdata raceを防ぐのは副産物
メモリ安全性が確保されてるGC言語で副産物のためだけにやるほど価値があるとは思わない
data race detectorみたいなので十分 >>505
書き換えるのか書き換えずに読み取るだけなのか必ず区別する
プログラマーならそこは絶対に意識するところ
参照なのか実体なのかも同様に区別する
例えばcall by referenceなのか否かで変わってくるから常識 >>502
挙げてる言語が全てセミコロンのようなものが無ければ、改行をパースできない言語だけを挙げておいて
サンプルが悪くないと考えられることはセミコロンを入れる言語を優先したいだけでしょ?
そして482がいってるのはトレードオフなんて一言も言ってないし→同一人物だとすればサンプルも悪い >>505
噓つき
まず、使い分けと言っても間違って使っていたらRustコンパイラが指摘してくれるから、他の言語のようにプログラマーに責任と義務を押し付ける形で使い分ける必要は全くない
次に、今まで様々なプログラムを書いてきて、そのための3種類の構造体やimplを用意する必要になったことは一度もない
プログラムでやりたいことは一つなのだからどれか一つに決まる
その選択を仮に間違えていてもRustコンパイラが指摘してくれるので必ず正解を選択できて楽勝
Rustはプログラマーへの責任圧力や負荷が非常に少ない
間違えてもコンパイラが賢くて教えてくれるし次第に慣れて間違いも激減 >>506
>>505に書いてる事を理解してないでしょ
それだとRust的なaliasing xor mutabilityを実現するためにどういう言語機能が必要で
開発者にはどういうデメリットがあるのかわかんないよ >>505
全部refcell相当にしてランタイムでよしなに処理できないかね? >>509
デタラメを書いている>>505の文章をよく読め
Rustに無知な>>505が妄想でデタラメを書き並べて無意味なRust叩きをしているだけだぜ RefCellは無視してCellを使うのがコツかなと思ってる >>510
実行時のチェックのみでよければborrow checker無しの実装も可能かもしれないが
常にborrow済みでborrow_mutができない状況が量産されそう Rustは便利でプログラミングしやすくて良いね
間違えてもコンパイラが必ず阻止して親切に教えてくれる
他の言語だと同じように間違えていても見かけの文法さえ合っていればコンパイラが通してしまう いやRustはプログラミングしやすいことが感想
たまたま安全も付いてきた
あとなぜか高速も付いてきてラッキー xor mutabilityを実装するとライフタイムの解析みたいなことが必要になるから結局GC要らなくね?みたいなことになりそう 3種類あると言ってたのに
xorとかいって2種類を意識してるのは違和感がある
意識の外にあるmoveの方が実は革新的だったりして >>508
コンパライラが指摘出来るのに、勝手に使い分けてくれずに、使い分けをさせようとするのが、納得いかない。
勝手に解決できることは、出来るだけ勝手に解決をしてしまって欲しい。 >>519
コンパイラは神や予知者じゃないのだから
どちら側へと解決すべきかまでは分からない
だからコンパイラによるアドバイスを受けてプログラマーがその方向性を確定させる >>507
>>482はみんな「セミコロンを省略できる言語」の例だと思うんだが。
いったいどの言語ならいいというんだろう?FORTRANかshかあるいはLISPとか? そもそもRustとかの新しい言語は演算子の途中とかで改行できるようにするためにセミコロンを用意したわけじゃないし… ;ない言語(例えば
python)で途中で改行したいなら(
) >>518
値の受け渡し方法の種類とmutabilityの違い
利便性を無視すれば可変参照をサポートしないようにして2種類に減らす事は可能 >>522
まさにそう。見る角度によって美点を見出すのは人それぞれだがセミコロンなんてものを挙げて長い行が複数行で書けるなどと
長大なくだらない例を別言語叩きにしようとする腐った根性がまず気に入らない。公式すら見えてない白痴 うむ
セミコロンの有無で気に入らない言語を叩き出したやつはキチガイ
それぞれにメリットはあるしプログラマーにとってもどうでもいい誤差 分類するとこんな感じかな。
1. 改行を文デリミタとして、文を途中で折り返したい場合には行継続を明示する (FORTRANなど)
2. 改行に空白以上の文法的意味を持たせずに文分離記号、終端器具を用いる (ALGOLなど)
3. 1.の変形で、構文解析と組み合わせることで行継続の明示を不要とする (Pythonなど)
当然ながらどれも一長一短あるわな。 セミコロンが有ったり無かったり些細なことで各プログラミング言語を批判する人は間違いなくキチガイ 技術的な話が理解できないからセミコロンくらいしか口出しできないんだろ 言語を作る側と使う側の視点が噛み合ってないように見えるし、なんかマニアックな方向に議論が進んでるな ASTとプレゼンテーション層としてのテキスト表現でしかないから内容と見た目の分離をすれば…みたいに考えてしまうが、htmlとcssの関係みたいにすぐそばに地獄の例もあるからなぁ。 >>524
可変とか不変とかいう代わりに
swap可能とかswap不可能とかいえば良いのでは
swapって確かに何か変化はするが
もう一回swapすれば元に戻るという意味では何も変わってない なんで母国語の文法でプログラミングできないの?
っていう質問と大差ないぐらいにはナンセンスなんだよなあ >>527
その分類だとRustのセミコロンの特殊性が埋没する >>534
Rustのセミコロンは実質的に「式の結果を捨てる演算子」だからなぁ。
あえて文としているのは最適化のためかね。 >>534
構文的には特殊なことなどなくPascal等と同じ.だろう。評価結果が違うだけ。 プログラム言語の長短を議論したいなら、最低限、構文解析と型理論ぐらいは勉強しなよww
自分の使えるプログラミング言語の表層だけ見てあれこれ言っても仕方がない
せめて基礎知識ぐらいは身につけないと、自分の得意な言語こそが最強!レベルの話し合いにしかならない マイナス金利政策みたいに
何かを変えたいという目標が達成されるまで全く同じことを続ける人が一定数いる このスレ、次流行る言語について考察するスレだと思ったらなんか違う感じか >>539
Rustが覇権したから推進派とアンチとの攻防戦の場となっているw プログラミング言語のアンチをしてる人は精神的に何か病があるんじゃないか NoSQLの謎の信仰で無知が露呈したRust信者w >>541
他言語を貶めるRust信者のことだね
大半はRustじゃなくて信者を批判してるわけだが 別にRustを批判しているわけではない
どんな用途でもRustが最強で他の言語はゴミとかほざいてるRust信者を批判しているだけ
NoSQLは万能でRDBは不要とかほざいてるようにただの無知で適材適所という言葉を知らない馬鹿ってのが証明されてるわけだが
だからRustは低レイヤーには適しているがバックエンドやWebといった用途ではさほど適していないので流行らないってのに反論できずに発狂しているのが現実
やたらクラウドのコストガーメモリ効率ガーだとか主張するが運用する上での人件費のことを一切考えられないキチガイ プログラマーは社会不適合者しかいないんだから仲良くせいや 簡単に言うとRustはCやC++を置き換える言語
だからCやC++が通常使わなれない用途で流行ることはまずない
これが現実、いくら信者が発狂しても現実は変わらんよ >>543
言語の良さを語り合うのは問題ないと思うぜ
特定の言語を執拗に批判し続けたり粗探しをして叩いている異常者が問題視されている ID:8YjBNSEW が自分のことを棚に上げて藁人形を持ち出した >>544
調べてみたが『RDBは不要』と主張している人はこのスレに一人もいない
あなたが狂っているから全く存在しないものをあなただけが見えているのだろう
あなたは自分が狂っていることにそろそろ気付くべきだ >>88
>>99
コストの観点でRDBは論外って言ってるから不要って言ってるようなもんじゃんw
コストを気にしてRDBを使わないって初めて聞いたんだが笑
どんだけここにいるRust妄信者って無知なんだよw
コスト気にするから全てのプログラムにおいてRDBを減らしつつRustを使えってwwwww
何で人件費のこととかは他のこと考えられないの?w >>546
そういう嘘はよくないなあ
流れとしては明らかに2系統あって
『自動メモリ解放で安全なのに、C言語と同じ省メモリ&同じ速さが出る言語』として
スクリプト言語を含む様々なGC言語からRustへ、という流れが多い Rustと他言語の関係も
RDBもNoSQLの関係も同じで
実際は要件に照らし合わせて適材適所で選択していくのが現実
Rust信者は適材適所って言葉を知らないからNoSQLが最強でRDBはゴミ
Rustが最強でGC言語はゴミ
と要件を無視しまるで全ての用途に対し万能であるかのように喧伝する
こういった思考停止したマウント意識の高い妄信者が死滅してくれればRustは日本でも流行っていくだろうw >>551
> スクリプト言語を含む様々なGC言語からRustへ
それってあなたの感想ですよね?なんかそう言うデータあるんですか?
CやC++からRustに移行していくって流れなら一般的に言われてると思うけどそれは初めて聞いたわー
妄信者しか言ってないよね笑 >>550
ほら、あなたが狂っていることがこれで完全に証明された
あなたが指しているそれらのスレを見ると
『RDBは不要』との主張などこにもなく
むしろ逆で
『RDBの利用を必要最小限にする』とある
つまりRDBを最小限必要とするとの主張だ
以下ソース引用
>>88
> RDBはコストが高いだけでなくパフォーマンス面でも不利だから利用を最小限にする
>>99
> クラウドが提供するRDBの高コストなど現実を理解していれば
> RDBの利用を必要最小限にした方が有利なことが理解できるだろう
ソース引用以上
あなたが狂っているからあなたは誤読としくは意図的に嘘をつく狂った行動をあなたはとっていると証明された そもそもGC言語ってのは誰でも書きやすいようになってるから流行ってるわけ
CとC++に比べて劇的に楽になっているってのが流行ってる最大の理由
Rustは当然GCがなくなる分自分で管理する必要がありそれなりの難易度があるからGC言語からRustに置き換わるなんて流れはどこにもありはしない
ほんと妄想が酷いんだなw
GCがボトルネックになるケースなんてごく稀であるし、そういったレアな要件で初めてRustに移行することを検討するべき
Rust信者はそう言った要件を無視し脳死でGC言語からRustへだとかほざいているけど
そんな流れはこの世のどこにも存在しない いつものお二人さんw
まぁこの二人のための隔離スレだからいいんだけどさ >>552
その「NoSQLが最強でRDBはゴミ」などの書き込みはどこにあるんだ?
そういう妄想を書き込んで開き直ったり
特定の言語を執拗に批判し続けたり粗探しをして叩いている異常者がここでは問題視されている >>554
不要って言ったのは邪推しただけかもしれないが
問題はそう言う言葉遊びではなくRust信者のコストが減るからあらゆる用途でRustがいいとかいう妄言が完全に矛盾してるから馬鹿にしてるだけだよw
それを運用していく上での人件費は?w 早くGC言語からRustって流れのソースを教えてくれよw
仮にPython使ってるとしたらなんでわざわざRustに変えないといけないのよ笑
どこにそんな流れがあるのか教えてくれ GCか否かなんてことよりも
純粋にRustはプログラミングしやすいから
Rustが7年連続で最も愛されているプログラミング言語No.1となった PythonだけでなくRubyからRustへ変えて高速化したCookpadの例もあるね
どの言語からも高速化するならRust一択になりそう Pythonは参照カウントもする中立派
高速化しない者だけが中立になれる プログラミングしやすいらしいがクラウド用途ではGoばかりでRustは全然使われてないな
Rustはtraitとかマクロとか抽象化プログラミング、メタプログラミングの機能がやたらと充実してるけど、逆にそれのせいでプログラミングしにくくなってるのでは?
レベルの高いプログラマーではないとうまく扱えないピーキーさがある
シンプルな言語仕様のGoで書かれた実用的なプログラムがやたらと多いのを考えるとそう言う傾向が見て取れるよね
だからここにいるアホRust信者はRustなんてピーキーすぎて扱えないのが現実
だから他言語にマウントを取るしか能がないわけ こいつRust信者の仮面を被ったアンチRust工作者だな
そうでもなければここまでアホレス垂れ流し続けられないよ >>563
もしかしてRustでプログラミングして何かを作ったことない人なのかな
既存言語と比べてそれらの充実したRustの機能により格段にプログラミングしやすくなってるよ >>565
「オートマよりもマニュアルの方が機能が充実しているから扱いやすい」ぐらいめちゃくちゃな主張だな。
あるいは「スマホよりパソコンの方が機能が充実しているから扱いやすい」とか。 >>566
逆っぽい
色んなことがコンパイラにより自動化されているRustがオートマに相当かな
例としてヌルポ(事故)を避けることを考えてみると
(1)ヌルポを避ける機構を言語が提供していなくてプログラマーが手動で全て頑張らないといけない言語
(2)ヌルポを避ける機構を言語が提供してるけど適用必須でないためプログラマーが自分でその機構の利用を選択しなければならない言語
(3)ヌルポを避ける機構を言語が提供していて必ずその機構が用いられる言語
と3種類に分けた場合でもRustは自動適用の(3)だよね
他にもこのスレで既出の「データ競合回避」や「自動メモリ解放」なども同様
Rustはコンパイラが全て必ず適用してくれるからプログラマーの責任が激減してるよね
したがってRustがオートマに最も近いっぽい 良い物を作るだけで自動的に売れると思うのがオートマ
ゴリ押しするのがマニュアル GC言語使ってる人にとってGCがないRustがオートマなわけがないだろう
C++がマニュアルだとしたらRustはセミオートマだ
GC言語はオートマ >>569
GC言語もRustもメモリ自動解放サポートで同じだからそこはいいとして、
それらの言語の中でもぬるぽ問題やデータ競合問題などもRustはサポートしているから、
Rustはオートマ度が最も高い言語の一つではないかしら。 >>570
GC言語使ってる人は、もぬるぽ問題やデータ競合問題と無縁、考えたこともない人だっているよ。
例えば、私の席の近くでExcelのVBA使ってる人は、用語の説明からしないといけないレベル。 >>570
ならNimの方がオートマにふさわしいな。
Rustはせいぜい教官付きの教習車ぐらい。コストもそんなもんだろ。 >>571
考えたこともないなら単なるバカだな
データ競合はGC言語か否かに関係なく起きて防ぐ必要がある
ぬるぽもJavaからGoに至るまで多くのGC言語で起きて防ぐ必要がある >>573
バカで良いけれど、そんなの気にする必要もない要件もあるって事だよ。世の中何でもRustの機能を必要としているわけじゃないさ。
Pythonだと、ジャイアントロック掛けまくってるけれど、困らない事が多いという想定でしょう。 >>573
考える必要が無いからオートマなんだろ。オートマ使いはギアチェンジとかエンストとかほとんど意識しない。
問題を回避するためにコンパイラの指示に従う必要のあるRustはオートマじゃない。やっぱり教官付きマニュアル教習車だな。 >>574
ここは次世代言語スレ
それら色々な機能がついている言語がメイン対象
だからRustが何歩かリードしてる感じ >>573
並列処理を始めてやっと起きるのでは?
例えばNodeだとデータ競合は発生しないよ
シングルスレッドで行単位では処理が入れ替わらずawaitって書いてあるところ(コールバック単位)でスイッチングするから
競合状態はもちろん発生する、で、競合状態に関してはRustでも防ぐことは不可能
だからNode使ってる人にとってデータ競合はそもそも発生しないからその観点でRustに魅力を感じることはないよね >>575
その、問題を回避するためにコンパイラの指示に従う、のが正しい解決方法で合ってる。
例えば、ぬるぽ問題回避(Null安全)は、KotlinでもSwiftでもRustと同じく別の型とする対応策。
Null安全でないコードが書かれると、コンパイラにより型不一致エラーとなり、コンパイラの指示に従いプログラマーがコードを修整して解決。
このように、ぬるぽ問題回避にしても、データ競合回避にしても、自動対応は無理なので、コンパイラが静的に検知してエラーとするのが正しい解決方法。
型システムの強化により、様々な問題に対応できるようになっていく。 >>577
サーバーサイドをやってる周りではこういう状況
Node.jsはもちろん(Workerを除き)シングルスレッドで安全にasync/await並行処理できる
それだけで十分なところもあるけど次第にCPUコア活かして並列処理も加えて高速化したいところも増加中
その時にWorkerでは使い勝手の限界があるのはご存知と思う
すると今まで同様に安全にasync/await並行処理 + 新たに並列処理を加えて高速化をできる環境を考えるとRustが筆頭候補
実際に移行したところも出てきているし少しずつサーバーサイドRust化の流れが今後主流になりそうな雰囲気 >>579
サーバーサイドでRustとか何のギャグなの?って思うんだけどw
Goですらイマイチ伸びないのにw Rustはサーバーサイドでもやらないとこのまま消えて無くなるから必死なんだろ >教官付きマニュアル教習車だな。
これは言い得て妙だな 静的型付け言語は全てそのパターンだから
実行前にコンパイラに全てを静的にチェックしてもらい指導に従うパターンがプログラミング言語の最高峰なのではないかな >>586
本気か?
静的型付け言語をめんどくさいと言うやつはプログラマーに向いていない >>587
ものによるだろw
頭悪い奴の方が型に依存しないと物を作れ無さそうだしw
全く逆だなw向いてないのはお前w その件は昔からはっきり答えが出ている
まともにプログラミングするならば静的型付けが必須
動的型付けだと実行時にムダにデバッグ時間を奪われて効率が悪い
いずれそのことを学習すると動的型付け言語から静的型付け言語へ移っていく
典型的な例がJavaScript(動的型付け)からTypeScript(静的型付け)へ 俺は型が無いとコードかけないな
メソッドの名前の一部しか覚えてなくてサジェスト機能に頼りまくってるわ >>590
ウェブのフロントエンドしかやってない人はその辺理解できない人多い印象
動けばオッケーなんだろね >>592
逆じゃね?
むしろフロントエンドに型とかいらんだろw元々javascriptなのだし
JavaとかC#とかだとjsonをデコードする為にもクラス用意したりとか逆にめんどくさく感じるわ
ほぼ一人のプロジェクトでクライアント側はUnity(C#)とかだったりするから仕方なく用意しているが
管理画面(vue等)でフロントも書いてるけどjsのままで不便だと思った事すらないし
TypeScriptなんか導入する気にもならんw 状況に合わせて使う道具を変える判断力すら持ち合わせてないやつは自称プログラマーでも最底辺だからな
適性はないよ >>594
彼は趣味グラマだから涙
チーム開発の苦労とは無縁なのだ。 このスレでRustなどを叩いている>>593氏ってやっぱりレベルがかなり低い人だったんだな >>593
デバッグが手間だから静的型付けが必要、という文脈なんだけど?
結局あなたが言ってるのは動けばオッケーってことでは? 動的型とは端的に言えば値に型情報が付属していることであり、おそらくお前らは何か誤解している。
型を指定しないことが動的だと思っているんじゃないか?
図星じゃないか? 実行時の値とソースコードの変数の違いは重要だけど、この違いを意識しているプログラマーは少ないよね。 実行前にコンパイル時点で静的に型も確定する静的型付け言語がベストだな >>572
Nimはダメだよ
例えばref objectな変数は初期化も何もされないからヌルポ状態となり実際にSIGSEGVで落ちる
もちろんNimでもRustbニ同様のoptionbgえばヌルポbナきるけbヌ
Nimでは前述のようにoptionを使わないコードも許されるからヌルポが起きてしまう Kotlin Rust Swift ← Null安全な新世代言語
Go Nim ← Null安全ではない旧世代言語 Swiftって将来性あんのかね
アップル依存大きすぎな時点で知れてると思うんだけど >>559
多くのcli コマンドが go, rust で再実装されつつあるのは perl, python, ruby のようなスクリプト言語から go, rust といったちょうどよいモダンさのあるコンパイル型言語への大きな流れがある気がしている。 >>600
値と変数じゃなくて昔はデータ構造とアルゴリズムの違いを意識していた
どのような演算を想定しているかという型情報を
被演算子の側に付属させるというアイデア自体が
演算子と被演算子を一体化させ、両者を分けて考えない原因になった 動的型付け言語のメリットてなんだ?
(習得が容易とか書き心地とかを除いて理論的なメリット) >>607
処理系の実装が容易
型検査いらないしホストの実装が直接的に実行時の動作を記述するため圧倒的にシンプル >>607
インスタンスの型判定を実際のインスタンスで行うことができるので、コードの適用範囲が広くなる。
C++を理解しているなら、dynamic castの適用事例を考えればいい。総称型で保管して具象型で使用するようなケースが代表的。 >>608
> 型検査いらないし
実行時にやるだろ
なので動的型付け言語の多くはインタープリタ
ネイティブコンパイル言語だと逆に結構大変だよ 実行時の型検査なんて、存在しないメンバにアクセスしようとしたらエラーとかオペランドが特定のデータ型でなければエラーといったルールを、演算子やオブジェクトの実装に組み込むだけだよ
ホストとの間で実行モデルやオブジェクトモデルを共有してるから楽勝
JITの場合もオブジェクトモデルは共有するから比較的簡単 そんな言い方するなら静的型付け言語もコンパイル時にやるだけで似たようなもんだろ 全然違うよ
ホスト言語で直接実装すりゃいいだけだからな
JITの場合も極限のパフォーマンスを求める静的型とは違ってホスト言語で書かれたランタイムの呼び出しを多用するのが普通だから、
インタプリタと大差ないし徐々にランタイムを使わないように改良していくアプローチが採れる >>613
型チェックとどこが違うのか具体的に書いて
あとホスト言語という謎用語使うならちゃんと定義してくれ
(ホスト言語自体はDSL界隈とかで使われてるけどコンパイラとかの文脈で使ってるの見たことない) 事前に型検査をやろうとすると予め静的な型のモデルを厳密に定義しなきゃいけないでしょ? 途中書き込み失礼
一方で動的型の場合、実行時のオブジェクトモデルさえ定義されていれば実行時の検査が可能であり、静的な型モデルと実行時のオブジェクトモデルの両方を厳密に定義する必要がない。
平たく言えば、実装が仕様だ、みたいな進め方をすることが難しいわけだ
更に、リフレクションが可能な処理系の場合には静的型であっても実行時に型検査を行う必要があるよね。 > 平たく言えば、実装が仕様だ、みたいな進め方をすることが難しいわけだ
は静的型の場合ね。念のため。 >>607
インタプリタのメリットは自分自身をコンパイルするコンパイラを作らないこと
言語は二つ以上になってしまうがそれでいい
他にもGCを実装する言語がGCに依存するんじゃないかとか
型情報を定義する言語がーとかいう問題に対する煩悩が消える >>615
型のモデルとかイマイチよくわからんが定義は必要だろ
動的型付でも実行時には必要なんだし
>>616
> 更に、リフレクションが可能な処理系の場合には静的型であっても実行時に型検査を行う必要があるよね。
動的型付と類似の処理だからね
そういう意味で面倒というならまだわかる 言語を作る側のメリットしかわかんねぇの?
言語を作る側じゃなく使う側のメリットを聞いてんだろ >>608
ツリーウォーク型のインタプリタなら楽だろうけど、速度出すにはJITとか考えないと行けないし、コンパイラ書くのと大差ない気がする >>620
具体的な実装をギリギリまで遅らせることができる&設計が間違っていても無理やり嵌め込むことができる。
プロトタイピングとかライブラリ開発とかで楽できるし、リファクタリングで段階的に仕様を固めることができる。
最終的には静的型付けの方が堅牢になるけど、最初からミス無く設計するのは無理だから、開発初期は動的型付けの方が有利。 >>620
言語でも仕事でも持続可能性のためには作る側が儲かるぐらいがちょうどいい もちろんプログラマーや生成物実行者やサービス利用者にとっては静的型付け言語の方が大きく有利
プログラミングも静的型付け言語は支援が大きく楽だし実行時デバッグも減らせる
そして実行速度も静的型付け言語の方が速くできるため実行者やサービス利用者も時間の節約や応答性の良さを得られる >>624
>>608とか一番ダメな回答じゃん
このスレでイキってるやつらって結局このレベルなんだな
視野狭窄 >>627
使い分けができない人の典型的な言い訳ですね >>628
だからダメダメって言ってるのに横からアホみたいに絡んでくるなよ >>630
ダメさ加減は君も引けを取ってないぞ
イキり加減もねw 小規模なプログラムを早く作りたいというときに
動的型付け言語は向いている main関数の型がいつも同じなのはシェルが静的型付けではないからだ
設定より規約
独自のユーザー定義型を設定しなくても使える >>622
あえて突っ込んでみるが
>具体的な実装をギリギリまで遅らせることができる
to_foo()できるFooableなインスタンスを受け取る前提でBarを作るみたいなのは動的型付けでも静的型付けでも同じじゃない?
>設計が間違っていても無理やり嵌め込むことができる。
これも動的型付けでも静的方付けでも同じじゃない?
渡す型が間違ってるみたいなのは設計間違いというよりコーディングミスでしょ >>607
今やない
モダンな言語は静的型だけど動的型のように書けるから >>635
>なインスタンスを受け取る前提
そういう前提を開発当初に決められなかったり、そもそも問題領域に対する知見が足りなくて手探りで開発を進めるたり。当然「前提」が間違っていることもある。
間違うことを前提に「とりあえず動くものを用意して情報収集しながら開発する」というプロトタイプ開発だと、静的型付けは設計が重すぎて使いづらい。そういうケースだと柔軟性の高い動的型付けの方が便利。 テスト書かないで書き散らすなら静的型はミスが生じにくい分本来的には有利だと思うけどね
ただ、静的型ってモデルとビューモデルみたいな似た型を複数作って左から右に渡すような設計をしがちだからコード量が増えやすいんだよね
静的型でも共通の型を使い回して重複を発生させないことはできるだろうけど、動的型と違って型が目に見えてしまうもんだから、
オプショナルな属性だらけの汚い型が目についてしまって、心理的に適切に型を使い分ける設計になりがち そもそもメンテをするつもりもテストをするつもりもない程度の用途なら、短いコードで完結に書けることが多い動的型言語は比較的有利そうだね
まあそういうときはなんでもいいから一番慣れてる言語を使えばええやんって感じだが >>637
いや、それは型推論の無かった静的型言語を使ってた時代の話だよ。
今時の言語は型推論あるからコード書く分には動的型言語と遜色ない。
いくら動的型言語が柔軟だと言ったって想定と異なる型のデータで関数なりメソッドなり呼ばれれば、その部分は動かない。下手したらデータ破壊しながら処理進めてしまいかねん。 >>638
そのあたりの問題は最近の静的型付け言語は既に解決済みではないかな
そういう様々な異なる型に対して、横断的な共通の扱いをしたいならば、
例えばRustでは用途ごとに3通りの対応方法を提供しているよね
(1) ボディ付きenumによる複数の異種型の横断的な収容
(2) impl Traitによる複数の異種型の横断的な共通振る舞いとその静的モノモーフィゼーション
(3) dyn Traitによる複数の異種型の横断的な共通振る舞いとその動的ディスパッチ プロトタイプには動的型って一見もっともなんだけど
じゃあいつ本番開発に移行すんの?ってのは気になるな
結局ある程度動き始めたらそのままズルズル行っちゃうのでは?
それとも「今日から静的型で書き直すので一ヶ月開発止まります」とかやるの? >>641
そんな小難しいことを最初から真面目に考えて設計しなければならない時点で遅いんだよ 動的型だと素早く開発できるという話は品質を犠牲にすれば素早く開発できるという話と同じ匂いを感じる >>643
え?めっちゃ簡単な話しかしていないし
最初から設計せずとも後付けで型ごとに自由なタイミングで任意の対応traitを増やしていける仕組み かといってサーバーサイドに静的なJavaを導入して安全か?と言われてもなぁw
PHPだから危険なのか?という話だし
そもそも関数で引数に型の指定があるない関わらず期待した型じゃないと普通動かないし
静的だから安全というのは何か間違ってる気がするわ >>637
前提が間違ってた場合の修正範囲に
動的型付けと静的型付けで顕著な違いが出る?
出るならそれを具体的に説明してよ
できれば簡単な擬似コードとかで
柔軟性が高いとか設計が重いとか言うだけだと説得力が乏しい >>646
動的型付け言語でそれなりの規模のもの書いてたら
関数の引数の型が想定と違った結果
非常に調査が難解なバグとかエラーが出た頃には
致命的な結果になってるとか経験しませんかね… >>642
>>644
まあそれはある
大抵、プロトタイプと言いながら作り過ぎなんだよ
本来プロトタイプってのは本当に必要最低限のハリボテで十分で、実際に客から金貰って売る前にPMFが完了していなければならない
現実として、そこまでやれるほど優秀なプロダクトマネージャはまず存在しないから、大抵のスタートアップは作って売ってから考えるという馬鹿な状況になる >>646
そのあたりも最近の静的型付け言語が対応しているでしょう
例えばRustならば引数に対して型指定ではなくtrait指定にできるし
その具体化解決は静的にも動的にも可能だし
もちろんいずれも安全に適用できることをRustでは保証される >>646
わかる
何か間違ってるよね
極端に言えば
「濡れた猫を電子レンジで温めようとしたらエラーで弾いてくれるから安全」
と同じイメージ >>643
???
動的型付け言語による開発でもこの程度の設計は必要だろ >>641
「ModelとViewModelみたいな似た型」で普通そんなことするんか?
したことあるんか?
そうさせるFWがあるんか? >>651
その場合だと
静的型付け言語ならば実行前にそれは危険だとコンパイルエラーで教えてくれて未遂で済む
動的型付け言語ならば実行してしまってネコ死んじゃったエラー >>648
ぶっちゃけないな
型の想定が違ってるのにそれらしく動いて
かつテストでも発見できないバグで
かつ調査が難解となると相当にレアでしょ
それに定義してる型とあっているからと言って
ドメインエラーを常に拾えるわけじゃない >>654
猫を電子レンジに入れて本番で実行するような開発者のいるプロジェクトなら
動的型付け言語に比べたら静的型付け言語のほうがリスクは低いだろうね
ただそういう開発者を排除するほうが遥かに安全性が高いと思うよ 静的型付け不要って主張してるのはPHPおじさんしかいないようだけど
何でこのスレにいるのかわからん >>657も何でいるのか分からんw
PHPやってていたらダメとか偏見も良い所
こんな事言っている奴はPHPでも作れんだろw >>655
テストで担保というのが手間でしょ
カバーできてなくて本番のランタイムで
エラーを経験してことないのはよっぽど
丁寧に書いているか大してもの作ってないかの
どっちかだね
あと関係ないドメインエラーとか待ちだすのは
詭弁論破の練習? >>655
>それに定義してる型とあっているからと言って
>ドメインエラーを常に拾えるわけじゃない
0か100の世界線の人ですか?
エラーは早い段階でわかったほうがいいというのは世界の常識だけど、お前の世界線では違うみたいだな。 猫とか車とか飯とか脳みそOOPかよ
お前らのしょうもない例え話は実害があるから本当迷惑なんだよ >>660
「あーそれなら確かに静的型付けにしてたら有利だね」
って言う現実的なコード例出してみてよ
ドメインエラーってのは
文字列を期待してるところに数値を渡したり
注文番号を期待してるところに配送番号を渡したり
First Nameを期待してるところにLast Nameを渡したりした状況のこと >>664
それぞれ別の型にしておけば静的に型チェックにて実行前にミスを無くせる
それよりも「文字列を期待してるところに数値を渡したり」が型不一致エラーとならない超弱い型付け言語を使ってるのかね? >>665
で現実にFirstName型とLastName型を定義して使い分けてるのかね?
OrderId型くらいなら使ってるところそこそこあるが多数派ではないわな >>666
お前さあ
自分の都合の良いように設計論の話と
どっかの現場の話を切り分けて話するのも
詭弁論破の練習? >>667
答えられなくなったから逃げてるのかね?
静的型付けマンセーで思考停止してるのでなければ少しは考えてみれば? >>666
FirstNameとLastNameを間違えるのはプログラミング言語やその型付け方法と関係ない話
そして静的型付け言語が不利になる話でもない
それにより何を主張したいのか?
もし本当に厳格に区別する必要があるならば各々を扱う専用型を設ければよい
そうせずに両方を文字列型で扱っても、変数名、フィールド/メンバー名、関数/メソッド名などの名付けを分ければ互いに入れ違いを避けられる >>668
いやーすごいすごい完全論破されちゃったな
これでOK? ドメインエラーとか型付けと関係ない話持ち出してきてるのは何なん?
型が何なのかわからん奴なんだろうな。そりゃ型付きが面倒・邪魔に感じるだろうよ。 変数に型がないRubyとかでも、ドメインモデリングするならバリューオブジェクトのクラスも作るし、
変数に型がある言語でもメンテの必要があるアプリケーションならテストコードは必須だろ
どっちがどういいかはトレードオフがあるだけ 静的型であっても型推論なら姓と名の型をそれぞれa, bとして
どっちもstringと確定するまではaとbは区別される
aとbが入れかわるコードが紛れ込んでいたらstring確定しなくてもa=bは確定 そもそも、ここに書き込んでるような人は、意識高い人だから、自分を基準に考えてはダメでは? スレタイにある次世代言語は全て静的型付け言語
静的型付け言語が圧倒的に優れているため全てがそうなっている
動的型付け言語には次世代言語が存在しない >>647
Visitorパターンみたいな処理をする時かね。静的型付けだと型を識別するためにacceptが必要だけど、動的型付けなら動的に型を判定することで手を抜ける。
まぁ、そもそも静的型付け言語も動的な型判定をある程度取り込んでいるからなぁ。パターンマッチとか。
型判別可能な共用体を使える静的型付け言語なら、上手いこと動的に判定する範囲を制限できる。
けど、そういう言語てあったっけ? >>677
型判別可能な共用体はまさに>>641の(1)でしょう
それに加えてジェネリックから型を制限していく(2)や(3)の方法も可能 今回セレクトされてないけどElixirとJuliaは動的型付けだね
Elixirはerlangの系譜だから特にこだわりがないかもしれないがJuliaが動的型付けなのは示唆的に思える juliaが目指したのがpythonの置き換えだからでしょ。 Juliaは少量のコードで大量の計算をする言語だからJITに無茶苦茶時間かけても大して問題にならないし、
そもそも数値計算で扱う型って整数と浮動小数点数とその配列が殆どで、型を厳密に扱う必要性が薄い
同様にFORTRANなんかも型は緩めだよ 型というかテンソルのshapeとかは気にするけどね。
ただ型というよりもうちょっと具体的というかレイヤーが低いとこでの合わせって感じではある。 行列の大きさとかを型で指定したいと思うことはあるけどIdrisにあるような依存型が必要になるのかな
ちゃんと勉強してないからわからんw >>678
ボディ付きenumというのはF#の判別共用体のことかしらん。Haskellだと直和型かね。 >>684
いわゆる代数的データ型だな。
プログラミング言語によってそれを、
直和で表したり、
タグ付き共用体で表したり、
値格納付きenumで表したり、
視点は各々で異なるが同じもの。 Rustはデストラクタ内のエラーは無視される実装が多いので、
IO絡みのデータ構造はdropされる前にflushなりsync_allなり呼び出さないけないが、忘れられがちで誤ってプログラムが世に溢れている
このあたり良い感じに処理してくれる安心なシステムプログラミング向け言語ってありますか? >>687
Rustベースで考えるならスコープ終端でのdropまでに特定の関数を呼び出していない場合コンパイルエラーにしてくれるようなものを想像している
標準ライブラリやサードパーティーライブラリもこのルールに従って作られていてほしい
?で関数の途中で抜けた場合はエラーにしない >>689
ラッパー作ってDrop実装してその中で「特定の関数」を呼べばいいんじゃね
dropの前にflushなりsync_allなり呼ぶべきかは用途次第だと思う >>690
それはFile等従来の構造体でもやっている
dropの中でエラーが発生した場合にpanicくらいしか呼び出し元に伝える手段がないのが問題
標準ライブラリでは単にエラーを無視する実装になっていて、他のライブラリも多くは同じだと思う > dropの中でエラーが発生した場合にpanic
そっか
つらいね Rustプログラマはすぐにpanicに頼る
アホなんだろうなと >>686
ない
良い感じに処理してくれる時点でシステムプログラミング言語ではない
システムプログラミング言語とは良い感じ処理してくれるシステムを作るための言語である >>691
ぶっちゃけどんな言語でもデストラクタ的な処理を途中で止めるのはダメじゃね?
そういうのは本来は独立した関数なりメソッドなりにするしか無いと思うが。 >>693
それは逆でpanicは続行不可であり、
続行のためには発生してはいけないこと。
つまり続行させるつもりがないならば、
panicを引き起こしても構わない。
続行させる意志がある場所ならば、
自分でエラー処理を書いてpanicを発生させない。
>>695
もちろん用意されているので、
それを自分で呼べばエラー発生したかどうかも掴める。
そして、デストラクタでpanicすることもない。 コンパイルエラーにするためにはどの経路を通っても終了処理を経由すると解釈できなくてはならないけどそれってあまり簡単ではなくないか dropの呼び出し元ではなく
JoinHandle::joinの呼び出し元に結果を伝えればいいんでしょ
実際、panicの引数はjoinの戻り値になる >>689
自分でcontext manager的なものを作るのがいいと思う
flush以前にエラーが発生してる場合にflushすべきかどうかは
アプリロジックなのでコンパイルエラーにするのは何か違う気がする >>689
アホか。
write(2)のマニュアルのエラー項目を読み直せ。
コンパイル時点で全部対処できると思ってるのかよ。 >>695
その通りで原則drop内でエラーが発生しうる処理はやらせるべきではないよね
だからエラー発生しうる処理がdropに至るまでに呼び出されているかコンパイル時に検知できると良い
>>697
プログラムの実行パス内で値がmoveされたか否かの解析が現状できているので、それと同じ仕組みでできるのではないかな
>>698
マルチスレッドならそれでも良いけど、単なるIOで必ずスレッドなりタスクなり生成させるのはよろしくない
catch_unwindでも良いがあらゆるpanicをせき止めてしまうのはオーバーキルすぎる
>>699
そういうことではなくて、drop内でエラーが起きた場合の話を気にしている
flushを呼び忘れてスコープ終端に到達してしまった場合ね
BufWriterなんかだと書き込みデータ量が少ない場合にwrite(2)が一度も呼び出されないままdropが呼び出されて、
そこで初めてwriteしようとしてエラー検出されることがある
BufWriterのドキュメントにはdrop前にflush呼ぶようにとは書いてあるが、プログラマが気をつけるのではなくできる限り機械的に検知できるようにしたいよね >>700
コンパイル時にIOエラーに対処せよなんて話はしてないよ
そもそもコンパイル時にwrite(2)が呼び出されないんだからそのエラーに対処できるはずもない
drop内でエラーが発生しても検知できないから、dropの前にflushなどの呼び出しを強制できないの?という話 >>702
なるほど。
4回目ワクチンのせいで読解力が低下してるようだ。エロいページ見て心を静めてくる。 医療従事者とか高齢者施設従業員とか正規の4回目来てるんですよ >>701
>そういうことではなくて、drop内でエラーが起きた場合の話を気にしている
わかってるよ
drop前に確実にflushが呼ばれるようにしてflushした場合のエラーをハンドリングしたいなら
context managerを自作するのがいいって話
buffer.len()をチェックしてcompile_error!でエラーにするようなAPIも作れなくは無いかもしれないけど
それをやる場合にもBufWriterへの一連操作をラップしたcontext manager的なのを作ることになるので
エラーにするんじゃなくてflushしてあげたほうが親切 なにこれ
ワクチン接種証明書の例え話が役に立つという寓話なのか
fn hoge(&mut self) -> flush証明書 {
flush証明書::new(self.file)
} >>686
システムプログラミング向け言語という時点でGC言語は対象外となる
無条件RAIIによる自動デストラクタ呼びを前提としている点でもGC言語は対象外となる
>>689
書き忘れていたらコンパイルエラーにするという時点で
RAIIもどき実現のためのusingやdeferなど使うGC言語はそれを書き忘れてもエラーとしないから
GC言語は前提にすら辿り着けないことになる
結局その機能を現在もしくは今後に実現できる言語は非常に限られている >>706
context managerを知らないんだけど、pythonの用語で合っているかな?
スコープの入り口と出口に処理を差し込むようなものに見えたけど、こんな関数を用意するようなイメージ?
fn with_file(f: impl FnOnce(&mut File) -> io::Result<T>) -> io::Result<T> {
let file = File::create(...)?;
let res = f(&mut file)?;
file.flush()?
Ok(res)
}
確かにこれで解決するケースも多いね >>709
そういう単純な対応は他言語含めてよくあるパターンだが狭い範囲しかカバーできない欠点がある
例えば複数のファイルなどを順序前後して扱うと破綻
その観点の専用クロージャとなっているためそれ以外からの処理を巻き込みたい時にも破綻
ファイルディスクリプタを保持して戻りいつ解放かすぐ決定しない場合も破綻
並行並列化する時も破綻 >>709
こういっては失礼かもしれないけど、なんて汚い実装だ.... >>710
だから これで解決するケース "も" ある って書いたでしょ
もっとよいワークアラウンド考えるか次世代言語の仕様提案してくれ
>>711
どこがご不満? >>712
Rustスレで半年前に出ている以下のアプローチはどう?
他の言語では無理だけどRustならば所有権の行方を静的に解析してコンパイラが持っているため
https://mevius.5ch.net/test/read.cgi/tech/1636247099/700
> コンパイラは解析してdropさせるべき位置を把握しているから
> そこへ至る全ての経路上で例えばFinalize trait実装型はそのメソッドfinalize()を呼んでいないとコンパイルエラーとなる
> というような制約をするFinalize trait >>713
それは良さそう
dropに至るまでの処理でエラーが発生した場合はFinalize不要にするとかの考慮は必要そうだね
?で脱出したか否かで区別できるかな? >>709
そう、そういうイメージ
FileManager的なstructを定義してnewするときに内部でFile::createして持っておいて
withでクロージャを受け取るようにするとネストしたりしやすい気がする
buffer.len()とcompile_error!マクロでどうにかする方法は無理そうだった
あとは明示的flush未実行の型と実行済みの型とをそれぞれ作って
一連のI/O処理の戻り値をflush実行済みの型にしておくことで
flush忘れたらコンパイルエラーにするという方法ならできそう
面倒くさいけど >>715
後半のアイディアについてはコンパイルエラーにするのは難しそうだね
dropの呼び出しを禁止したりコンパイルエラーにしたりする方法は多分ないと思う
リンク時エラーにするアイデアはあるみたいだけど、ちとやり過ぎな感がある
https://mevius.5ch.net/test/read.cgi/tech/1636247099/695 リソース確保、開放といった共通化できる操作はテンプレート化したいが、そのために真にやりたい操作をクロージャや関数にして一段ネストを深くしてしまうのがなんか違う気がするんだよなぁ。 システムプログラミングじゃそれが本質的に指摘すべきことなんだから仕方ないだろ。 >>713のやり方ならば
そのような対応も不要でプログラムの構造も変えずに済むし
関数から返したり長生きしてもよいし
デストラクタでエラーが起きうる型に適用しておくだけでよく
利用側プログラムに他の付加コードは不要だから理想的にみえる >>719
特定条件のときだけ開放処理が行われるみたいな分岐があるケースとか考え出すと難しくないかな。
まだ finalize してなければ finalize するみたいな処理を Rust が決定したdrop位置の直前に書かせるという制約を課すだけでいいのか? >>720
>>713のメソッドfinalize()は最後に呼ばれるべきものだから
Selfで受けて消費しちゃう仕様でもいいよね
するとコンパイルエラーが起きない正しいプログラムでは自動drop()が全てfinalize()の中で起きる
つまりfinalize()以外で自動drop()が起きる部分をコンパイルエラーとすればよいのではないか?
例えばfinalize()を呼ばずにスコープブロックエンドに達しているコードと
ブロックから脱出return/breakしているコードをコンパイルエラーとする >>722
実現できる
コンパイラはdropする可能性のある場所を全て把握していて、そこへdrop()呼び出しコードを埋め込んでいる
つまり>>713を>>721の方法で実現するのは容易
finalize()内以外でdrop()呼び出すコードを必要としたらコンパイルエラーとする対応をコンパイラ加えるだけで実現できる こういう時は自前主義の方が冷静
自前でできないことを期待するのは虫が良過ぎる >>723
> finalize()内以外でdrop()呼び出すコードを必要としたらコンパイルエラーとする対応をコンパイラ加えるだけで実現できる
それは「現状では」実現不可能って言うんでは? Rustならば現状のコンパイラで実現できる
finalize()を呼び忘れていたらコンパイルエラーとすることが可能 >>721,723
「つまり」の前後の論理が全くつながってない つまり
現状のコンパイラで容易に実現できるが
コンパイラに手を加えずに実現できるわけではない
ということでしょw >>735
現状のrustならできるらしいよ ⇒ >>727
なおどうやるかは本人しか知らないみたいだけどw >>735
「現状のコンパイラで実現できる」
というのは
「現状のコンパイラ(の機能を活用してfinalize()内以外でdrop()呼び出すコードを必要としたらコンパイルエラーとする新機能をコンパイラに加えるだけ)で実現できる」
という意味なんでしょw 次世代言語の話だから、現行言語をもとに「原理的には可能」で議論も悪かないと思うけどね。 悪くはないがコンパイラに手を加える必要があるならそう言わんといかんわな。
しょーもないわかりやすいプライド見せられてもなって気分になるわけで。 行動経済学あるある
実験前の説明では「原理的にはどっちを選んでもOK」と言う
実験後「経済的にはこっちを選ぶのはバカ」と言い出す 話題の要件は「finalize()等の関数を呼び忘れていたらコンパイルエラーにすることができるかどうか」でいいんだよな
そして他の言語ではそれを実現できなくて「Rustで実現できるか否か」という話でいいんだよな
それならば現行のRustで実現可能 実行確認可能なソースコード
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=7086ce3b73ad74a5375e970c7dfc5951
fn main() -> std::io::Result<()> {
let foo = Foo::new("Hello, World!");
foo.finalize()?; // この行をコメントにするとコンパイルエラー
Ok(())
}
struct Foo { s: String, }
impl Foo {
fn new(s: impl Into<String>) -> Self {
Foo { s: s.into() }
}
fn finalize(self) -> std::io::Result<()> {
let mut me = std::mem::ManuallyDrop::new(self);
println!("Finalizing... {}", me.s);
drop(&mut me.s);
Ok(())
}
}
impl Drop for Foo { ... >>741
それ>>716に書いてあるリンクエラーのコードを改変したんだとおもうが
let fooとfoo.finalize()の間に処理挟むだけでリンクエラー発生する 使い勝手を含めて改善すべき点はあるから
それらはRustコンパイラが直接サポートすることで解決すればよい
例えば>>741でも用いているManuallyDropはコンパイラサポートによりその機能を実現している proc-macro作るとかclippyのlint追加するとかそういう方向性ならやりようはあるんでないの 型情報必要だからproc-macroは無理そう
compiler-pluginでなんとかしてくれ コンパイラがサポートすればリンク使わずに済むから真のコンパイルエラーとなるのでプロトタイプとしてはいいんじゃない 実用上は実行前に検出できれば良いのでリンク時エラーでも問題ないとは思うけど
リンクまでしないcargo checkやrust-analyzerやclippy等で検出できないという違いはあるから
コンパイルエラーとリンク時エラーは区別はした方が良いだろうね Rustではコンパイラ対応で完全版も実現できる見込みが立ったようだけど
他の言語ではどうなの? >>743
使い勝手の問題に矮小化すんなよ
根本的に使えないじゃん >>742
確かに5行目に関係ないprintln!入れるだけでもエラーになる
何で?? >>751
関数型言語らしい観点からの拡張だね
Haskell側でもRustのborrow checkerについて言及してる点も興味深い
でもそのHaskellの拡張で今回のfinalize未呼び出し検知を静的に実現できるの? そもそものアプローチが間違ってるから
他の言語でどうこう言っても意味がない >>753
そこで関数呼び出しなどがあると
panicなどで巻き戻される時にfooを解放する必要があるためdropを必要とするからかな
コンパイラが直接サポートすればそこは区別できるしリンク方式を取らなくてもよいから大丈夫じゃないかな でもコンパイラはお前のこと嫌いって言ってたしサポートしないんじゃない? そもそものアプローチというか
エラーが起きない時か気にしなくてよい時 → デストラクタによる自動処理任せでOK
エラーやその有無を必ず欲しい時 → flushやcloseなど自分で呼べばエラー取得できる
とはいえそれさえ書くのを忘れた時に
Rustコンパイラがコンパイルエラーとする機能も持てそうだとわかったから
さらなる機能向上に期待
GC言語はデストラクタによる自動処理すらないからそれ以前の問題だし
後始末の処理や指示を忘れてもエラーとならないし
忘れてクローズされていないファイルディスクリプタが多数溜まっていくこともよくあるw >>758
>Rustコンパイラがコンパイルエラーとする機能も持てそうだとわかったから
持てそうじゃないって
Drop Obligationとは全く異なるフロー解析が必要になるからゼロから作る新機能だよ >>756
その仮説で正しそうだが念のため確認してみた
まず>>741の通りだとdrop()を呼び出さずに当然コンパイルが通るので
何でもいいから関数呼び出し(演算含む)するものを間に挟んでみた
let foo = Foo::new("Hello, World!");
println!("test"); // ←ここに挿入
foo.finalize()?;
するとこの形はdrop()を呼び出ように変化するようでリンクエラーとなる
この関数呼び出しはfooの参照を使うか否かに関係なく同じ結果
ところがfoo生成前に置くとコンパイルが通る
println!("test");
let foo = Foo::new("Hello, World!");
foo.finalize()?;
さらにfoo消滅後に置いてもコンパイルが通る
let foo = Foo::new("Hello, World!");
foo.finalize()?;
println!("test");
したがってfooが有効な期間に何か関数呼び出しがそこで起きる時のみ
drop()が呼ばれるコードが用意されてリンクエラーとなっている
これはRustがpanic時もメモリ解放をきちんと扱う話とも合致する
つまりpanic時の巻き戻し時のfoo解放をコンパイラが用意している仮説で正しいようだ >>759
そのような別のフロー解析は不要
Rustコンパイラは常に正しくメモリ解放を行うために所有権が尽きてdropを呼び出すべきところを全て把握している
それとは区別する形で>>760のようにpanic時の巻き戻し時のdrop呼び出しも正解に把握している
したがって以下のように検出できる
・finalize()をどのパスでも常に忘れずに呼び出しているコード
→ 非panic時のdropは必ずfinalize()内のみで起こる
・finalize()を呼び忘れているパスが存在するコード
→ 非panic時のdropがfinalize()以外で起こる →検出
よってRustコンパイラは新たな仕組みを必要とせずに
現在把握している情報のみでfinalize()呼び忘れを検出可能
容易に対応できることが確認された >>760
これってつまりリソース確保してから通常想定されるdropの位置までの間にある
すべての関数呼び出しの panic の可能性を考慮しないといけないから実用不可って事にならんか。
まだ try ... finally ... の方が実用的やないか。 >>763
大きな誤解をしているようだが
C++やRustなどは関数(正解にはブロックスコープ)を抜ける時に常にデストラクタ(dropなど)を呼んでいる
これが即座のメモリ解放でありC++やRustが高速に動作するな理由
ただしC++でもRustでも所有権が移動したときにはそのデストラクタを呼ばず移動先に委ねられる
以上の基本事項の上でC++の例外やRustのpanicなどが起きたときには
関数呼び出しを自動的に多段に巻き戻して各々のメモリ解放つまりデストラクタ呼び出しをする
これは所有権が移動する場合でも移動する前に例外やpanicが起きればデストラクタが呼び出される
それが>>760のfooの生成と移動の間に挟まれたときのみデストラクタ(drop)が呼び出される仕組み
これらは全てコンパイル時点で静的に簡単に確定するため複雑さはなく実行時の余分なコストも発生しない
ここまでの話は現状のC++/Rustコンパイラがやっている普通のことである
>>761のfinalize記述忘れをコンパイルエラーとする新機能の話は
上述した現状の仕組みをそのまま活用できるため
その新機能を付加することがたやすいというだけの話だろう 複製おじさんがまーた嘘ついてる
Rustが所有権(=dropする義務)をどう管理してるか知りたければ
“Drop Obligations”でググるといいよ >>763
try ... finally ... を書かなきゃいけない時点で大きく負けてるやん
RAII言語は何も書かずともデストラクタで自動処理される
そのデストラクタでエラーが発生する可能性がある時にfinalize呼び出しを強制させる選択肢も用意する話が今のテーマ >>765
それってコンパイラがどのAPIがfinalizeが必要か必要ないか全て把握してないといけないよね。
OS毎に低レベルAPIなんて異なるし組込み向けだってあるだろうし、無理じゃね? >>766
Drop obligationsはその話と関係ないじゃない?
RustコンパイラDevelopment Guideを見ても "Drop obligations" は変数の構造つまりenumやstructの中身とそのフィールド連鎖などについての話 >>765
いや、その付加した機能が実用にならないねという話をしたんだが。 >>768
みんなが一貫してずっと型の話をしているのに唐突にAPIとか場違いの話を出すのはヤバいな
finalize呼び出しを義務付ける型は>>713の方式ならばFinalize trait実装型と書かれている
あるいは>>743のManuallyDropのようにラッピング方式での指定の可能性もありうる
いずれも明白に宣言を伴うためコンパイラにとってもプログラマーにとっても明瞭に区別できる >>770
実用的じゃないとはどういう意味だ?
現行でも実用的になっているコード(明示的に書けばエラーを捕捉できて、書き忘れてもデストラクタで自動実行される)に対して
書き忘れを防止できる選択機能を新たに用意しよう、という話だろ finalize強制の話は7年前から線形型として提案はされてる
具体的なユースケースとしてFinalizeトレイトなんかも出てるし
https://github.com/rust-lang/rfcs/issues/814
ただまぁ大改造だし他にやることもたくさんあるから当分検討されることはないだろうな >>772
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f27f2dc5668cded5f61f8f23e030df61
本当はこういうことがやりたかったんだろ?
newとfinalizeの間に一切コードが書けないんじゃ使い道が皆無
もともと「スコープ終端でのdropまでに特定の関数を呼び出していない場合コンパイルエラー」にしたいだけだったのが
「newした直後に特定の関数を呼び出していない場合コンパイルエラー」という厳しすぎる条件になってるのが問題 >>775
そこに書いてる実現方法でも現実的だけどそれでも相当大変そうだね
各種API変更まで考慮すると費用対効果的に無さそう >>777
間に別の処理を入れてもエラーが起きないようにしたコードかと思って試しちゃったじゃないかw 費用の問題というのも間違い
安くすれば需要がどんどん増えると思ったら大間違いだよ >>777
> newとfinalizeの間に一切コードが書けないんじゃ使い道が皆無
なぜそんな自虐的な設定を勝手に設けているの?
この話の発端は>>686だと思うけどそんな制限ないし
ここ最近に出ているコンパイラ拡張提案でもそんな制限した案はないよ >>783
それは未対応の現在のコンパイラでの話だよね
そんなことも区別つかないの? >>784
うん区別付いてない
その「対応」は具体的に何を指して言ってる?
>>775の線形型のpre-RFCのこと? 現状ではどの言語でも実現できていない話と、
新たに新機能追加/拡張を考えようという話の、
区別がついていないというよりも、
現状では出来ていないと叩いたり制限があると叩いたり、
ものごとの理解ができないキチガイか文句をつけて叩ければいいアンチのどちらか この人何回もゲーム機エミュ書いてるからこの人の事例で言語の生産性は測れないよ。
絵師()みたいな人がよく言う
「これまでの人生+10分なんです」
と同じ。 >>793
何回も書いてるなら
他の言語で書いた時と比較すれば多少は参考になりそうだけど >>794
書くたびに習熟度が上がるからダメ
記憶をリセットしないと Rustの生産性が高い原因はプログラミングの書きやすさとコンパイル時点で確定保証されることの多さ ISUCONでGoに匹敵するぐらい入賞チーム増えてきたらどんな用途でも生産性が高いと証明されるな >>797
限られた時間内で場当たり的な対応をどれだけこなすかを競うISUCONは現実と離れすぎていてあまり意味がない
もちろん欠陥だらけのシステムの数々の問題点を見抜いて各々に対応する能力は非常に重要
現実にはその能力は安全かつ高速なシステム設計開発に使うものであり短時間での場当たり的な対応に競うものではない 時間は正しく計測できるという仮定の下で
「時間が短過ぎる」等の判断をすることもまた現実から乖離していることがよくある
数年前の過去問と同じ問題がテストに出れば、時間は数年間あってもそれを計測する時計はない 知識を問うテストじゃないはずなのに、ある特定の知識を知ってる人だけがサクッと解けるようなテストだったら、それは問題が悪問なだけ
出題者が悪い 良問を出すべきというのは道徳か?
富裕層は貧困層に寄付するべきと言ってるのと同じ? ISUCONでRustチームがいっぱい参加して優勝まで取ってたら真逆のこと言いそう 性格や適性の問題じゃないかな
ボトルネックの調査と解消を正しく真面目にやれるタイプのエンジニアにとっては、
言語なんかシステムにおける無数のファクターの一つとして相対的に評価されるものでしかないのだろう
Rust信者だったら自分好みにリファクタリングを始めて時間切れになりそうだ
もちろん後者のタイプの人間のほうが適しているタスクもあるだろうけどね ISUCONのステマかなんかなの?
参加人数少なくて困ってんのかな
賞金を最低でも1000万以上にしたり
グローバル展開してあらゆる国の開発者を集めたほうがいいんじゃないの?
今は実質日本人学生用のコンテストになってるから 俺もまずはリファクタリングから手を付ける
見やすさ追加改変のしやすさ品質に速さなどあらゆることでリファクタリングが基礎になる
あとシステムアーキテクチャに問題があるときは場当たり的な対応より根本設計からやり直した方が長期的に得と分かっている ディズニーを超えたいと思えばまあ小学生っぽくなるわな youtubeの中学受験の図形関係の問題みたいなもんでパターンを覚えるみたいな感じで
競技プログラムって何かつまらないんだよねぇ >>808
クイズやパズルと一緒
ワンパターンだから飽きるのは仕方がない ギャンブルならつまらないリスクから逃げるのは常識
だがリスクがない場合、つまらないという理由だけで逃げるのは逆に難度高い 根源にある感情は「だからなに?」ってことなんだよ
できてもできなくても大差ないということ ManuallyDrop<T>を知る事と
それを知ってたら何になるかを知る事を区別しないと混乱が起きる >>808
結局そのアルゴリズムを反復練習で書けるかみたいになっちゃうんだよな >>804
参加者はめちゃくちゃ多いよ
ぶっちゃけ業務としてやってる会社が多いけど
俺が参加してた初期の頃はみんな趣味だったんだよね >>816
年1回の1500人程度の参加でめちゃくちゃ多いというの??
比べる対象じゃないのかもしれんが競プロは毎週万単位での参加者がいるぞ 実務に役立たない競プロよりは
まだISUCONのほうがマシ
なぜならISUCONはサーバーなど含めたシステム全体のアルゴリズム相当も含むため
しかしそれを限られた時間内にその場しのぎの対応を多数こなす競技ISUCONも実務とかけ離れすぎていて単なるゲーム
ちなみに競プロの人口の方が多いのはISUCONの方がより現実に近くて桁違いの知識を必要とするため 参加者めちゃくちゃ少ないけどなw
しかも半数以上は新人研修や社内勉強会での参加者で本気で決勝目指してるような奴等ではない ISUCONなんてもともと「いい感じにスピードアップコンテスト」みたいな雑な名前で、
そういうのが好きな運用者のガチ余興から始まったもんだろ。
ベンチマーカーの特性読んで穴見つけて異常点数取ったやつを「スゲェw」みたいに言うお祭り。
なんか箔をつけたい学生さんに目を付けられてからなんかへんな感じになってるけど。 >>822
最近はそういうの無くなってるよ
そもそもお題のサンプル実装の時点ですげーよくできたものが出来上がってくる
仕事としてやってる会社も増えたからそうなるんだろう
昔はめちゃくちゃやっつけで雑だったから
やりようがいくらでもあったのにさ Rustより難しい疑問だが
その辺にある石ころのように誰にも気付かれない悪問 夏休みの自由研究
運動会
学芸会
発表会
楽しそっすね~w 研修とかトレーニングとしてってことだろ?
もしかして会社の箔を付けるためなのか?
うちはISUCON決勝進出したんですw的な 業務時間扱いで技術大会の運営準備とか練習させてくれるの、わりとどんな業界でも普通だと思うが…。
従業員を工数としか扱わない会社に所属してるなら御愁傷様。 >>828
そういう面は大きいよ
特に採用面ではかなり優位だろう
まともなエンジニアがあることがわかってるし Lispはカッコばかりつけてるナルシストだからダメです >>829
「仕事としてISUCONに参加する会社」と
「ISUCON参加を業務時間扱いしてくれる会社」は全然違うやろ
前者は半ば強制の指示命令ありき
後者は任意の研鑽を会社が支援するもの
「仕事としてやってる会社」という表現は完全に前者を念頭にしてるよね
まぁぶっちゃけどうでもいいけど >>835
言語がなきゃどうやってプログラミングするんだよ >>836
いや、後者を念頭にしても不自然ではないよ >>822
>ISUCON=いい感じにスピードアップコンテスト
>ベンチマーカーの特性読んで穴見つけて異常点数取ったやつを「スゲェw」みたいに言うお祭り
へー勉強になったω
まじありがとう >>839
アセンブラも機械語という言語で方言もある >>841
アセンブラはセーフだと思ってたwww
まさかELFをバイナリエディタで手打ちしない限りは言語を使ってないことにならないのか..... >>841
アセンブリ言語と機械語は違うよ
アセンブリ言語は機械語に厳密に変換できるがループや条件分岐などをマクロ定義できる
ニーモニックは機械語と言っていい >>844
何を言ってるんだ
フローチャートを書いてそれを頭の中で直接バイナリに変換して打ち込むくらい昔は珍しくなかったぞ 一度でいいからパンチカードでFizzBuzzみたいな簡単なプログラムを作って動かしてみたいな >>837
言語じゃなくて"プログラミング言語"ね
コメントからコード生成する技術も出てきているし、将来的にはプログラミング専用言語が必要な場面がより少なくなるのではと思った
画像生成AIに食わせる文章に工夫が必要なように、コード生成AI向けに自然言語をうまく書くような工夫が必要で、それがプログラミング言語と呼ばれるのかもしれないけど >>835
仮に不要だとしてもどうせ
清濁併せ呑むべきという話になって必要な物と不要な物が混ざり合う >>848
さすがにそれは無理
プログラミングしたことないやつにはわからんだろうけど >>850
無理というのは、特定用途でプログラミング言語を代替するものすら現れることはないということ?
なんでそう言い切れるのかが分からない >>851
プログラミング言語が必要かどうかの話をしてる時に特定場面でプログラミングを代替できるものが生まれるかどうかの話にすり替えてたのか >>852
最初の投稿が言葉足らずというか大げさな表現だったね。申し訳ない
どんなケースでもプログラミング言語が必要ということはなくて、新たな何かで置き換えられる領域はある
その新たな何かこそが次世代言語なんじゃないか、という話をしたかった ローコ−ドやらノーコードやらは定期的にブームになるけど
結局は定着しないんだよね そんなん昔は全部ユーザーが自分でプログラムしてやってたのが今では完成済みが売られてるんだから今さらだろ ノーコード/ローコードはもっとUIだけにフォーカスしたツールが欲しいわ
マウスポチポチでWebUI作ったらAPIにデータ投げてくれるだけでいいのに、今時のSaaSはだいたい余計な中途半端なDB機能がついてきやがる
まあ一気通貫で提供しないとユーザー企業に直接売れずSIerに主導権握られることになるから、SaaSビジネスとしては面白くないんだろうな PCのUIはスマホ大勝利により失脚してるし
UIにも言語と同様の権力闘争があるのは自明の理 >>861
じゃあこれ以上の発展は見込めないわけ? 現代だとどの言語も言語仕様の更新をしているわけだし新しい言語じゃなくても言語の新しいバージョンを使うってのでもいい気もするけどね 言語の仕組みなんてLISP、Java、Haskellらへんでほぼ出揃ってて、目新しいものなんてほとんどない
使いやすくこうしてみましたー、とか、いいとこ取りしてみましたー、みたいなのばっり 新しいものなんて何もないといいつつ、新たなものを求めて次世代言語スレへやってきてしまう人々
若い頃に出会ったものは相対的にキラキラして見えるだけで、そんな出会いは二度とないので諦めましょう 今の時代はコアの理論や機能だけじゃ広まらない。
ライブラリやビルド・パッケージ等のエコシステムも揃ってさらにはGAMAあたりのサポートもないと中々広まらない時代になってる気がする。 >>864
21世紀になってからも唯一Rustが画期的な言語として登場したくらいかな
差異は所有権の借用とライフタイムという概念の導入だけだがその効果が革命的で
GCなくても常に安全な即時の自動メモリ解放とC言語並の速度の両立を実現したことに加えて
データ競合(シングルスレッド時のmutual aliasingを含む)が全く無いことも実現
高速と安全という従来相容れない二者を静的にコンパイル時点で保証したインパクトは大きく
世界のIT大手たちが揃って共同でRust Foundation設立するまでに到った >>864 程度で新しい仕組みと言えちゃうなら実行中に一時停止しないことに命かけてるponyの方が余程新しい仕組みになっちゃう
標準入力をそのまま返すだけで新しいクラスを作成させられるからな >>865
>新たなものを求めて次世代言語スレへやってきてしまう人々
新たなものを求めてるんじゃなく
自分がマウント取れるネタを探しにやってきてるだけ
隔離スレと呼ばれる所以 心理学や行動経済学は新たなものを作らない
マウントに限定しなくても心理学全体がそういうものだ >>867
rust-analyzerがバカスカメモリ食うのなんとかして 所有権もC++のムーブが元なんだけどな
あれをデフォルトにしたらRustになったと言うだけ ITの新しいところは二つある
低級言語からボトムアップで作るところ
無意識にバグを作ってしまうところ 所有権とlifetimeは元ネタがあったとはいえ、そこからshared xor mutableへと発展させたのは大きな発明だと思うよ >>874
shared xor mutableも元ネタあるよ
トランザクションを使った同時実行制御の常識
それを所有権やライフタイムの考えと融合させて実用可能なものを作ったところが新しい 研究用プロトタイプとか言語の一部で適用可能にしたレベルで終わりそうなものを基盤にした処理系をいちから作り上げてメインストリームに持ってきたのはホントすごいと思うわ。 組み込みとか低水準で使えるようなシステムプログラミング向けの言語って、候補と呼べるものすら新しい言語はなかなか登場してなかったと思うんだけどなんでだろな
C/C++の存在感がでかすぎて言語開発者の興味が失われてたんかね、GCを贅沢に使った言語はめちゃくちゃたくさん登場してるのに
今となってはRustが成功しつつあるけど、Rustが登場しなかったらずーっとC/C++の天下だったんかな、いやだな >>872
C++はライフタイムを言語(コンパイラ)が把握管理できないため
ダングリングの発生を検知してコンパイルエラーとできず
セキュリティ含む深刻なバグを未だに量産し続けていることに問題がある >>877
C++の時点で難易度がもう非常識なレベルになってるから
それ以上先に進むのは常識的にはできなかった
だが偶然その時にC++と関係ない人々の日常会話も非常識で過激になって行った
その結果、難解過ぎることの何が悪いのかと開き直るのを誰も止められなくなった >>878
いやだからC++にムーブができたんでしょ
std::moveとムーブコンストラクタとムーブ代入演算子を勉強しな? >>880
それは所有権
Rustは借用とそのライフタイムを言語の制御下に置いたことで初めて安全なメモリ自動解放を実現した
C++がいかにダメな言語なのかをもう少し勉強したほうがいい 安全なメモリ管理ってw
単に関数でnewしたものを保存してスコープが切れたら解放するだけでしょw
それC++でFile file;のように宣言したのと概ね同じなんじゃね?w >>882
まずC++がメモリ管理バグを生産し続けている仕組みを学習すべきだな
それまでこのスレに出入り禁止 C++にはtemplate反対派もいるから
バッファ<T>の代わりにtemplateを使わないやつを再発明することで
オーバーランも再発し続ける >>881
Rustの解説にもある通りRAIIがベースで、自動変数の応用例だけどな。
C++は元々cをコンパイルできるという大原則があって、その原則からスマートポインタ強制とかは行っていない。Rustはそのあたりのしがらみを捨てているんだからああなるだろ。
RustもC++の複雑さに加えてHaskellの難しさも取り込んでいるから、絶壁の学習曲線問題は悪化している。置き換えが進むのはc/c++の一部の領域のみで、Javaの領域とか食えないと思うわ。 >>886
その件でRAIIや自動変数と言い出してる時点で把握不足
それは以下の非常に大雑把に分けた3段階のうちの最初の(1)の部分でしかない
(1) RAIIとデストラクタ
(2) 所有権とその移動
(3) 借用とライフタイム
>>882も(1)止まり
>>880は(2)止まり
(1)と(2)だけではダングリングポインタの発生を防げない >>886
Rustの難しさがC++の難しさを引き継いでいるのかは疑問に少し疑問だし、Haskellの難しさに至っては全く受け継いでないと思うぞ
型に対する要求は小さいし、関数が純粋であることも求めてないし、遅延評価をベースにしてもいない サブスクやリボ払いじゃないんだから
よく似た難しさに10回出くわしたら1回あたりのコストは1/10になるんだよ
まあそうなると「コスト」とは何かを定義するのが極めて困難になるんだけど RustやC++やHaskellの難しいポイントってそれぞれ具体的にどういうところを指してるの?
単に難しさと言われても人によってイメージするもの違うのでは Haskellの難しさは対象ドメインの一般的理解よりも一段二段高い抽象度を意識したプログラミングが必要なところ Lisp世代とErlang世代の間に暗黒時代がある
モナドと型推論のプロトタイプもその時代にある
検索しても多分辿り着けないのは検索エンジンが原因でしょ >>893
トレイトはシンプルで分かりやすいけど
クラスが非常に難しい
例えば複数の型に共通する機能性質とメソッド群を用意したいことはプログラミングでよく発生する場合
トレイトだと複数の型々に関係なく独立してそのまま用意して各型に実装するだけだけでいいけど
クラスだと継承でやるにはその型自身に継承しなきゃいけなくて多重継承になったり継承ピラミッドが複雑化
あるいは継承は破綻するからメソッドを増やす別の方法を拡張して使い何のためにクラスを使っているのか本末転倒になる
結局クラスと型が分離できていないことにも問題が多い
Rustでは型とトレイトという二つの直交した概念だけで全てが済むからシンプルで分かりやすい
クラスも継承もないのはRustだけでなくGoでもそうだけど今までクラスと継承で遠回りしてきたプログラミング言語の到達点かなと思う >>895
Linusを怒らせたのはそういう所だな
C++を知っていても使わない自由があると言いながら
実際に使わない者が現れれば「知らんのか?」とミスリードしてくる >>897
C++にはインターフェースが無いことも知らんのか?
そりゃリーナスも怒るわw C++も素のままならまだいいのだが
やっぱり癌はSTLなどのライブラリや例外だな
内部で勝手に動的にメモリ確保したりとかするなよってw >>895
そのインターフェース等を批判してることを読み取れないのか?
クラスとインターフェースの2種類が必要となってしまっている
トレイトだけで済むRustがシンプルで分かりやすいことを認めたわけだな >>896
トレイトは型ではない
例えばCopyトレイトやDisplayトレイトなどの既存のものから自作のものまで自由にトレイトを作れるが
それらトレイトはもちろん型ではなく機能や性質を示すだけである
ある型を作ったときにそれら任意のトレイトを実装するか否かは自由であり
あるトレイトを作ったときにどの型に対して実装するか否かも自由である Rustでは型とトレイトという二つの直交した概念だけで全てが済むからシンプルで分かりやすい
クラスとインターフェースの2種類が必要となってしまっている
ほーん つまりクラスとか継承とかそんな複雑なものは要らないよな
型とインターフェースだけがあればいい
Goは実際にそうなっている >>893
ライフタイム以前よりはかなり簡単になったけどまだ引っかかりどころは残ってる感じ? >>900
Rustの公式リファレンスにもトレイトはインターフェースって書いてあるんですがww >>900
Rustはstructとimplとtraitの3種類が必要としまってますねwww >>907
そうだよ
インターフェース自体を問題にはしていない
クラスに加えて結局インターフェース等も必要としている状態を批判している
それならばGoやRustのように最初からクラスは無い方がシンプル C++20でconceptというのがあるんだな
これは知らんかったわ
C++も大変だねー rust は使ったことないがエラーメッセージが c++ より親切と聞いておる。 ここに書き込んでるヤツのせいで本当にrustが嫌いになったわ >>912
他人の意見ばかり気にしてないで、自分で判断したらいいのに >>897
別にリーナス怒ってはないやろ
mallocで失敗したくらいで強制終了するしかないポンコツは流石に使えんわって言っただけで >>911
C++と言うより原理的にテンプレート絡みのエラーメッセージはわかりにくいわな
まあそこは言語組込のrustに軍配上げるしかない > クラスとインターフェースの2種類が必要となってしまっている
class に加えて interface があるのは救いなんだがw
実装ではなくてインタフェースに対してプログラミングせよ
ってのを実践するのに丁度いい潔い言語機能なんだが interfaceでできることは (多重継承禁止しなければ) classでもできる
この客観的事実を、鬼滅棒みたいに振り回す人
と仲良くなるところまでがC++の難易度です 個人的にはC++でIFooとか涙ぐましいことやってんのも受け入れられるよ
問題は、言語ユーザが実装とインタフェースを分離したいという発想を持ってるかどうかだから
もちろんそうなったとき、よりスッキリすんのは言語として interface があるほうだよねって話 そもそもC++はオブジェクト指向言語ではないのでインターフェースは必要ない。 >>903
Rustを使えば避けられるよ
>>908
implは単なる接着剤だよ
Goのように接着剤なしで書く方式もあるように
接着剤であるimplはそこで言う種類じゃないよ そもそもRustは仕事がないのでimplは必要ない。 >>918
うん
インタフェースは必要でむしろクラスが要らないよね
そのわかりやすい道を選んだのがGoとRust Rustは仕事がない。
Goは仕事がある。
この差は大きい。 >>913
自分の判断ではrustはスパゲッティだから メソッドが無いってんならともかく、クラスが無いと言っても明示的なクラス定義に比べてソースコードの物理的レイアウトの自由度が高いというくらいの話でしかないでしょ
そんなドヤ顔で語るほどのことでもない >>925
少なくとも他の言語と比べたらスパゲティになりにくいね
>>927
メソッド自体はクラスと関係なくてクラスベースのプログラミング言語でなくても存在するものだよ
クラスを特徴付けるものはクラスの親子関係を示す継承だね
GoとRustに継承はないからクラスとは明確に異なるよ クラスに継承は必須ではないよ
VBAのクラスに継承は無いぞ? >>920
implは操作の定義
structはデータの定義
この2つを分けたことの意味が分からないようならRust辞めたほうがいいよ Goのimplicitなインターフェース実装よりも
Rustのexplicitなトレイト実装のほうが断然いい
ただJavaと違ってC#やSwiftならExtensionで後からクラスにインターフェース実装追加できるからGoやRustの方式が特に優れてるわけでも無いと思うけどね >>929
VBAは他にもできないことや制限されることが色々とあるから置いときましょ
>>931
違うよ
implは『実装』の定義だよ
structは(構造体の)『型』の定義だよ >>933
優れてるかどうかは誰も言っていなくて
元々の話はRustはトレイトがあるから複雑で難しいとかいう批判に対して始まった議論やろ
実際にはクラスとそれに纏わる諸々がないからGoもRustもクラスのある言語より簡単でわかりやすくなってる importしないと使えないメソッドがあるのが理解できない 問題はクラスではなく副作用だよ
勘違いするなよ
クラスのメンバーが途中で書き換えられたりしなければ問題はないのよ rustはstructのフィールドごとにmut設定できないので欠陥言語 次スレのタイトルは
次世代言語28 Rust
にしとこうか? RustはPHPより優れているんだ!!といくら主張しようとも。
Rustは仕事が無くてPHPは仕事があるんだから仕方がない。 >>943
COBOL Fortran Ruby Perl VB.NET VBScript Delphi コボラーの人たちは逃げ切ったと思う
くいっぱぐれなかったコボラー Objective-Cもまだ仕事はあるだろうけど未来はないな だから仕事と過去はあるけど未来がないと言われてるんだろ Elmとかいうの一時期Qiitaで流行ってたけどもう下火だな 世界で見捨てられたころに日本で流行らせようとする人たちが出てくるのは何故なんだろうな。 流行らせよう・・・そんな未来形は使う必要がねえんだ PHPとRoRのプロの人は今後も食いっぱぐれないと思う COBOLみたいに進化が止まればね
PHPはアグレッシブに言語仕様変えてるから往年のぺちぱーにとっては厳しくなりつつあるんじゃないか? >>935
トレードオフなんだよ
得たものもあれば失ったものもある
ある状況において簡単になってるように見えるだけ おれRoR得意だけどRails使ってるとこはフットワーク軽いとこ多いし、みんなどんどんGoに置き換えてるよ
Railsにフロントもやらせるとゴチャっとしてメンテしづらくなりやすいし、APIだけやらせるんならRailsである必要性もないし・・・ >>955
APIだけの場合でもモデルの作りやすさとか考えると全然あり
まぁLambdaとかでコスト削減したいなら無し スレタイは次世代言語じゃなく新世代言語にしとけば?
それならスレタイにある現世代の言語でも違和感ないから >>955
Goにする理由がわからないなあ
Web APIだけならRailsで十分でしょうよ >>944
C, C++, C#, Python, JavaScript/TypeScript, Go, >>944
途中で書き込んでしまった
あとFORTRANはスパコンとかの数値演算系ではまだまだ現役で未来がないわけじゃないよ >>961
Formura「いつのスーパーコンピュータの話をしてるんだ」 YouTube で有名な雑食系エンジニア・KENTA が勧めるキャリアパスは、
Ruby on Rails → Go のみ
さらに彼は、PHP, Scala をオワコン認定した。
要するに、この2つはRailsに勝てる要素がない
時価総額1兆円のGitLab は、Railsで続けることを宣言している >>962
富岳とかの利用方法見たらわかるけど、最初に載せてる
なんだかんだ言って言語仕様的に最適化し易いのとライブラリに1日の長がある
[コンパイラ/インタプリタ]
富士通コンパイラ(Fortran2008 & Fortran2018サブセット, C11 & GNU拡張仕様・Clang拡張仕様, C++14 & C++17サブセット & GNU拡張仕様・Clang拡張仕様, OpenMP 4.5 & OpenMP 5.0サブセット), GNUコンパイラ, Julia, OpenJDK (Java), Python, Ruby, XcalableMP, LLVM
https://www.hpci-office.jp/pages/r-ccs_riken_2022-2 >>965
それ今はまだ使われてるってだけで未来の話はしてないよね Fortranは過去の資産が大量にあるからなあ
しかもバリバリ現役のが
普通にCOBOL以上だよ >>966
新規案件もあるしコンパイラの改善も進んでるけど?
あんたの未来の定義はなに? >>968
話の流れくらい把握してから聞いてくれよ 機能を追加しつつげてるC#辺りの方が、次世代って言わないだろけれど、時代に合わせて進化続けてる感じするよ。 C#は一つの言語にアグレッシブに手を入れ続けるという点では現在進行系で最も成功している言語だろうね
単純な言語仕様の量で言えばもはやC++を超えてるんじゃないか C#に一番類似してるやつとさっさと決着つければいいのに
PythonとRubyがとうの昔にやったことを未だにできてない Javaと言いたいのかもしれないが、C#の方が別物になりすぎて今や全然類似していない
今だと一番類似してるのはKotlinあたりだろうが、シェアではそもそも全く勝負になってないな 科学計算系の現役のライブラリの中覗くとFortranのコードベタ移植してたりするよね >>953
PHPは太古のコードも割と動くからな… >>970
IEの新規案件もまだあるんだがそれでもJScriptに未来があると言うのか >>978
> IEの新規案件もまだあるんだが
それ一般的なのか? >>979
新規案件があるくらいじゃ未来があるとは言えんという話だぞ
話の流れずっと理解してないな >>980
詭弁のガイドライン
2. ごくまれな反例をとりあげる Rsstは土方言語何人分の戦闘力を持ってるの?人件費ペイできる? 反例は一つあれば十分というのを知らんのか
論文くらい書いたことあるだろ >>984
バカなの?
そんなのでいいなら
> COBOL Fortran Ruby Perl VB.NET VBScript Delphi
だって新規案件の一例くらいあるだろ
少なくともうちでVB.NETはまだ現役だし、受注案件だけどDelphi案件もあったし
そもそも IE は開発元がやめるって言ってるのにw 新規案件があるけど未来がないって話をしてるのにマジで流れを読まず反射だけでレスするやつだな 未来とは?
仮に十年後の案件数と定義するならたぶんRustはCOBOLやVB.NETには勝てないだろうな >>986
だからお前の未来の定義はなんだよw
FORTRANは今後も使われ続けるのに未来がないというなら定義を示せ 仕事は手段
目的はお金だがそれも未来を未定義にしておく手段でしかない
溜め込んだお金でいったい何を買いたいのかを定義しないと Fortranをpythonで書き直すプロジェクトやってるけど
なかなか辛い
トランスレータ作ろうか?って話になってる Fortran変数名の規則が他の言語とだいぶ違うし変な省略多いしマジ読みづらい >>887
なぜC++や他の言語はその(3)まで進めなかったのだろう? >>997
ガチガチになりすぎて実用的じゃないから、GCに任せる方向になった。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 24日 23時間 44分 24秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。