我们应该使用什么语言让人们扩展我们的终端/嗅探器程序?
我们拥有一个非常多功能的终端/嗅探应用程序,可以处理TCP、UDP和串行连接。
我们希望将其扩展,即,允许人们编写自己的协议解析器、高亮器等。
我们为扩展产品创建了一种类似于C的语言,然后发现对于一些编程人员来说,这会带来很大的学习曲线。
现在我们在思考这个问题:我们应该坚持使用C还是转向Ruby或Lua等语言?
C对于低级别的事情(比如解析二进制数据)非常优美,因为它支持指针。但正因为这个原因,它可能很难学习。
Ruby(等等)很容易学习,但没有指针,所以任何与解析二进制数据有关的东西都会很快变得丑陋。
你认为呢?对于解析二进制数据的产品扩展——Ruby / Lua还是C / C++?
如果您有类似的经验,那么最好在回答时提供一些背景信息。
原文链接 https://stackoverflow.com/questions/3534081
你的核心非常擅长做一件事情,很好。就让它保持这样子吧。我认为你应该基于标准输入/输出创建一个 API,就像良好的 Unix 设计一样。这样,任何人都可以用任何语言扩展它。
Tcl 的目标是允许为 C 程序编写脚本,因此实现起来会更容易。
http://en.wikipedia.org/wiki/Tcl#Interfacing_with_other_languages
我支持 Johan 的想法。虽然以前当我必须做这样的事情时,我只坚持使用 C 语言的 API, 而且人们只能使用 C 语言。但现在看来,我们按照 Johan 描述的方式做将更加高效。
顺便说一下,那时我正在做一个使用数据包嗅探器的协议测试应用程序。
我支持 Johan 的想法。虽然以前当我必须做这样的事情时,我只坚持使用 C 语言的 API,
而且人们只能使用 C 语言。但现在看来,我们按照 Johan 描述的方式做将更加高效。
顺便说一下,那时我正在做一个使用数据包嗅探器的协议测试应用程序。
perl
, sed
, awk
, lex
, antler
, ... 这些编程语言我略有了解,我希望能够用其中一种编写这样的程序。不过这要取决于数据流程。
很难说哪种语言是正确的选择。还有一点需要考虑的是,这些脚本可能存在 bug。设计时很容易出现这种情况,即一个脚本的 bug,特别是运行时错误,要么只会出现 "error in script",要么就会导致整个系统崩溃。
你应该确保这些脚本是可单元测试的,并且故障是可重现的。
Wireshark是“世界上最重要的网络协议分析器”,也是一个数据包嗅探/分析工具,以前也被称为Ethereal。它使用Lua来支持编写自定义解剖器和监听器,请参见[手册](http://www.wireshark.org/docs/wsug_html_chunked/wsluarm.html)。
但是,请注意,我没有使用过它,因此我无法评价API的好坏/有效性/易学性。
像 TCL 一样,Lua 的设计也是为了与应用程序紧密集成。个人而言,我发现 Lua 的语法和习惯用法比 TCL 更容易处理。
Lua 很容易与现有系统集成,并且也很容易扩展。此外,它也相当容易创建安全的沙箱,使用户提供的代码可以在不完全访问您产品的内部组件的情况下运行。
我认为,只要你做某件事情,放弃公司内部语言就没有问题。听起来你选择把 C 语言变成脚本语言。我发现一个问题,就是它看起来对于 C 程序员来说很熟悉,但实际上并不相同。我无法想象你已经模仿了能让现有的 C 程序员感到舒适的 C 语义。并且正如你所提到的,其他人会发现学习它很困难。
我工作的那家公司开发了自己的语言。它使用 XML 作为结构,因此解析很容易。这种语言是“按需增长”的,这意味着如果缺少某个功能,就会被添加。我相当确定,它从 XML 数据库变成了需要控制流的东西。但我的观点是,如果你不考虑把它构建为一种语言,那么你会无意中限制用户可以使用它做的事情。
就我个人而言,我一直在思考如何让公司开始利用 Lua。特别是出于几个原因而选择了 Lua。Lua 是作为一种通用扩展语言开发的。它轻松地与包括 Python 和 Ruby 在内的语言进行接口。它对于非程序员来说足够简单易懂(在你的情况下不是非常必要)。它足够简单,可以替换 XML、INI...... 用于配置设置,并且足够强大,可以替换需要另一种编程语言的情况。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
如果你有一个编写好的 API,那会有什么不同吗?使用类似于 C 的 API 的人只需要理解传递值或引用的区别即可。