タグ付けされた質問 「rust」

1
Rust TraitsはGoインターフェイスとどう違うのですか?
私はGoに比較的精通しており、小さなプログラムをいくつか書いています。錆は、もちろん、あまり馴染みがありませんが、注視しています。 最近http://yager.io/programming/go.htmlを読んで、Genericsが処理される2つの方法を個人的に調べたいと思いました。エレガントに達成できませんでした。私は、Rustの特徴がいかに強力であるかについての誇大宣伝を聞き続けました。Goでいくつかの経験を積んで、それがどのように真実であり、最終的にどのような違いがあったのかと思いました。私が見つけたのは、特性とインターフェースがかなり似ているということです!最終的に、私は何かが欠けているかどうかわからないので、ここでそれらの類似点の簡単な教育的要約があります。 それでは、ドキュメントからGoインターフェイスを見てみましょう。 Goのインターフェイスは、オブジェクトの動作を指定する方法を提供します。これができる場合は、ここで使用できます。 最も一般的なインターフェイスはStringer、オブジェクトを表す文字列を返すことです。 type Stringer interface { String() string } そのため、そのString()上で定義されているStringerオブジェクトはすべてオブジェクトです。これfunc (s Stringer) print()は、ほとんどすべてのオブジェクトを取得して印刷するようなタイプシグネチャで使用できます。 またinterface{}、いずれのオブジェクトも受け取ります。その後、実行時にリフレクションを介してタイプを決定する必要があります。 それでは、ドキュメントからRust Traitsを見てみましょう: 最も単純な場合、特性はゼロ個以上のメソッドシグネチャのセットです。たとえば、単一のメソッドシグネチャを使用して、コンソールに出力できるものに対して特性Printableを宣言できます。 trait Printable { fn print(&self); } これは、すぐにGoインターフェースに非常によく似ています。私が見る唯一の違いは、単にメソッドを定義するのではなく、特性の「実装」を定義することです。だから、私たちはやる impl Printable for int { fn print(&self) { println!("{}", *self) } } の代わりに fn print(a: int) { ... } ボーナス質問:特性を実装するが使用しない関数を定義すると、Rustで何が起こりますimplか?うまくいきませんか? Goのインターフェイスとは異なり、Rustの型システムには型パラメーターがありinterface{}、コンパイラーとランタイムが実際に型を認識している間、適切なジェネリックなどを実行できます。例えば、 trait Seq<T> …
64 go  rust 

2
RustはC ++の同時実行機能からどのように分岐しますか?
ご質問 Rustを学ぶために時間を費やすべきかどうかを判断するために、RustがC ++の同時実行機能を根本的かつ十分に改善するかどうかを理解しようとしています。 具体的には、慣用的なRustは、慣用的なC ++の同時実行機能をどのように改善しますか、それとも何らかの相違がありますか? 改善(または相違)はほとんど構文上のものですか、それとも実質的にパラダイムの改善(相違)ですか?それとも別のものですか?それとも、まったく改善(分岐)ではありませんか? 根拠 私は最近、C ++ 14の並行性機能を自分で習おうとしていますが、何かが正しくないと感じています。何か気分が悪い。何が気持ち悪い?言いにくい。 並行処理に関しては、コンパイラが正しいプログラムの作成を実際に支援しようとしていないように感じます。コンパイラではなくアセンブラを使用しているように感じます。 確かに、並行性に関しては、微妙で誤った概念にまだ悩まされている可能性があります。たぶん、私はまだ、ステートフルプログラミングとデータレースの間のBartosz Milewskiの緊張感を理解していません。たぶん、コンパイラーにどれだけの健全な並行方法論があり、OSにどれくらいあるのか、私にはよくわかりません。
35 c++  concurrency  rust  c++14 

8
現実の世界で「強力な」型システムを使用しているのは、たとえば大規模なWebアプリの場合ですか?
これは非常に広く、曖昧で、おそらく哲学的な質問であることを知っています。質問の中で最も重要なキーワードである「強力な」タイプのシステム自体は、ある程度不明確です。だから、私が意味することを説明しようとさせてください。 質問の全体的なコンテキスト 私たちはRuby on Railsで非常に大規模なWebアプリを構築してきましたが、私たちは一般的にスタックに満足しています。必要に応じて、ものを非常に高速に出荷できます-約10%のエッジケースをあまり心配することなく、「ビジネス」ケースの90%で機能するものです。一方、コードレビューとテストカバレッジの助けを借りて、ゆっくりと慎重になり、すべてのベースをカバーするようにすることができます-再び、そのような綿密な調査と安全に値する状況でのみ。 しかし、チームが成長するにつれて、スタックに焼き付けられた「セーフティネット」の欠如に不快感を覚え始めました。 最近、JavaでAndroidのネイティブ開発を開始しました。そして、私はコンパイルされた/静的な/強く型付けされた言語によって提供される安全性を(心地よく)思い出しました。 変数のつづりが間違っている、データ型が間違っている、関数の呼び出しが正しくない、些細なエラーがIDE自体でキャッチされます。IDEがコンパイラにフックして、プログラムの「正確性」の特定の側面を検証できるためです。 関数シグネチャを変更する必要がありますか?簡単です。コンパイラ+ IDEは、すべての呼び出しサイトを見つけるのに役立ちます。 特定の例外が常に処理されるようにする必要がありますか?あなたの救助のチェックされた例外。 現在、これらの安全機能には利点がありますが、それらの欠点もよく知っています。さらに、「ボイラープレートヘビー」Javaの世界では。したがって、Javaの代わりに、私は人々が最近作業を開始した多数の現代の「強く型付けされた」言語を見始めました。例:Scala、Rust、Haskellなど。私が最も興味を持っているのは、型システムと静的/コンパイル時チェックの力です。 さて、質問 これらの強力な型システムと静的/コンパイル時機能を大規模なアプリケーションで使用するにはどうすればよいですか? たとえば、これらの強力な機能の標準的な「hello world」のような紹介を超えてどのように移行するのでしょうか リッチタイプシステムを使用してビジネスドメインの問題をモデル化するものはありますか?タイプシステムは、30,000 LOC +ゾーンにいるときに役立ちますか、それとも妨げになりますか?システムが弱く型付けされた外の世界と対話するとき、これらの型システムによって提供されるセーフティネット(およびコンパイル時チェック)に何が起こるか。JSONまたはXML API、さまざまなデータストア、ユーザー入力などを介して

1
汎用C ++ラッパーを使用してRustの所有権モデルを実現できますか?
Rustの並行処理の安全性に関するこの記事をご覧ください。 http://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html これらのアイデアのどれだけがC ++ 11(またはそれ以降)で達成できるのかと思っていました。特に、所有権を渡すメソッドに所有権を譲渡する所有者クラスを作成できますか?C ++には変数を渡す方法がたくさんあるので不可能だと思われますが、クラスまたはテンプレートにいくつかの制限を設けて、メソッドのパスごとにテンプレートコードが実行されるようにすることができますか?

5
プログラムで任意のコードの安全性を評価することは可能ですか?
最近、安全なコードについて多くのことを考えています。スレッドセーフ。メモリセーフ。セグフォールトセーフで自分の顔を爆発させない。ただし、質問を明確にするために、Rustの安全モデルを定義として使用します。 多くの場合、Rustの必要性によって証明されているunsafeように、同時実行など、キーワードを使用しないとRustに実装できない非常に合理的なプログラミングのアイデアがいくつかあるため、安全性の確保はネットでの問題です。unsafe。並行処理が完全にロック、ミューテックス、チャンネルやメモリ分離して安全か何を持って行うことができますが、これは作業が必要です外での錆の安全モデルのをunsafe、その後、手動で、というコンパイラを保証する「うん、私は私がやっているか知っていますこれは安全ではないように見えますが、完全に安全であることを数学的に証明しました。」 しかし、通常、これは手動でこれらのモデルを作成し、定理証明を使用してそれらが安全であることを証明することになります。コンピュータサイエンスの観点(可能か)と実用性の観点(宇宙の生命を奪うことになるか)の両方から、任意の言語で任意のコードを受け取り、それがそうであるかどうかを評価するプログラムを想像するのは合理的です錆びない」 警告: この問題の簡単な解決策は、プログラムが停止しない可能性があるため、停止の問題が失敗することを指摘することです。読者に提供されたプログラムが停止することが保証されているとしましょう 「任意の言語の任意のコード」が目標ですが、これはプログラムが選択された言語に慣れていることに依存していることはもちろん承知しています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.