2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

次世代言語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 ★