次世代言語26 TypeScript Swift Go Kotlin Nim

レス数が1000を超えています。これ以上書き込みはできません。
2022/06/21(火) 09:27:46.30ID:5vOFCGpG
スレタイ(順番はRedMonk準拠)以外の言語もok

※ Rustは現世代最強言語なので除外します

前スレ

次世代言語25 TypeScript Swift Go Kotlin Rust Nim
https://mevius.5ch.net/test/read.cgi/tech/1650185555/
937デフォルトの名無しさん
垢版 |
2022/08/02(火) 15:13:23.73ID:EoK+AbMq
>>936
>>1によるとRustは現世代最強言語だから比較として出てくるのは当たり前だろ
2022/08/02(火) 16:47:02.67ID:h0wFySH1
>>937
スレのルールに従えよ。
2022/08/02(火) 17:38:35.92ID:AUryLawh
> スレタイ(順番はRedMonk準拠)以外の言語もok
>
> ※ Rustは現世代最強言語なので除外します

※ Rustは現世代最強言語なので(話題にして良い言語から)除外します
※ Rustは現世代最強言語なので(スレタイから)除外します

どっち?
2022/08/02(火) 18:09:03.75ID:67ChPJTw
NimはGC言語って言われるけど、スタック上にobject(C++のstruct/class相当)をおけるし、コンパイル時にサイズが決まれば配列もスタック上における。
objectの内容が配列や親objectのメモリ上に連続して配置することも可能。
C++言語のように自由にスタック上にデータを置くことが可能。
継承使いたいときとか一つのオブジェクトを複数のreferenceから参照したいときにref objectを使うんだけどこれはヒープに確保されGCで管理される。
Nimは複数のGCを選べるんだけど、--mm:arcオプションをつけるとRustのRcのような参照カウント方式でヒープが管理される。
--mm:orcオプションを使うと循環参照があってもメモリを解放できるようにした参照カウント方式が使われる。
詳しくは
https://nim-lang.org/docs/mm.html
2022/08/02(火) 18:25:25.25ID:VFwTK1q5
>>940
スタックに置けるのは当たり前だからそこはおいといて
[1] 継承を使うだけでヒープになるのは厳しい
[2] ヒープになるだけでGCとなるのは厳しい
[3] C++とRustで参照カウンタが使われる状況になるのはもっとレアケースのみ
中途半端な立ち位置だからNimは厳しい
2022/08/02(火) 18:41:12.53ID:6yaBS9ru
>>939
Rustは現世代言語なので、(話題にして良い)次世代言語から除外します。
だろ。
943デフォルトの名無しさん
垢版 |
2022/08/02(火) 18:42:42.88ID:3Auutz71
Rustで実用的なソフトウェアを書くのは大変骨が折れる。
944デフォルトの名無しさん
垢版 |
2022/08/02(火) 18:45:25.03ID:3Auutz71
厨がウザいからRustは除外します(本音)。
2022/08/02(火) 19:45:31.74ID:Ibj6PLNd
valgrindもまともに使ったことなさげなバカが偉そうにしてるの見ると腹が立つってのはあるわな。
946デフォルトの名無しさん
垢版 |
2022/08/02(火) 19:49:07.82ID:3Auutz71
C/C++で書かれたOSの上で動作してるのに、大言壮語も甚だしいという意見もある。
2022/08/02(火) 19:56:24.89ID:KsV0Heuv
システムプログラミング(笑)に特化してるってんならとっととRust製のOS作れよな
2022/08/02(火) 20:22:23.89ID:49BZsXJW
RustでOSか。
一応 Linux は Rust で書いたソースも受け付けるようになったらしいな。ベースがCなのは変えないそうだが。
2022/08/02(火) 20:56:39.03ID:VFwTK1q5
>>945
今となってはコンパイル時に静的解決できることがほとんどだから需要ないな
実行時にMemcheckなんかやってる時点で時代遅れの敗者
2022/08/02(火) 21:03:37.39ID:67ChPJTw
>>941
ヒープ使わずに継承を使うことはできるけどOOPするときは派生オブジェクトを基底オブジェクトのポインタ経由で使うことが多いでしょ。
QtのサンプルコードでGUI関係のクラスはnewしてヒープに確保している。
https://doc.qt.io/qt-6/qtwidgets-widgets-calculator-example.html

https://nim-lang.org/docs/mm.html
に書いてあるけど参照カウントが不要な場合はコンパイラが自動的に最適化してくれる。
そのおかげでunique_ptrとshared_ptrを使いわけるようなことは考えずに済む。

参照カウンタがどれだけ必要になるかは場合によりけり。
C++やRustでRcが不要なコードならたぶんNimでもref objectを使わずにコードを書けるよ。
2022/08/02(火) 21:35:54.41ID:zaqp+NKw
NimはObjectとref Objectを区別して扱わなきゃいけない時点で既に不便。

例えばRustでもそんな区別はなく、
スタック上のデータのみで完結しているオブジェクトなのか、
ヒープ上のデータを付随するオブジェクトなのか、
プログラマーはどちらなのか意識せず区別せずとも自動的に安全にメモリ解放される。
952デフォルトの名無しさん
垢版 |
2022/08/02(火) 22:18:46.88ID:3Auutz71
CRTPでおk。
2022/08/02(火) 22:24:30.00ID:+AA3LPDF
次スレのスレタイはNim Zig Pony Carbon Gleamあたりでいいっすか?
2022/08/02(火) 22:40:59.73ID:A0k69qij
>>945
それ本気で言ってたら笑われる
Valgrind使って実行時にエラー検出と
Rustでコンパイル時にエラー検出の
現在どちらをとるべきか100%答えは出ている

RustでValgrindを使うことも稀にあるが
大半がC/C++とのFFIがらみでありC/C++が足を引っ張っている
955デフォルトの名無しさん
垢版 |
2022/08/02(火) 23:38:50.10ID:yShK5RND
>>953
ウィ
2022/08/02(火) 23:51:57.52ID:zk210DB0
>>948
だってRustってめっちゃ遅いから
2022/08/02(火) 23:58:05.26ID:zaqp+NKw
RustならCとほとんど変わらない最高速
開発効率も上がる
958デフォルトの名無しさん
垢版 |
2022/08/03(水) 07:24:58.64ID:EBW1aqTx
んなわけない。
2022/08/04(木) 06:52:08.63ID:hgV/iHpj
Rust保守できなくて他の言語に書き直す案件多すぎじゃね?
2022/08/04(木) 07:38:09.36ID:YMWE04jW
>>959
具体的には?
多すぎと言うならサクッと10件くらい上げてくれるかな
961デフォルトの名無しさん
垢版 |
2022/08/04(木) 08:27:29.63ID:czcxYRnn
貶めたいだけだから、あげられないと思う
2022/08/04(木) 09:05:31.59ID:MbWp6BMN
>>959
言語に対してアンチ活動をしているだけでも異常だが
嘘まで突き出すのは精神異常を疑う
2022/08/04(木) 09:35:45.18ID:jqJhSpad
>>960
すみません、嘘いいいました
2022/08/04(木) 09:44:49.51ID:hgV/iHpj
https://twitter.com/search?q=Rust%20%E7%A7%BB%E6%A4%8D&src=typed_query
https://twitter.com/5chan_nel (5ch newer account)
2022/08/04(木) 09:53:00.83ID:YMWE04jW
>>964
どう見てもrustからの移植よりrustへの移植の話の方が多くないか?
966デフォルトの名無しさん
垢版 |
2022/08/04(木) 10:33:52.33ID:qcYVxnZx
今まで長年色々と携わってきた一般的な話として
移植するほど価値のあるものは滅多にないのと
同じ物を長く使い続けるよりある段階で設計から作り直した方が効率が良いのと
その時は古い言語を引きずらずにRustやKotlinやSwiftなど改善された良い言語を採用した方が効率良い
2022/08/04(木) 10:54:52.94ID:GwRVgwm4
でもRustを使えばメモリは安心安全だよ
2022/08/04(木) 11:32:27.68ID:hgV/iHpj
移植と逆移植の需要が噛み合って無限の雇用を創出するわけだ
2022/08/04(木) 12:34:53.02ID:rpL8+iTc
>>965
既存コードの数が違うんだから当然だろ。
2022/08/04(木) 13:00:46.06ID:pLEfRi/j
保守できなくて書き直しで言うと JS/TypeScript 界隈が深刻なんじゃねえの?
未成熟なモジュールシステム、幅広い要件、多彩すぎる処理系、本来の目的と違う使い方をされるView層(DOM)、流行りの影響を受けやすいドメイン。初学者に人気がある。

まぁ、言語側で頑張れることも限界があるけど…。
2022/08/04(木) 13:17:32.31ID:YMWE04jW
>>969
それはそうだが
> Rust保守できなくて他の言語に書き直す案件多すぎじゃね?
って吠えてた人がいるからもっとあるのかと思ったら意外にショボくてワロタ
よくこんなものをドヤ顔で出せるもんだなw
2022/08/04(木) 20:50:36.26ID:+PIU9Mos
でもPHPの方が速いよね
2022/08/04(木) 20:54:22.20ID:9TNfUmNd
npmは反面教師としてめちゃくちゃ活躍した
後発のパッケージツールはみんな参考にしてる
2022/08/04(木) 22:46:04.19ID:RbD+Gsia
プロジェクト毎に切り替えてインストールする、

Ruby のBundler を真似て、npm/yarn が出来た
2022/08/04(木) 23:00:37.24ID:mEx9pPO3
何さらっと嘘言っているんだよw
パッケージ管理ツールなんて昔からあるのに
2022/08/05(金) 07:34:10.27ID:BZGh0CoX
Time in seconds for each data size: kjvbible.txt
x10 x100 x200 x400 Mem Comment

0.018 0.052 0.089 0.174 ***MB baseline/cat
0.036 0.089 0.147 0.260 ***MB baseline/rg foobar (ripgrep, no match)
0.032 0.091 0.159 0.290 ***MB baseline/ugrep foobar (no match)
0.058 0.457 0.889 1.789 1.1MB baseline/grep foobar (no match)
0.219 2.108 4.127 8.263 0.9MB baseline/wc -w (word count, total only)

0.154 1.271 2.551 5.079 2.0MB C (caller hash,stdin=binary-mode)
0.177 1.412 2.733 5.446 3.8MB Go (caller hash)
0.161 1.458 2.903 5.671 1.4MB C++ (caller hash,cin=binary-mode)
0.175 1.513 2.953 5.863 4.6MB Zig @github fixed
0.176 1.572 3.124 6.045 2.6MB Rust@github rust/optimized-customhashmap
0.180 1.597 3.219 6.267 3.1MB Rust@5ch res >>602
Ryzen9 5900X windows11
977976
垢版 |
2022/08/05(金) 07:37:51.09ID:BZGh0CoX
データサイズを大きくしたら結構景色が変わったよ
もともとのサイズは左端のx10ね
978976
垢版 |
2022/08/05(金) 07:44:17.90ID:BZGh0CoX
caller hashはoptimized.cと同じようにメインループでhash計算を済ませておいてhashテーブル関数に渡す用にしたもの
これ結構効果的だった
2022/08/05(金) 07:49:10.83ID:WXp5Dd4L
こちらでもGoがC++やRustよりも遅い結果しか出ないのだが
GoがC++やRustよりも速い結果になる人は何が違うのだろう?バージョン?CPU?計測方法?
GoがC++やRustより速くなるのは他でも見かけないから何らか別の理由があるはず
980976
垢版 |
2022/08/05(金) 07:50:28.70ID:BZGh0CoX
rustはよくわからないので、caller hash版は大先生にお願いしたいです

Mem:
メモリ使用量はタスクマネージャーでの表示です。cat/rg/ugrepは早すぎて見えませんでした
x10~x400で違いはなかったです
2022/08/05(金) 07:54:28.24ID:WXp5Dd4L
>>978
それは専用プログラムでない限りプログラミングでやってはいけない行為
単語を渡すだけのインタフェースになっているべきであり、その利用側はハッシュ関数が何かを知ってはいけない
さらに、そのような逸脱した最適化アルゴリズムを特定の言語にだけ適用しても、言語間の比較とならない
982デフォルトの名無しさん
垢版 |
2022/08/05(金) 07:58:44.14ID:Zs6c3yJt
次世代言語27 Nim Zig Rust Carbon
2022/08/05(金) 08:03:18.30ID:caRFuKmx
要はアルゴリズムが大事で言語の差異はスクリプト言語でもない限りどうでもいいってことだろ
もうこの話は終わりでいいよ
2022/08/05(金) 08:06:44.88ID:8m5I520h
アルゴリズムが同じならばGoが常に遅い
なので今回GoはイカサマをしたらC++/Rustより速くなったという話
2022/08/05(金) 08:12:34.92ID:caRFuKmx
Goはパラレル版もリポジトリに置いてあるけど当然そっちの方がRustより早いぞ
Rustも並列処理すれば速いんだろうけど

ということで大事なのはアルゴリズムで言語差はわりとどうでもいいね
Rustがアピールするべきなのはパフォーマンスというよりは低ランタイムコストでメモリ安全ってとこじゃないの
当然コストが高いわけでそれに見合うほどのパフォーマンスが必ずしも得られるわけではない

パフォーマンスを改善するには言語を変えて作り直すより、アルゴリズムを改善したり、並行並列処理に切り替えたりする方が効果的
2022/08/05(金) 08:15:37.58ID:brBAgkMt
その0.1秒で終わる処理ですら同じ条件ならばGoが遅いけど 
現実にはサーバーからアプリまでそれよりはるかに長い時間使われる
そしてGCが何度も起こりGoの遅さが致命的になる
2022/08/05(金) 08:17:56.43ID:m/sE4zJr
>>986
それはあなたの感想では?
GOがエスケープ解析しない根拠は?
>そしてGCが何度も起こり
2022/08/05(金) 08:18:55.11ID:caRFuKmx
次スレはワッチョイありで立ててくれ
Rust盲信者がIDころころ変えるので
2022/08/05(金) 08:25:55.99ID:H5hHfEm1
>>984
どこがイカサマ?Cと比較するために最適化しただけなのでは?
それがイカサマなら標準のハッシュが遅いからライブラリ使ってんのもイカサマだよね?
2022/08/05(金) 08:29:18.89ID:w1fJ4NWZ
元のGoブログの人を含めて全員おかしい
アルゴリズムを揃えないベンチマークは何も意味を持たない
991デフォルトの名無しさん
垢版 |
2022/08/05(金) 08:56:59.64ID:T6EdcM/7
>>982
rustはもう外せよ
2022/08/05(金) 09:25:07.37ID:caRFuKmx
そんなにRustがあらゆるプログラムでパフォーマンス、生産性が優れているなら
なんで頭のいいエンジニア達はわざわざRustを使ってDenoっていうランタイム作ってんの???

GCがあるとRust狂信者によるとWebサーバーでもクリティカルに影響が出てしまうらしいけど

なんでGCのないRustで狂信者曰くあらゆる面でゴミなGCありのDeno作ってんのよ
2022/08/05(金) 09:40:18.52ID:h+76NvX5
>>978
その通りだがその時点でこのベンチマークが現実離れした意味のないものであることを意味している
以前から指摘が出ているように、このベンチマークの実行時間のほとんどは単語カウントに費やされていて、だからこそそのハッシュ計算のオプティマイズで大きく改善される
この筋の悪いベンチマークをどうしても行なうならば、最低限アルゴリズムとテーブルサイズなど条件を揃えるべき
現状では意味のない比較となっている
2022/08/05(金) 09:43:12.76ID:/hLfNpmA
次スレ

次世代言語27 Nim Zig Pony Carbon Gleam
https://mevius.5ch.net/test/read.cgi/tech/1659660050/
2022/08/05(金) 09:45:30.76ID:oRWix6dW
>>992
CやC++を使ってなぜ様々な遅い言語のコンパイラやインタプリタを作っているのか?と同じ話ではないか
それに気付かない君の頭の悪さを嘆こう
2022/08/05(金) 09:48:57.07ID:AYAQMvzY
【次スレ】
次世代言語27 TypeScript Swift Go Kotlin Rust Nim
https://mevius.5ch.net/test/read.cgi/tech/1659655598/

【前スレ】
次世代言語25 TypeScript Swift Go Kotlin Rust Nim
https://mevius.5ch.net/test/read.cgi/tech/1650185555/
2022/08/05(金) 09:49:10.13ID:dkIhDSME
全ての証言を信じれば矛盾する
なぜかといえば自白強要や誘導尋問から生み出される証言もあるから
2022/08/05(金) 10:18:49.46ID:Zpgmgnev
>>985
>当然コストが高いわけでそれに見合うほどのパフォーマンスが必ずしも得られるわけではない
ここで言うコストとは何のこと?
2022/08/05(金) 11:53:10.74ID:GYd+Bl11
全く同じアルゴリズムで比較するべきとか言い出すならそもそもこんな複雑なタスクでベンチマークするのがおかしい
もっと簡単なタスクをいろいろ用意してそれぞれでベンチマーク比較したほうがいい
2022/08/05(金) 12:02:08.53ID:/hLfNpmA
どうすべきかなんて目的次第ですよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 45日 2時間 34分 22秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況