0

TCP、UDP、およびシリアル接続であらゆる種類のことを実行できる、非常に用途の広い端末/スニファ アプリケーションがあります。

私たちはそれを拡張可能にすることを目指しています。つまり、人々が独自のプロトコル パーサーやハイライターなどを書けるようにすることです。

私たちは製品を拡張するために C に似た言語を作成しましたが、一部のコーダーにとって、これは急な学習曲線をもたらすことがわかりました。

私たちは今、次の質問を熟考しています: C に固執するべきですか、それとも Ruby や Lua のようなものを使用するべきですか?

C はポインターをサポートしているため、低レベルの処理 (バイナリ データの解析など) に適しています。しかし、まさにそのため、学ぶのは難しい場合があります。

Ruby (など) は簡単に習得できますが、ポインターがないため、バイナリ データの解析に関係するものはすべて、すぐに見苦しくなってしまいます。

どう思いますか?バイナリ データを解析する製品を拡張する場合 -- Ruby/Lua または C/C++?

返信する際に背景を教えていただければ幸いです。特に、似たようなことをしたことがある場合はなおさらです。

4

8 に答える 8

4

「世界で最も優れたネットワーク プロトコル アナライザー」であるWiresharkは、以前は Ethereal とも呼ばれていたパケット スニファー/アナライザーでもあります。Lua を使用してカスタム ディセクタとタップを記述できるようにします。マニュアルを参照してください。

ただし、私はそれを使用していないことに注意してください。そのため、API がどれほど優れているか、効果的であるか、習得しやすいかはわかりません。

于 2010-08-20T20:53:32.743 に答える
2

TCL と同様に、Luaはアプリケーションと緊密に統合されるように設計されています。個人的には、Lua の構文とイディオムは TCL よりもはるかに扱いやすいと思います。

Lua は、既存のシステムとの統合や拡張が容易です。また、製品の内部に完全にアクセスすることなく、ユーザー提供のコードを実行できる安全なサンドボックスを作成することもかなり簡単です。

于 2010-08-21T09:34:45.027 に答える
1

API を記述した場合、違いはありますか? C に似た API を使用する人は、値渡しと参照渡しの違いを理解するだけで済みます。

于 2010-08-20T19:17:09.420 に答える
1

あなたのコアは非常に良いことを1つ行います。そのようにしましょう。良い UNIX 設計のやり方と同じように、std in/out に基づいて API を作成する必要があると思います。その後、誰でも任意の言語で拡張できます。

于 2010-08-20T19:17:19.587 に答える
0

社内の言葉を捨てて、1つのことをする限り、あなたが何をするかは重要ではないと思います。Cをスクリプト言語にすることを選択したようです。これに関して私が目にする問題の1つは、Cプログラマーにはなじみがあるように見えますが、同じではないということです。既存のCプログラマーを快適にするCのセマンティクスを模倣したとは想像できません。そして、あなたが言ったように、他の人は学ぶのが難しいと感じるでしょう。

私が働いている会社は独自の言語を開発しました。構造にXMLを使用しているため、解析が簡単です。言語は「必要に応じて」成長します。つまり、機能が欠落している場合は追加されます。XMLデータベースから制御フローを必要とするものに移行したと確信しています。しかし、私のポイントは、言語として構築することを考えていない場合、ユーザーが意図せずにそれを使用して実行できることを制限することになるということです。

個人的には、Luaを利用し始める方法を検討してきました。そして特にいくつかの理由でLua。Luaは、汎用の拡張言語として開発されました。PythonやRubyなどの言語と簡単にインターフェースできます。プログラマー以外の人が使用するために小さくて簡単です(あなたの場合は実際には必要ありません)。XML、INI ...を構成設定に置き換えるのは簡単で、別のプログラミング言語の必要性を置き換えるのに十分強力です。

http://www.lua.org/spe.html

于 2010-09-17T16:53:19.490 に答える
0

perl、sed、awk、lex、antler、... これらは、私がこのようなものを書きたいと思っている、私がある程度慣れている言語です。ただし、それはデータフローに依存します。

何を使うのが正しいかを言うのは本当に難しいです。他の誰も言及していないと思うのは、スクリプトにはバグがあることを覚えておくことです。スクリプトのバグ (特に実行時エラー) が「スクリプトのエラー」を表示するか、システム全体を強制終了するような方法で、このようなものを設計するのは非常に簡単です。

スクリプトが単体テスト可能であること、および失敗が再現可能であることを維持する必要があります。

于 2010-08-20T19:44:25.213 に答える
0

Tcl は、C プログラムのスクリプト作成を可能にすることを目的として設計されたため、実装がはるかに簡単になります。

http://en.wikipedia.org/wiki/Tcl#Interfacing_with_other_languages

于 2010-08-20T19:22:25.610 に答える
0

私はヨハンの考えに賛成です。過去にこのようなことをしなければならなかったとき、私は C 言語 API に固執し、人々は C 言語のみを使用するように制限されていました。しかし今見てみると、ヨハンが説明したようにすればもっと効率的だったのにと思います。

PS: 偶然にも、パケット スニファーを使用したプロトコル テスト アプリでした。

于 2010-08-20T19:26:20.547 に答える