次世代言語21 Go Nim Rust Swift Kotlin TypeScript

レス数が1000を超えています。これ以上書き込みはできません。
2020/04/19(日) 15:06:02.92ID:jAOW5aqE
スレタイ以外の言語もok

前スレ
次世代言語18 Go Rust Elixir Kotlin TypeScript (実質20)
https://mevius.5ch.net/test/read.cgi/tech/1569866283/
978デフォルトの名無しさん
垢版 |
2021/08/22(日) 03:07:42.15ID:0Cz6ueFz
>>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.68ID:0Cz6ueFz
>>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.27ID:0Cz6ueFz
>>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.68ID:0Cz6ueFz
>>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.62ID:0Cz6ueFz
>>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.86ID:0Cz6ueFz
>>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.61ID:0Cz6ueFz
>>970

分配束縛
Nim は標準ではできませんが

https://github.com/andreaferretti/patty

を突っ込むことで可能です。
985デフォルトの名無しさん
垢版 |
2021/08/22(日) 03:27:54.79ID:0Cz6ueFz
>>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 はこんな書き方そもそも出来ません。
2021/08/22(日) 03:29:07.58ID:Tp7nysKx
必死にならないといけないほどゴミってことだろう
987デフォルトの名無しさん
垢版 |
2021/08/22(日) 03:31:48.58ID:0Cz6ueFz
>>970

コンパイラがケチくさくない
nim c -r hoge
これで hoge.nim をコンパイルします。
拡張子なんて指定する必要ありません。
-r で実行もします。

Rust の場合

rustc hoge <- ダメ
コンパイルと同時に実行しようと思ったら

rustc hoge.rs && ./hoge
うーん・・・
2021/08/22(日) 03:35:33.10ID:XDtR+zkG
>>985
君はブロックスコープも理解できないアホなのかww
つまりNimにはスコープがないのかね
2021/08/22(日) 03:35:43.46ID:JES5Vdct
某ブログのコピペじゃん
あのブログ主に恨みでもあるの?
990デフォルトの名無しさん
垢版 |
2021/08/22(日) 03:39:33.33ID:0Cz6ueFz
>>970

実行速度・メモリ使用量・ファイルサイズが小さい
Rust と比べて Nim の実効速度はどっこいかむしろ速いです。
Rust はこんだけイライラする書き方を強制されるにも関わらずたいして速くないとかもう哀れすぎます。

コンパイル後のファイルサイズは話にならないレベルで比べ物になりません。

fizzbuzz の例(FizzBuzz を無駄にベンチマークしてみた By Nim、golang、Rust、Crystal、その他 - 強まっていこう)で言うと

項目         Nim     Rust
実行速度      0.37s     0.44s
ファイルサイズ   82K     3.4M
メモリ      356K     900K
こんな感じです。
2021/08/22(日) 03:47:12.59ID:hHgYpZEm
>>990
バカ丸出し
Rustはバイナリサイズも小さく出来ます
だから組み込み分野でもRustが強いわけです
2021/08/22(日) 05:36:27.85ID:oQP1YKwm
Nimいいじゃん
2021/08/22(日) 06:37:58.59ID:4TxjgFbr
さすがに騙される人はいないでしょう
ここまで荒らしがひどいなら次スレはNimを外した方がいいかもね
2021/08/22(日) 06:41:37.05ID:JES5Vdct
第二プログラミング言語として Rust はオススメしません Nim をやるのです
っていう2017年のクソブログ記事のコピペ
2021/08/22(日) 07:47:29.46ID:U2zX42Ts
流れぶった切って悪いけど
TypeScriptとかいうクソ言語みんなよく使えるねあんなに気持ち悪い型付けなのに
こんなクソ言語使うならvanillaのが遥かにマシだからPureScript行った
2021/08/22(日) 07:52:45.12ID:U2zX42Ts
Reason or RescriptがOCaml構文まんまで使えたら使ってたのにRescriptの開発者本当ろくな事しない
これからWebViewアプリ全般がPWA当たり前になるだろうけど
もしPureScriptが廃れるならもうjs諦めてWebASM系に行くしかないな…
2021/08/22(日) 08:25:10.09ID:ZD+Tc3uA
普通にバニラ+WASMでPWAの時代ですよ
2021/08/22(日) 08:28:08.71ID:U2zX42Ts
>>997
ようやく一般に通用する程度にまで楽で実用になっただけで
普及はまだまだ全然だと思う
2021/08/22(日) 08:30:16.05ID:ksVD5eTg
みなさんWasmは何で書いていますか?
あたしはRust
1000デフォルトの名無しさん
垢版 |
2021/08/22(日) 08:35:54.12ID:0Cz6ueFz
>>991

>Rustはバイナリサイズも小さく出来ます
>だから組み込み分野でもRustが強いわけです

バカ丸出し
Nimは標準実装されたnimコンパイラが強力なマクロで
最適化されたCのソースコードを吐き出して、Cコンパイラ
で極小バイナリまで生成するから、コンパイルするだけで
後はプログラマがする仕事が無いので怠けててもいい

Rustは標準実装されたコンパイラでコンパイルするだけでは
超巨大なバイナリを生成するので、最適化せれたチューニング
を施して小さなバイナリを生成しなければならないから
プログラマの仕事が増えて怠けられない
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 489日 17時間 29分 52秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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