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

■ このスレッドは過去ログ倉庫に格納されています
2021/08/22(日) 08:59:03.31ID:QorwbXcj
スレタイ以外の言語もok

前スレ
次世代言語21 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1587276362/
2021/11/04(木) 13:19:04.19ID:bqbD3Nhm
Nimはなんか中庸って感じがする
そこにピッタリはまる人にはいいんだろうけど
もっと楽に書きたい人はGo、ちゃんと書きたい人はRustに流れてしまって
あまりユーザが増えないのではないかな
2021/11/04(木) 15:00:22.37ID:OXP1jNWB
オタク臭いやつと臭くないやつの違いは一般人でもわかる
TypescriptとGoとNimの違いがわかるのは重度のオタクだけだろ
2021/11/04(木) 15:11:34.22ID:lAAyXHqu
やっぱ言語の普及には有名企業の後押しがいるんか?でもrustってなんか後押しあったっけ?
まあ案件レベルだと全然ないけどw
2021/11/04(木) 15:13:41.91ID:F8fi5yeE
Nim少し見てみたけどインデントか、ちょっと苦手かも
2021/11/04(木) 15:18:21.88ID:fybR+JX+
大企業の後押しは必須ではないだろうけど、後押しあると強い、というか、やっぱエコシステムが育ちやすいと思う。
すぐに潰されない言語だ、って思って他の企業とかも投資できるからかな。
TypeScriptが人気あるせいか、Dartはなんかイマイチ広まりきれてない感じだったけどね。

Rustは新規ミドルウェアを作るような現場では需要あるんじゃないの?
2021/11/04(木) 15:26:36.67ID:8l/Jusr1
いまRust推しの大企業といえばAmazonだな
MozillaからリストラされたRustコミッタを相当取り込んでるし
影響力が強すぎるんじゃないかと不安視されるくらい
2021/11/04(木) 15:26:54.42ID:DB49gC4z
これは他のコンパイル言語にはあまりない特徴だと思うけど、Nim言語はスクリプト言語のように使うこともできる。
Nimはコンパイル時に実行されるコードをNimに埋め込まれたvirtual machine上で実行するんだが
このVMを他の用途にも使うことができる。

コンパイルに使う設定ファイルやnimble(RustのCargoのようなもの)ファイルをNimScriptで記述できる。
nim-lang.org/docs/nims.html
github.com/nim-lang/nimble

Nimのコードを拡張子がnimsとなるようにファイルに保存してnim myscript.nimsと実行すれば
実行ファイルを生成せずに実行される。
NimScriptにはFFIが使えないとか制限があるがファイル操作や他の実行ファイルを呼ぶことができるので
shellスクリプトやバッチファイルの代わりに使うことができる。

C/C++だとプログラムにスクリプト言語を埋め込むときはPythonとかLuaを使うことが多いと思うけど
Nim言語ではNimScriptを埋め込むことが可能。
github.com/beef331/nimscripter
2021/11/04(木) 15:32:39.45ID:DB49gC4z
>>410
どの言語を書く時でも基本的にはインデントするから
インデントでコードブロックを作ることによってソースコードの中に
{}とか;が頻繁にでてこないようにしたほうがソースコードがすっきりして読みやすくなると思うんだけどな。
2021/11/04(木) 15:46:29.06ID:4stXfNK+
>>414
ルールで言うならyamlみたいなインデント or カッコの両対応がいいんだけどねぇ。そんなの無いけど。
2021/11/04(木) 15:47:23.54ID:eo9m+3ij
行頭に } って書いてあると終わった感がある
2021/11/04(木) 15:51:50.87ID:fybR+JX+
Rubyみたいな do end もそんなに悪くなかったし、エディタのサポートがあれば慣れの問題かなあ、って気がしてしまう
2021/11/04(木) 16:30:26.61ID:62sZMwyh
>>414
それをすっきりして読みやすいと思うか、必要な情報が欠落していて読みにくいと思うかは個人差あると思う
個人的にはインデントの戻り量が視覚的に判断しづらいから } がないと読みづらく感じる
419デフォルトの名無しさん
垢版 |
2021/11/04(木) 16:40:09.48ID:oJ9Lbupd
int hoge = 1;
int hage = 2;
if ... {
  hoge += 3;
hage = 4;
}
理論上は見た目とコンピューター的なパース処理を一致させる考えがPythonやNim、CoffeeScriptなどの
オフサイドルールという書き方。
上記の例でCなどから、主流で余分な空白を無視して波括弧 { と } でブロックを表すという記法が、C#や
Java、Rust、Javascriptなど。もう1つは、begin-endでブロック的なスコープを表す記法で、これは
Pascal/Delphi、Ruby、PL/SQL・TSQLなど。他は純関数言語でErlangやHaskellなどはこの限りではない。

Cなどの記法は、空白あるいはタブがどのような形でも{}が対応していて、;が1手続きの終わりであり
プログラマの好みによって、字下げ・字上げ・空白することが可能であるという利点がある。しかしながら
上のように書く人は居ない。{}の対応するかっこを上下位置で揃える古いK&R的な書き方をする人はいるが
近年のgolangのように、きっちりフォーマットする(goだとエラーになる場合もある)

Python的な見た目に拒否感が起こる人は、「空白字下げの入れ忘れがバグにつながるのでは?」と言う。
for ... :
  hoge += 6
hage = 7
しかしながら、上のように書く人は存在するがあまり読みづらく、ループに入れるなら字下げすべきだし
入れないのであれば、forの終わりに1行空行を入れる。Rubyは厳密にはxxx-endだけではなく、{}も
あって意味が違うのだが長くなりすぎるので説明しない。
もう1つはIDEなどがソースコードを勝手に整形するので、スペースではない明確な表示文字で区切りたい
という人もいる。当然このようなことを言い出したらキリがないが、最終的には好みで言語を選ぶわけで
無く仕事なら無条件であり、慈悲も和解もない。
2021/11/04(木) 16:51:58.52ID:F8fi5yeE
>>414
インデントはフォーマッターに任せる温い環境に慣れすぎて自分でやるのは辛ぽよ
421デフォルトの名無しさん
垢版 |
2021/11/04(木) 17:02:13.15ID:oJ9Lbupd
そしてなぜPythonのようなCとC++の、ある意味で伝統を受け継がない物が出来たかと言えば演算子の順序で
a = b + c * dと書いた場合、c * d が優先されるのだが、ニワカは a = b + ( c * d )と書いたりする。
これをプログラマは冗長、あるいはダサいと言う風潮が出来て、「余計なカッコはカッコ悪い」となった。

ここから、whileやifに普通の丸カッコを付けない言語が多くなる。v = if true { 5 } else { 6 };
このように評価式にはtrueで、()を付けない、これが長い評価式の行になったとしても同じ

いわばカッコ言語と称される言語は、Pythonから見るとカッコ(悪い)言語になり、逆に伝統的なプログラマから
見ると、空白がブロックを左右するいい加減な言語に見える。よって又しても慈悲も和解もない
2021/11/04(木) 17:14:28.06ID:MjRPJM3Z
{ } な言語ばかりやってきたので
インデント言語について素朴な質問です

スコープブロックはどのように作るのですか?
例えばスコープブロック作成のために数行だけを { } の中に閉じ込めたりするのですが
インデント言語では括弧も何もなく数行だけを深くインデントするのですか?
2021/11/04(木) 17:15:03.57ID:DB49gC4z
>>406
>>411
NimはC, C++, pythonで書かれた豊富なライブラリを簡単に使うことができるようにすることで
ライブラリの少なさを補っている。
Cのライブラリを使える言語は結構あるけどNimはバックエンドにC++コンパイラを使うこともできるので
C++で書かれたライブラリも使うことができる。

c2nimを使えばC/C++のヘッダーファイルを自動的にNimのコードに変換してくれる。
C/C++のコードを完全にNimのコードに変換できるわけではないが
NimからC/C++のコードを呼び出すのに必要なコードを出してくれる。
github.com/nim-lang/c2nim

ここにあるコードのようにimportcppプラグマを使えば
C++のstd::mapやstd::vectorのようなテンプレートクラスをNimのgenericsのように使うことも可能。
nim-lang.org/docs/manual.html#importcpp-pragma-importcpp-for-objects

NimからPythonの関数を読んだりNimでPythonモジュールを作れるようにするライブラリ
github.com/yglukhov/nimpy

Nimのコードをマクロを使ってコンパイル時にGLSLのコードに変換するライブラリ
github.com/treeform/shady
424デフォルトの名無しさん
垢版 |
2021/11/04(木) 17:36:48.75ID:d2BeURFt
>>422
Pythonだと、PEP340という、Anonymous Block Statementsの提案がなされていたが
block expr as x: # expr as x はおそらく省略できる
  ...
このように書ける提案だったがリジェクトされて、PEP343となりwithブロックになった。
with open(path) as f:
  ...
ほかの言語だとこのblockという無名または名前付きのスコープが作れるものが多いと思う
block "A sealed": # 文字列は名前で省略できる
  ...
そうはいっても、以下のようにすればブロックは勝手にできるあまり意味はない。どこかでBLOCK = true
if BLOCK:
  ...
425デフォルトの名無しさん
垢版 |
2021/11/04(木) 17:40:02.16ID:d2BeURFt
他にもlabel(?だったか)として名前付きのものもあったな、これは、多重のforなどのbreakで名前が指定できる
2021/11/04(木) 17:40:29.24ID:lAAyXHqu
bindingはどの言語でもあるし簡単に作れるよ
ただ純正コードで書くのと同じくらい適切に運用させるのが困難な場合が多いので、誰もそれが簡単だとは言わない
個人的には正直nimアピールいらんw 何か書かれる度にどんどんnimから離れて行きたくなるw
2021/11/04(木) 17:40:46.86ID:DB49gC4z
>>422
Nimではblock文/block式というのがあります。
nim-lang.org/docs/manual.html#statements-and-expressions-block-statement
nim-lang.org/docs/manual.html#statements-and-expressions-block-expression

変数aはblock:の下のインデントされたブロッグ内のスコープ内でのみ使えます。
block:
  let a = 1
  echo a

こんな感じでblockに名前を付けてbreak文を使っていっきにblockから抜けることもできます。
var found = false
block myblock:
  for i in 0..3:
    for j in 0..3:
      if a[j][i] == 7:
       found = true
       break myblock #forループの上にあるmyblockから抜ける。
echo found

block式を使うとblock文と同じように新しいスコープを作りますがblock内の最後の式がblock式の値になります。
let a = block:
  var fib = @[0, 1]
  for i in 0..10:
    fib.add fib[^1] + fib[^2]
  fib # fibの値がこのblock式の値になってaに代入される。
echo a # @[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] が出力される
2021/11/04(木) 17:44:36.59ID:fybR+JX+
nimアピールすごいな。
宣伝したいならQiitaとかでいっぱい記事書いたほうがいいんじゃないかな・・・。
429デフォルトの名無しさん
垢版 |
2021/11/04(木) 17:50:32.91ID:d2BeURFt
言語なんて日本だけで流行っても、しょーがないし、流行るとしたら海外で流行らないと、Pythonだって
海外で流行っていて、Rubyの作者が日本人だから、日本ではRubyというかRoRが一色になりかけたのに
Pythonなんて誰もやってなかった(言い杉か)
2021/11/04(木) 17:54:52.55ID:eo9m+3ij
pythonで
a = b*c + d
というスペースの空け方を推奨してて、なるほどと思った
2021/11/04(木) 18:01:05.24ID:UnTZr4yd
>>427
ブロックも式になって最後の値を返すとか
ブロックで変数スコープがあらたにつくられるとか
Rustなどと一緒だね

あとはRustみたいに変数スコープブロックを抜けると(または変数のライフタイムが尽きると)
ファイルオープン変数だった場合に自動クローズとかもあるのかな?
具体的には、Pythonだとwith、C#だとusing、Goだとdefer、などそれそれ必要なところ
Rustはそういう特殊構文なくて
変数が解放されると自動closeされる
432デフォルトの名無しさん
垢版 |
2021/11/04(木) 18:13:51.03ID:DB49gC4z
>>431
defer文でcloseできます。
nim-lang.org/docs/manual.html#exception-handling-defer-statement

コードを書けばデストラクタからcloseできるようになるけどNimにデストラクタができたのが最近なんで
標準ライブラリのFileはdefer文使うか自分でcloseを呼ぶ必要があります。
2021/11/04(木) 18:30:25.81ID:MjRPJM3Z
Rustはファイルディスクリプタ類を関数を超えて持ち回ったり複雑化しても使い終わると即座に確実にクローズが自動的にされるのが凄いよね
434デフォルトの名無しさん
垢版 |
2021/11/04(木) 18:37:46.92ID:7RmUj5cL
それは標準ライブラリがDropトレイとで成り立ってるだけの話で、openとcloseが完全対になるような
リソースならそれで良いがBufWriterの場合とかflushしなければならないし、何回もopen呼んでも良い
ようなリソース管理は、結局は自分で実装しないとならない
2021/11/04(木) 19:00:18.43ID:UnTZr4yd
>>433
即座に着実安全にメモリ解放が自動でなされるRustにとって
その程度はオマケのついでの楽勝なだけにすぎない
2021/11/04(木) 19:33:56.36ID:lAAyXHqu
その分とっつきにくいけどな
2021/11/04(木) 19:53:06.80ID:UnTZr4yd
>>436
え?他の言語よりはわかりやすくてとっつきやすい
2021/11/04(木) 20:10:30.05ID:lAAyXHqu
「rust 難しい」とかで検索すれば出てくるけど、残念ながら世の人々はそうは思わんのだよ
比較的進歩的な人でもそういう意見をよく聞くし、所有権は理解しないわけにいかない基礎だから端折れない

逆にgoではほとんどそういうことがない
2021/11/04(木) 20:22:55.80ID:MjRPJM3Z
Goはガベージコレクション言語だから比較の土俵が違うような
さらにGoはプログラミング言語として様々な機能を失いすぎてプログラミングしにくいのが辛いですね
2021/11/04(木) 20:26:36.52ID:lAAyXHqu
比較的守備範囲の近い、とっつきやすい言語の例w
2021/11/04(木) 20:33:45.40ID:iRkMc3Gk
失い過ぎたw
意図して実装してないだけだがw
2021/11/04(木) 20:42:10.69ID:UnTZr4yd
>>440
Goは守備範囲が狭すぎて違う
Rustの元々の守備範囲はC/C++が使われている領域
その領域に加えてGC無くメモリ安全性の保証によりJavaなどの置き換えにも使われつつある
さらに加えてイテレータ等の現代的なプログラミングスタイルがメインとなってコーディングしやすいためスクリプト言語を含めた幅広い方面からの移行/兼用が起きている
いずれもGoは満たせない要件
2021/11/04(木) 20:55:34.08ID:wrxqAvPZ
だからこれからのコーディングの奴隷はRustで決まりってことなんだろ
2021/11/04(木) 21:00:15.23ID:lAAyXHqu
goとrustならrustの方が守備範囲狭いよw
ひとえに難しいからw

OS周りならC/C++でいいし
現状ではweb周りのごくごく一部の超高速領域を除きrustには置き換わっていない
javaからの置き換えならgoでいい
2021/11/04(木) 21:09:43.64ID:MjRPJM3Z
>>442
その3種類ともGoは対象外なことに驚きました
実はGoとRustは領域あまり被っていなくて競合していないのかもしれませんね
2021/11/04(木) 21:16:55.71ID:lAAyXHqu
他rust向きの領域だとdatabaseかなぁ・・・
ただ既存のDBを置き換えるのはなかなか厳しそうw
何かに特化したやつならいいかもねw
2021/11/04(木) 21:31:58.67ID:7+L798k8
RustがJavaの代わりってマジか
Scalaみたいな負債の再来か
2021/11/04(木) 21:36:42.56ID:UnTZr4yd
>>447
Meta (旧Facebook)が基幹システムをJavaからRustへ移行した
IT業界ではそういう流れ
2021/11/04(木) 21:42:25.68ID:lAAyXHqu
ビルドシステムなw
https://www.itmedia.co.jp/news/articles/2107/28/news152.html
2021/11/04(木) 22:03:32.17ID:C83Gt3We
ビルドシステムでGCの動きを気にすることってほぼないけどな。
なんかやばい方向いってるね。
2021/11/04(木) 22:27:26.54ID:lAAyXHqu
rustのスポンサー企業一覧
https://foundation.rust-lang.org/members/
プラチナメンバが錚々たる顔ぶれw リンゴおらんw

nimのスポンサー企業一覧
https://nim-lang.org/sponsors.html
2021/11/04(木) 22:47:21.35ID:3s9ShBm/
まあrustは天才向け言語と思うので、コアなところがrust縛りになってくれると安心なところはあるね。goとかnimとかはちょろい分野で頑張れば良い
2021/11/04(木) 22:51:16.80ID:kgE3GEs9
て、天才ww
2021/11/04(木) 22:53:26.72ID:fybR+JX+
nimも良い言語だと思うけど、GAFAMみたいなとこがバックアップしてるわけじゃないし、仕事では使う気せえへんなあ。もったいない。
趣味ユーザが使いまくってエコシステムが充実するまで待つしかないな。
2021/11/04(木) 23:11:49.09ID:mYdjk53s
>>451
リンゴにはswiftがあるからなあ
2021/11/05(金) 02:15:48.45ID:KGYxGlBy
python嫌いだからnimも嫌いなんだわ
457デフォルトの名無しさん
垢版 |
2021/11/05(金) 05:25:56.07ID:Q0weZe1J
嫌いっていうより、ウチの爺らはPythonすら出来なそうだけどね
2021/11/05(金) 06:52:06.45ID:0gW7V402
>>451
Rustのスポンサー企業一覧にTOYOTAがあるね
さすが日本のトップ企業
2021/11/05(金) 09:11:02.86ID:pAK9gvBl
しょーもない見栄張ってるだけだな
2021/11/05(金) 09:40:04.97ID:ZsL5S5NL
サーバーサイドに企業のバックアップなどいらぬ
趣味で弄れない仕様になってる車の内部やスマホのアプリを企業がしっかり作れよ
2021/11/05(金) 10:28:44.23ID:ShfctMVX
Node.jsの話?
2021/11/05(金) 11:30:58.07ID:pLniUbgZ
>>458
自動車ってガソリン車の時点でもう低レベルファームウェアの塊だもんな
これからEVとなるとなおさら…
2021/11/05(金) 12:57:06.14ID:oXyREoQy
死ぬほど恥ずかしい知ったかだなこれ
2021/11/05(金) 12:58:33.47ID:MOYeaH5z
新手の自己紹介か?
2021/11/05(金) 20:37:57.51ID:DvmJ6O3T
>>458
国外も国内も大手有名どころはRust採用で大勢が決した感じね
2021/11/05(金) 21:28:24.58ID:Xs8oV2Az
国外も国内も全然違うw
467デフォルトの名無しさん
垢版 |
2021/11/06(土) 00:50:02.35ID:iXKnTImN
rustもアピールすごいな、内容の無いrust押しもどんどんrustから離れて行きたくなるけど
2021/11/06(土) 01:56:27.18ID:x0h3LLto
YouTube で有名な、雑食系エンジニア・KENTA のサロンでは、
キャリアパスは、Ruby on Rails → Go のみ

Rust, Elixir などは、普及のキャズムを越えなかったので、やる必要なし。
なのに、Rustが再評価され始めたのか
2021/11/06(土) 02:00:59.99ID:EdP5MzkQ
C++でいろんな新規開発する組織ではRustが好評価されてるでしょ
それ以外の現場ではめったに見向きされない
2021/11/06(土) 06:29:11.65ID:bdG9YXuk
転職サイトとかフリーランスのサイトでRustで検索したら1桁か2桁ぐらいしか求人が出てこないけど国外国内で覇権を握る言語らしい
2021/11/06(土) 07:32:09.49ID:a2wAz4xJ
Rustでもユーチューバーでも国会議員でもそうなるわな
2021/11/06(土) 12:03:26.15ID:2f1Vgy/C
rustが評価されてるのは高速・安全の2点
これらが難しさを無視できるほど重要になる領域では唯一の選択肢になる
世界規模のサービスでは特にクリティカルな問題になるのでこの分野の発展を望む巨人共が投資してる
2021/11/06(土) 12:24:00.21ID:WoXv+kRZ
>>469
転職サイトw
2021/11/06(土) 20:58:43.30ID:9KDcj+aF
>>468
Goは言語仕様の欠陥により全くオススメ出来ない
Goでは例えばうっかりローカル変数の参照(ポインタ)をそのスコープ外へ持ち出しても
言語仕様としてコンパイラにもチェックされずそして禁止もされず
そのまま通ってしまうため実運用で致命的なバグを引き起こしてしまい
実際に以下のような大事件まで引き起こしている

Go言語で書かれたLet's encryptが300万以上の証明書の失効を迫られた致命的バグはRustで実装していたら防げたの?→Yes
https://qiita.com/komasayuki/items/02785730d486ec4b397f
2021/11/06(土) 21:25:57.27ID:8rFQ20lW
そういう問題じゃねーわ。
そこでポインタを外に出すようなバカはどんな言語使っても同じようにカスなことやってるよ。。
2021/11/06(土) 21:32:11.29ID:v/Totsm8
>>475
人間必ずミスをする
そしてこれは言語の仕様としてそのようなことが起きないように禁止すれば済む話
Rustならコンパイラがその禁止事項でエラーとなるから人間が万が一のミスをしても大丈夫
2021/11/06(土) 21:37:20.60ID:wE/AlpPI
じゃあunsafeも禁止にしないと
478デフォルトの名無しさん
垢版 |
2021/11/06(土) 21:45:46.17ID:f6JHtgP7
>>475
だから、よりチェックが厳密な(100%とは言わない)rustが良いのでは。
2021/11/06(土) 22:24:42.47ID:2f1Vgy/C
rustにしたら防げたのかもしれないが、だからってrustにした方が良いとは思わんw
2021/11/06(土) 22:30:30.69ID:v/Totsm8
少なくともその分野のプログラミングならばRustを用いるのがベスト
他に解がない
2021/11/06(土) 22:34:25.16ID:PDDtrjdC
静的解析さん……
2021/11/06(土) 22:35:30.57ID:bqXF1v8h
Last
2021/11/06(土) 22:38:46.87ID:twTYwhnI
Rustは天才向け言語だからそんな凡ミスするやつが使うべきじゃない
はい終わり
2021/11/06(土) 23:12:13.85ID:2f1Vgy/C
rustにしたらメンテナンスできる人や便利にしてくれる人が減ってしまう
明確に別の問題があるんだよ
本当にそれしか解がないのなら問題が起きる前に誰かがすでに書き換えている
2021/11/06(土) 23:18:58.54ID:EdP5MzkQ
全人類Rustを極めてたらいいのに
2021/11/06(土) 23:27:58.99ID:2f1Vgy/C
それな
2021/11/06(土) 23:32:27.72ID:9KDcj+aF
>>484
Rustにしたらメンテナンスもしやすくなったよ
例えば機能追加で今回の件のようなバグが紛れ込むことも無くなった
もしその種のミスをしているとコンパイルが通らないから安心してメンテナンスできる
2021/11/06(土) 23:35:57.66ID:bBqH6KfG
天才が使う言語なんだからならそもそもメンテナンスなんてしなくていいだろ
はい終わり
2021/11/06(土) 23:36:45.09ID:2f1Vgy/C
メンテナンスできる人の数の話をしてるのに、そもそもメンテナンスできる人がメンテナンスしやすくなったからって関係ないよね
2021/11/07(日) 09:04:00.93ID:bwFiQ/UZ
アスペ=天才
2021/11/07(日) 13:38:59.39ID:XJB+ymj6
たまに紙一重のやつがいるのは認めるが
イコールではないな
アスペ⊆天才でもないし
アスペ⊇天才でもない
2021/11/07(日) 13:50:16.34ID:Wnisb2X3
サヴァンみたいな一点豪華な才能は気苦労も伴うからな
2021/11/07(日) 14:10:35.95ID:/d1krDIr
他のスレで暴れてるMbってやつは天才?
2021/11/07(日) 14:21:05.01ID:nhZF9/LT
召喚すんな
2021/11/07(日) 15:13:11.87ID:XJB+ymj6
天才でも凡人でも地方でも
最低限のマナーすら守れない香具師は何やっても成功しない
2021/11/07(日) 15:30:00.12ID:/d1krDIr
マナーなんて無くても天才と馬鹿は行動力があれば成功するだろ
マナーが一番必要なのは凡人だけ
2021/11/07(日) 16:47:03.65ID:NoqiBvXu
488の煽りごときから天才の話を続けようとすんな
498デフォルトの名無しさん
垢版 |
2021/11/07(日) 22:52:33.86ID:NYPA2RTD
>>489
PHPでも使ったら?一番人集まりやすいんでないか?
2021/11/08(月) 00:15:26.32ID:vASCcAjA
メンテナンスなんて少しも考えてないバカがrustすげーって騒いでるだけだろ。
どうせGAFAも認める言語使ってる俺すげーしてクソコード残して立ち去るような仕事のやり方ばっかしてんだろうね。
2021/11/08(月) 00:21:07.56ID:SITQ70se
メンテナンスならばRustがもっともしやすいだろう
コンパイルが通ればメモリ安全性が保証される点で他の言語より抜きん出る
これは大きな利点である
2021/11/08(月) 00:38:47.53ID:rlmkL2+c
それでメモリ安全性の定義ってなんだっけ
意味論を定義したうえで形式的に証明されてるんだっけ
2021/11/08(月) 01:21:00.52ID:vrtVczFq
GoとRustってCのアドレス演算的なことはできるのですか?

int arr[] = {1, 2, 3};
int *p = arr;
p += 1; // ←これです
printf("%d\n", *p); // 2
2021/11/08(月) 02:24:21.55ID:p+/Hds0z
>>502
C/C++のようなポインタ演算は安全性のためにできないようにしてるが
Goならunsafe.Add、Rustならpointer::offsetやpointer::wrapping_offsetで同じようなことはできる
2021/11/08(月) 02:29:59.56ID:J6d/ajGt
マンドクセ
2021/11/08(月) 02:59:59.38ID:6BzlB5w0
>>501
Rustは多くの論文が出ている
https://rustc-dev-guide.rust-lang.org/appendix/bibliography.html#papers-about-rust

>>502
生ポインタと呼ばれていて通常のプログラミングでは使わないが実行可能
Rustコンパイラによるメモリ安全性の保証外などとなることを宣言するunsafe{ ... }の中で使える

以下はRustのコードでコメント部分(=各行の//以降)に対応するCコード
let a = &[1, 10, 100]; // int a[] = {1, 10, 100};
let mut ptr = &a[0] as *const i32; // int *ptr = a;
println!("{:p}: {}", ptr, unsafe{*ptr}); // printf("%lx: %d\n", ptr, *ptr);
 → 0x5645a1293000: 1
ptr = unsafe{ptr.offset(1)}; // ptr += 1;
println!("{:p}: {}", ptr, unsafe{*ptr}); // printf("%lx: %d\n", ptr, *ptr);
 → 0x5645a1293004: 10
2021/11/08(月) 10:23:03.43ID:LdTjNXcL
>>501
絶対的メモリ安全性の定義が難しいなら
javascriptとtypescriptのような相対的な優位性を証明すればいい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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