論文の概要: To Tag, or Not to Tag: Translating C's Unions to Rust's Tagged Unions
- arxiv url: http://arxiv.org/abs/2408.11418v1
- Date: Wed, 21 Aug 2024 08:23:51 GMT
- ステータス: 処理完了
- システム内更新日: 2024-08-22 17:59:43.073217
- Title: To Tag, or Not to Tag: Translating C's Unions to Rust's Tagged Unions
- Title(参考訳): タグにするか、タグにしないか: CのユニオンをRustのタグ付きユニオンに翻訳する
- Authors: Jaemin Hong, Sukyoung Ryu,
- Abstract要約: C-to-Rust変換は、レガシーシステムソフトウェアの信頼性を高めるための有望な方法である。
産業的に開発されたトランスレータであるC2Rustは、安全でない機能を備えたRustコードを生成する。
我々は、C-to-Rust翻訳において、ユニオンをタグ付きユニオンに置き換える手法を提案する。
- 参考スコア(独自算出の注目度): 10.16257074782054
- License: http://creativecommons.org/licenses/by/4.0/
- Abstract: Automatic C-to-Rust translation is a promising way to enhance the reliability of legacy system software. However, C2Rust, an industrially developed translator, generates Rust code with unsafe features, undermining the translation's objective. While researchers have proposed techniques to remove unsafe features in C2Rust-generated code, these efforts have targeted only a limited subset of unsafe features. One important unsafe feature remaining unaddressed is a union, a type consisting of multiple fields sharing the same memory storage. Programmers often place a union with a tag in a struct to record the last-written field, but they can still access wrong fields. In contrast, Rust's tagged unions combine tags and unions at the language level, ensuring correct value access. In this work, we propose techniques to replace unions with tagged unions during C-to-Rust translation. We develop a static analysis that facilitates such replacement by identifying tag fields and the corresponding tag values. The analysis involves a must-points-to analysis computing struct field values and a heuristic interpreting these results. To enhance scalability, we adopt intraprocedural function-wise analysis, allowing selective analysis of functions. Our evaluation on 35 real-world C programs shows that the proposed approach is (1) precise, identifying 74 tag fields with no false positives and only five false negatives, (2) mostly correct, with 17 out of 23 programs passing tests post-transformation, and (3) scalable, capable of analyzing and transforming 192k LOC in 4,910 seconds.
- Abstract(参考訳): 自動C-to-Rust翻訳は、レガシーシステムソフトウェアの信頼性を高めるための有望な方法である。
しかし、産業的に開発されたトランスレータであるC2Rustは、安全でない特徴を持つRustコードを生成し、翻訳の目的を損なう。
C2Rust生成コードで安全でない機能を削除するためのテクニックが提案されているが、これらの取り組みは、安全でない機能の限られたサブセットのみを対象としている。
安全でない重要な機能のひとつがunionであり、同じメモリストレージを共有する複数のフィールドからなる型である。
プログラマは、最後に書き込まれたフィールドを記録するために、構造体にタグ付きのユニオンを置くことが多いが、それでも間違ったフィールドにアクセスすることができる。
対照的に、Rustのタグ付きユニオンは、タグとユニオンを言語レベルで組み合わせ、適切な値アクセスを保証する。
そこで本研究では,C-to-Rust翻訳において,ユニオンをタグ付きユニオンに置き換える手法を提案する。
我々は,タグフィールドと対応するタグ値を識別することで,そのような置換を容易にする静的解析を開発する。
この分析には、計算構造体の値とこれらの結果のヒューリスティック解釈が含まれる。
拡張性を高めるために、我々は、関数の選択的解析を可能にする、声道内関数ワイズ分析を採用した。
提案手法は,(1)偽陽性のない74のタグフィールドと5つの偽陰性のみを同定し,(2)23のプログラムのうち17のプログラムがトランスフォーメーション後のテストに合格し,(3)スケーラブルで,192kLOCを4,910秒で解析・変換できる。
関連論文リスト
- Context-aware Code Segmentation for C-to-Rust Translation using Large Language Models [1.8416014644193066]
大きな言語モデル(LLM)は、ルールベースのメソッドよりも自然で安全なコードを生成することで、この翻訳を自動化することを約束している。
大規模Cコードをコンパイル可能なRustコードに変換する際の成功率を改善するLLMベースの翻訳方式を提案する。
4キロのコードを含む20のベンチマークCプログラムの実験では、すべてのプログラムをコンパイル可能なRustコードに変換することに成功した。
論文 参考訳(メタデータ) (2024-09-16T17:52:36Z) - VERT: Verified Equivalent Rust Transpilation with Large Language Models as Few-Shot Learners [6.824327908701066]
Rustはメモリ安全性と低レベルのコントロールを組み合わせたプログラミング言語で、Cライクなパフォーマンスを提供する。
既存の作業はルールベースと大規模言語モデル(LLM)という2つのカテゴリに分類される。
私たちは、正式な正確性を保証する形で、可読性のあるRustトランスパイルを生成するツールであるVERTを紹介します。
論文 参考訳(メタデータ) (2024-04-29T16:45:03Z) - FoC: Figure out the Cryptographic Functions in Stripped Binaries with LLMs [54.27040631527217]
削除されたバイナリの暗号関数を抽出するFoCと呼ばれる新しいフレームワークを提案する。
まず、自然言語における暗号関数のセマンティクスを要約するために、バイナリ大言語モデル(FoC-BinLLM)を構築した。
次に、FoC-BinLLM上にバイナリコード類似モデル(FoC-Sim)を構築し、変更に敏感な表現を作成し、データベース内の未知の暗号関数の類似実装を検索する。
論文 参考訳(メタデータ) (2024-03-27T09:45:33Z) - Go Static: Contextualized Logging Statement Generation [38.15795803230719]
SCLoggerは、メソッド間の静的コンテキストを持つコンテキスト化されたロギングステートメント生成アプローチである。
SCLoggerは最先端のアプローチを8.7%のロギング精度、32.1%のレベル精度、19.6%の変数精度、138.4%のテキストBLEU-4スコアで上回っている。
論文 参考訳(メタデータ) (2024-02-20T12:22:59Z) - Yuga: Automatically Detecting Lifetime Annotation Bugs in the Rust Language [15.164423552903571]
Rustプロジェクトでは、セキュリティ上の脆弱性が報告されている。
これらの脆弱性は、部分的には関数シグネチャの誤った終身アノテーションから生じます。
既存のツールはこれらのバグを検出するのに失敗する。
我々は,新たな静的解析ツールであるYugaを考案し,潜在的なライフタイムアノテーションのバグを検出する。
論文 参考訳(メタデータ) (2023-10-12T17:05:03Z) - Guess & Sketch: Language Model Guided Transpilation [59.02147255276078]
学習されたトランスパイレーションは、手作業による書き直しやエンジニアリングの取り組みに代わるものだ。
確率的ニューラルネットワークモデル(LM)は、入力毎に可塑性出力を生成するが、正確性を保証するコストがかかる。
Guess & Sketch は LM の特徴からアライメントと信頼性情報を抽出し、意味的等価性を解決するためにシンボリック・ソルバに渡す。
論文 参考訳(メタデータ) (2023-09-25T15:42:18Z) - Semi-DETR: Semi-Supervised Object Detection with Detection Transformers [105.45018934087076]
半教師付き物体検出(SSOD)におけるDETRに基づくフレームワークの解析
本報告では,第1次変圧器を用いたエンド・ツー・エンド半教師対象検出器であるSemi-DETRについて述べる。
我々の手法は、最先端の手法をクリアマージンで上回る。
論文 参考訳(メタデータ) (2023-07-16T16:32:14Z) - Generalized Funnelling: Ensemble Learning and Heterogeneous Document
Embeddings for Cross-Lingual Text Classification [78.83284164605473]
emphFunnelling (Fun)は、最近提案された言語間テキスト分類手法である。
Emph Generalized Funnelling (gFun) はFunの一般化である。
gFunは、Funや最先端のベースラインよりも大幅に改善されていることを示す。
論文 参考訳(メタデータ) (2021-09-17T23:33:04Z) - Zero-Shot Cross-lingual Semantic Parsing [56.95036511882921]
7つのテスト言語に対する並列データを持たないゼロショット問題として,言語間セマンティックパーシングについて検討した。
英文論理形式ペアデータのみを用いて解析知識を付加言語に転送するマルチタスクエンコーダデコーダモデルを提案する。
このシステムは、ゼロショット解析を潜時空間アライメント問題としてフレーム化し、事前訓練されたモデルを改善し、最小のクロスリンガル転送ペナルティで論理形式を生成することができる。
論文 参考訳(メタデータ) (2021-04-15T16:08:43Z) - Inducing Language-Agnostic Multilingual Representations [61.97381112847459]
言語間の表現は、世界中のほとんどの言語でNLP技術が利用可能になる可能性がある。
i) 対象言語のベクトル空間をピボットソース言語に再配置すること、(ii) 言語固有の手段と分散を取り除くこと、(ii) 副産物としての埋め込みの識別性を向上すること、(iii) 形態的制約や文の並べ替えを除去することによって言語間の入力類似性を高めること、の3つのアプローチを検討する。
論文 参考訳(メタデータ) (2020-08-20T17:58:56Z)
関連論文リストは本サイト内にある論文のタイトル・アブストラクトから自動的に作成しています。
指定された論文の情報です。
本サイトの運営者は本サイト(すべての情報・翻訳含む)の品質を保証せず、本サイト(すべての情報・翻訳含む)を使用して発生したあらゆる結果について一切の責任を負いません。