■ このスレッドは過去ログ倉庫に格納されています
次世代言語21 Go Nim Rust Swift Kotlin TypeScript
- 1 :デフォルトの名無しさん:2020/04/19(日) 15:06:02 ID:jAOW5aqE.net
- スレタイ以外の言語もok
前スレ
次世代言語18 Go Rust Elixir Kotlin TypeScript (実質20)
https://mevius.5ch.net/test/read.cgi/tech/1569866283/
- 952 :デフォルトの名無しさん:2021/08/21(土) 15:24:53.18 ID:KwPigd31.net
- >>949
CやC++で書くとメモリ安全性が必ずしも保証出来ないために様々なセキュリティの穴を含むバグを生じさせてきた
そのためメモリ安全性を保証しつつC/C++の代替となる言語としてRustが誕生した
C/C++/RustはGC(ガベージコレクション)がないためOSや基本ライブラリに組み込み等の分野に至るまで幅広くカバーすることができるプログラミング言語
その中でもメモリ安全性を保証できるRustへと少しずつ移動が始まりつつあるのが現在の流れ
- 953 :デフォルトの名無しさん:2021/08/21(土) 15:27:45.68 ID:OLYxOVV4.net
- >>947
ランタイムやライブラリを貴方が一つ一つ手動でメモリi管理するなら問題ないね
- 954 :デフォルトの名無しさん:2021/08/21(土) 17:30:00.12 ID:7GAoG1Iq.net
- >>949
>Cでいいやん
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるので割り振られた仕事が早く終わっ
ても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
- 955 :デフォルトの名無しさん:2021/08/21(土) 17:33:35.36 ID:7MfDEBrd.net
- >>954
コンパイルが通った時点でメモリ安全性が担保されるRustの方が良いですよ
- 956 :デフォルトの名無しさん:2021/08/21(土) 17:54:49.49 ID:7GAoG1Iq.net
- >>955
Rustのメモリ安全性はボローチェッカー担保されている
Nimバージョン:1.5.1でRustのボローチェッカーに似た
「View types」が実装されれば、GC無しでView types
参照の有効性を検証することによってメモリ安全性を保証
しつつ限りなく抑え込まれたタイプ量で高速化した
Cのソースコードを吐き出せます
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
- 957 :デフォルトの名無しさん:2021/08/21(土) 18:53:58.07 ID:B8EsxF5E.net
- だったらnimでいいじゃん
- 958 :デフォルトの名無しさん:2021/08/21(土) 18:55:52.39 ID:13NtIrKF.net
- 怠け者のくだりが意味わからん
- 959 :デフォルトの名無しさん:2021/08/21(土) 19:25:31.33 ID:7GAoG1Iq.net
- >>958
>怠け者のくだりが意味わからん
ご指摘ありがとうございます。
「C言語でリモートワークでされている方は」が抜けていましたので以下訂正いたします
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークでされ
ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
- 960 :デフォルトの名無しさん:2021/08/21(土) 19:51:42.21 ID:6DBrqemS.net
- >>959
Pythonが高い可読性??
信者くらいしかそんなこと言わないぞ
他の言語と可読性は同じだろ
- 961 :デフォルトの名無しさん:2021/08/21(土) 21:04:52.10 ID:YwSANob8.net
- Pythonのライブラリを再発明するかーとはならんだろ
Pythonの可読性を再発明するふりをすれば怠けることができる
- 962 :デフォルトの名無しさん:2021/08/21(土) 21:53:00.41 ID:7GAoG1Iq.net
- >>960
Pythonは構文にインデントを組み込むことによってざっと眺めた時に人間が読みやすい
一般的には上記の事をPythonは高い可読性があると表現されています
この事は「Pythonは可読性の高い言語」ググれば約 265,000 件出てきます
他の言語と可読性は同じだろって意見の人は少数派です
- 963 :デフォルトの名無しさん:2021/08/21(土) 22:00:44.34 ID:O7+p4qIy.net
- 「javascriptは可読性の高い言語」で検索すると約 334,000 件
- 964 :デフォルトの名無しさん:2021/08/21(土) 22:03:03.92 ID:13NtIrKF.net
- 関係無いスレに出張ってんじゃねーよNimキチガイ
- 965 :デフォルトの名無しさん:2021/08/21(土) 22:43:10.06 ID:7GAoG1Iq.net
- >>963
>「javascriptは可読性の高い言語」で検索すると約 334,000 件
単に検索件数が多いだけで、上位10件の表示内容を読んでも
「javascriptは可読性の高い言語」と言う内容のページは1つも見つかりません
対して「Pythonは可読性の高い言語」は上位10件の内5件見つかりました
- 966 :デフォルトの名無しさん:2021/08/21(土) 22:47:49.77 ID:7GAoG1Iq.net
- >>964
>Nimキチガイ
いつもみんなによく言われます
照れますね〜v(=^0^=)v
- 967 :デフォルトの名無しさん:2021/08/21(土) 22:48:20.53 ID:g5NUsF7b.net
- >>962
インデントで可読性が高い??
じゃあほとんどのプログラミング言語はインデント出来ますから可読性が高いことになりますねw
Pythonが他の言語より可読性が高いなんて一切ありません
そもそもPythonはプログラミング言語としてあまりよくないので積極的に使いたい人はあまりいないでしょう
分野によってはライブラリの充実状況で仕方なく使う程度の言語です
Pythonで開発なんて絶対にしたくないと思う人が多数派でしょう
- 968 :デフォルトの名無しさん:2021/08/21(土) 23:03:01.15 ID:7GAoG1Iq.net
- >>967
元の文脈的に
Nimも構文にインデントを組み込んでるからpythonが出てきただけでそういう議論がしたいんじゃない
- 969 :デフォルトの名無しさん:2021/08/21(土) 23:24:43.32 ID:YwSANob8.net
- 他のコンパイラが自分自身をconfigureとかmakeしている間に
Pythonはライブラリを充実させる仕事が早く終わって怠けることができる
- 970 :デフォルトの名無しさん:2021/08/21(土) 23:58:42.50 ID:n4sq4kDw.net
- >>969
つまりNimはダメってこと?
- 971 :デフォルトの名無しさん:2021/08/22(日) 02:31:01.76 ID:0Cz6ueFz.net
- >>970
>NつまりNimはダメってこと?
そんな寂しい事言わないでかまってよ〜(´;︵;`)
Nimは行末のセミコロンが必要ない
タイプ数がもりもり減ります。
Rust にはもちろん必要です。
Nimはmain が要らない
スクリプト言語感覚でいきなりコードを書けます。
Rust は main が必要です。
- 972 :デフォルトの名無しさん:2021/08/22(日) 02:40:35.23 ID:0Cz6ueFz.net
- >>970
そんな寂しい事言わないでかまってよ〜(´;︵;`)
Nim は標準出力への文字列出力が楽
Nim では echo で改行付きの出力ができます。shell と同じですね。通常は改行付きで出力することの方が多いでしょ。
Nim はしょっちゅうやることは簡単にできるようになっています。
そんな Nim の echo は可変引数で値を受け取り型が何なんだろうとお構いなしに出力できます。
let n = 10
let str = "HOGE"
echo "Number: ", n, " String: ", str
一方 Rust は
let n = 10;
let str = "HOGE";
println!("Number: {} String: {}", n, str);
なんかよく判らんマクロでいちいちびっくりさせなきゃいけないです。よく使うものが冗長だとゲンナリします。
変数を直接ぶち込むことも出来ませんしね。
let n = 10
echo n
普通出来るでしょこんなもん・・・。ところが Rust は出来ない。
let n = 10;
println!(n); <- エラー
println!("{}", n); <- 毎度これを書かされる
うざいっす。
- 973 :デフォルトの名無しさん:2021/08/22(日) 02:42:07.61 ID:0Cz6ueFz.net
- >>970
NimはC の関数を気軽に持ってくる
たった一行足すだけで C の関数を使うことが出来るようになります。
proc printf*(format: cstring) {.header: "<stdio.h>", importc: "printf", varargs.}
let n = 10
let str = "HOGE"
printf "Number: %d String: %s\n", n, str
どうですこれ?C の資産を気軽に使うことができるんです。SWIG 等の鬱陶しいラッパーを使うこと無くです。
Rust の場合はご多分にもれずラッパー行きで超絶面倒くさいです。比較用に書きたいんですが結構な文章量になるのでやめます。
- 974 :デフォルトの名無しさん:2021/08/22(日) 02:45:56.41 ID:0Cz6ueFz.net
- >>970
そんな寂しい事言わないでかまってよ〜(´;︵;`)
Nimはmut mut しなくて良い
Rust はまともな変数を使おうとすると mut mut しないといけません。デフォルトだと再代入できませんから。
普通再代入しまくりますよね?定数ライクに使いたい機会なんて殆どないですよね?なのに mut を毎度書かされます。
let n:int = 10
let mut m: int = 10
Nim ならこうですよ。
let n = 10 # immutable
var m = 10 # mutable
素敵。
- 975 :デフォルトの名無しさん:2021/08/22(日) 02:56:18.88 ID:0Cz6ueFz.net
- >>970
Nimは所有者・借用なんてもんでイライラしない
Rust には C のポインタが可愛く見えるレベルで高くそびえ立つ鉄壁の初心者ガード、悪夢の"所有者・借用"の概念が存在します。
プログラムに慣れた人間ですら混乱に陥れ、書いている最中に精神力と人生の貴重な時間をガンガン削ってくれる究極の嫌がらせです。
Rust は変数のコピーしちゃうと元のやつが使えなくなるクソ仕様なのです。書き手にメリットなんて一切無い。C++の悪しきメモリ管理の呪いを持ち込んで来てその中でもさらに悪い部分をデフォルトにした感じです。
struct Point {
x: i32,
y: i32,
}
fn Print(p: Point) {
println!("x = {}, y = {}", p.x, p.y);
}
fn main() {
let mut a: Point = Point{ x: 10, y: 15 };
Print(a);
// エラー!
println!("x = {}, y = {}", a.x, a.y);
}
Print(a) で1回コピーされているのでその後使うと死にます。ウソでしょ?と思うでしょ?ホントです。
そしてプリミティブ型ならOKと言う Java に似たダブスタの呪いもオマケで付いてます。
おかげさまで関数はほぼ全て明示的に参照渡しをするハメになります。
「だったらデフォルトそうしとけよ! & をイチイチ書かせんなやワレ!」と思わないのってある種の才能だと思います
- 976 :デフォルトの名無しさん:2021/08/22(日) 02:59:43.53 ID:0Cz6ueFz.net
- >>970
struct Point {
x: i32,
y: i32,
}
fn Print(p: &Point) {
println!("x = {}, y = {}", p.x, p.y);
}
fn main() {
let mut a: Point = Point{ x: 10, y: 15 };
Print(&a);
println!("x = {}, y = {}", a.x, a.y);
}
これだとまぁエラーにはなりません。が、参照だからといってこんなことやったら死にます。
fn Print(p: &Point) {
println!("x = {}, y = {}", p.x, p.y);
p.x = 10; <- die
}
イミュータブルだからですって。はぁ・・・。
- 977 :デフォルトの名無しさん:2021/08/22(日) 03:03:28.37 ID:0Cz6ueFz.net
- >>970
だからこう書けですって。
fn Print(p: &mut Point) {
println!("x = {}, y = {}", p.x, p.y);
p.x = 100;
}
fn main() {
let mut a: Point = Point{ x: 10, y: 15 };
Print(&mut a);
println!("x = {}, y = {}", a.x, a.y);
}
はい来た。mut mut mut mut mut mut mut mut mut ああぁぁああぁ〜〜〜!!!
なんでよく使う方を面倒臭くしたがるんですか、この言語を作っている方々は。
その他又貸しの呪いやらなにやら超盛り沢山ですし。もうね私とはセンスが全く合わないです。
ぬぅぅうぅうぉぉおぉおぁぁあぁあああ!!!!!Rustよ!もうお前には頼まん!malloc と free を俺によこせうぉるぅぁあ!!こんな訳のわからんものに付き合わされるんだったら自分でメモリ管理した方がマシだわ!!!
とよくみんな発狂しませんよね。我慢強いですね。馬鹿じゃないの。
とっても良い子である Nim にはこんな呪いある"ワケ"がないです。
- 978 :デフォルトの名無しさん:2021/08/22(日) 03:07:42.15 ID:0Cz6ueFz.net
- >>970
type Point = object
x: int
y: int
proc print(this: Point) =
echo "x = ", this.x, ", y = ", this.y
var p = Point(x: 10, y: 15)
p.print()
echo "x = ", p.x, ", y = ", p.y
まぁ普通はこうですよね・・・。Rust がぶっ飛んで異常なだけです。ありえないです。
ちなみに Nim の場合 print(p) と p.print() は書き方が違うだけで意味は同じです。
- 979 :デフォルトの名無しさん:2021/08/22(日) 03:10:25.68 ID:0Cz6ueFz.net
- >>862
参照で渡す場合はこうなります。
type Point = object
x: int
y: int
proc print(this: ref Point) =
echo "x = ", this.x, ", y = ", this.y
this.x = 100
var p = Point.new
p.x = 10
p.y = 15
p.print()
echo "x = ", p.x, ", y = ", p.y
new で Point object を作成すると参照のオブジェクトが出来ます。これを渡すために print 側の引数には ref をつけてあげます。new 関数でメンバに値を割り当てることは出来ないので後から渡してやります。
つっても上のやつはあくまで Rust と似せて書いたらこうなるよって話でこんな書き方しません。
- 980 :デフォルトの名無しさん:2021/08/22(日) 03:12:56.27 ID:0Cz6ueFz.net
- >>970
普通オブジェクトなんて参照だろ、って事で Nim では以下のように書くのが慣例化しています。
type
Point = ref PointObj
PointObj = object
x: int
y: int
proc print(this: Point) =
echo "x = ", this.x, ", y = ", this.y
this.x = 100
var p = Point(x: 10, y: 15)
p.print()
echo "x = ", p.x, ", y = ", p.y
オブジェクトとそのリファレンスを同時に定義して、通常使わない方のオブジェクト側にサフィックスをつけておくと、まぁ素のオブジェクトも作りたきゃ作れるし、って話です。
自分は正直リファレンスだけで良いので更に手を抜いてこう書きますけどね。
type
Point = ref object
x: int
y: int
- 981 :デフォルトの名無しさん:2021/08/22(日) 03:18:37.68 ID:0Cz6ueFz.net
- >>970
パターンマッチ?case でしょ?
Nim も case でそれっぽく書けます。
複式パターン
fn main() {
let x = 1;
match x {
1 | 2 => println!("1 | 2"),
3 => println!("3"),
_ => println!("other"),
}
}
let x = 1
case x
of 1, 2: echo "1 | 2"
of 3: echo "3"
else: echo "other"
- 982 :デフォルトの名無しさん:2021/08/22(日) 03:20:54.62 ID:0Cz6ueFz.net
- >>970
範囲
fn main() {
let x = 1;
match x {
1...5 => println!("1...5"),
_ => println!("other"),
};
}
let x = 1
case x
of 1..5: echo "1..5"
else: echo "other"
- 983 :デフォルトの名無しさん:2021/08/22(日) 03:23:47.86 ID:0Cz6ueFz.net
- >>970
case の返りを受け取る
fn main() {
let x = 1;
let s = match x {
1 => "one",
2 => "two",
_ => "other",
};
println!("{}", s)
}
let x = 1
let s = case x
of 1: "one"
of 2: "two"
else: "other"
echo s
- 984 :デフォルトの名無しさん:2021/08/22(日) 03:25:32.61 ID:0Cz6ueFz.net
- >>970
分配束縛
Nim は標準ではできませんが
https://github.com/andreaferretti/patty
を突っ込むことで可能です。
- 985 :デフォルトの名無しさん:2021/08/22(日) 03:27:54.79 ID:0Cz6ueFz.net
- >>970
仕様バグがない
Rust の以下の挙動は全く理解ができません。
fn main() {
let x = 'x';
let c = 'c';
match c {
// x: c c: c
x => println!("x: {} c: {}", x, c),
}
// x: x
println!("x: {}", x)
}
普通 x にマッチすると思わないでしょこれ。
さらにその直後 x が 'c' に変わってるとか予想だにしませんよ。
まぁ普通はこんな書き方しないと思いますがこんな調子ではどこでどうハマるか予測不可能です恐ろしすぎます。
Nim はこんな書き方そもそも出来ません。
- 986 :デフォルトの名無しさん:2021/08/22(日) 03:29:07.58 ID:Tp7nysKx.net
- 必死にならないといけないほどゴミってことだろう
- 987 :デフォルトの名無しさん:2021/08/22(日) 03:31:48.58 ID:0Cz6ueFz.net
- >>970
コンパイラがケチくさくない
nim c -r hoge
これで hoge.nim をコンパイルします。
拡張子なんて指定する必要ありません。
-r で実行もします。
Rust の場合
rustc hoge <- ダメ
コンパイルと同時に実行しようと思ったら
rustc hoge.rs && ./hoge
うーん・・・
- 988 :デフォルトの名無しさん:2021/08/22(日) 03:35:33.10 ID:XDtR+zkG.net
- >>985
君はブロックスコープも理解できないアホなのかww
つまりNimにはスコープがないのかね
- 989 :デフォルトの名無しさん:2021/08/22(日) 03:35:43.46 ID:JES5Vdct.net
- 某ブログのコピペじゃん
あのブログ主に恨みでもあるの?
- 990 :デフォルトの名無しさん:2021/08/22(日) 03:39:33.33 ID:0Cz6ueFz.net
- >>970
実行速度・メモリ使用量・ファイルサイズが小さい
Rust と比べて Nim の実効速度はどっこいかむしろ速いです。
Rust はこんだけイライラする書き方を強制されるにも関わらずたいして速くないとかもう哀れすぎます。
コンパイル後のファイルサイズは話にならないレベルで比べ物になりません。
fizzbuzz の例(FizzBuzz を無駄にベンチマークしてみた By Nim、golang、Rust、Crystal、その他 - 強まっていこう)で言うと
項目 Nim Rust
実行速度 0.37s 0.44s
ファイルサイズ 82K 3.4M
メモリ 356K 900K
こんな感じです。
- 991 :デフォルトの名無しさん:2021/08/22(日) 03:47:12.59 ID:hHgYpZEm.net
- >>990
バカ丸出し
Rustはバイナリサイズも小さく出来ます
だから組み込み分野でもRustが強いわけです
- 992 :デフォルトの名無しさん:2021/08/22(日) 05:36:27.85 ID:oQP1YKwm.net
- Nimいいじゃん
- 993 :デフォルトの名無しさん:2021/08/22(日) 06:37:58.59 ID:4TxjgFbr.net
- さすがに騙される人はいないでしょう
ここまで荒らしがひどいなら次スレはNimを外した方がいいかもね
- 994 :デフォルトの名無しさん:2021/08/22(日) 06:41:37.05 ID:JES5Vdct.net
- 第二プログラミング言語として Rust はオススメしません Nim をやるのです
っていう2017年のクソブログ記事のコピペ
- 995 :デフォルトの名無しさん:2021/08/22(日) 07:47:29.46 ID:U2zX42Ts.net
- 流れぶった切って悪いけど
TypeScriptとかいうクソ言語みんなよく使えるねあんなに気持ち悪い型付けなのに
こんなクソ言語使うならvanillaのが遥かにマシだからPureScript行った
- 996 :デフォルトの名無しさん:2021/08/22(日) 07:52:45.12 ID:U2zX42Ts.net
- Reason or RescriptがOCaml構文まんまで使えたら使ってたのにRescriptの開発者本当ろくな事しない
これからWebViewアプリ全般がPWA当たり前になるだろうけど
もしPureScriptが廃れるならもうjs諦めてWebASM系に行くしかないな…
- 997 :デフォルトの名無しさん:2021/08/22(日) 08:25:10.09 ID:ZD+Tc3uA.net
- 普通にバニラ+WASMでPWAの時代ですよ
- 998 :デフォルトの名無しさん:2021/08/22(日) 08:28:08.71 ID:U2zX42Ts.net
- >>997
ようやく一般に通用する程度にまで楽で実用になっただけで
普及はまだまだ全然だと思う
- 999 :デフォルトの名無しさん:2021/08/22(日) 08:30:16.05 ID:ksVD5eTg.net
- みなさんWasmは何で書いていますか?
あたしはRust
- 1000 :デフォルトの名無しさん:2021/08/22(日) 08:35:54.12 ID:0Cz6ueFz.net
- >>991
>Rustはバイナリサイズも小さく出来ます
>だから組み込み分野でもRustが強いわけです
バカ丸出し
Nimは標準実装されたnimコンパイラが強力なマクロで
最適化されたCのソースコードを吐き出して、Cコンパイラ
で極小バイナリまで生成するから、コンパイルするだけで
後はプログラマがする仕事が無いので怠けててもいい
Rustは標準実装されたコンパイラでコンパイルするだけでは
超巨大なバイナリを生成するので、最適化せれたチューニング
を施して小さなバイナリを生成しなければならないから
プログラマの仕事が増えて怠けられない
- 1001 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1001
229 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★