我们有一个非常通用的终端/嗅探器应用程序,可以使用TCP,UDP和串行连接执行各种操作。
我们希望让它可扩展 - 即允许人们编写自己的协议解析器,荧光笔等。
我们创建了一种类似C语言来扩展产品,然后发现对于某些程序员来说,这会带来陡峭的学习曲线。
我们现在正在思考这个问题:我们应该坚持使用C或使用像Ruby或Lua这样的东西吗?
C对于低级别的东西(比如解析二进制数据)来说很漂亮,因为它支持指针。但正是由于这个原因,学习起来可能很难。
Ruby(等)很容易学习,但没有指针,因此任何与解析二进制数据有关的事情都会变得非常快。
你怎么看?用于扩展解析二进制数据的产品 - Ruby / Lua或C / C ++?如果你能在回答时给出一些背景信息会很好 - 特别是如果你做了类似的事情。
答案 0 :(得分:4)
Wireshark,“世界上最重要的网络协议分析器”,也是一个数据包嗅探器/分析器,以前也称为Ethereal。它使用Lua来编写自定义解剖器和水龙头,请参阅the manual。
但是,请注意我还没有使用它,所以我不知道API是多么好/有效/容易学习。
答案 1 :(得分:2)
与TCL一样,Lua旨在与应用程序紧密集成。就个人而言,我发现Lua的语法和习语比TCL更容易处理。
Lua易于与现有系统集成,并且易于扩展。创建安全的沙箱也很容易,用户提供的代码可以在没有完全访问产品内部的情况下运行。
答案 2 :(得分:1)
如果你有一个API写的它会有所作为吗?使用类C语言API的人只需要理解传递值或引用之间的区别。
答案 3 :(得分:1)
你的核心做得很好,很好。就这样吧。我认为您应该基于std in / out创建一个API,就像良好的unix设计一样。然后任何人都可以用任何选择的语言扩展它。
答案 4 :(得分:0)
Tcl的设计目标是允许C程序编写脚本,因此实现起来会容易得多。
http://en.wikipedia.org/wiki/Tcl#Interfacing_with_other_languages
答案 5 :(得分:0)
我是约翰的第二个想法。虽然过去当我不得不做这样的事情时我坚持了 C语言API和人员仅限于使用C语言。但现在我看一下, 我意识到,如果我们按照约翰所描述的那样做,那会更有效率。
PS:巧合的是,这是一个使用数据包嗅探器的协议测试应用程序
答案 6 :(得分:0)
perl,sed,awk,lex,antler,...这些是我有点熟悉的语言,我想写这样的东西。但这取决于数据流。
很难说正确使用的是什么。我认为没有人提到过的东西是要记住脚本会有bug。设计这样的东西非常容易,因为脚本中的错误(特别是运行时错误)只是显示“脚本错误”或者杀死整个系统。
您应该保持脚本应该是可单元测试的,并且失败应该是可重现的。
答案 7 :(得分:0)
只要你做一件事,放弃内部语言,我认为你做的事情并不重要。听起来你选择将C变成脚本语言。我看到的一个问题是C程序员看起来很熟悉,但不一样。我无法想象你已经模仿了C的语义,这将使现有的C程序员感到舒服。正如你所提到的,其他人会发现很难学习。
我工作的公司已经开发了自己的语言。它使用XML作为结构,因此解析很容易。语言“根据需要”增长。意味着如果缺少某个功能,则会添加该功能。我很确定它是从XML数据库转到需要控制流的东西。但我的观点是,如果你没有考虑将它作为一种语言来构建,那么你将无意中限制用户可以用它做什么。
就个人而言,我一直在研究如何让公司开始利用Lua。特别是Lua有几个原因。 Lua是一种通用的扩展语言。它可以轻松地与语言连接,包括Python和Ruby。它非常小而且非常容易被非程序员使用(在您的情况下并不是真的需要)。它足以简单地替换XML,INI ...用于配置设置,并且功能强大,足以取代对另一种编程语言的需求。