次世代言語25 TypeScript Swift Go Kotlin Rust Nim
レス数が1000を超えています。これ以上書き込みはできません。
スレタイ(順番はRedMonk準拠)以外の言語もok
前スレ
次世代言語24 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1647887021/ セックスも男女関係を円滑にする一つの言語なんですよ。 プログラミング言語は以下の3つに分類される
CとC++ ←省メモリ高速だが、メモリ解放でミスると危険
GC言語 ←省メモリ高速ではないが、メモリ解放は自動で気にしなくていい
Rust ←省メモリ高速だが、メモリ解放は自動で気にしなくていい 「省メモリ高速ではない」はNANDなのかNORなのか
プログラミングの才能無さそうな日本語 このスレは実質「Go vs Rust」のスレです。 僕は生前、同業・Googleの言語センス同調圧力に抗うも努力は虚しく、無残な敗北を余生噛みしめる結果となった。
君たちには底辺職言語オタクの僕の分まで、強く自由に生きてほしいデス。 PHPの”勝ち”やね・・・
"1000" 名前:デフォルトの名無しさん[sage] 投稿日:2022/04/17(日) 22:31:30.13 ID:xE2XgYmS [6/6]
1000ならPHP大復活時代でルースターズを蹂躙レイプする >>7
PHPもタイプヒンティングちゃんと使っていったら悪くないんじゃないかね。
結局日本国内のWeb系じゃ一番使われてるし。 C++使っててもコンテナクラス使うかスマートポインタを普通に使っていればメモリリークすることは殆どないでしょ。
手動でnewとdeleteしなくてはいけない時ってある? go とrust が合体した言語があったらいいのに >>10
リークというかダングリングだけど、人が書いたメソッド中身見ないで使ってると参照切れてたり日常茶判事だよ >>10
そういう問題じゃないんだよ
スマートポインタ使わないで実装できてしまうことでこれまでどれたけの脆弱性をうんだか、という問題 >>10
・スマートポインタを使い忘れてもコンパイルが通ってしまう
・スマートポインタを間違って使ってもコンパイルが通ってしまう
後者はC++ベテランでも複雑化するとうっかりミスがある
・そもそも毎回unique_ptr指定が面倒かつ無駄なのでデフォルト適用にして欲しい 新しいプロダクトできました。メモリーリークはないです。
なんでいいきれるの?
Rustで、実装してるからです。
ああ、納得。
こんな感じで会話できるかどうかの差はものすごく大きい。 >>11
go要素いらねえだろあんな糞文法
なんどGoogle潰してやろうと思ったか やはりRustが最強
JavaScript/TypeScriptの高速フォーマッター「Rome Formatter」リリース。Rust製でPrettierより約10倍高速と
https://www.publickey1.jp/blog/22/javascripttypescriptrome_formatterrustprettier10.html Rustの文法すごい好きだから、c#ぐらいのノリでかけて文法がRustっぽい式指向な言語が欲しい なんでもその言語はC#のノリで書けるらしい
Goやないかい!
GoはC#のノリで書けるんやから!
俺はなんでもオミトオシやねんから!
Goやそんなもんは! >>20
Rustの構文や標準メソッド等ほぼそのままに
所有権と借用ルールとライフタイムだけを削除というか無視して処理するGC言語『GC-Rust』を作るとよいかもね
プログラミング初心者入門用にもなるし速さ省メモリを必要としない場でも使えるような
多少遅くてもいいのだからインタプリタ型でも十分かもね
あとは所有権参照借用lifetimeだけ学べば本物のRustへすぐに進める >>19
ツール系はいくつかrust製があるね。
ripgrepもなかなか良いよ。 >>22
あーそんな感じだな
GC付きのRust欲しいわ もう調べてるかもしれないけどもっと現実的な話で式志向がいいならF#どうっすか >>14,15,16
スマートポインタを使い忘れるってことはmake_sharedかmake_unique使わないでnew使ってるってことだからgrepすれば簡単に見つけられる。全ての関数の引数の型とクラスメンバの型に生ポインタが無いようにすれば間違った使い方をして生ポインタがでてきてもコンパイルエラーなる。(もしそれらに生ポインタがあっても正規表現使えば見つけられるだろうし) >>27
そんな面倒なことをせずとも無指定でunique_ptr相当になるRustを使った方が楽でいいな
Rustなら他にも忘れたり間違えたりすればコンパイラがエラーとして詳しく指摘してくれるし >>27
ある瞬間自分の書いたコードだけチェックできればいいってならその通りだとは思う
ただ実際には依存ライブラリや他の人が入れてくるコード全てを常時チェックし続けないといけなくなるし
もし依存ライブラリがnew使ってたとして毎回フォークして書き直すのか?という問題もある 巷に出没するRust信者自分でRustまともに書いてない説を提唱したい そうなるとRustを広めたい勢力に雇われてる工作員の可能性出てきちゃう >>28
引数渡しがデフォルトmoveじゃなければよかったんだかな。
デフォルトconst 参照で組まれていたらずいぶん学習しやすくなったと思う。 所有権のmoveセマンティクスらへんがRustの最大の文法的特徴なのに、そこがいらんとな
最初からKotlinとか使ってればええやんか >>34
C++以外のユーザーがRustを学習するときの一番の難所でもあるけどな。
実際、不変借用は頻出しそうな気がするけど、性能ペナルティーとかあるのかね? rustはインストール先がユーザーホームディレクトリの下なのが何だかな。
マルチユーザーで使う場合が手間かかる。 >>33
それはおかしい
一般的に参照を引き渡すということは様々な問題を生じさせるということ
競合の種も産むし参照切れの種も産む
だから参照を引き渡す方が記述コストを増やすことこそ道理
次に
C言語でもポインタ参照渡しは&を付けて表記する
したがって無印よりも&前置こそ参照渡しに相応しい >>30
これ。
見つけたからってどう住んだよ?って話だよな
他社のコードを修正できないし、そもそもそんなチェックを未来永劫担当者に引き継いでいけるのか?ってこと
個人でできることと、組織やプロダクト関係者全体としてできることは違う >>30,38
そんなこと言ったら、Rustでも他人の書いたコードにunsafeが入ってる可能性もあるでしょ。
>>33
Nim言語だとデフォルトで不変コピー渡しだけど引数のサイズが一定サイズ以上(確かポインタサイズの3か4倍以上)だとポインタで渡すようなコードを生成するんだよね。
>>37
Rustは参照を使ったときの問題が起きないようにコンパイル時にチェックしているんだからデフォルトがconst参照渡しでも問題ないんじゃないの?
Rustって借用したり借用を参照するときに&や*をつけないといけないけどその結果コードの見た目が生ポインタを使ってるCのコードに似てるんだよね。暗黙に借用したり参照しちゃダメって考えでそうなってるんだと思うけど。 >>39
>Nim言語だとデフォルトで不変コピー渡しだけど
>引数のサイズが一定サイズ以上だとポインタで渡すようなコードを生成するんだよね。
この議論でそんな話を持ち出す時点であなたは以下の理解が足りない
一般的にプログラミング言語によるセマンティクスと最終的に生成されるコードは全く無関係でありそこに関連があってはいけない独立のものである
完全に独立したものであるが故に最終コード生成オプティマイズを十分にすることが可能となる プログラミングを勉強しようと思って
なにを勉強すればいいか先生に聞いたらパイソンっていうから
検索したら大きな蛇の画像とかがでてきたのでやめたわw 生成されるコードがプログラミング言語のセマンティクスと無関係じゃだめでしょ。
コード生成はプログラミング言語のセマンティクスと矛盾しない範囲内で生成しないといけない。コンパイラはその中で最適なコードを生成しようとするわけでしょ。
Nimではデフォルトで引数はプロシージャ内で変更不可(変更しようとしたらコンパイルエラー)だから引数の型のサイズに併せて生成するコードをコピー渡しにしたりポインタ渡しにできるわけで。
もし引数が可変参照渡しだと引数の型が1バイトでもコピー渡しでは無くポインタ渡しにしないといけない。関数がインライン展開されると話が違ってくるけど。 >>44
あ、すまん。これ誤爆しました。スミマセン〜。 「プログラミング言語によるセマンティクスと最終的に生成されるコードは全く無関係」そんな訳ない、RustはLLVMのIRを前提に
コードが吐かれるし、コードのリンケージをアトリビュート指定できる。C言語だって同様だし、むしろ、ハードウェアよりの低レベルな
システムプログラミングが可能な言語であれば、生成されるバイナリが厳密に言語の「セマンティック」を決める。
例えば今どきのCPUには分岐予測命令があるが、これに対応するstd::intrinsics::likelyのような分岐予測にヒントを与える、
セマンティクスはCPUがサポートされていれば100%生成されるバイナリがそうなる事を望む。無関係などありえない >>47
Rustをgccと組み合わせて動かす試みあるから
LLVM前提ではないのでは? >>45
その言語のセマンティクスとしてimmutableで渡すケースでも
値をポインタで渡すか値自体を渡すかはどちらでも構わないから言語のセマンティクスとは別問題
もっと顕著にわかりやすい例
構造体を一つ返す関数があったとする
小さい構造体なら値を返すだろうが
大きな構造体なら領域を用意してそこに書き込んでそのポインタを返すかもしれない
あるいは関数を呼ぶ側が領域を用意してそのポインタを裏引数として渡してそこへ返す値を書き込むかもしれない
このように3種類考えられるが呼ぶ側と呼ばれる側で一貫していれば目的を果たす
プログラマーはその生成コードが3種類のどれになるかを把握する必要はない
つまりそこで明白にレイヤーが分離される >>33
もし文字列のベクタに文字列を追加する関数があったとき文字列が参照渡しでその関数が実行された後もその文字列が読まれていると、その関数は文字列をmoveすることができずコピーしなくてはならなくなるからじゃないかな。
メモリコピーは遅いから絶対に許さない人にはデフォルトがmoveのほうがいいのかも。 >>48
現状はIR前提でしょ、完成してない未来のものを持ち出すのであれば何とでもいえる。というか上で言ってる本題とはずれる
そんなところに食いついて来てしょーもないわ >>47
Rustでもセマンティクスと生成コードは独立だよ
例えば>>49の関数が構造体を返す例
生成コードは言語仕様で定められていないしあなたも方法を答えられないでしょう
実際にRustで大きな構造体を返すと所有権を活用して驚きの最適化したコードを生成するよ >>51
開発中で完成してないとは言っても実行バイナリの
生成もできないという状態ではないから
あなたの話とは違うというか
あなたの主張は間違ってるという例になってますよね >>52
「生成コードは言語仕様で定められていないしあなたも方法を答えられないでしょう」
え?RustにもちゃんとFFIなどextern "C" {}ブロックがあるでしょ?生成コードは言語仕様で定められているし、このようなデータの受け渡しは
参照や可変参照の制限、ボローチェックなどがOFFになる。C言語やD言語やNimも同様でしょ、これが出来ない言語はシステムプランニングが
できる言語とは言えない。
「Rustで大きな構造体を返すと所有権を活用して驚きの最適化したコード」
どのような驚きのバイナリを生成しようと、例えばゲームエンジンのUnityなどでデータを渡す場合に所有権をRust側で保持したままのような
コードではUnityなどでメモリー管理されるので問題が出る。だから呼び出し間でどのようにデータを受け渡すか当然指定できる >>53
何を言いたいのか1つも分かりません。。。あなたの勝ちでゴリラのようにマウンティングをしてください、どうぞ >>54
FFIを理解していないアホですか?
例えばそのextern "C"した時のみC言語の受け渡しインタフェースに従うだけ
どの言語でもFFI使わなければ各言語が自由自在の方法を取る >>39
引数のサイズが一定サイズ以上だとポインタで渡す
それはそれで他者が変更したときの挙動が変わるから怖いよね。
特に並列作業時。
>>50
const参照をデフォルトにしたら、そのあたりは引き渡し時にmoveを明記するんだろうね。あるいはCOWで実装するか。
もしかしたらRustに「権利を持つオーナーは極力少なく・小さくする」というポリシーでもあるのかな? >>56
さっきからID変えて絡んでこなくてよいですよ、「extern "C"した時のみC言語の受け渡しインタフェースに従う」セマンティクスと生成コードが決まりますよね。
アホと言えば誰もしもが感情的になるわけではないです。FFI使わなければなんて話をしていませんし、「プログラミング言語によるセマンティクスと最終的に
生成されるコードは全く無関係」という理想論のような現実を知らないコンピューターサイエンス学科の学生のような言葉を否定してるだけです。 >>57
デフォルトで引数は不変が前提なので引数の型の定義を変更してポインタ渡しになったとしても基本的には挙動は変化しない。
引数のアドレスをとってれば挙動が変化するかもしれないけど、Nim言語は明示的に変数のアドレスをとることは危険な行為で自己責任でやれってことになってるから。 >>58
普通のプログラムでC言語FFIなんて使わないです、そして、その特殊ケースはどうでもよい話です
一般的に言語が定めるセマンティクスと生成コードは別階層なので独立しています >>57
静的型付けで型サイズが定まる普通の言語ならば大丈夫
引数や返り値がポインタ渡しになるか値直接渡しになるか
型サイズ次第で変化しても一貫していれば構わない >>57
> それはそれで他者が変更したときの挙動が変わるから怖いよね。
> 特に並列作業時。
横レスだけど、明らかにそういう話じゃない 普通にカーネルのシステムコールするだけでC言語のFFI使ってますよ、DBアクセスするにもSQLiteでもMySQLでもPostgresqlでも使用してますし
TCP/IPスタックにアクセスするにもFFI使ってます、もしや特殊なのはあなたなのでは?ガン無視されて独立しているのは、そんな詰まらないことで
言い張るあなたなのでは? Kotlinみたいな出力先がjvmとjsとネイティブがあるのは
このひとの中でどう解釈するんだろ >>63
そんなことは誰でも知っているがこの流れとは無関係な話
各FFIはそのFFIの指定に従う
逆に言えば各言語の普通のコードではFFIなんて関係ないので各言語で完全に自由
だから引き数や戻り値のサイズに拠ってポインタ渡しか否か変わる言語もある
プログラマーはそれらを知らなくてもプログラミングできる
各言語が定めるセマンティクスだけ理解すればプログラミングできる
つまりセマンティクスと生成コードは完全に独立した別階層であり無関係 この話の終着点どこ?
「お前はアホだから黙れ」が立証できれば満足するの? >>33
変数の代入がmoveなのに関数引数の時だけ参照になるのは紛らわしくない? >>59
あ、不変前提ね。勘違いしてました。
>>67
変数もデフォルトで不変借用にする、とか。戻り値の受けが面倒臭くなりそうだけど。 >>68
Cの(ポインタ)参照が前置&だから
Rustの(借用)参照も前置&にした現状仕様がわかりやすいと思うけど、なぜ変えたいの? >>68
変数の代入をデフォルトで参照にするとmutが絡んできたときにborrow checker周りでとてつもなく面倒になりそうな気がする rustはライフタイム周りが途方もなく汚く見える
ウンコに触れたくない Rust「エラーには回復可能なエラーと回復不可能なエラーがあってResult<T, E>を使って~(長文)」
エンジニア「TとEって何だよ」「"?"って何?」「Box<dyn Error>って何?」
Golang「ほぼ
if err != nil {
panic(err)
}
でいい」
エンジニア「そうだったのか!」「やっと理解できた!」「Goって美しい」
何も言い返せんかったは・・・ twitterでイキってるバカをそんなに晒すなよ。 なおイキッテルのはRUSTERのもよう
GOに完全敗北してどんな気持ち? null安全じゃない言語とかこのご時世にあるんですね スレタイの言語でも
Goとかnilチェックするコードを書き忘れてもコンパイルエラー出ないね
安全じゃない言語多すぎ GOはポイント使わなければ安全だぞ
ただし初期値に0と””が入る >>77
このif文を書き忘れたらコンパイルエラーになるの?
>>72
> if err != nil { >>74
これってgoありがたがる人を馬鹿にしたツイートじゃないの? Goはnil安全ではない
if err != nil {を書き忘れたり
return nil, nilしちゃっていると死ぬ
nil以外にも存在しない時の値で死ぬ
例えばstring.Index()は未発見時に-1を返す
返り値が-1かどうかチェック忘れてもコンパイルエラーとならない
そのまま-1を使ってしまい実行時に死ぬ
いずれのケースもRustではコンパイルエラーとなるため安全
Goは危険だらけ 分かりにくい人「円周率は3.141592...と無限に続く数字で、よく近似の3.14が使われます。」
視聴者「何で3桁なの?」「2の後は何なんだよ」「近似って何?」
分かりやすい人「円周率って色々言われてるけど、実は3なんです!」
視聴者「そうだったのか!」「やっと理解できた!」「数学って美しい」
https://twitter.com/zugaaanzubababa/status/1506569845693100035
https://twitter.com/5chan_nel (5ch newer account) Goでは「値が存在しないこと」を安全に表す方法がないことが敗因
RustではOption<T>型のNoneで安全に表せるところ なおシェアはGOが圧勝したもよう
RUSTボーイズは一生夢見て低賃金でこき使われる童貞野郎 goはCがシンプルで使いやすいと思う人向けの言語じゃないかと思う 言語機能をモリモリにしたい誘惑に抗ってランタイムを充実させるという判断できる自制心はすごいと思う Ruby 3.0 のJIT は、MJIT で、
Ruby VM のバイト(中間)コードを、C コードに変換してから、
Cコンパイラでネイティブコードに変換していた
Ruby 3.1 のJIT は、YJIT で、
バイトコードから直接ネイティブコードに変換する。
ただし、x86_64 のみに対応
条件分岐があっても、10回実行した分岐だけを変換する。
実行されない分岐は変換しない
遅延変換・Lazy Basic Block Versioning(LBBV)
これで、Rails のプロジェクトが、20% ほど速くなったらしい ゴミが20%早くなかったからってどうしたってゆうね >>87
でもRuby on railsってまだまだ使われてるよね?
有名どころでも、クックパッド、Airbnb、Gunosy、クラウドワークス、
食べログ、価格.com、Twitter、 Hulu、 GitHub >>89
大規模railsを別言語で書き直しましたという
ニュースは時々出てくるけど逆は聞かないからなあ… >>89
業界や会社によってはCOBOLだって使われてる。
いったんそれでシステム組んじまったら中々移行は出来んもんだよ。 >>80 >>82
Goはなぜそんな危険な言語仕様にしたの? R○byは業界のSPA移行とPythonブームによって思いのほか綺麗に消えてくれたのは良かった
まあPHPなんかに比べたらまだ「恥を知る」人間が多かったんだろうね >>94
PHPユーザに失礼なやつだな
お前あれだろ?
刺し身に直接わさびを付けるタイプだろ。醤油でわさびをとかさないで刺し身につけて食べてね?どうよ? >>94
言語マニアならpythonよりRubyの方がマシだろ。Pythonみたいにメソッドと関数が混在するのは書いててキモい。
python4でNim方式を採用してほしいわ。 もちろんプログラム記述方式としてはPythonは最悪
あれが普及するのは害悪しかない >>95
直接わさびを口に運び刺身を投入して咀嚼した後に醤油を飲むタイプです
PHPユーザに対し失礼な発言は謝罪して撤回させていただきます。この度は申し訳ございませんでした。 Haskellもインデントでスコープを区切ってた気がするけど一応ブレースでくくることもできるんだっけ >>98
人類最底辺のゴミPHPoorに謝罪など必要ない
奴らに必要なのは死あるのみ PHP使う人ってなんであんなアヘアヘ君ばかりなの?昔からああなの? >>102
障害者手帳持ちでも書けるとガイジを集めたから
ガイジが作ってガイジが保守して、真人間は近寄らないか万一深淵を覗いてもすぐに逃げるから
ガイジだけが残った
それがPoopHPoor 言語の良し悪しと普及率はあんまり関係ないってことだな 良し悪しは文法だけでは決まらないしね
全部作り直すとかできないから、まず既存資産との互換性とかがめちゃくちゃ重要だしなあ Haskellはとてもいい言語だと思うけど、まあ今後も広くは普及しないだろうね Java(8以前)とPHPとVB.NETは案件も人材もロクなのにあたったことないし関わりたくない 小一時間でゲームをつくる──7つの定番ゲームのプログラミングを体験 (WEB+DB PRESS plus)
https://www.あmazon.co.jp/dp/4297127458
この本面白いね。
コンソールに出すアスキーアートだけでゲームを作るところと最小限の工程ごとに動作確認するところがユニークだ。
誰かこのなかのどれかのゲームをGoやRustに移植してgithubあたりにアップしてくれないか?
その出来栄えでその言語の優劣を競うというのはどうだろうか? コードが書けないやつだからこそnull安全なんてほとんど誰もありがたかってない事を上のように一生懸命言い出す >>113
これだからGo信者は… 本当に現代人? /:|. /:|
/ .:::| / :::|
| ...:::::| /u ::::|
i ノ (  ̄ ̄⌒゙゙^――/ ::::::::|
/_,, ⌒ u . _ ::::::::::::\
/ \\゙.l | / ::// ̄● ̄ ̄/ ::::::::\
|● ::::::| . | | / :::: / :::::::::://u :::::::\
/i,.\_:::::::| u::::: / :::::::::// :::::::::\
/ \( (\|. ::::::. // ̄) ) :::::::::\
/ u ) )_ ^ ^  ̄ ̄ ,,、( ( i し./ :::::::::::::\
/ / /__,,____,/ ̄ \ ))u ノ ( ::::::::::::::::::::\
/ ヽ |.. | /└└└└\../\((\ '~ヽ :::::::::::::::::/
\ ) し ∨.|llllllllllllllllllllllllllllllll∨lllll| ) / / :::::::::::::::::/
\⌒ | |.|llllllllllll;/⌒/⌒ 〕 ::u::::::::::::::::/
| | |.|lllllllll; ./ . . | ::::::::::::::::::::/
.| | |.|llllll|′ /
.| | |.|llll| | .∧〔 / u:::::::::::::|
ヽ}.∧lll | ../ / / :::::::::::::::::\
i/| \┌┌┌┌┌ /. / /::: :::::::::::::::::i
( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄| i/::::::::::: u i
ヽー─¬ー〜ー――i | ::::::::::::: >>93
Goは言わば並列対応スクリプトC言語だからだよ
だから今どきの言語と異なりC言語のように地道に記述量が増えるとともに安全軽視で自己責任 男の人って気持ち悪い…
どうして少女をそんなに汚したがるの?
お母さんに悪いとわおもわないの? Rustならシンプルに分かりやすく書きやすい上に
うっかりミスもコンパイルエラーで検出されるから良いよな Rustの話は専用の隔離部屋でお願いします
Rust part14
https://mevius.5ch.net/test/read.cgi/tech/1644596656/
次スレタイトルからRustの文字を削除してください 比較の話だからここでいいんじゃね
そもそもアンチ側が悪影響とか言い出してきっかけ作っているし
アンチを各言語本スレへ誘導するのはダメだろ 比較の話も含めて >>121 の専用スレでやって下さい 言語同士の比較はここでやる
Rust単独の話は向こうでやる
それだけだ
以上 ここは次世代言語スレ
次世代言語の話題や機能や比較に議論まで何でもOK
各言語の本スレに迷惑がかからないようここで行なうこと推奨 >>114
このように誰もGoのことなど挙げてないのに、Rustの超ビギナーの信者は異様に敵視を行う。
例えば、代表的なNull安全言語は、RustがまさにそうだがOptionを使うからNullなんて無いのだが、matchを書いたとしてもNoneで
異常を処理しないような事を書いてしまえば、Nullで落ちたりするプログラムと大して変わらない。unwrapを連打するようなプログラムは
論外だとしても、それはNullをチェックしないプログラムと何ら変わりない。
Qitaの有害記事、「null安全でない言語は、もはやレガシー言語だ」のせいで、このような思想を植え付けられている人があまりに多い。
大切なことは異常系をきちんと処理できているかということで、言い訳では「ちゃんとやるのを忘れているかもしれないのでは」という指摘に
コンパイルが通らないだの、Rustでしかそうならない事を都合が悪いのか、短い考察だけで反論しています。
コンパイルが通ろうと通らななかろうと、”ちゃんとやるのを忘れて”いれば同じです。
また、たしかにNull安全は、Java/KotlinのようなNullが奥深くに根ずく言語であれば恩恵は大きいでしょう。しかしGoのような言語は
扱うデータはstructであり、Nullが無い訳ではないが、奥深くに潜む”参照”データー構造を設計思想から良しとはしていない言語である。
一部の言語設計者ではリンクリストのような、非効率で何も考えてないデーター構造を逆にレガシーと呼びます。
もちろん、if err != nil { }が古臭く邪魔で嫌、あちこちに現れるので受け付けないという意見は分かるし、これを簡略化するために
Null条件演算子やNull合体演算子が欲しいという要望もわかる。しかし、それが導入された、もしくはされていないからといって
それはNull安全言語とは厳密には関係ない。 >>127
> このように誰もGoのことなど挙げてないのに
>>72,74,80,82 >>127
>このように誰もGoのことなど挙げてないのに、Rustの超ビギナーの信者は異様に敵視を行う。
このように誰もRustのことなど挙げてないのに、Goの超ビギナーの信者は異様に敵視を行う。
以下略 >>127
それは君の主張が間違っている
Rustではある型Tの変数に対してnull相当(nilやundefined等含む)を代入出来ない
そのため君の主張する処理し忘れがあってもnull相当を扱ってしまう危険性は起きない Goだって最近Tって書けるようになったでしょ
スレタイの言語皆Tって書くのでは ・Rustにはnullという概念のものが存在しない
・存在するかしないかを示したいならば代数的データ型であるenum Optionを用いる
・扱う型をT型とするとOption<T>型となるため型が異なり処理を忘れてミスすることも起きようがない >>133
糞バカ中世ジャップランド土人どもはOption.get()するだけだぞ >>135
Optionにget()メソッドはありません ほぼOptionのNoneと言ってるのに、null相当(nilやundefined等含む)を代入とか、Option<T>型となるため型が異なりとか
もう誤魔化して言いくるめる気にしか見えない。。。
どれだけNull安全で助かってるか、なんてコードを書いてればそんなに無いでしょ。確かにNullが無いのだから、Nullのような状態で
クラッシュ/panicする事態は減るでしょう。コンパイルが通った時点でNull安全性が保障されるなんてのも、今どきの多くの言語は
外付けながらLint系の警告をしてくれます。もちろん言語に統合されてない後付けで「美しくない」とかそういうのはあるでしょうが。
そして手続き型プログラミングを初めて数年の初心者なら沢山のミスを犯すのかもしれんけどさ、そもそも宣言と同時に初期化を
する重要性は、関数型プログラミングでも少しでもしていれば分かるはずでそんな経験もなく、旧Java系なんかからRustへ移ったら
感嘆するように見えるのかもしれんが、そんなしつこく言うほど便利な場面って具体的にどういう時よ?逆にさ?
次はNan安全言語とか、-+Inf安全言語とかやるのかい? Rustのアドバンテージを認めざるを得ないから認めつつ
それでも批判したいから言い掛かり長文
みっともない >>137 その通りだからきみはJavaとかHaskellとか使えばいいと思うよ
Rustの良いところを教えてほしいなら普通に指導を乞えばいいのに null安全をlinterが警告してくれる言語なんてあったっけ? >>140
未初期化変数へのアクセスのことを言ってそうな気がする
それ以外のケースでnullの問題踏んだことない人なのかもしれない 色々とプログラミングが楽で快適だからRust使ってるわ 普通に煽りじゃない反論ができない時点でRustニワカのキモさが良くわかる。Null安全を全否定してないのに
「指導を乞え」とか「JavaとかHaskellとか使え」とか「それ以外のケースでnullの問題踏んだことない」とか
Nullのような状態で クラッシュ/panicする事態は減るって書いてるのに文字も読めもしない。
”それほど強調して、気持ち悪く粘着してNull安全言語なんて宣伝してることがRustのために良くない”って話だよ
言語の悪口を言ってるんじゃない、おまえのようなキモくて何も答えられないで煽りだけクズを論ってんの 自分でこれが煽りじゃない反論だと思ってるならヤバい Rustより良い言語が出現したらそれを検討する予定
今のところそういう言語がないためメイン言語はRustのまま 煽ってるだけの書き込みにまともな返答がくるわけないじゃん まだスレタイに出てないけど注目してる言語とかありますか? flixかな
scala亜種といった感じで流行るようには見えないけどね この根源的な差が決定的かな
> プログラミング言語は以下の3つに分類される
> CとC++ ←『省メモリ高速』だが、「メモリ解放でミスると危険」
> GC言語 ←『省メモリ高速』ではないが、「メモリ解放は自動で気にしなくていい」
> Rust ←『省メモリ高速』だが、「メモリ解放は自動で気にしなくていい」 >>149
Pony
Rustよりも安全。データ競合だけでなく、デッドロック、実行時例外が起きないことも保証されてる
actorモデルを採用している >>150
これですかね
ありがとうございます
The Flix Programming Language
https://flix.dev/
https://github.com/flix/flix
プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー
https://www.infoq.com/jp/news/2022/03/flix-programming-language/
Flixは多くのプログラミング言語にインスパイアされたオープンソースのプログラミング言語であり、開発者は関数型、命令型、論理型のスタイルでコードを書くことが可能である。FlixはScalaに似ており、Hindley-Milnerに基づく型システムとGoにインスパイアされた並行処理モデルを採用している。JVM言語はポリモーフィックエフェクトシステムやDatalog制約などのユニークな機能をサポートしている。 >>153
どもです
https://www.ponylang.io/
フィンテックでアクターモデルのプログラミング言語Ponyを使う
https://www.infoq.com/jp/news/2016/05/pony-fintech/
Ponyはアクターモデルを使ったネイティブ言語であり、LLVMを使う。アクターモデルはErlangやAkkaで有名であり、1973年のCarl Hewitt氏他の論文から生まれた。アクターは状態管理と非同期メソッドを組み合わせる。フィールドに加え、アクターはひとつのメッセージキューとヒープを持つ。Clebsch氏によれば、Ponyのアクターは独立してガベージコレクションがされ、ErlangやAkkaとは違い、アクターそのものもガベージコレクションされるので、アクターを殺すためのメッセージのようなものは必要ない。手動でのメモリ管理は不要なのだ。
アクターは自分のヒープのガベージコレクションをmark-and-don’t-sweepアルゴリズムを使って他のアクターとは独立して行う。つまり、Ponyは到達可能なグラフに対してはnのオーダーだ。到達不可能なメモリは影響を与えない。アクターのヒープのGCにはsafepointがなく、読み込み、書き込みのバリアも、カードテーブルマーキングもコンパクト化もない。コンパクト化が必要ないので、ポインタのフィクスアップも必要ない。 >>156
Erlang系でElixirの次に来そうなのはGleamかな?
まだまだ新しすぎて未成熟だけど、着実にコミュニティが大きくなってる気がする
あとは他に33個ほどリストアップされてるから、なんか伸びそうなのあったら教えて
https://github.com/llaisdy/beam_languages >>152
Wasm自体は十分に実用的でブラウザ上からクラウドエッジ上に至るまで様々な環境での環境非依存言語の地位確立
ただしWasm仕様へのGC導入は未来の話へと先送り
したがって実用的なWasm記述言語としてはC/C++/RustのままとなりRustがベストチョイス >>158
LLVMが噛めばほぼ全てWasm対応になりうるので利点でもなんでもない
オレオレ言語でもWasmに対応できるというかすでに作った >>159
GC言語だと明確に不利なだけでもちろん動くよ
GCなし自作言語で良いものが作れたならばシェア取りに行くといいね
現状Rustの天下を崩すチャンス WEB+DB Press 127号で、
Elixir のPhoenix が、28ページの特集
Ruby on Rails 7, Phoenix 1.6 から、脱Webpack でesbuild へ
RailsのHotwire, PhoenixのLiveView で、websocket によるリアルタイム通信。
ここ数年、SPA でReact に奪われたシェアを回復すべき戦略
他には、Bootstrap よりも、Tailwind が多くなってきた
128号は、Terraform 特集。
Software Design 2022/1月号も、Terraform特集だった
YouTube で有名な、雑食系エンジニア・KENTA のRuby on Rails サロンでも、
Terraformで転職を差別化できると言ったから、すべての雑誌・学校も動いた
1つのサロンが転職に有効な技術を持ってしまうと、
他者が合格できなくなるので、対抗上、勉強しないといけなくなる Terraformが何なのかも理解せずにここプログラミング言語のスレに書き込んでいるのか リスナーさんだか受講生だか知りませんが、KENTAさんの主張を引用するなら本人から許可を取って、
情報の許可範囲とガイドラインを守って書き込みしたほうが絶対良いと思いますね。
匿名掲示板ならアレな発言も、多少は仕方ないかもしれませんが、
他人の名を語ってそれだとさすがにまずいです。倫理とルールを守りましょう。 KENTA
2021年のWeb系エンジニア転職を成功させる3つの技術要素、2021/4
https://www.youtube.com/watch?v=70VrB7LTe9g
Web系エンジニアを目指す人のためのプログラミング学習ロードマップ、2021/2
https://www.youtube.com/watch?v=0TABrlhci5M
上の動画で、Terraform で転職を差別化しましょうと言っている。
それで、すべての雑誌・学校も動いた。
Terraformが出来ないと、転職に負けてしまうから
米国人からすると、日本のRuby on Rails は異次元の戦い。
10年以上のプロでも、1年ぐらいの初心者に負けてしまう
日本では解雇できないから、資格などの事前審査制。
米国では国民全員がフリーランスだから、ひとまず雇っても、すぐに首にできる >>151
RustがメモリをGC並みに雑に扱えたら、最高だったな。 RcもWeakも無くなればね
裏で勝手にやってくれるとかして?
プログラマ側が一切ケアしなくて良いんならスゴイよね Goはコンパイル言語なのにスクリプト言語のように扱える軽量さが最大の魅力だろ
Go並にエディタの補完が軽量でコンパイル爆速のコンパイル言語を俺は知らない
Rustはライフタイムが全然わからなかったし、コンパイル遅すぎて無理だったね
GCはあった方がいいに決まってるわ
開発時の生産性が圧倒的に違ってくる GoはCGo何とかしてくれればもっと使う気になれるんだけどな とにかくGoは頭の悪い人でもすぐにプロジェクトに参加できるぐらいに機能がシンプルに削ぎ落とされていてコンパイル爆速ってのがポイントな言語
それに対して〇〇の機能がないーって言っても仕方ないだろ
頭の悪い人でも使いこなせる言語じゃないと企業ではなかなか普及しないと思うよ >>174
本当にその通りなんだけど、これだけは欲しかったみたいな機能も一緒に削られてるところが少しモヤモヤする
ジェネリクス(ようやく追加されたけど)とか代数的データ型とか >>172
ライフタイムがわからなかった、って、かなり知能が低い人じゃないとありえないと思うよ
そしてそのくらい低い人はプログラミングに向いていないと思う ライフタイムはわかるけどこれがリージョン推論とかいった厳密な理論とどう対応しているのかがわからん
一般的なプログラマーはここまで理解しなくてもいいんやろうけど
なんでこんな単純なわかりやすい原則の背後にそんな謎な人口に膾炙されていない理論を導入しないといけないのかがわからんわ 荒らしなし規制無し
3ch
NEXT2ch
45ch
ふたばちゃんねる
明和水産 >>178
ブロックスコープというあまりにも大雑把な大きな枠で扱うのではなくて
実際に使われている有効な範囲(リージョン)で細かく扱いましょう、というだけだよ
生存単位は前者で、借用単位は後者で細かく区切る
具体的コード例を含めた解説ページの例
Non-Lexical Lifetimes って?
https://qiita.com/_EnumHack/items/8b6ecdeb52e69a4ff384 プログラミング言語「Erlang」を生んだジョー・アームストロング氏死去
なお、アームストロング氏は「なぜオブジェクト指向はクソなのか」という名文を残しています。 >>177
プログラマーって言ってもOS作ったりドライバ作ったりする低レイヤーやってるのと、バックエンドやWeb系の高レイヤーやってるのはいるわけで
Rustは前者の人たちが使えばいいのでは?後者の人たちがRustがーとかイキってるの見ると笑ってしまう
後者の分野ではRustはGoに勝てないでしょう >>182
むしろGoは対象が狭くて短命に終わる言語
言語の機能不足で書きにくい上に速いわけではない
唯一のメリット(?)が仕様が簡素なこと >>182
勝ち負けの定義次第だけど後者でもrustの方が有利な場合はあるんじゃないの
discordのバックエンドの例とかあるよね
だいたいのケースでgoが適しているって主張なら分かるけど
特定の分野で常にgoの方が適しているというのは言い過ぎかと これだからRust信者は嫌なんだ...12年続いて厳格に互換性を保ってる言語が短命だって?
速いわけではないって、そりゃGCが裏で動いてメモリー解放をほとんど気にしなくて良い言語と比べれば、極限の速度では有利になるのは当たり前でしょ?
それでもC99やRustなどと比べても2倍も時間が掛かるわけではない、これを速いわけではないと表現するのは、自身でも気づいていないのか隠された悪意と偏見を持ちすぎてる。
むしろRustこそ後方互換を保つためなどと言いつつEditionなどという仕組みや、ボローチェックの強化なんて短命のコンパイルが通らないような事をして、短命で終わっている
今書いてるRustが10年後コンパイルが通るのかエラーになるのか全く見えない。普通の用途ではGoで十分という話に噛みついてくる
言語の表層的な機能をどんどん導入して直行性が無く、どんどん書きにくくなっていくのに苦労に見合う速度はC99以下。唯一のメリット(?)は意識高い系がたった1つの言語をやってればマウントできる事 >>182
でも現実にWeb分野でもRustがじわじわと広まりつつあるよね
サーバ側はGoよりRustが高速で省メモリでGC負荷なしで有利
ブラウザ側は実用的となったWebAssemblyでRustが最適 >>185
不勉強でよく知らないんだけどeditionやborrow checkerの強化でコンパイル通らなくなったcrateってどういうものがあるの? >>176
同感
必須機能が足りな過ぎてGoはプログラミングが修行のように辛い
C言語で何でも書けるというのと同じで書けるけど辛い >>186
コンビニに行くのにF1とかソーラーカーは要らない定期。どれだけ早かろうが省エネだろうが。
JavaやC#はセダン〜バスみたいな感じかな。
Goは原付2種みたいなもんでしょ。
まず主戦場も違えばドライバーも違う。 >>186
それでお前は使ってるの?
Reference Types使ってもパフォーマンスがjsに比較してカスな件どうなった? >>191
え?
JSとは誤差
そして何か処理するコード次第で圧勝 もう一回貼っておきますね
https://zenn.dev/igrep/articles/2021-11-wasm-reference-types
PythonにおけるCFFIみたいな用途で使う分にはきっと問題無いんだろうね
特定の目的に対してはぴったりはまるんでしょうが
それを何の前提も付けず単に「実用的」と呼ぶのは誇大広告ではないんですかね 最小限で考えると
Cにあとひとつ何かを加えたものでやっていけそう
Cに関数のオーバーロードがあればやっていけそう
コンテナクラスもほしいけどOOPを持ち込んでしまうので今回はパス
あくまで
void add(struct vector_int *v, int value)
void add(struct vector_float *v, float value)
というふうに関数と構造体だけで頑張っていけそう Cに拘ってる奴は本気でCが使いやすいと思ってるのか冗談で言ってるのか >>195
下手な増改築だらけのC++よりCが良い
LinuxのLinusも同じ意見 C言語にオーバーロード?
結局C++みたいにABI建て増ししてマングリングしないといけないやつじゃん >>199
> _Generic
(´・∀・`)ヘーそんなのあるんだ勉強になりました
これあったら十分やわ ジェネリックってプログラミング言語によって指すものが異なってるよな
異なるといってもレベルの低いもの高いもの玉石混交という意味で IoT, AI でも、Elixir もある
Nerves は、最小のLinux, Erlang を含む、組み込み向けOS
Nx はテンソル用。
TensorFlow, PyTorch のフロントエンド
Erlang VM のFFI で、他言語のモジュールも使える Cは文字列が弱点だった
ちゃんとした文字列の型があればもっと便利だったとおもう nimはもっと広まって欲しいかな。できればpython置き換えるくらいに。 >>197
てかLinusはそんなにその言語がいいと思ってるならそれでお前がなんか作ればいいだろって話をしてるな。
ここの連中なんかはまさにそんな感じだが。 これはなかなか面白い記事だった
原点回帰というか、ここのスレでの議論にも参考になると思う
お前らの感想を聞きたい
How the C programming language has grown
https://opensource.com/article/22/3/how-c-programming-language-has-grown
ネイティブ言語に変換できるビジュアルプログラミング言語とかいいと思う
オブジェクト指向とかわかりやすいだろうし。
唯一問題なのはマウスとキーボードをせわしなく行き来することかな
以前Blockly使ってそんなの作ったけどソースコードどっかやっちゃった Rustのスレ複製おじさんが暴れまわってるから怖くなっちゃって見てないわ
あんなスレ見てたら気がおかしくなりそう
ここはまだまし >>181
「なぜオブジェクト指向はクソなのか」
1データ構造と機能は一緒にすべきではない
2すべてがオブジェクトである必要があります。
3データタイプ定義はあちこちに散らばってしまう
4オブジェクトはプライベートな状態を持っている 最近はモジュールがまた流行ってるよね
rustもGoも自分から見るとモジュール指向に見える
自分はモジュール型からOOPに進化した過程を知ってるから正直モジュール型は好きじゃない >すべてがオブジェクトである必要があります
C++やJavaみたいにすべてがオブジェクトじゃないオブジェクト指向言語なんていくらでもあるじゃん 真のオブジェクトっていうのは、一つのスレッドみたいなもので他のスレッドとの通信をメッセージパシングでやりとりするものと言っていたような
一方、普通にいわれているオブジェクト指向というのは単なるプログラミングの書き方の効率化の手法にすぎないって話
つまり、継承という方法で差分だけ書いていけるようにすることによる効率化だけの話だってこと。 むしろ継承はクソすぎて足を引っ張る
そのためGoやRustなどの言語ではclassを廃止というか最初から採用しなかった >>216
一言でいえば、プリミティブ型のことを言ってるんじゃなく(オブジェクトに)メソッドがぶら下がる粘着性を言っている。
いまどきの言語はRustやGoならstructで、Goならダックタイピング、Rustならクレートによるimplでそのデータを扱う機能実装を行うが
さらに考えを推し進め、D言語などでは(Pythonのself引数のように)データを引数に取るUFCと呼ばれる使い方も出来る。
関数が第一級の言語要素という考え(第一級関数)は、関数型言語には必要不可欠とされmap/reduceなどの高階関数でも
常用され、クロージャ・関数オブジェクト・無名関数と幅広く展開される。
OOPLとの明確な違いは、Classに対するオブジェクトにmethodという関数が束縛をされていないことである。もちろん上記の言語は
OOPSをサポートするが、それは多態を表現できるだけの意味しかない。
以上、D言語の宣伝です。 >>222
> Rustならクレートによるimplで
ちょっと惜しい
『トレイトによるimpl』が正しい
その後にD言語は更に進んでいるとの宣伝と書いてあるようだが
Rustにも当てはまることばかりなので違いがよくわからない DのUFCSは任意の関数に適用できるけど
Rustは第一引数がselfなassociated functionだけだよね typescriptでclassを使わないでやったときに無限にf(g(h(x)))みたいに書いたなあ
tsにもほしいわ どうしてDって今のgoやrustみたいにならなかったの? DのUFCSもメンバ関数やネスト関数などには適用できない制限がある UFCSなんかなくても最初の引数の型に対してメソッド定義するだけで目的達成可能
グローバル名関数を増やして名前空間を汚さずともその型のメソッド定義がベター >>225
GoやRustはclassなんか無くても各型に対してメソッドを定義できるのでそういうことを招かずに済むのよ
UFCSのメリットはメソッドチェーン記法が可能になることだから最初からメソッドを定義すればいいものね >>229
structかenumは定義する必要あるじゃん
tsのtypeがどういうものか分かったうえでレスしてる? >>230
structやenumは単なるtypeだよ
C言語でもstructと(enumの代わりにタグ無しの)unionがあるよね(ただしメソッド定義はできないけど) Nim言語にもUFCSがあって関数だけじゃなくtemplateやmacroも関数と同じ文法で呼び出せるのでUFCSが使える。ただし第一引数がuntypedだとmethod call syntaxが使えない。
UFCSのメリットは標準ライブラリとか他人の書いたコードにある型とプロシージャの組に対してもmethod call syntaxが使えることだと思う。
第一引数が組み込み型のプロシージャを定義すれば組み込み型に対してmethod call syntaxが使える。
ライブラリAで定義されている型Xのオブジェクトに対してまったく別に書かれたライブラリBで定義されているgenericsなプロシージャをmethod call syntaxで呼ぶ出すことができる。 >>230
structやenum以外でもOK
任意の型にメソッドを定義可能 >>228
オーバーロードがある言語なら引数が一つ以上あるグローバル関数を追加しても引数さえ異なれば同名の関数をグローバルに追加できる。
UFCSとオーバーロードがある言語では第一引数がFoo型の関数を定義するのはFoo型にメソッドを定義することとほぼ同じとみなせる。 つまりUFCSは汚染でありリスク要因
定義していないメソッドが使えることになってしまう
UFCSがなくとも明確にその型に対して定義されたメソッドのみ対象で実用上困ることはない モジュールがあるなら関数のimport有無でどの関数が呼び出されるか制御できたりしないの?
Rustのtraitのuseみたいに >>235
UFCSのあるNim言語をよく使っているけど特に問題無く使えてるよ。
ライブラリAで定義された型を第一引数に持つ関数をライブラリAの外で定義してもgenerics/template/macroなど使わない限りライブラリAから呼び出せないし、ライブラリA内で使われている関数を外から勝手に上書きできない。
メソッド呼び出ししているように見えてもライブラリA内のプライベートな変数/関数はライブラリの外からアクセスできない。
method call syntaxってa.fooMethod(b)って書いてあるのを
コンパイラがfooMethod(a, b)という関数呼び出しとして解釈しているだけでなんのリスクもないよ。
第一引数にFoo型のオブジェクトをとる関数を定義してもオーバーロードがあるのでFoo型を使わない人には何の影響も与えない D言語のプロジェクト見て半笑いになるのやめてさしあげろ >>236
Nim言語だとimportするときにfrom std/strutils import `%`みたいに特定の型/関数だけをインポートすることができるよ。
もし同じ名前で同じ引数の関数が複数定義されている場合は関数名の前に"モジュルー名."をつけないとコンパイルエラーになる。 結局UFCSは不要だよな
メソッド的に使いたいならば最初からその型にメソッドを生やせばよいだけ
必要ならばジェネリックに定義すれば複数の型に同時にメソッドを生やせる
わざわざグローバル関数にしておいてからメソッド的に使えます!とかメリットを一切感じない >>240
標準ライブラリにある型とか他人のgithubリポジトリにあるライブラリにも自由にメソッド追加できるの?
ジェネリックにする必要が無いときでもジェネリックにしないとメソッドはやせないの?
Nim言語にはそもそもC++のメンバ関数みたいなのが無くて、第一引数がFoo型の関数がFoo型のメソッドの代わりみたいになっている。 >>241
ジェネリックである必要なし
もちろん同じ機能を複数の型に適用ならジェネリックで1回で済むのが普通 >>241
うん
標準ライブラリや第三者ライブラリにある型にもメソッドを増やすことができるよ
だからUFCSが無くても困らないよ UFCSがあれば引数が一個以上持つ関数であればa.f(b)ともf(a, b)とも書ける。
a.f(b)とf(a, b)の両方で書きたい場合があったらどうするの?
UFCSがなければa.f(b)で呼べるメソッドがあるときジェネリックな関数の中でf(a, b)の形式で呼ばれていたら、わざわざ新しくa.f(b)を中で呼ぶf(a, b)を定義しないといけない。
逆にf(a, b)な関数があったときに新しくメソッドを定義しなくてもa.f(b)と書ける。
それとNimだとcommand invocation syntaxがってf a, bという文法でも関数を呼べる。括弧がないので引数が複雑な式にならなければ書きやすくて読みやすいよ。 >>244
Rustでも可能
例えばu64型のxに対して
xのn乗はu64::pow(x, n)という関数が標準であるけど
これはx.pow(n)と呼び出すことができる >>225
js/tsなら言語仕様拡張せんでも関数合成だろう。 >>241
既存の型にもメソッド追加できるよ
例えばJavaScriptならこんな感じ
// 文字列にhello()を追加
String.prototype.hello = function() {
console.log(`Hello ${this}!`);
};
// 数値にhello()を追加
Number.prototype.hello = function() {
console.log(`Hello ${this}!`);
};
"abc".hello();
// 123.hello(); // 文法エラー
let num = 123;
num.hello(); Rustではジェネリックにメソッド追加することも可能
// メソッドhello()を持つトレイトHelloを宣言
trait Hello {
fn hello(&self);
}
use std::fmt::Display;
// 表示可能トレイトDisplayを満たす全ての型に対してhello()を実装
impl<T: Display> Hello for T {
fn hello(&self) {
println!("Hello {self}!");
}
}
fn main() {
"abc".hello();
123.hello();
} 既存の型へのメソッド追加はプロトタイプ汚染とか言われて忌避されてるよね
他モジュールへの影響の出ない形でメソッド追加する手法が望ましい >>250
JavaScriptはプロトタイプがグローバルに書き換わり全てのモジュールに適用されるためだな
一方でRustはメソッドを追加するにはトレイトを用意することが必要、そしてトレイトが宣言/useされている空間のみ有効、なので汚染が生じず安全 >>251
型を定義した以外のcrateでメソッドを追加するためにはtraitが必要、が正しいかな
メソッドを追加するためにはtraitなしのimplを書く方法もあるが、これをできるのは型を定義したcrateだけに制限されているので他crateで定義を追加して汚染することはない
とまあRustの事情は知ってるんだけど、他の言語ではどうなってるのかが知りたかった JavaScriptで脆弱性を生みまくってさんざん問題視されたんだから、いまどきそんな汚染が起こる新しい言語は一つもないよ 他の言語でもメソッド追加方法を教えて
今のところ
JavaScript >>248
Rust >>249 発端になったD言語のUFCSハブられてるのなんで? >>256
UFCSはメリット無いからでしょ
メソッド追加できるなら関数よりメソッドの方が名前空間を汚さないし UFCSはメソッド名空間の汚染
だから採用しないのが正解 結局メソッド生やしたいんじゃなくてプライベートメンバにアクセスしたいだけなんだよな >>259
汚染言うならRustのtrailと同レベルじゃない?
関数をincludeしなければ影響無いんだし、言語次第だけど名前空間に閉じ込めることもできるだろ。 >>261
Rustは一切汚染しません
何を誤解しているのですか? いやトレイトで似たようなメソッドがたくさんぶら下がって汚染されてますよね?それが更にハードルが上がる一因になってる >>263
Rustでは明示的にuse Traitしない限り
そのトレイトのメソッドが有効になることはないよ
汚染は起きず安全に設計されている >>264
当然、D言語でもnimでも、importしたシンボルは、importされたスコープでしか有効にならないし、メソッド形式の呼び出しもできない
Rustと何が違うんだよ UFCSは強制汚染
関数として必要なだけなのにメソッド名空間を汚染
メソッドとして必要なだけなのに関数名空間を汚染
だから採用する言語がほとんどない >>264
イヤイヤ、そんなのほとんどの言語でimportやincludeと同じで更に言えば、use std::io::prelude::*;みたいにRustでもPythonでも
誤ったやり方とされてるワイルドカードだって使えるんだから一緒でしょ。明確に言うなら”汚染は起きず”ではなく、汚染は当然ながら
useするのだから起きている。無意味にuseしない*を使わないというのは言語仕様や特性じゃなく規約だよ スコープやシンボルが限定されてるのに汚染と呼ぶのはおかしい >>267
Rustでは追加メソッドを使う場合
必要な機能のTraitだけを
use TraitName as _; する
そのため汚染は起きない >>264
ほんとRustニワカ嫌いだわ、「明示的にuse Traitしない限り」なんて良くそんな詭弁が言えるわ。どう考えても一緒でしょう
だからPythonだってas構文使えますし、D言語だってimport std.stdio : writeln, writefln;で選択的インポートできるでしょw Rust聖戦士がワラワラ
他の言語のスタイルはすべてアンチパターン >>269
Underscore importなんてRustがトレイトのシンボルが別のシンボルと競合する可能性がある場合、つまりRustが破綻しないように
特別にあるだけで、汚染の低下のための機能ではないぜ。ここで汚染といってるのは無暗にメソッドが追加される事。
(回避策が仮に無ければ)衝突することはもはや、言語的な欠陥だ 使われる空間に名前が載ることを汚染とは言わない
使わない空間に名前が載ることを汚染と言う
UFCSが汚染と言われる理由は
関数として使いメソッドとして使わなくてもメソッド名空間に載り
メソッドとして使い関数として使わなくても関数名空間に載るためだと考えられる >>273
Rustだって、fn中にuse出来るわけでそれはほかの言語でも同じ。そう言う事はあまりしないけども、多くの言語で同じように”使われる空間”だけに載る RustがUFCSを採用しないのは単に、パーサーをオブジェクトを先して作り直すと(C言語にわざと似せてる)見た目が変わってしまうし
パーサーに手を入れるということは苦労してきたコンパイル速度が低下してしまう恐れがあるという事だけ >>273
その程度で汚染とか言うの聞いたことねえよ
ESModuleとかが導入される前のJSのグローバル汚染なんかと比較してみ?
Rust上げしたいがためだけのただのイチャモンだよお前の主張は >>272
Rustでは汚染は起きないですよ
>>274
そうです
だからRustでは>>273の汚染という状況は発生しないですね そもそもUFCSは汚染だなんてここ以外で聞いたことがないんだけど >>273
UFCSとやらはムダに汚染しまくるクソな機能だな Rustの宣伝はこんな匿名掲示板じゃなくQiitaとかに書いてほしいな
その反応で実際に正論なのか暴論なのか明らかになるだろう UFCSという汚染機能をサポートしているプログラミング言語はDとNim
埋もれた言語となったのも当然の結果 ほとんど全ての言語がUFCSを採用していない理由はメリットが無いからだと思う
そして無条件に二つの名前空間に登録されてしまうことを汚染と呼ぶかどうかは置いておくとしても本末転倒の方法かなとは感じる >>275
さらにRustは実装としてUFCSを別の意味で誤って使っていた過去がある、::パス構文で混乱を引き起こして曖昧性が起きた。2017年頃でそんなに優れた開発者がおらずなんとなく実装していた時期だな、いつもはRustは論文がしっかりしてると嘯くのに >>286
Rustは関係ないんじゃね?
むしろRustのアンチ側がなぜかRust叩きしていて巻き込まれ被害側にみえる どっちでもいいよ
信者だろうがアンチだろうがあらゆる話題がRustとの比較になって宗教戦争化するのが馬鹿馬鹿しすぎる
Rustの話題はスレ違いなのでRust叩きもスレ違いとする、問題解決 ほぼ全ての言語がUFCSを採用していない
しかしUFCSが叩かれるとなぜか必死にRustを攻撃してくれる
一石二鳥と言えるだろう C++委員会での議論でもメンバ関数と非メンバ関数で衝突したときにどう解決するかで割れて否決されたみたいだし、なかなか難しそうだね 考えてみたがUFCSは完全に不要っぽい
まずメソッドとして使いたいものは最初からメソッドとして書けばよい
次に外部の関数をどうしてもメソッドとして使いたいならばその外部関数を呼び出すメソッドを追加すればよい 衝突が問題ならUFCSの使用は記号などを使って明示したらいいんじゃないかな? 「Rustを攻撃」ってどっちも同じでしょって言ってるだけなのに、このように攻撃を受けたと勘違いするんだから、正常な議論なんて出来ない。
UFCSについて難癖付けてるだけじゃん、個人的には別に必要ないと思うし、仮にあったら便利だとも思うが。コンパイル時間が増えるのは許容できない
「Rustのアンチ側」なんて言い出すクズどもとまともな話なんて出来るわけない。
こんな奴らばっかり増やしてもRustの普及を妨げてると思うんだけど? スレ読んだけど
汚染でも何でもなくRust特有の問題でもないことをRustは汚染だと延々と叩いてるのは異常に感じた 今のところUFCSがある言語と外部のデータ型に対してメソッドを追加できない言語、メソッドを追加できる言語とできない言語のそれぞれは前者が勝手で勝るけど、前者同士では好みとか実現手法の違い程度の話のように感じてる
UFCSも結局モジュール単位で環境が分離されている事が殆どのようだし、どちらかじゃないとできない事も、どちらかだと発生する致命的な不都合も見えてこない
一見機能が不要に見えても、その採用理由が他の要素に起因してたりもするだろうし、その辺私はUFCS採用言語のことを詳しく知らないのでなんとも言えないな >>292
C++での議論では当然そういう案含めていろいろ提案されたけど、結局どれも一長一短で委員会での合意には至らなかったみたい
一人で作ってる言語なら作者の好みでサクッと入れられちゃうんだろうけどね 汚染と言わなくても、Rustがuseで似たようなメソッドがたくさん出てくるのは本当でしょ、UFCSにしてもそれはイコールで何ら変わらんわ
なんでこいつらマトモに話すら出来ないの?コーディング能力を持ってるんだろうけど、コミュニケーション能力はゼロに近い メソッドが動詞ならUFCSでは関係が逆になるんだよね
英語圏の人はどう思ってるんだろ >>298
OSV言語の自然言語に近くなるから、オブジェクトが先に来るのは利点として受け止められてる。でも所詮はシンタックスシュガーの何者でもない >>297
> 似たようなメソッドがたくさん出てくる
そこ意味がわからない
似たようなメソッドがたくさんとは何? C#にも拡張メソッドと言う名前でほぼ同じ機能が使えるけどそっちは拡張メソッドオンリーで使う前提で作られてる >>299
英語はOSVじゃなくSVOな?OSVになることもあるけど、そして世界の自然言語の主流は日本語と同じくSOVが40%
参考としてスター・ウォーズのジェダイ・マスター:ヨーダは、このOSV語順で話す。 var s=copy(section);
paste(s);
みたいなのがあって
これを
paste(copy(section)):
とするより
section.copy().paste();
のほうが受け入れ易いってことだよね? Methods! You will be written first, but many are not. >>305
ところがどっこい var sのsはメソッドを生やせないstring型だ
常にメソッドを生やせるとは限らないし、元のクラスに必要以上の仕事を増やさないためにから拡張メソッドという概念があるんだよ スコープでuse出来て局所ごとにsection.print()の意味が変わる場合も便利だと感じる? メソッドじゃなくて関数や変数でも、スコープごとに意味が変わりうるのは当然のこと 拡張メソッドが欲しいのはまぁ分かるんだけど
UFCSまでいくと普通の関数のつもりが意図せずメソッド呼び出しできてしまう、みたいなデメリットの方が大きくなる気がするなぁ なぜRustが叩かれていたのかようやく理解できた
Rustでは基本の型にも外部の型にもメソッドを追加できるわけか
そのためメソッドを自由に追加できない言語の人が逆恨みで叩いていたと "test".print();が局所ごとに意味が変わると気持ち悪い >>266
Nimだと「メソッド名空間」自体が無いから、そんな議論をするのは無駄だね。 >>312
え?logging.rsに"test".print();と書いてあるのと、printer.rsに"test".print();で意味が変わるのはなんも関係無くねえ?
つーか普通に関数でprint("test")だのsaveだの、getだの散々やってるじゃん。気持ち(悪い)の問題なんだろうけどさ >>311
それはNimも同様。
むしろNimの方がメソッドと関数を統一しているから(記法が違うだけ)、より自然に拡張できる。
>ぜRustが叩かれていたのかようやく理解できた
>逆恨みで叩いていたと
こういうアホなことを言う狂信者ばかりだからだよ。 RustのメソッドとかC++のメンバ関数のような特定の型だったりトレイトに束縛された関数のようなものがNimにはなくて、自由関数だけがある。
だからNimからUFCSをとったらC言語のように全ての関数をfoo(x, y, z)って書かないといけなくなっちゃう。
UFCSがあるおかげでどんな関数もx.f(y,z)だったりf(x, y, z)とか自由に書ける。
UFCSで関数がメソッドになるとプライベート変数/メソッドにアクセスできちゃうって勘違いしている人がいるかもしれないけどNimではそれは起きない。
C++のメンバ変数に相当するものや関数のアクセス権はモジュール外にそれを公開するかしないかのどちらかしかない。 >>315
Nimでも自由にメソッドを追加できるならばUFCS必要なくね?? >>314
逆にprint_to_printer()とか print_to_consoleとか書いてあったら発狂するかもしれんわ
一番使うdebug_assert_eqとかヤメテほしい・・・、あと帰ってくる正式な型名が異様に長くなるのもC++の悪いところを引き継い出るような感じがする >>316
自由関数しかないNimは関数名空間が常に汚染されてしまうのね
普通のプログラミング言語ならばメソッド名として名前空間が分離されるのよ std::iter::emptyは名前空間を汚染するので使ってはいけません
アホか >>319
1つも調べもせんのな、自由関数だけじゃなくmethodもある。つーかおまえRust使うの止めてJavaやってろ、まじ迷惑 >>317
>>316にまとまっているよ。
メソッドが無くて、ただの記法の違いでしか無いからこそUFCSのメリットを最大限享受できる。
>>319
メソッド名を関数名から「常に」分離するメリットは?
関数自体をモジュールとかで分離して管理できればいいんじゃないのかね。 やはり逆恨みで無関係なRust叩きやってる説が正しいかもしれん
Rustが無関係な状況でも>>321のように唐突にRustを出してくる 逆恨みだの、攻撃だの、ずーーとこんな事言ってる奴いるけど完全なびょーきだと思う。名前空間が汚染されないという言語はお前の中で具体的に何? 逆恨みとか、自我と言語が密結合していない限り出ない言葉だよな
用途目的に応じて言語を使い分ければ良いのに
つまりそういうことだ おそらくNimの人がずっとRustを仮想敵にでもしてるのかもな
だからNimに不利っぽい書き込みがあるとRustの話がどこにもなくても無意識にRustを叩いてしまってるのかもな ローカルのスコープしか影響しないのに、わざわさわ汚染とか言うの意味わからん
紛らわしいからやめろ 例えば新しい言語が出来て人気を博したら、RustにもNimにもDにもSwiftなどにも存在しない機能や、シンタックスシュガーになるわけで
それを指摘したら、逆恨みだの、攻撃だの、アンチだの言いだしたらこのスレはマジ必要ない。
なんで無いのか考察を言ったり、コンパイル時間への影響とか、現行の構文が大きく変わってしまうとかそういうのを述べるならまだしも
UFCSが汚染だとキチガイのように書いてる。マジこんなやつ迷惑だろw このスレを「汚染」で検索してそれら書き込みを見るとプログラミング言語名の最多登場がRust
なぜRustを汚染と叩く書き込みが多いのか不思議 >>228とか>>235みたいな、主観と思い込みによる断定から荒れ始めたんだよな
そこからおそらく自己正当化のために独自の「汚染」を定義
誰にも賛同されないと逆恨みだの攻撃だの仮想敵だの >>333
それはもちろん同感だが
同時に発生しているRust汚染叩きは何なのだろう? rustは錆なんだから汚染ぐらいでどうこう言うのもちょっと Rustに対してとにかく言いがかりつけてるアレな人が前からおるやん
今回もそれだろ
有名人が叩かれる有名税みたいなもんや いーや一番言いがかりで汚染されてるのはこんスレとロシアだと思いますわ。反枠&陰謀論!病院池 有名税か
逆恨みやストレス発散でバッシングする連中多いもんな >>332 >>334
事実に基づかない嘘で被害者面するのやめるべきだな。
このスレで「汚染している」と難癖つけられているのはUFCSだろ。次点でNim。Rustはあったっけ? 有名税とか言う前にまずDとNimとUFCSを無理筋でこき下ろした件に対するごめんなさいは? それ古い版のthe bookだし>>224の条件付きだからUFCSってあるってだけだよ 途中送信した
条件付きだからこれをUFCSと呼ぶのは誤用ってことで今は使ってないよ(>>284) >>344
もちろんRustにもあるけど微妙に違うので今はUFCSとは呼ばなくなった
その微妙な差というのは既に>>245で書いたように
> 例えばu64型のxに対して
> xのn乗はu64::pow(x, n)という関数が標準であるけど
> これはx.pow(n)と呼び出すことができる
とメソッド形式でなく関数形式の時に型名等の前置パスで常に制限される ほんのわずかだけ違うとはいえ
D、Nim、RustといったUFCS対応言語は2通りの記述方法が出来て便利で良いですよね Goってマジで終わりかけてる?
使う価値あんまり感じなかったのは事実だけどw >>295
(UFCS方式を含めて)メソッドを追加できない次世代言語が存在するのですか? >>355
Rust、Kotlin、Swift、C#は拡張できるし、メソッド形式呼び出しがあるモダン言語なら必須機能っぽいけどね 最後にGoの悪口に収束するのは、おまいらの悪い癖だと思う
>>356
現代日本の片づけのキモはゴミ在庫の管理だ。 これはコンマリも言ってない..
pptppc2 「キモ」「ゴミ」とかいうワードが真っ先に出てくると身構えてしまう。 >>357
スレタイにある言語だと
TypeScriptもJavaScriptだからメソッド追加可能
残るGoは? nimググってみたけどけっこう良さそうな言語じゃん。 >>361
ガイジの中のガイジ煮詰めたデータに何か意味あるんか? >>362
何いちゃもんつけてんだ。
nimは使ったことすらねーわ。ググっただけだ。
一応このスレタイトルのtypescriptとgoは使ってる。 前にも書いたけど学校のサイトとかをワードプレスで運用してるところ結構あるんだよね
他の言語では先生達に書き換えて運用とか無理だと思う
PHPはそういう用途に向いてる
絶対そこはRustとかGoにはならない 言語と人を比較して言うのだが
PHPを批判するような子は
たいていPHP以下の存在
そして必ずPHPの作者以下の技量 たぶんPHPが存在してなければ、また誰かが気軽にwebサイトをさらっとかけるスクリプト言語をRustのようなシステムプログラミング言語で開発していただろう
そしてそれはPHPのようなものになるのだろうね たしかにPHPが障害者を吸ってくれたおかげで助かってるところはあるかも
ITの汚物入れ、人類最底辺のクズ、エタヒニン・罪人
それがPHPoor こんスレってなぜかJuliaの話、完全スルーするよな。Go?Rust?Zig?Nim?時代遅れのローエンド言語や >>370
GoとPHP、どっちも使わない人からしたら大して変わらない説。 >>373
よっぽど根に持ってるんだな。
ちょっと病的な感じ。 ローエンド言語なんて言葉ある?
ローレベル言語ならわかるけど >>375
単に知られてないから話題に反応できないだけだと思う
良いところ教えてよ Julia、せっかく新規言語で型付けと動的性のバランスを取れる立ち位置にあったのに、抽象-具象の継承ベースの型を採用した部分が個人的にジェネリクスと噛み合いが悪いと思っていて悲しい
1-originとかは正直瑣末事だと思ってる分そこだけが本当に合わない
一応最新バージョンだとパラメトリックな抽象型とそのパラメータに抽象型を使えるし、その部分型をパラメータにも抽象型コンストラクタ(?)にも適用できるから実用上十分なんだと思うが JuliaのユーザーってPythonは当然として、他にはMATLABやRが競合になるようなコミュニティだから、
このスレとはまるで層が違うんじゃないかな
MATLABやRの話も全く出ないし Juliaって計算科学や数値解析に特化した、R言語みたいなものでしょ? Julia厨はクソみたいな押し付けするくらいなら
自分で他言語のライブラリの移植でもした方がよっぽど使ってもらえるという当たり前のことすら理解してないからな。 >>380
その継承が中途半端なことしかできないし
継承を採用したことも失敗してるし
Juliaはあかんね 継承は基底クラスと派生クラスの役割(責務)の分担が非常に難しいです。
よほど上手く設計しないと、すぐに「スパゲッティ・オブジェクト・プログラム」ができあがります。
継承は実装の再利用という面があるので、得てしてコピペの代わりに使われがちでもあります。
既存のあるクラスの振る舞いをちょっとだけ変えたいから継承を使おうってやってしまうと、
派生クラスのソースを見ただけでは何をやってるのか全くわからない最悪のコードになります。
まだコピペのほうがマシなことも。
最初はちゃんとクラス階層の設計がされていたとしても、だんだん皆が使う共通ルーチンを基底クラスに持たせよう、としてしまうとか、
基底クラスは、すぐに、巨大かつ影響範囲が広すぎてイジれない「神クラス」になるでしょう。
この場合の基底クラスの役割は、グローバル変数そのものと言ってよいですね。
とにかく、継承を使うと、コピペ、グローバル変数の使用、といった「禁じ手」と実質的に同じことが簡単にできてしまいかねません。
もし継承を使うのであれば、かなり注意が必要です。
その一方で、継承でないと絶対にダメという用途もあんまりないのです。
継承を一律禁止してしまってもそんなに困らないところがあります。
そのため最近ではGoやRustなど言語の仕様として継承(インタフェースではない実装を持つクラスの継承)を禁止している言語が増えているという有り様です。 長い。そして間違っている。
Rustは代わりにtraitで継承を表現できるが、Goは表現する方法はなく、似たことをするとデータ構造を弄くることになる。
そもそも継承においてはデータ構造と実装の併合が問題なので、あとは察してください。 じゃあ継承使わないでプラグイン機構使いたいときはどうすんの? プラグイン機構とだけ言われても意味が一意じゃないと思うけど
mixinのことかいな? Composition over inheritanceは30年近くも前のGoFですでに広まってるのになぜ次世代言語スレで話題になるんだろう ていうかJuliaの型システム知らなかったから簡単に調べたけど具象型はsupertypeになれないとか書いてあるんですが
Juliaでもいわゆる継承の問題点はちゃんと回避されているんではないですかね >>391
継承とジェネリクスとの相性の悪さが問題なのではないかな >>390
その後に継承のデメリットの方が多いと分かってきたため
そのデメリットをどう回避するかが各言語の主題となっている >>390
知った気になって語りやすい話題だからだろう。
実装の拡張を肯定しつつデータ構造を直接拡張しないところが重要。
それを字面だけ解釈して、結局は妥協でデータ構造が暗黙に継承するような、先進言語の形だけ真似した言語もあるくらいだからね。 >>387
Goだけがどの話題でも機能不足との結論になっていて悲しいです クラス継承しか知らないプログラマーは何でも継承で表現しようとするために失敗しているわけだから
継承のないプログラミング言語で修行させればそこは学習できるはずだ 実際言うほど継承使わないからなぁ
共通的な部分を継承で済ます場合はあるけど
データもその共通部分がはっきりしているなら親クラスで定義するけど
ただフレームワークを使ってたらコントローラはControllerから継承みたいなのはどうしてもあるが typescriptは不要だな。jscript .netといっしょで空虚だ。 マイクロソフト、JavaScriptに型宣言を追加しつつトランスパイラ不要の「Types as Comments」をJavaScript仕様策定会議のTC39に提案へ
https://www.publickey1.jp/blog/22/javascripttypes_as_commentsjavascripttc39.html 継承自体は悪くなくて設計が悪い
実際継承使わないパターンが多くなったのでそれもどうでもいい
クラスに当たるものに委譲で継承的なことをすると状態が問題になる
そしたら状態を持つのが悪いと言うまた不思議な話になる
そしてどんどん学習時間取られてみんな疲弊していく 委譲元のクラスが単体では問題なく動くのに組み合わせるとテストを通らない
よく見ると以上元のクラスの内部状態が必要になってるけど公開されていない
完全な設計ミス
interfaceに必要な要素を追加…などできずデフォルト実装を追加
こうしてゴミが出来上がる 継承はそのオブジェクトの内に閉じた処理、オブジェクトの外の処理でもリスコフ置換原則が成立する範囲ではスマートでいいと思うよ
ただ現実的な話、ビジネスルール自体がそうなってないケースが多い
オブジェクトの外の処理は多くの場合、処理対象の子クラスの型で分岐を求められる
これにオブジェクト指向で対処しようとすると、めんどくさいデザインパターンの洪水に呑まれる
オブジェクトの内側のことは継承でエレガントに実現しておk(嫌いなら使わなくてもおk)
外側のことは地道にpattern matchingで泥臭く頑張る
これでいいと思うね このRustと同じ分類となる、更に便利な言語が登場しないと、Rustを置き換えることが出来ないだろう
> プログラミング言語は以下の3つに分類される
> CとC++ ←『省メモリ高速』だが、「メモリ解放でミスると危険」
> GC言語 ←『省メモリ高速』ではないが、「メモリ解放は自動で気にしなくていい」
> Rust ←『省メモリ高速』だが、「メモリ解放は自動で気にしなくていい」 https://mun-lang.org/
Mun触ったことのある人いる?
ぱっと見GCつきのrustみたいに見える >>410
文法や基本型はRustと同じっぽいね
ドキュメントを見る限りでは非常に小さいサブセットで開発途上なのかよくわからない >>407
その分類、そもそもニーズが大きくない気がするし、
このまま競合は現れずに行きそうだよね。 >>410
Dlang: C++風のGC言語
Crystal: Ruby風のGC言語
nim: Python風のGC言語
Vlang: Go風のGC言語
Mun: Rust風のGC言語 ← New!
こういうこと? >>412
重視されているからこそ
C/C++からRustへの移行(安全化)だけでなく
各種GC言語からRustへの移行(高速化)が起きている現実 >>416
ないわ~
pythonからRustってありえないよ NumPy, SciPyのライブラリの実装FORTRANをCにベタ移植して更にC++でラップしたような物ばかりだったけどRsutへの移行は順調に進んでいますか?w それらPythonの使い方は単なる皮言語だからな
次世代言語スレで皮言語を持ち出す時点で頭おかしい >>418
どの分野でもどの言語でも同じだけど
他の言語に移行するのは新たな物(仕組み・システム)を作る時だよ
そのまま移植は非常にレアケース
例えば古すぎるたり性能面で難があるけどアルゴリズムだけだから再設計せずそのまま他言語へ移植など >>416
GCあり言語では、データ構造は気にしても、
メモリ操作を意識している人は、少数じゃない?
だから置き換えは、結構ハードル高いと思うけれど。
>>417
Pythonは、グルー言語でもあるから、
単純な置き換えは、そうそう進まなさそうだよね。 >>421
メモリ操作とは具体的になあに?
めったにない特殊なケースは除くとしてハードルが高いことなんて無いんじゃないかしら >>422
低レイヤー言語だとメモリ読む前にキャッシュしたりアライメント揃えたりするでしょ >>423
何それ?
よほど特殊なことをしない限りそんなコードを書くことはないよ
C言語でもアライメント気にせずに変数に値が入るし変数そのものがキャッシュだし >>424
他人のこさえたライブラリと構造体を受渡するときなんかは意識せざるを得んよな。
コレはレアケース? >>426
それはFFIと言って低レイヤー言語だけの問題ではない
PythonでもJavaScriptでもある
元の話題
>>423
> 低レイヤー言語だとメモリ読む前にキャッシュしたりアライメント揃えたりするでしょ 例えばSIMD命令使うのが "よほど特殊なこと" に該当するかどうかという話? この流れでFFIもSIMDも関係ないと思います
GCあり言語の普通のプログラムをGCなし言語へ置き換える話をしています
>>421
> GCあり言語では、データ構造は気にしても、
> メモリ操作を意識している人は、少数じゃない?
> だから置き換えは、結構ハードル高いと思うけれど。
>>422
> メモリ操作とは具体的になあに?
> めったにない特殊なケースは除くとしてハードルが高いことなんて無いんじゃないかしら メモリ操作って言い方が曖昧なら、スタックとヒープを意識するかしないかって言い方ならどう?
GCあり言語でスタックとヒープを意識するような事ってあまり無いと思うんどけど。 >>430
GCなし言語でどうしてもスタックとヒープを意識しないとプログラミングできないことってある?? >>431
ありなしで言ったらあるでしょ
性能意識するコードとか >>432
それは性能をよっぽど気にする特殊な場合だけでしかもその中の一部のコードだけやろ
それ以外は関係ないやん 言うほど低レイヤーコード書いてるやつはここにはおらん。
だから話がおかしな方向に行く。 >>434
GCあり言語のコードをGCなし言語にする話だから
低レイヤーコードなんて一切関係ない スタックは普通に意識するでしょう、末尾最適化されてないナンチャッテ意識高い系の再帰呼び出しとか直すけど・・・
GCアリ言語でも無しでも、スタックサイズは普通に意識する。
ヒープは言うほどRustは組み込みに使わないし、トヨタが使うというてもそれはメモリコンパクションのあるようなOSが載ってる場合だから
本当の組み込みじゃないし、でもアロケーターが64byte-4kでもVec::with_capacity(size);とか普通にIO系の処理では意識するでしょ >>436
Rustはヒープ無しでも動作するからヒープを意識しなくていいのはその通りだが
ヒープが有る場合でもVec::with_capacity(size);等は動作最適化を手動でする時のみ必要であって、
プログラマーは何もしなくても全自動でcapacity拡張してくれるから意識しなくてもよい >>433
そもそもの質問が「ヒープ意識しないとプログラムできないことってある?」だから、反論になってないよ
頻度は問題にしてなくて有無の話だから >>438
それは君の方がおかしい
今回のこの文脈ではそこは意識する必要がない
>GCあり言語の普通のプログラムをGCなし言語へ置き換える話をしています
ベクタの使用領域の大きさはどちらの言語でも自動的に拡張してくれるのに任せればよいから意識しなくてよい GCありの言語で循環参照するようなデータの持ち方をしまくってるようなコードだったりすると、
そのまま移植できないだろうし面倒かな?
場合によってはRustでいうArenaみたいなのまで持ち出して再設計しないといけなそう
移植なんてしたことないしあくまでも想像だけど >>437
”Rustはヒープ無しでも動作する”、不正確でダウトといっても良い。”Box<T>を使わない場合、Rustは最小のメモリで動作する”
一般的に最小のメモリとはプログラムをメインメモリにロードした領域であり、それ以外にも、ヒープ解析すればRustの場合は、
Config structなどが多数メモリにロードされていることが分かります。後半の文は意味不明。 GCあり言語って一絡げにできるほど似通ってるんだっけ >>441
知識が浅すぎる
Rustはヒープ無しでも動作する、で正しい
そのためRustの標準コアライブラリcore::はヒープ無しで動作するように作られている
std::のうちcore::以外の部分はヒープを用いており明確に両者は区別されている
>> ”Box<T>を使わない場合、Rustは最小のメモリで動作する”
意味不明
Box<T>はヒープを使う型の一つに過ぎない
それ以降の記述は全く意味不明 ベアメタル等OSなしでも動作しないといけないため
Rustはヒープを前提とせずに動くよう設計されている >>444
本当はスレ民のことが気になって仕方ないだろ?
隠しても無駄www なぜせっかくRustで作られたブラウザを除外するかね?
「NHKプラス」、「Firefox」での視聴が不可能に 5月23日から推奨ブラウザを「Microsoft Edge」「Google Chrome」「Safari」に限定 [孤高の旅人★]
https://asahi.5ch.net/test/read.cgi/newsplus/1651490664/ >>448
そのどれかのブラウザがインストールされてない端末って何がある?
Linuxと組み込みくらい? >>448
もし本当に視聴不可となったら技術力が無さすぎる
昔ならともかく今の時代にブラウザ依存なコードを書くのはダメなプログラマーの典型
視聴不可ではなく動作確認するブラウザの数を絞るなら理解できる > 「Firefox」など、上記3ブラウザ以外での動作はもともと確認しておらず、推奨ブラウザには加えていなかったという。
> 「5月23日以降に予定している設備更新に伴い、Firefoxでは動画が完全に再生できなくなる
どういう設備更新なんだろうな・・・
WebKit系じゃないと使えない仕組みがあるのか 今どきはブラウザ依存な書き方する方が面倒だろう。普通にテストしてないだけでは。 chromiumにしか実装されていない独自拡張機能に依存したAPIに手を出したとか??
でもSafariで動くなら違うか
Firefoxでだけ動かないコードなんて可能なのか?? そういえばchromeにrust使う話ってどうなったんだ? たしかFirefoxもまだ全部はRustに治せてないんだろ >>461
君は何らかの大きなシステム開発に関わったことがないのかね?
どんな言語と言語の場合でも一気にやることは不可能かつムダ
新規部分や改修部分に絞って手を付けていく >>462
なるほど
だからよそと違ってバグまみれとか言われるんやなw Chromeの方がセキュリティバグ多いよな
頻繁にバージョンアップしろと言ってくる >>464
JVN iPedia - 脆弱性対策情報データベース。https://jvndb.jvn.jp/
期間指定なし
・safari 884件
・edge 1054件
・firefox 1989件
・chrome 3464件
期間指定2018/01から
・safari 48件
・edge 391件
・firefox 492件
・chrome 937件
とはいえ、Chromeのほうがローリングリリース・ローリングアップデートの期間が短い(現在は4週間)2021/3頃から6週間から変更された。
以前はFirefoxはローリングリリースを採用していないかった。またChormeの使用者がFirefoxより10倍なので脆弱性も発見されやすい。
何かと問題なSafariの脆弱性がこれだけのはずが無く、脆弱性報告数=危険なブラウザとははっきり言えない 途中まで数字で語ってるのに最後だけ願望になっててワロタ 木を見て森を見ずという言葉を考えた昔の人はいいセンスしてる Appleって莫大な利益を何に消費しているのだろうね >>448
そもそもNHKは見ないのでどうでも良い。 >>472
ウィグル弾圧に使われてる可能性が高い。 いまどきウェブ見てて落ちるブラウザなんてファイアフォックスくらいだし、そこらへんは忠実にネスケ以来の伝統を受け継いでて驚く。 トリビア:Firefoxユーザーはレベルが高いの致命的なバグがあっても自分で治して使っている >>475
ここ数年間の常用者だがFirefoxが落ちたことがない
もしデマカセを言っているのでないのならばどういう状況で落ちたのか語ってほしい >>475
Chromeは週一ぐらいで落ちる
IME変換中に間違えてファンクションキーを押すと落ちる >>477
数か月前に頻繁にメモリ不足で落ちてた。タブがクラッシュする >>481
それメモリが少なすぎたとか
メモリを超える巨大なデータを読み込んだとか
無数にタブを開いたとかそういうオチだろ 逆に100兆個のタブを開いて落ちないブラウザってどれ? メモリ不足を、クラッシュせずに通知くらい【余裕】にできないと。
当たり前のこともできない。所詮現世人類の我々の技術力はそこまでということだ―― >>477
Windowsでタブレットモードにしてると頻繁に落ちるな。 落ちるというか、無限ループしてるっぽいんだよな。
入力を受け付けず、タスクマネージャで見るとCPUをぶん回してる。 頻繁に落ちるのに、落ちないとか信者が言い張るのも、ネスケ以来の伝統だよな。 英語設定のLinuxだけど落ちないよ?
バグってるのはサイトかホストなのでは? Windowsでここ何年か使ってるけれど、
特に気になる動作は無いけれどな。
Edgeの印刷で返ってこない方が辛い。 FireFoxで微妙に表示が崩れるとChromeだとちゃんと表示されるのか気になる
表示させてみて同じだとホッとして違ってたらがっかり Rustが、Goの最大の競合相手であることが明らかになったってよw
プログラミング言語「Go」、開発者の満足度やニーズは?
https://japan.zdnet.com/article/35187065/
また調査では、Goの主なライバル言語が「Rust」「Python」「Java」「TypeScript」であることも明らかになった。RustとGoは、どちらもシステムプログラミング言語であり、開発者には広く評価されているが、「JavaScript」や「Python」ほどの人気はないようだ。
しかしこの調査では、Amazon Web Services(AWS)、Google、Microsoftの支持を受けているRustが、Goの最大の競合相手であることが明らかになった。Goの代わりに選ぶとしたらどの言語を選ぶかという設問では、回答者の25%がRustを選ぶと述べており、17%がPython、12%がJava、8%がTypeScript、8%がC#と回答していた。
「最もよく選ばれているのは、Rust、Python、Javaだ。RustとGoの機能セットは補完的な関係にあるため、あるプロジェクトに必要とされる機能がGoにない場合、Rustは優れた選択肢になるかもしれない」とMerrick氏は述べている。 >>494
競合なのは事実だろうけどGoやってるような人はRustも必要になれば普通に使えるでしょ
エンジニア目線では特に対立関係にないから煽っても無意味だぞ 競合ではなく両方利用
Goで不十分なところはRustで書いている
どこでもそうだよ 理想の家族
父 40歳 海外へ単身赴任(死ぬまで)
母 35歳 息子に甘い
姉 17歳 弟に甘い
俺 44歳
妹 15歳 多感な時期 俺に反発しながらも。。?
猫 ウンチしない 抜け毛ない 俺の声かけに無視しない >>495
そうだぞ。
競合なのは事実だろうけどGoやってるような人はRustも必要になれば普通に使える、という体で話さないと嫌われるぞ。
それに、裁量権のない作業者の間では対立関係にないから煽っても無意味だぞ。 低レイヤーはRust
高レイヤーはGo
この使い分けじゃいかんの?同じシステムプログラミング言語でも毛色が違うだろ
GoogleとMicrosoftがRustに注目しているのもOS開発の目的であってGoでOS開発作ろうとはならんでしょ 主張はわかるが、これはもしや片思いみたいなものではと見ている。
仮にGoユーザーの多くが低レイヤーにRustを使いたい結論だったとしても、
Rustユーザーの多くが高レイヤーにGoに使いたいという結論にはならない。
よってカップル不成立。 例えばウェブサーバーサイドもRustで書いたほうが早い速いしな Goは良くも悪くもCっぽくって人間が気をつけて書かないといけない部分が多いんだよな
一度Rustに慣れてしまうと、Goで隅々まで気を使うのが面倒くさくなってしまう
もちろん既存のGoプロジェクトはGoのまま書くけど、新規ならなるべくRustにしたくはなるな LinusはgitをC+シェルスクリプトで書いてた
書こうと思えば書ける
でも普通に記述に時間がかかるので今は他の言語も役割分担してる Rustはデータ競合らへんは起きないけど、Box、Rc、Arenaを気をつけて使い分けないといけないのとか面倒だと思うけどな Goの一番の面倒さはnilとエラーハンドリングかな
Option/Result型だけでも特別に用意されてれば、もっとGo使ってたかもしれん >>506
Rcは出てこないプログラムも多い
Arenaはほぼ完全に出てこない
つまりそれらレアケースを元に語るのは現実的ではない Rustで引っかからずコードを書き上げるのはかなりの猛者だと思うよ
本当の意味での言語仕様部分は何とかなるかもしれないけどそこから先がつらい
入門4冊目の「コンセプトから理解するRus」tを読んで途中で投げ捨てた
本自体は良書なんだけどtrait境界がもう人間の理解を超えてる
Cだと時間をかければ書き終えれるけどバグが入ってる可能性がある Rustはある程度から人間の理解を超えて来るので一定程度以上勉強しても無駄かなと >>509
その辺はScalaで学んだからRustでは苦労しなかったけど
最初訳わからんってなるのは分かる プログラミングはは知的生産だと思ってたけどこれはもう違う別の何か
他人の書いたコードは意味が分からないというけどそれ以前に自分で書いてもわけがわからない
理解の外にあっても動くからあっている
コンパイルエラーが出ないからあっている
それは本当に正しいことなのか
バグが入ってないのかはもちろん期待した動作なのかすらわからない
人間が揺さぶられてきている 多くの人に知ってもらいたい
これはもうプログラムではないよと 実装に必要なtraitを境界として追加しただけで煩雑だけど難しくはないよね >>509
そのtrait境界は意外に理解が簡単だった
ジェネリックにプログラムを書く時にそのジェネリックな型には何が来てもいいわけではなくて
書くプログラムの中で使っている機能(というかインタフェースというかメソッド)を持つ保証する(というか限定するというか制約条件を並べる)こと
例えば本スレからコピペだけど以下のフィボナッチ数列イテレータ
型へのtrait境界がwhereのところにあるClone(複製できること)とTryFrom<usize>(数値から変換できること)とnum::CheckedAdd(オーバーフロー検知付き足し算ができること)の3つを満たしてればどんな型でも適用可能
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let [zero, one] = [0, 1].map(|n| T::try_from(n).ok().unwrap());
itertools::unfold((zero, one), |(m, n)|
m.checked_add(&*n).map(|f| {
*m = n.clone();
*n = f.clone();
f
})
)
}
pub fn main() {
for f in fibonacci::<i8>() {
print!("{f} ");
}
println!();
} 実際にトレイト境界の条件の実装部分を読んでみた
シンプルなマクロで書かれてる部分もあれば複雑な部分もある
そこで書いてある実装が本当に確実の条件を満たしうるのかは分からないし
ドキュメントを読んでも厳格な意味が書いてあるわけでもない
どこかで漏れがあってもわからない 例えば条件の一つがよくよく考えてみればさらに二つに分離して考えないといけないものだと
後で判明するともう既存のコードがみんな死んでしまう
使用してる所を全部さかのぼって修正しないといけない
それかRust自体の仕様変更で死んでしまったりいろいろ死にそうな要因がたくさんある
マクロでやりすぎてる >>518
そんなこと起きたことがない
聞いたこともない机上の空論 Rustの標準ライブラリの設計がそもそも間違ってて、その修正のために破壊的な変更がいきなりきたら大変だ、って話?
そんな馬鹿な、と笑っちゃうね サプライチェーン問題は批判理由が見つからない人が持ち出しがち。
マクロがない言語だと、同じ機能をコンパイラやらランタイムが持ったりするわけだが、不思議に誰もそれらの機構を疑わなかったりする。
中身が可視化されたのに逆に疑わしく感じた場合は、まずは自分の知識が足りなかったことに気づきましょう。 実装の問題は重要だろ。
そもそも実装と独立に仕様だけ語れるような作りにrustはなってない。 何を問題視してるのかもうちょっとわかりやすく書いてくれないと議論にならん コーダー風情にはどこら辺に問題があるかすらわからないんだ
ほっとけばいい >>522
依存型理論原理主義過激派かな?ちょっと面白い >>527
Π型はないけど、const genericsなら… >>521
ランタイムが持ってる言語ならランタイムをアップデートしたら終わり
マクロの言語は該当箇所を探し出して修正して丸ごと再コンパイルが必要
工数考えたらどちらが有利なのかすぐ分かる
知識が足りないのはどちらなんだろうか? >>529
現実には起きない架空の話だから両者ともにバカげている >>529
ランタイムだけ差し替えられることに気づくとは… Juliaの今ひとつなところはswitch/case文がないところ
あのパイソンでさえ導入したのに時代錯誤
それ以外は良さそうな言語
しらんけど Juliaではマルチディスパッチしろという方針なのかもしれんが、マルチディスパッチの方が他言語に普及してないのは機能として過剰な割に効率性に劣るからなんだろうかね まつもとゆきひろ氏が考える、プログラミング言語の未来
https://logmi.jp/tech/articles/326541
楓:「今Ruby、Cの次に好きな言語はなんですか」。
まつもと:そうだな。Elixir、Go、Rustは気になるっちゃ気になるんですね。ただ、正直に言うとRustは僕の好みではない(笑)。
楓:おおー。気になるポイントと好みじゃないポイントはどのあたりなんですか。
まつもと:やはりCを一番よく書くので、システムプログラミングの領域が、私がよくプログラムする領域なんですけど。そこに出てくる言語の中で今一番メジャーなのは、GoとRustであるというのが気になるところですね。
だけど、Rustが型でいろいろなことを言ってくれるのはうれしいところとうれしくないところがあって。つまりコンパイラに怒られるんですね。僕はコンパイラに怒られるのがすごく嫌いなので(笑)。なんかストレスがたまるんですよね。
楓:(笑)。
まつもと:どちらかというと、技術的なことではないところで一緒にがんばれるものがいいなって思っていて(笑)。 どの言語でも間違えればコンパイラに怒られる
その程度でストレスがたまるならば頭がよくないのかもしれない コンパイラに怒られずにランタイムに怒られる方が
ストレスたまりそうなんだが違う感覚の
人もいるんだなあ ランタイムに怒られてもうまく問題点を見つけ出せる方が頭良い気がする
僕はあんまり賢くないからコンパイラが叱ってくれる方が楽 自分がすごくプログラミングが出来る自負があるから、コンパイラに怒られるとプライドが傷つくから嫌だって言ってるようにも見える ひろゆきは賢いからコンパイラは余計なことを小うるさく言わんでいいって感じ? 自意識過剰で被害妄想だな
コンパイラは怒ってるのではなくて指摘してるだけ The compiler is your friend Rustのコンパイラに怒られるってことは所有権のシステムとかが全然理解できてないんだと思う
前の職場にもc/c++を数十年やっててrustを毛嫌いしてる人何人かいたけど、今更自分がコンパイラに指摘されまくるのがプライドが許さないんだろうな 人間の理解を超えたところから怒られるのは違うかなと
それってプログラムなのか? 囲碁や将棋はもうAIの方がかなり上に行っちゃって誰もAIに勝てない
プロも含めてAIの手を研究してるけど理解できないのがかなりある
それを意味も分からずただなぞって指してる人もいる
プログラムはそのレベルじゃないけどそういうものに近づいてる デバッグ含めた開発効率の良さを考えると可能な限りコンパイル時に怒って欲しいかな
コンパイラが怒ってくれる > ランタイムが怒ってくれる > 誰も怒ってくれない プログラムを書いてエラーが出ると「自分が否定された」「尊厳を奪われた」と感じる人もいる、という話
https://togetter.com/li/1698737 ランタイムは運良くバグを踏まなければずっと怒られずに済むのに対してコンパイラは必ず怒られるから
前者の方がいいって人もいるんだろうね コンパイルが通って、いざ実行してみたら
「segmentation fault.」とそっけなく言われるのもまた一興 >>545
そうゆう浅はかな考えは恥をかく元。常に所有権を意識しなきゃならないので、言うなら、呼び出される上のほうでロックしてても
複数スレッドでアクセスして安全なのに、所有権をいちいち意識しなきゃならないという事だ。
Rustはスクリプト言語の作者からすれば、面倒な記述が多すぎると感じて当たり前
強いて言えば、こういう浅い奴がマウントとってる現状のRustコミュニティは反吐が出る、Rubyコミュニティも好きでもないけど そろそろ指摘するんじゃ無くて、勝手に直したり、良きに計らって欲しい。 >>545
実はそういうは人を排除するためだけにRustのプロジェクトを立ち上げたりしてる組織もある 今のコンパイラはエラーが起きた行を指摘するけど
「この辺がちょっと気になります」
と指摘してくれるコンパイラが
そろそろ出てきてもいいような気がする
エラーの種類はそんなにないと思うので 松本が所有権を理解してないんじゃないと思うがw
まっつの言うこととこのスレの指摘はずれてると思う
松本の言ってることを理解してないだけ
気を付けて普通に書いてバグが出ないのが普通
それでも日常的にコンパイラに怒られるのは人間じゃなくて言語がおかしい なんか最近開発に興味なくなってきた
こんな時みんなどうしてるの?
プログラミングだけが俺のアイデンティティだったのに
死ななきゃいけない? 最近のげんこはprintをpirntとか書くと、
候補を提示してくれるよね。
あたまいい!! >>556
一部のコンパイルエラーは修正コード提案してくれるしIDEからボタンぽちで修正できるから、
それ発展させて意図が不明確なコードでも何種類か修正候補出してくれるようにならないかな >>565
Qiitaに投稿された「TypoScriptを作った」を思い出した
レーベンシュタイン距離が近ければOKっていうネタ言語 英語圏のフォーラム見に行くくらいモチベあったのにな >>545
Rustはマナー講師みたいなものだろ。
Rustが望ましいと考えるスタイルを強制して他のやり方を許さない。「なんで?」と理由を聞いても「それがルールだから」とか理解しがたいことしか言わない。
せめて「スタックにデータを保存するため」とか「Cleanみたいに参照透過性と性能を両立させるため」とか言えばいいのに、そういった思想的な背景を説明しないからマナー講師が跋扈する。 >>570
それはどのプログラミング言語でも同じ。
いずれの言語も独特のスタイルを押し付けてくる。
もしそれを感じ取れないならば、それは特定のスタイルに慣れてしまっているだけに過ぎない。
例えばわかりやすい例を持ち出せば、リアクティブな言語や宣言的な言語では、
a = b + 100
と記述しておけば、aが変わればそれに応じてbが変わるし、bが変わればそれに応じてaが変わる。
ところがそうでない不便な言語に出会ったときに、
双方向に自動的に変わってくれないために苛立つかもしれない。 >>571
「それは特定のスタイルに慣れてしまっているだけに過ぎない。」と切り捨てているところに排他的思想&知識マウントを感じるね。
a = b + 100の例は代入演算に対して ("="から一般的に連想される) 「等しい」の意味を適用することにより生じる誤謬。
原理や技術的決定を理解せずに相手にルールを押し付けようとするマナー講師の話とは関係無いな。 >>570
むしろスタイルを強制しないプログラミング言語なんて存在するのか? 松本がRust好きじゃないのはまあそうだろうなとは思う。
この人、テストコードとかも好きじゃないとか言ってたし。
個人的にはそれじゃ仕事にならんだろとか思ったりはするけれど、とりあえずこの人のスタンスは一貫はしてるよ。 >>570
マナー講師はフォーマットみたいな個人の好みレベルの話で
コンパイラが指摘する構文とかセマンティクスはその言語の世界における自然法則みたいなものでは >>575
エラーメッセージの問題じゃなくてドキュメントの問題かもしれないけど、エラーの形で否定するなら納得のいく理由を教えてほしいものだわ。
自然法則みたいな原理があるなら、その原理からどう推論したらそのルールになるのかの考え方も欲しいところ。
まぁ、それ以前のエラーメッセージしかしないクソ言語も多いけど。C++とか。 >>576
rustのlifetimeとかborrowing周りのエラーはそんな感じでエラーになった理由は教えてくれるよ
例えばどんなエラーの原因を分かると嬉しいと思う? 美人女教師のイラストでも添えたら
エラーメッセージもそれっぽい口調にして >>577
原因じゃなくて原理ね。
エラーメッセージとしてはとりあえずは原因と解決策で十分だけど、verboseの時とかは技術的背景とかポリシーとかを説明した解説へのリンクがあると嬉しい。特に制約の厳しいライフタイムとか借用とか。
まぁ、そうなるとrust版D&Eを書くようなものだから大変か。 >>580
現状でもエラーによってはGitHubのissueへのリンクが付いてるから、具体的にこのエラーでこのページへのリンクを付けるべきって提案があれば受け入れられる可能性は高いと思うよ カンマとピリオドの間違いとか
カンマが抜けているとか
うっかり全角文字で記号をうっているとか
初心者にありがちなエラーを
「ひょっとして・・・」
と教えてくれるとうれしいかもしれない コンパイラ「Did you mean ',' instead of '.' ?」
俺「Fuck off!」 >>580
例えば、↓のコードをコンパイルすると
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0bd550e905a2263a33895815c4430436
error[E0499]: cannot borrow `x` as mutable more than once at a time
てな感じでエラーコードが表示されて、以下の解説ページへのリンクが貼られている
https://doc.rust-lang.org/stable/error-index.html#E0499
この中から関連するリファレンスへのリンクが貼られている
現状のドキュメントで十分ではないという問題はあるかもしれないけど、>>580 で言われているような方向性にはなっているよ
>>582
上のコードのセミコロンを全角にしてみたらまさにそんな感じのメッセージが出た
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=118aa7e31d9c6c786d222f34a66623c3
error: unknown start of token: \u{ff1b}
help: Unicode character ';' (Fullwidth Semicolon) looks like ';' (Semicolon), but it is not コンパイラのエラーメッセージに外部サービスのリンクって、もしそのサービス終わったらどうすんの? >>585
rustのことなら公式サイトへのリンクだよ
さすがに言語のメンテナンスが続く限りは大丈夫でしょう 最も重要なマナーは
プログラムなのかデータなのか不明な文字列等を使ってはならない
つまりインタプリタを作ってはならない
文字列指向が好きな人にとっては
オブジェクト指向こそが文字列を否定するマナー講師だった
OOPを無視してstatic変数を使ってもコンパイラに怒られることはなかった
怒っているのはいつも人間だった Rustちゃんは生活のすべてを管理されたトップアスリートでヘソ出しユニに胸はぺったんこでショートヘアのすっぴんだけど最高の記録を出す
Goちゃんはそんじょそこらの陸上部員で県大会レベルだけどボインボインのロングでシャワーを浴びたらそのままGoコンにGoできる
どっちがいいかって話よ なおGoちゃんは無限に二股をかけられるという特技もある レベルが低すぎてRustスレで書けないRustの話しかしない駄スレ ____
/ \
/ _ノ ヽ、_ \
/ o゚((●)) ((●))゚o \ ほんとはRustスレでやりたいんだお…
| (__人__) |
\ ` ⌒´ /
____
/ \
/ _ノ ヽ、_ \
/ o゚⌒ ⌒゚o \ でもRustaceanはクオリティ高いスレしか相手してくれないお…
| (__人__) |
\ ` ⌒´ /
____
/⌒ ⌒\
/( ●) (●)\
/::::::⌒(__人__)⌒:::::\ だから次世代言語スレでやるお!
| |r┬-| |
\ `ー'´ / Rustスレはフィボナッチ数列で無駄に盛り上がってる >>594
行列演算とかじゃなくてフィボナッチ数列かぁ…… 純粋アルゴリズムにrustは不向きだとなぜ気づかんのかな。。 >>595
なかなかゴミみたいな様相だよ
フィボナッチ数列の第n項はメモ化しなくても線形オーダー、あるいは対数オーダーで計算できるのに、メモ化にこだわりのある人が「そのやり方はmainのループと合わせて計算量はn^2だ」とか言い出して散々 >>596
個人的にはむしろ抽象化と両立が難しいところに新しい道ができたように思えた
(過剰なメモ化なら言語関係なくやられがちな気がする) フィボナッチ数列計算するのにあそこまでする必要はないわ スレ見てないけどベクトル演算した方が速いんじゃないの知らんけど Rustのスレなんだし、アルゴリズムで計算量を改善したりする話じゃなくて、Rustのベストプラクティスについて話してほしい 数値計算はやっぱりJuliaかFORTRANが実行速度最速なのかしらん。 >>597
nが与えられた時に
『フィボナッチ数 F_n』を求めるのは単純にO(n)あるいは工夫してO(log n)で合っている
ところがその『F_n』を求める関数を「ループでn回」用いて
『フィボナッチ数列 F_0, F_1, F_2, ..., F_n』を求めると当然n倍でO(n^2)またはO(n・log n)となってしまう
それが後半の「そのやり方はmainのループと合わせて計算量はn^2だ」という話だと思うのでそれも合っている
ところが『フィボナッチ数列 F_0, F_1, F_2, ..., F_n』を生成するイテレータを作ると全体がlog(n)で済む
つまり計算量を大きく節約できる
この二つの区別を出来ているかどうかが重要なポイントかな ごめん1箇所だけ記述ミスを訂正
>>604
× ところが『フィボナッチ数列 F_0, F_1, F_2, ..., F_n』を生成するイテレータを作ると全体がlog(n)で済む
○ ところが『フィボナッチ数列 F_0, F_1, F_2, ..., F_n』を生成するイテレータを作ると全体がO(n)で済む 頭おかしくなっちゃった!
-=≡ ∩ 彡⌒ミ ∩
-=≡ .ヽ(´・ω・`) /
-=≡ ( /
-=≡ ( ⌒)
-=≡ し し' >>604
そうそう、こんな感じで論点をどんどん変えてくんだよね
フィボナッチ数列のはずがフィボナッチ数列の1~n項の計算にすり替えられちゃう 『フィボナッチ数 F_n』を求めるアルゴリズム・計算量と
『フィボナッチ数列 F_0, F_1, F_2, ..., F_n』を求めるアルゴリズム・計算量は当然異なるからね
前者は繰り返し二乗法で1個の算出がO(log n)がベストだけど
後者で前者の方法を使ったら遅くなる
後者は単純に前二つを足していけばn個の算出がO(n)で済みそれがベスト スレの流れとしては前者なのに一人だけ「数列だから初項からn項までの計算量を考えろ」とか頓珍漢なこと言ってるのよね スレ見たけど最初から全員がフィボナッチ数列を列挙させているから
>>609で言うところの後者だな
そして今日書かれた2種類のコード共に後者のイテレーター
>>610
たぶん君だけが勘違いしている可能性が高いw フィボナッチ数列自体はただの例題なのに異様な執着心見せる人が居るよね
なんかのコンプレックスこじらせてるのかな >>610
フィボナッチ数列といったら F_0, F_1, F_2, ..., F_n, ... だよ
それはともかく前者と後者でベストなアルゴリズムが異なるから前者だけの話をすることはありえないと思う
そして後者のイテレータはそのまま前者をO(n)で求めることが出来るから
どちらもO(n)で十分とするならばイテレータをプログラミングするのが自然じゃないかな 職業マは生暖かい目で見守ってるよ
初学者・学生・無職・アマチュアプログラマが必死になれるのは
自転車置き場の議論だけだからね
昼間必死に書き込んでるやろ彼らは フィボナッチってO(1)では?(ビネ並感)
流れはよくわからないが、とりあえず本スレは盛り上がっているようで何よりだね 各項のオーダーはO(1)可能だが複素数(行列)でムダに計算量多いだろw
結局一覧を列挙するなら足し算していくのが一番速い >>616
複素数じゃないよ、実数の範囲で計算できるよ Qitaベンチマークで、フィボナッチとかドヤァってるドアホ見るけど、片方の言語がoverflowチェックなどが入ってる演算を
使ってるのに、もう片方はチェックが入らない言語を使って比較してることがよくある。とんでもねえアホ
さらにいうなら最適化レベルも、ループアンロールをデフォルトで勝手に行う言語と、明示しない限り行わない言語で
比較してたりメチャクチャなアホ。お前の推しの言語がチェック付き演算行ったら、お前の推しじゃない言語と変わらんからな 標準的なコンパイル方法・プログラムの書き方をした場合の比較になっているのなら意味はあるのでは 確かにCheckedAddとかで書いてるQita記事のフィボナッチベンチなんて見たこと無いね、逆に言うとそれしか意味がない。ベンチとは名ばかりのフワッとした自己満足オナニーだ、100mハードルと100m走くらべてるようなもんさ >>619
Rust本スレのフィボナッチはoverflowチェック入っているぜ
https://mevius.5ch.net/test/read.cgi/tech/1652347700/181
>>622
それはその個人の問題点であってプログラミング言語の問題ではない 顔真っ赤でコピペして来てるw
書いたどうだという話じゃない、それでベンチマーク取ってみろという話だよ。この流れが分からない奴は個人の問題点w
いちいちオーバーフローがセーフな演算をchecked_addなんて冗長な書き方しか出来ないのだから、言語の問題でしょう?
標準的なコンパイル方法・プログラムの書き方をした場合、危険でズルなんだからw フィボナッチが居ついちまったじゃないかよ。
お前ら責任取ってフィボナッチの話題禁止な。 フィボナッチ呼ばわりはフィボナッチさんへの風評被害になるからやめな >>625
口だけ番長定期
これだから世界から糞バカ中世ジャップランド土人とか呼ばれるんだよ >>624
それはあまりにも無知な発言
RustではC/C++やCPUでの同じ動作となっているにすぎない
例えばC/C++では (正確には未定義だが通常動作)
int main() {
char x = 127;
x = x + 1;
printf("%d\n", x); // 出力結果: -128
}
Rustでは (普通にrelease modeの場合)
fn main() {
let mut x: i8 = 127;
x = x + 1;
println!("{x}"); // 出力結果: -128
}
ちなみにdebug modeではpanicで知らせる
release modeでもコンパイラに指定でpanicで知らせることも可能 >>629に加えてRustでは
let n: i8 = 126;
の時、
println!("{:?}", n.wrapping_add(1)); // 出力結果: 127 // 溢れていないならその値
println!("{:?}", n.wrapping_add(2)); // 出力結果: -128 // 溢れたらラッピング(一周して)その値
println!("{:?}", n.overflowing_add(1)); // 出力結果: (127, false) // 溢れていないならばオーバフローフラグfalseが返る
println!("{:?}", n.overflowing_add(2)); // 出力結果: (-128, true) // 溢れたらオーバフローフラグtrueが返る
println!("{:?}", n.checked_add(1)); // 出力結果: Some(127) // 溢れていないならばOption型のSome(値)が返る
println!("{:?}", n.checked_add(2)); // 出力結果: None // 溢れたらOption型のNoneが返る
println!("{:?}", n.saturating_add(1)); // 出力結果: 127 // 溢れていないならその値
println!("{:?}", n.saturating_add(2)); // 出力結果: 127 // 溢れたらその型の上限の値
といったようにRustでは求められている状況に応じて容易に多様な対応を取ることが可能
Rustよりも用意周到なプログラミング言語があればその動作を教えて欲しい ここ2週間くらいRustスレずっとこんな調子だったんですよ
勘弁してほしい 何が用意周到なんだか。言語のことを言ってるんじゃなく、「あくまでそれでベンチマーク比較すんなよド素人」という話だけなのに、ムキになって言語機能の紹介書いちゃうオジサン
蛇足的に言語のことを言うなら、RustよりまともなのはC#でcheckedキーワードの明示による算術のオーバーフローをチェックかな?安全に足し算したいだけで毎回checked_addなんて書くのは勘弁願いたいのは本音。C#もデフォルトで安全に倒すという思想からも逸脱してるとも言えるが >>625
Rustスレでも満場一致で同じ意見だからご心配なく CPU・C・C++・C#・Rust全てにおいてオーバフロー時は一周回った結果になるってことか
じゃあそれが標準的な振る舞いなのだろう >>634
演算子オーバーロードできる言語なら a + b が Option<T> 返すような型を実装できるから言語組み込みでキーワード用意する必要もないのでは
例えばRustだとそういうライブラリもある
https://docs.rs/checked/latest/checked/ >>636
Goもそれらの言語と同じ
int8(127)に1を足すと-128となる
標準でオーバフローチェックしなくてズルい!と発狂している人はどんな言語を使っているのだろう 実装が処理速度に与える影響を論じるのなら浮動小数点数の話で語り始めるべきだったなw Pythonなどは(無限にではないが)演算で型拡張が行われるから、それらと同列でベンチマークすべきではないのは同意
Rustを愛しすぎて、顔にウンコ付いてて冗長で気持ち悪い書き方を擁護して発狂する用意周到オジサン Rustでの標準挙動は>>636や>>638により他の主要なプログラミング言語と同じ
その上で>>637など演算毎にチェックも可能
このような状況でとなおRust叩きをしている人は頭がおかしいのかそれとも Rustスレ過疎ってル訳でもないのにどこでもRustの話始めるのなんでなん? 言語は一つに統一したらええに。
言葉も英語だけなら良かったに。 Swiftってわかりにくいね
Objective-Cもクソだったし林檎嫌いだわ それでも Swift >>> 越えられない壁 >>> Go、つまり 林檎 >>>>>> Google >>645
> Objective-Cもクソ
具体的にはなにがどうクソなの? まずxcodeが糞
糞というか狂気
犯罪と言っても過言でないと思う 1 + 1 = 2 レベルの内容すら理解できんとかガイジ?ホイ卒? Swiftやってると某こんスレにいるアホ言語初心者のような参照カウントの悪辣性に気付くんだわ。その言語の機能解説ずーとしてるバカたち
1つでもスマートで無いと言えば「自分たちが攻撃された」と思い込み、べたコード貼り付けて得意満面に機能解説しだす >>650
1 + 1 = 2は定義上そうなっているだけなので理解できるかどうかという話じゃないんだぞ(クソリプ) 「Swiftになってよかったこと」で調べればobjective-cの駄目なところはいくらでも出てこない? Swiftは言語だけみれば結構いいけどね
エラーハンドリング機構はメジャー言語の中では一番進んでる
objective-cは名前空間がなくて衝突回避のためにどうしても長い名前になるのがよくなかった
Swiftにも引き継がれてるメソッド名が引数名込みになるルールも分かりにくい
あとは動的ディスパッチなので速度が必要ならCかC++で書かないといけないのが面倒だったかな >>653
ビチグソが固形ウンコになったくらいのレベルでよかったとかいうxcodersは頭がおかしい定期 ごめん、うんこに失礼だった
うんこは体にとって大事だけど
xcodeは世界の敵、環境破壊兵器、サリン、AntiSDGs、人工地震5Gだったわ
世界平和のために早く殺すべき 匿名掲示板でうんこレスしこたま投稿するの楽しいにゃん♪ Xcodeが嫌ならVS CodeかAppCode使えば良くね?何が問題なの? kotlinのチュートリアル的なのみたらif式は変数に代入してコールできるとかあったけどいつ実行されるの?コールしたとき?それとも代入された変数には既にif式の実行結果が入ってる? ・フリーエンジニアが年間3,600万円の売上を上げた方法を解説する
・26歳で独立して月収150万になった 元引きこもりエンジニアの物語
・ブラック企業から退職し、独立後11ヶ月で“月収300万円超え”になるまでの軌跡を
デザイナー社長船越良太に聞いてみた!
・ITフリーランスで月額単価150万円!万が一の就業不能に備える無料の保険もある「クラウドテック」
・フリーランス時代に月収4万円→最高340万円を達成した船越さんに、「お金」との向き合い方を聞いてみる
・フリーランスSEってどれくらい稼げるの?月単価160万円の案件を扱う定番エージェント
・フリーランスの仕事や職業の種類って何があるの?独立5年目で月収200万の僕が詳しく解説 >>668
君は年収300でRustで組み込みでもしてるのが実力だからねw >>671
こういうの鵜呑みにしちゃうんだ
変な壺とか買ってそう >>663
このようにマジキモRust信者が24時間張り付いて、他言語の悪口を言うスレです (自演して)クソクソ言っとけば悪口になると思ってそう >>671
高収入になるほどRustを好む傾向がはっきりデータに出ているな
この状況でRustを叩いてる連中はどういう人たちなのだろう? あからさまにRustを叩いている人はごく一部を除いていない
ほとんどはRust信者を生暖かい目で見ているという立ち位置 >>678
叩きもなにも、もはや誰も言語仕様の話はしていない。汚物連呼程度の煽りならスルーするのが賢明だ Rustは素晴らしい言語ではあるが
頭が悪い側の一部のプログラマーが理解できない可能性ないのか? >>683
そう考えるRust狂信者は多そうだな。
Haskellの二の舞だわ。 むしろ駄目プログラマーを上手く排除できるからありがたい
理想的な社会になる 駄目プログラムがRustに置き換わるだけで何の解決にもなっていないのでは? 一番排除できてありがたいのは、癖のあるC++プログラマーw 例えば駄目プログラムの典型として
「データ構造スパゲティ」
GC言語だとそれでも動いてしまうがメンテしにくい、バグ入り込みやすい、デバッグしにくいなど、当然問題ありまくり
C/C++だと解放忘れや解放後利用や多重解放などが入り込みがちで難解になるため普通は避けるが、避けない人も出てきてはまる
Rustだとコンパイルが通らないことで、それら諸問題を避ける形になることが多い >>688
データ構造がスパゲッティでも、Rustのルールに則っていれば、動いてしまうんじゃないの?
Rustだって、設計の良し悪しまで判断できないと思うんだが。 何でもRcで囲めば簡単にスパゲッティデータ構造作れそう >>685
まぁ確かに
Ruby募集すればスクール卒が集まるし、PHP募集すれば障害者雇用枠が集まるしな
そういうこと >>692
そういうのはRuby募集するときにRustスキル必須にすればいいけど、そんなことをしたらコスト上がるだろ。
コスト以上の売上を上げられるのかね? >>693
何当たり前のこと言ってるんだ?
便所掃除に大卒雇うわけないだろ?
そういうこと >>687
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:
- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
>正直いって、C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。 型無し糞言語ユーザーはその場で○していいよ
公害だから >>690
Rustでデータ構造がスパゲッティだと
参照や競合を解決するためにそれ用のを使わざるを得ないから
その使われている部分が無理やりなのか必要なのかをチェックするだけで判別できる点は良いね そもそもスパゲッティデータ構造って定義はなに
フローにおけるサイクロマティック複雑度みたいな指標あるんでしたっけ >>690
0か100で判断すんな。
他の言語よりマシって言ってるんだろ。 ちょっと待て
俺たちプログラマは抽象化と常に隣り合わせになりながら生きてるはずだ 昔のレベルの低い状況だったらよかったのかもしれんが、抽象バカはこれからはプログラマーとしてはやっていけないよ。
今はテストコード書くのが当たり前だから。 まだスパゲッティデータ構造とかいう話をしているんかよ。新しいバズワードでも作りたいんかね。
一般的でない用語を使いたければ、せめて定義ぐらいはしろよ。 >>688
Rustにも進出してそれを体感するようになった
Rustはデータ競合もコンパイラがチェックするから他の言語では気付かなかったことを把握して組めるようになった >>711
実環境と同じで開発する Docker っていうんだぜ 最新の開発手法なんだが 逆に知らないのか?RUSTとか言ってるバヤイじゃないだらw >>711
受入側がテストケースを作るという話なら理解できるけど、そういう話じゃ無いんだろうなぁ。
>>713
それはOpsDevの話だから、ちょっと違う気がする。 > スパゲッティデータ構造
「所有権の複製」と同じ独善的で哀れな響きを感じる データと環境の区別がつかないやつとか
Dockerを最新開発手法だと思ってるやつとか
DevOps知らないやつとか
スパゲッティデータ構造wとか
ここは底辺の巣窟だな 底辺というか単にアマチュアと思う
仕事で書いてるマがあんまいないでしょここ
学生さんか無職によるエアプの応酬でしょひたすら YouTube で有名な、雑食系エンジニア・KENTA の動画
EC2はもうオワコンです
www.youtube.com/watch?v=G_ILES8fmf8
ほとんどの企業が、Docker, Kubernetes へ移行している。
自分でOS を管理してはいけない。更新などが面倒だから
だからAWS でも、Elastic Container Service(ECS)ではなく、Fargate を使えと言ってる。
他には、AWS Lambda とか
YouTube で有名な、くろかわこうへいのAWS入門書も出ている。
サロン内の数十人で書いたみたい
米国年収では最高峰のAWS Solutions Architect など、アソシエイト3冠でも狙えばよい
Dockerなら、この本が簡単。
自宅ではじめるDocker入門[改訂版]、浅居 尚、2021/4 >>718
いやEKSのワーカーノードってEC2のインフラに乗っかってるやん
何言ってんだコイツ 普通の荒らしならNGでも良いけど、これは広告黙認になっちゃう… ECS(Elastic Container Service)・EKS(Elastic Kubernetes Service) については、
EC2・Fargate の2種類のデータプレーンがある
ECS on EC2・ECS on Fargate
EKS on EC2・EKS on Fargate >>722
さすがです
些末な言語でケンカしてる土方PGとはレイヤーも知識の深さも違いますね・・・ それだけ昔も今もタイトルの読めない人が蔓延ってることだよ。 次も脈絡なくdockerとか言い出されたらちゃんと無視しようね なんかあの動画原稿読んでる感が強いんだけどゴーストライターが原稿書いてるなんて事ないよな
自分の書いた原稿ならそんなに棒読みにならんとは思うんだけど やーいおまえらの年収、ケンタ氏の月収レベルw
くやしくないんか?w スクラッチのPHP並にWEB開発が楽な次世代言語が欲しいんですよ
多分Rustだろうけど 某スレで気持ち悪いオナニーコード書いて一生懸命しょーもないフィボナッチの話してるふりしながらダメ人間批判のアホどもへ
┏━━━━━━━┓
┃// Λ_Λ ┃
┃/ <`Д´>つ┃
∧_∧m9 ノ ┃
< >し―J //┃ ダメ人間!
( O つ // ┃
し―J ━━━━━┛
技術上の優劣は、人格や感情的表現とは一致しない。 > TypeScriptはJavaScriptの改良版と見なされることもありますが、実際はそうではない。
> 他の言語と同じように欠陥があります、最も重要なものの1つは、コンパイル時間が遅いことです。
> 小さなプロジェクトでは、純粋なJavaScriptからTypeScriptに切り替えるときにコンパイル時間が大幅に増加することはないかもしれませんが、複雑な、例えばReactのような大規模なプロジェクトでは顕著になります。
> ランタイムのサイズが大きいことを考えると、DenoがTypeScriptを止めるのも当然のことです。
>
> 開発中の型チェックは、コンパイル時にコストがかかります。
ようするにTypeScriptは巨大プロジェクトに向いてないのか
Microsoftは巨大プロジェクトのノウハウなんて膨大に持ってるだろ、なんとかしろよ・・・ 時間掛かるから型チェックやめまーす
ってじゃあそのチェック何で代替すんねん
指さしヨシッでもすんのか?
バカじゃねーの テスト書くから必要ないって事だろ
文盲か(何故か変換できない)? wasmにコンパイルされる専用言語が待たれるという説 TSにはインクリメンタルビルドの仕組みがなくてファイル変更のたび毎回フルビルドが必要なの? >>748
制約を明示したり強制したりするのにリーズナブルだから型が使われているんだと思うが
何で代替しようとしているの? >>749
型は制約じゃないぞ
階層理論の産物さ
制約とはtrait systemのことさ >>742
コンパイル時間でGoに勝てる言語ってある? >>752
出来上がったバイナリ(deno本体)の実効速度の話ね >>745
例えばある関数がnumberだけ返すことをテストで網羅できんの? 正直言ってD言語とかの存在価値がわからないんだが使っている人いるの? >>753
何言ってんだこいつ
Denoはコンパイル時間って言ってるんだが >>758
Go→RustもTS→JS
どっちも一貫してDeno自体の実行速度を最優先してるわけよ Denoのjsってそんなに大規模か?
VSCodeなんかに比べたら全然大した量じゃないように見えるが
ビルドパイプラインがヘボいんじゃね >>761
その時間ってもろホットリロードのタイムラグなわけじゃん Rustのようにかなり強力にコンパイル時エラーでほとんどの問題を排除してくれる堅さとは異なり
TypeScriptは型チェックしかしてくれず元のJavaScriptの緩さから本質的には変わっていない
本体はがっちりRustで作りあとはJavaScriptという方針は間違っていない 確かにRustのコンパイルが遅いのが嫌だという意見はわかる。”C++より早いだろ?”とか”嘘つき!Rust速い!”とかコメントしなくてあ、結構です
仕組み上トレイトの組み合わせで遅くなるのはわかるんだが、もう少しどうにかならんかの? >>765
学歴コンプのある人はすーぐ学歴の問題にする >>768
ハーバードでMBA持ってるけどな
F欄は口くせーから喋んなゴミ プログラミングにも理解があって英語ぺらっぺらな海外トップ学歴の経営人材なのに
日本語の匿名掲示板という狭い世界で推し言語の擁護にムキになってるとはご乱心だな Javascriptに対するTypescriptってCに対するC++みたいなもんだろ?
その気になればある程度まともな型システムは使うことができる程度 結局地がjsな以上互換性を保ちながら完全に型で覆うのは難しいよねって
まぁPurescriptみたいになってもらっても困るんだが…… JVMバイトコードに対するScalaみたいなもん
Java書くより罠が多いけど圧倒的に便利
バイトコードを直接書く阿呆はいない
こんな感じ さすがにそこまでじゃない
JSをそれなりの規模で使いたければTS使った方が楽なのは確か denoてどのくらいnodeからの移行が進んでるんだろ? serialportとかちゃんと使えるならラズパイとかで使ってみたいな >>778
進まないから今現在必死に最適化してるんだろう 少なくともそのQiitaには、Denoの実行速度が遅いからJavaScriptに移行した、とまでは書いてないと思うんだけど、なんか誤読してる人多い?
Denoの実行速度が遅いからじゃなくて、Deno自体のビルド速度が遅くてDenoを開発する人にとって辛いから移行したんでしょ? いやそこ誤読してる文盲はおらんやろ・・・おらんやら? typescriptのコンパイラはtypescriptで書かれてJavascriptにして実行されてるから遅いんだろう
言語としてはセルフコンパイルしたいし、いろんな環境で動かすためでもあるし
でもrustとかで書いてもいいのでは マシン語にしてるわけでもないし、処理としてはコンパイラとしては軽い方だから
rustにしたら爆速になるのでは Kotlinとか確か開発者がロシアじゃなかったっけ?もうオープンソースだから米国的にはOKなの? いち早くロシアの侵攻を批難する声明を出したから許されてるんだろう >>786
いち早く出してねーよ
ロシア政府なみの嘘つくな
最初のツイートはロシアのプロパガンダと同じ巧妙な内容で反感買いまくってから追加で声明出したんだろ JetBrainsのサンクトペテルブルクのオフィスとブラハのオフィス(本社)の写真みたけどすげぇ格差だったわ
ああいうの見ると建前上の本社を東京に置いてる中華企業と体質が同じに感じてもう一つ信用できない tsの変換や型チェック処理する機能はgoやrustで書き直すプロジェクト進行中だから
そこは欠点じゃないよね PHP+味付け程度にJSでシステム作ってる化石野郎でも応用効く言語教えやがれください PHPに勝ったところで次世代PHPにしかならないのに? PHPってマジで話聞かなくなったよな
使ってるのって2010年代の旧システム? Goにオプショナル型とスプレッド構文とmap,reduce,filterのコネクション系操作が入ったら最高なんだけど
Go 2だとかで機能増やしてくれないかな Typescriptの糞なところ
標準ライブラリがゴミ、ゆえに依存が爆発的に増える
巨大node_modules、プロジェクトごとに作られるのが最高に糞
commonjsやらesmodulesやら統一されていないモジュール形式
prettierやらtsconfigやら大量の面倒な設定
サードパーティーのライブラリに向かってコードジャンプしても型定義ファイルに飛ぶせいでコードが読めない、ゆえにGithubを見に行く必要がある
例外の型定義がないので静的検査ができない、どこでエラーをどうハンドリングするべきかの判断が全くつかない、ゆえに全体をtry catchで囲むことになる
この辺がすべてGoでは問題ないから、あとは少し機能増やしてくれたら文句ないんだよなー GoのMap糞過ぎて全く読めない
JSONをそのまま使えっておまけに型までつくTSさいつよってことなんよ 構造体作ってマッピングするのじゃ何がダメなの?必要なのだけ定義すればいいんだが?
Typescriptだと型ガードしっかり書かないとただのなんちゃって状態になる雑魚 >>797
>サードパーティーのライブラリに向かってコードジャンプしても型定義ファイルに飛ぶせいでコードが読めない、ゆえにGithubを見に行く必要がある
「Atom」を開発終了に追いやった「Visual Studio Code」、月例更新でさらに強力に
https://forest.watch.impress.co.jp/docs/news/1416263.html
TypeScript開発では「TypeScript 4.7」が導入されたほか、待望の[ソース定義への移動]がサポートされた。100%の確度ではないが、型定義ファイル(*.d.ts)ではなく、JavaScriptによる実装部分へ直接ジャンプできる。
https://twitter.com/mattbierner/status/1517182624917340162
https://twitter.com/5chan_nel (5ch newer account) >>800
おーこんなのあったんだ、ありがとー
適当に試してみたけどできないのも結構あるね 標準ライブラリ大きいのと小さいのどっちが良いのかね 大きくて、APIが安定していて、ゴミが少ないやつが良い
スレタイの中だとGoだろうな goはpackageの命名が糞杉
_すら許さないからどいつもこいつも呪文みたいになって可読性最悪 Effective Goでは、パッケージ名は1単語にしよう、って書かれてるけど、アンダースコアや大文字小文字が使えないわけではないよ
どうせ1単語とかいう命名規約はあまり守られてないだろうし、つらいならそのへんの規約も破っちゃえば? いまだにgenrandom, gen_raondom, genRandom, GenRandomのどれがいいかわからん
PythonやってるとgenrandomだがJavaScriptもやるからgenRandomも使う
GoもやるとなったらGenRandomまで使わんといかん
いったいどれがいいんだ?
誰か俺に教えてくれ CSSならlong-name-propertyだし、JSONならLong_Name_Property、SQLならLONG_NAME_PROPERTYまたは
long_name_property、JSなど言語ならlongNamePropery、でも定数ならLONG_NAME_PROPERTY、CSVなどなら
Long Name Propertyだ。
そして、JavaやC#、C/C++、PythonやGoでもRustでも命名規則(多くは悪魔でも推奨)のようなものがあり、歴史的な経緯と
作者の今日子な意思、プログラミングのしずらさ、あるいはシヤスサ、あるいはコードレビューマウントのために脈々と受け継がれる。
つまり、人類はいまだに命名の正解を得ていない・・・
モジュール snake_case
型 CamelCase
トレイト CamelCase
Enumのバリアント CamelCase
関数 snake_case 言語内で閉じるなら慣習に従うだけだけど言語またがる時は迷うよね 標準ライブラリは名前が綺麗なのに、自分で命名しようとすると難しくて悲しい そうでもないぞ
RustのThe Bookに出てくる乱数のほぼ標準ライブラリは非常に名前が汚い
馬鹿が考えたような名前と構造 >>810
なおGoはlongnameproperty
ガイジか? >>815
Goは後発の分際であの体たらく
どんな頭弱が作ったのか顔が見てみてーわ Goのstrconv::atoi()って
悲しくなるわ >>804
_ "github.com/mattn/go-sqlite3"
>>806
だね、触ったこともない人が騒いでるだけ。とんでもねえアホ >>818
std::num::strconv::float_to_str_bytes_common
(´;ω;`)w golang入門したころにファイルの読み書きや文字の扱いのライブラリを見て愕然としたな
こういう世界がまだあるんだなって >>819
golintでエラーだぞ
おまえこそエアプだろカス
PHPでも書いてろ goの作者の一人は有名人過ぎるけどもう後進に道を譲れよよ思う >>821
file, err := os.OpenFile("foo.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0777)
これがキレイだとは決して思わんが....
let mut file = File::options().read(true).write(true).open("foo.txt")?;
これもどうかと思うぞ?何故、直感的ではないoptionsでopenに繋げるチェーンなのか..確かにオプションの設定はpanicが起こらないから
言語的な理由(言い訳)は分かる。でもRustってオプション扱いを第二引数にしない思想があるんだろうか...
>>822
デニス・リッチーとかC言語の作者とかだからC言語のライブラリと似た名前になるはある意味当たり前だよなあ >>825
Rustの標準ライブラリが汚い理由はオーバーロードがない、デフォルト引数がないから デニス・リッチーが直接に関わったという話は聞いたことないけど、ケン・トンプソンと勘違いしているのだろうか
親しい人物たちではある >>822
有名と有能は違うぞ
どこぞの通貨危機衰退先進国のゲリ首相は有名だが有能か? >>829
画像あるから普通に顔見てみたいなら見ればいいでちゅよ? >>829
有名人だから顔なんてネットに溢れてるんだからとっとと見て好きなだけ罵倒してきなよ Goのモジュールシステムシンプルでわかりやすいと思うけどな
フォルダでパッケージ表すだけだし
名前で困るってのがよくわからないけど必要以上に作ってるんじゃないの?
Rustのほうが複雑で意味不明だと思うんだが >>825
メソッドチェーンでオプション書くの大嫌い
単なるデータは普通にデータとして書かせてくれ >>825
君その話前にもRustスレでしてなかった? ケン・トンプソンなんかおまえ
この業界に居たらまさに神様みたいな存在で
それより上がおらんくらいのハッカーなんだから
こんなクソスレで軽々しく名前出すのすら憚られるやろフツーに > ile, err := os.OpenFile( os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0777)
> let mut file = File::options().read(true).write(true).open("foo.txt")?;
File.open('foo.txt', 'w'){|f| ... }
やっぱrubyがスッキリやね >>837
The 老害やな
長いものに巻かれろ、年長者は無条件に敬え、右に倣え、出る杭は打て、死なば諸共
これが衰退先進国糞バカ中世ジャップランド土人村の末路 Rustは通常の言語仕様で欠落してる部分がある
それをマクロで補っている >>826
デフォルト引数やキーワード引数が欲しいのは分かるけどオーバーロードが欲しいのはなぜ? デフォルト引数が必要だと思うならそれはもう関数オーバーロードが必要だとおもっていることと同義だろ >>825
C:f= open(out, O_WRONLY|O_CREAT|O_TRUNC, 0777);
D:auto to = File("output.txt", "wb");
Erlang:{ok, Contents} = file:read_file( "input.txt" ),
Fortran(2003):open(in, file="input.txt", status="old", action="read", access="stream", iostat=err)
Basic(Free Basic/VB):Open "input.txt" For Input As #1
Nim:var f = open "output.txt", fmWrite
Objective-C:NSData *data = [NSData dataWithContentsOfFile:@"input.txt"];
Perl:open my $fh_in, '<', 'input.txt' or die "$!";
Python:infile = open('input.txt', 'r')
Tcl:set infile [open "input.txt" r]
Rustは異質、ド変態はFortranとObjective-C。Swiftは知らん >>848
こう見るとPythonが一番美しいな
例外あるからエラー処理省略できるし
これが良いかどうかはまた別の話として 一般的にデータを初期化する際にいくつもの数のオプション値指定が存在するものが多い
デフォルト引数にしても1つ目と2つ目はデフォルト値でいいけど3つ目は指定したいなど歯抜けでわかりにくくなる
そこで一般的にその問題を解決するオプション指定方法としてビルダー方式がある
ビルダー方式では指定したいオプション値のみをビルダーに対してオプション指定メソッド(の必要ならチェーン)で指定していくものである
あるオプション指定は同時に2つのデータを与えなければならない場合でもこのビルダー方式ではメソッド引数2個で矛盾なくシンプルに表せる
さらに型チェックの厳しい言語ともこのビルダー方式は相性が良く各オプション指定メソッド別に曖昧なく厳格に型宣言できる
ちなみにRustではこのビルダー方式の有用性&利便性が広まり後からこのビルダー方式に移行したものもあるほどである >>849
Rustは例外機構がないからもっとエラー処理がシンプル
「?」一文字付加するだけで(必要ならエラー自動変換しつつ)上位関数にエラー処理委任できる
そのため例外機構がなくても記述がシンプルかつ同様のことが出来るだけでなくエラー処理忘れなどもコンパイル時に指摘してくれて安全 こんだけ色々な言語が乱立するってコンピュータの世界はバベルの塔だわ twitterの「スタバでMacを開くエンジニア」って奴ほんと嫌い
qiitaの記事も大したこと書いていないわりに結構な頻度でバズってて流れて来るから目障りだわ
技術力ないから逆にわかってませんアピールを武器にしていっている印象受けるんだがエンジニア畑にああいうネタ系の自虐するノリほんまいらねえよ
エンジニア畑でバズるの狙うなら純粋に技術力の高さで競っていけよって思う その大したことない記事に助けられてるからバカにされてるんだろアスペw コピペしてすぐ使えるコードが出ている
Qiita記事は役に立つよ
具体的な手順が書いてない記事はゴミ qiitaもワイもアカウント持ってて投稿したりしてるぐらいだから別に否定しているわけではないんだが
qiitaがクソだと言っている分けではなくてただこいつがqiitaに載せている記事すべてが糞だっていう意味を言っている
気になるんなら見とけよ内容もtwitter上を跋扈するいわゆる情報商材系サイトのそれに近くて技術的な要素を一切含んでいない
https://qiita.com/SMAC ここはお前の日記帳かよ
というか「スタバでMacを開くエンジニア」って固有名詞かよ >>862
Twitter一生懸命見て彼の成長に嫉妬してる時点で、君の”負け”やで >>864
「エンジニア1年生必見おすすめ入門書!」「【20XY年度最新】無料プログラミング学習サービス」「基本情報技術者試験のための戦略的方法」みたいなしょうもない記事しか書いていない奴のどこに技術的成長を感じればいいのか疑問なんやけど
お前はまさかこういった記事を見て勉強してんのか?(笑)
お前が勝ち負け判断すんの?(笑)
少なくともSNSで頻繁に目障りな投稿をしている人が他の媒体でどのような活動をしているのか確認する行為自体を一生懸命にならないとするの達成できない時点でお前がこの一連の流れのどんな登場人物よりも劣ってること明白じゃんwwwwwwwww
きっと自分の電話にかかってきた電話番号を迷惑電話だったのかどうかネットで調べて確認すると言った最低限な行為すらも日常生活の中でするのには精一杯になってるんやろなwこの低脳(笑)wwwwwwwwwww デジタル人材の副業・複業採用決定数をプログラミング言語・スキル別で分析
~副業・複業人材の登録が、前年度比3倍に。 調査レポートを公開~
https://prtimes.jp/main/html/rd/p/000000040.000053307.html >>868
レスバ判定員です
言い返せなくなってる時点でお前の負けやでwwwwww >>872
Qiitaの若者の成長に難癖付けて2ch陰口で悦に浸ってるオッサンとか
キモすぎにもほどがあるでんで
もうちょっと客観的に自分を見つめ直した方がええで >>825
rustが汚く感じるのはビルダーパターンが気持ち悪いのか、ファイルのopenにビルダーパターン使うのが気持ち悪いのか、どちら? >>878
どちらでもない
optionをopenするのが気持ち悪いだけ let mut stream = FileStream::builder().read(true).write(true).build("foo.txt")?;
これならいいのか Rustにはなんでデフォルト引数ないの?
Kotlinみたいに名前付き引数もデフォルト引数も欲しい でもパス名が最後に来るの確かに思考の順序と一致しなくてウザいな
どのファイルを開くかより先にモードを考えたことなんかなかった >>878
ソフトエンジニアはビルダーパターンは気持ちよすぎになるが
一方、ドカタは気持ち悪いになるってだけだろ
言語としては主ターゲットユーザーがソフトエンジニアかドカタって重要だからな
Rustはソフトエンジニアがターゲットで、そうじゃない奴はRustじゃなくドカタ用言語使え
ってこと。 そうでなくて最後にopen()でビルダーが終了して実行そしてエラーが返る
あと横に書くのではなく縦に書くほうが見やすいので推奨される
ビルダー方式にしているのは複雑になりがちな
様々なオプション指定をわかりやすくするため
例えば
書き込み用を新規作成だが既にファイルが存在しているならばエラーとなるオープンならば
let file = File::options()
.create_new(true)
.write(true)
.open("output.txt")?;
Windowsで全てクローズされたら自動削除される書き込みファイルを作成ならば
use std::os::windows::fs::OpenOptionsExt;
let file = File::options()
.create(true)
.write(true)
.custom_flags(FILE_FLAG_DELETE_ON_CLOSE)
.open("tmp.txt")?;
Unix(Linux)でシンボリックファイルならFOLLOWしない(つまりオープン失敗となる)読み込みオープンならば
use std::os::unix::fs::OpenOptionsExt
let file = File::options()
.read(true)
.custom_flags(O_NOFOLLOW)
.open("input.txt")?;
それぞれ他のプログラミング言語で書くとどうなるかを考えてみよう あと余談だが
>>884のO_NOFOLLOW指定はUNIXのC言語プログラマーなら馴染みでも一般的にわかりくいという時
Rustではメソッド拡張が可能なことから
以下のように no_follow_symbolic_link() とわかりやすい指定ができるようにすることも可能
let file = File::options()
.read(true)
.no_follow_symbolic_link()
.open("input.txt")?;
この実現方法はRustの一般的なメソッド拡張と同じで
拡張用のトレイトを用意してその実装を与えればよい
trait OpenOptionsUnixCustomExt {
fn no_follow_symbolic_link(&mut self) -> &mut Self;
}
impl OpenOptionsUnixCustomExt for std::fs::OpenOptions {
fn no_follow_symbolic_link(&mut self) -> &mut Self {
self.custom_flags(O_NOFOLLOW)
}
}
もちろんこの拡張用traitをuseした時のみ有効となる
つまり既にある仕様を壊さずに拡張が可能
いずれにせよビルダー方式でのメソッドチェーン指定は
全てを引数で複雑もしくは長々と指定するよりもよっぽど好ましい方式 ビルダーパターンはオプション引数のある言語でも簡単に実現できるんだが
逆は一般的にハードルが高い(Rustならproc macroとかになる)
ビルダーとオプション引数は本来はユースケースによって使い分けるものなので
使い分けられないようならその言語は機能的に劣っているということ Rustは代数的データ型のOption型があるから特に困らないんじゃない?
むしろOption型がないプログラミング言語はundefinedやnullやnilなどの排除すべき危険なものが存在していて安全じゃない 欲しいのはオプション引数というかキーワード引数?
Noneなりnullなりが連続する関数呼び出しはつらいよね デフォルト引数のことか
C、Java、Go、Rust、Haskell、…とサポートしていないプログラミング言語は多いけど
それらの言語が劣っている欠陥言語と言われることはないよ デフォルト引数はあったほうがいい
究極的にはPythonみたいに書けるC言語が欲しい
それを目指したのがおそらくGoだと思うが >>891
あのゴミみたいなsyntaxで目指してるとか鼻で笑うで >>891
Goには当然デフォルト引数は無い
あと、GoはPythonとは真逆の思想 RustもGoも標準ライブラリが良くない
気持ち悪い >>889
欠陥言語なんてものはそもそもほとんどない
デフォルト引数は新言語に人気が出てくると確実に要望が出てくる
いつかは実装される
実装できる余地がある言語はいいけど言語仕様上実装不可な場合はどうしようもない >>889
ある言語が他の言語に比べて劣っている部分があるということと
その言語が欠陥言語かどうかは全く別の問題
もう少し論理的に物事を考えよう Rsutは意味不明なんだよな
struct初期化で名前指定して初期値入れてるのにデフォルト実装や名前付き引数がない
不思議 Rustはソースコード上の情報多くしたい感じだからデフォルト引数は入らなさそう
ソースコードの見た目をすっきりさせたいなら素直にPythonとか使うのがいいかと デフォルト引数もなく関数オーバーロードがないから謎の関数がぼこぼこ増えるんだろうな
○○
○○_with_XX
○○_by_YY
みたいに 言語を作った人間がデフォルト引数絶対に入れない!って言ってても
その人が一線から引いて他の開発メンバーに任されたら速攻で入る Rustはすでに作った人は居なくなってるし
仕様決めるのも多数決とかじゃなく意見が割れるようなのは入らないからな
コミュニティ全体が入れる空気にならない限り無理 Rustは複雑な引数はstructで渡しなさいという考えだから
その方法の一つがビルダーパターンだけど、structとDefaultを組み合わせたほうが個人的には好き ..Default::default() にシンタックスシュガーあって短く書ければいいんだけど 引数爆発の解決のアプローチはいろいろあるわな
だがキーワード引数があったほうが爆発したときに楽なんだがな
GoやRust的には構造体使えってことか >>899
デフォルトは作ればあるよ
オプション引数の代替策の一つとしても使える >>903 >>902
Rustでは不可欠な機能が着実に次々と実現されていっており
それら全て状況も議論も全てオープンに行われている
互換性、安全性、関連する影響がないことなど全て満たす必要があるためどの案件も時間がかかるが信頼できて安心できる
関数の引数の諸々の件も長くオープンに議論され続けているが様々な諸問題がでておりそれらを解決しうる仕様がまだ出来上がらずかなり先になるだろう
そして色々な代替手段があるためこれを必須として現実に困っている人がいない問題でもある >>903
なんや、既に崩壊してる言語なのか
ざまあねえな >>912
創始者が抜けたのはバーンアウトしたかららしい >>912
修復不可能なデザインバグを見つけてしまったから逃げたんだろう Mozilla関係の組織っておんも歩けないような人が多いよね
まともな人から辞めていくんだろうか 燃え尽きて去ったRustの創造者はいまはどこで何をしているんだ?
まさか、googleでGoしているってことないよな >>910
Rustコミュニティがオープンだとは全然思えない。async-stdとtokioなんか正にそう >>917
やっぱゴミはゴミに惹かれるんやね
XウンコードとかいうゴミゴミのゴミIDEバンドルのゴミに惹かれるなんて
やっぱゴミ >>910
apple信者の人たちと大して変わらんなw
androidにしかない機能があっても必要ない、問題ない、困ってないと言い放つが実装されると大騒ぎして喜び
誇らしげに自慢する
何週遅れてんだよと 全て状況も議論も全てオープンに行われていればまあこんな事になるわけがないよなww
「The entire moderation team resigns, effective immediately. This resignation is
done in protest of the Core Team placing themselves unaccountable to anyone but
themselves.」
https://github.com/rust-lang/team/pull/671 >>921
気持ち悪いRust信者はこの板に1人いるだけだぞ
通称複オジこと、はちみつオジ >>917
おいおい、ほんとなのか。
優秀な奴だろうからどっかが雇っているだろうと思っていたが。
appleならMozillaより激好待遇だろうな >>923
Qiitaで若者に嫉妬したりエアプRust信者したり大変だな コミュニティの意見に向き合うのは難しい問題で、どの言語でも同じ
Rust Foundationとか、Kotlin Foundationとか、コミュニティ向けに組織体制をちゃんとする努力があるだけマシだといつも思う そして批判の声が見当たらないコミュニティは逆に危険
ユーザーは意見を述べるモチベーションがなかったり、意見を聞き届ける環境すら整えられていない
言い換えるとカルト。 >>926
なんちゃらファウンデーションなんてそれはコミュニティに向き合うとか組織体制がちゃんとする努力をしているとは違う。後ろにスポンサーがいるかどうかが違うだけ
得てしてプラス面もあるが多くは大企業の意見がよく通る >>929
どの言語のコミュニティが理想だと思う? ジャップは10年遅れでPython受け入れだしたからな
Juliaも10年は遅れるよ
バカなジャップだから Julia流行の隆盛とともに死すナムー(-人-)
今はJuliaとか言って、もう少し経ったらの言語マンセーするくせにさ 10年後にジャップランド土人村が残ってるかも疑わしい >>934ってどこの国の人なんやろな
なんかウンコのにおいしてるけどw 今の日本の体たらくはジャップランド土人村と呼ぶにふさわしいよ
未だに「日本サイコー!」とか言ってる奴らの方がどうかしてる 声の大きいクソユーザーのせいで言語がどんどん変わっていくC# >>938
具体的にはどういうとこ?
俺は最初からC#ダサいと思ってたけど >>939
具体的にダサいところあげてくれ
ついでにダサくない言語も教えてくれ 単純にMicrosoftのソフトウェア開発能力がめちゃくちゃ高いからどんどん変わっていけてるだけだぞ
昔から巨大ソフトウェアをずっとたくさん作り続けてるだけあるよ
他の言語だってリソースさえあればあれもこれもやりたい、って言ってるのたくさんあるじゃん 言語仕様が使いもしないパターンマッチよりにどんどん変わってる
学習コストが上がるだけなのに
if (x is { Name.Length: 1 })
{
Console.WriteLine("single-char Name");
} x is { Name.Length: 1 }
これが何を指しているか直観的にわかるように思えて実際は違っている MicrosoftはTeamsのアップデートしすぎ、ほぼ毎日バージョンが変わる。マジで勘弁してほしい C#は場当たり的に糖衣構文追加するもんだから
BNFがとんでもない長さになってるな
ここまで言語仕様汚くなった言語他に無いんじゃね? さすがに C++ Perl Ruby には敵わないだろ >>944
具体的に他の言語で書くとどういう記述に相当するもの? >>951
シンプルでなくイージー
型無し糞言語代表だろ 他の言語の定型文をそのまま日本語に持ってくるからそうなる
富士山は日本で一番高い山の一つですは誤訳 Rubyはスクリプト言語にしてはPythonに比べ型は厳格だが、なんにでもなれるメソッドなかったっけ? シェルスクリプトにも変数の型はあるしアセンブリもレジストリの種類は意識しないといけない 型なし言語って、誤用でしか用例を聞いた覚えがないけど、型なし言語とかいう用語はあるの?
文脈からして何を言いたいかはわかるんだけど 値に型がない言語のことを型なし言語、って呼ぶのは正しいの? 型無し言語じゃない
型無し糞言語だ
間違えるな痴れ者が
型無し糞言語3兄弟といえばRuby、PHP、Perl
業界の常識
未だこれ使ってる時代遅れのバカ老害どもは首吊って死んでええぞ >>961
https://ja.wikipedia.org/wiki/%E5%9E%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0#%E5%9E%8B%E3%81%AA%E3%81%97
型付けを更に厳密に定義した区分として型なし(英: untyped)という区分が存在する。
代表的な言語としてはSmalltalk[7]、BCPL、B言語、アセンブリ言語などがある。
Smalltalkでは高速化のため処理系依存で実行時に型検査することがあるものの言語的には型検査がなく、
動的型付け言語のように文字列に割り算をするといった不正な操作をしても処理系が型検査して停止する事は無い。
BCPL、B言語、アセンブリ言語などオブジェクト指向とは関係なく型を持たない言語では、
ハードウェアのワード長に依存した1種類の型のみを持つか、
言語を使う側でデータを参照するときにデータ幅や種類の解釈を決定することとなる。 >>960
bashのdeclareについては一旦忘れていただく方向でお願いします >>964
ほんまや
Brainfuckとかみたいな難解言語もだいたいuntypedかな >>963が言っている型無し言語とは、一つの変数がいろいろな型の値を束縛できるってこと? untypedは基本的にdynamically typedのこと
アカデミック用語で実務者用語ではない
実務者が型なし言語と呼ぶのはtypeless languagesのこと
現代において動的型付け言語を型なし言語と呼ぶのは明らかな間違い >>968
> untypedは基本的にdynamically typedのこと
出典がまったく示されていないか不十分です。内容に関する文献や情報源が必要です。 型付けなんてプログラマにとっては基本の基本で
おろそかにしていいものではないから
> 型無し糞言語3兄弟といえばRuby、PHP、Perl
これがいかにド素人で無教養で恥知らずな発言かは
お分かりいただけてると思う 次スレ(リニューアル)
Era 26
コンセプトは、現状の漠然とした実質未来最強言語決定戦という誰も得しない未来トレンドの断定を避けて、
次世代言語はまだ存在しない仮説を使って建設的な言語仕様の検討を促すことです。 https://mevius.5ch.net/test/read.cgi/tech/1655719441/l50
↑次スレのリンクです。もし興味があればどうぞ。
(一定数いる最強言語決定戦を続けたい層には不向きかもしれないので、
棲み分けなどに、もし良いアイデアがあればどうぞご自由になさいませ。) >>972
今どきの言語ならそんなことは起きないんじゃないかな
例えばRustの標準ライブラリには同名のreplace()という関数が10個もあるけど
(1) まず名前空間が分かれている
例えば str::replace() や Option::replace() など
(2) 次にメソッドの場合は名前空間を明示する必要がない
例えば let s = "価格: 123円"; という文字列に対してはstr::を付けずに
s.replace("価格", "値段"); // → "値段: 123円"
(3) 更にジェネリックな引数も取れる
例えば文字列""ではなく文字''も指定可能
s.replace('円', "万円"); // → "価格: 123万円",
文字判定関数を指定することも可能
s.replace(char::is_numeric, "*"); // → "価格: ***円"
このように様々な対象に対して様々な引数で用いられていても
同名のreplace()で曖昧になることもなくそれぞれを使うことができる
昔のように長い関数名を付けずに済むようになっている >>977
3つともオーバーロードやデフォルト引数はほぼ関係ない話じゃん
3つめがかろうじてオーバーロードに引っかかってはいるが論点が違う シャドーイングがOKで関数オーバーロードがNGって普通は逆じゃね? >>982
その2つがどう関係あるのか説明してくれ シャドーイング 同じ変数名で実際は完全に別物
関数オーバーロード 同じ関数名で引数が違う でも普通は同じ働き 引数の型が違うだけならジェネリクスでいいし、ジェネリクスで表現できないような
引数の違いがあるような場合はそもそも同じ関数名にすべきじゃないような気がする。
オーバーロードいらないよな。 せいぜい意味不明なワードがくっついた似たり寄ったりの関数を大量に作ってくれよ >>984
なるほどそういう意味か
イミュータブルとムーブがデフォルトだとシャドーイングNGだと命名負荷が高くなりすぎるのよ
オーバーロードやデフォルト引数/オプション引数ないとメソッドの命名負荷が高くなるのと似てる >>982
C++/Java/C#書いてる脳だとまあすんなり同意するけど
OCamlだのHaskellだの書いてる脳で読むと「お前の普通なんか知らねーよ」って感じだな >>982
効果が真逆という結論のようです
> シャドーイングは同時に存在できるのが一つだけで曖昧さがなくプログラミングにおいてプラス効果
> オーバーロードは同時に異なるものが存在できるため可読性を下げたりミスを起こす機会を生じさせてマイナス効果
確かにシャドーイングが出来ない言語では例えば
price_str = "398"
price_int = int(price_str)
とするかミスを生みやすい動的型付けで同じ変数名priceに入れるようです
シャドーイングがいかに優れているかよくわかりますね 書き込みする前に読み返したか?
ふわっふわしてるぞ Rsutは関数オーバーロードがないから
int(price_str)できない >>991
そういう時にメソッドではない不要なグローバル関数を設けるプログラミング言語は時代遅れ
もしstrに対してintに変換する関数int()を用意するならばstrのメソッドとして用意する
君には>>977を読み直すことを勧める Rustは同様に abs(x)ができない
他の言語ではmath.abs()とかにある
x.abs()と言う不思議な感じになる
-1_i32.abs()
は -1になる変な言語 >>991
Rustではintが多数あるため
let s = "98765";
let a: i32 = s.parse()?;
let b: u64 = s.parse()?;
となります
どちらも同じメソッドparse()で大丈夫です
あなたが使っている言語では多数のint毎に別々の変換用の関数があるのですか? >>993
>int(price_str)できない
>Rustは同様に abs(x)ができない
それはどっちもできるよ parseは多分ジェネリック実装されてて戻り値の推定からジェネリック型決めてるんだろ?
そっちのほうが不気味
そのparseだってどうせトレイトで実装してんだろ? >>985
ジェネリクスはまた別物だろ。
ライブラリ無いからシステムコール利用する機能を提供しようとする。
例えば socket(2)でいいわ。
第3引数なんて使うことないからと第2引数までを取るAPIとして公開、後になって第3引数必要になった(例えばSCTP利用)ってなった場合、オーバーロードできないとAPI変える必要あるじゃん。 >>996-997
それは実質fabs()と変わらない このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 64日 5時間 10分 42秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。