需要努力从C端口移植到Java

时间:2009-09-09 12:06:37

标签: java c

有没有人指出(粗略)估计将应用程序从C移植到Java所需的工作量?当然,这将取决于很多,但是 例如,使用Intermediate COCOMO是否有意义?

估计编写新代码需要多少工作量很困难,但仍需要完成。当从零开始时,涉及很多猜测。如果你从一个现有的代码库开始,我会认为估计至少会更容易一点,这是我询问的动机之一,如果有人有任何更容易的输入。

任何研究显示转换说100万行C代码通常会产生50 000到100 000或10万到20万行Java代码?转换可能只意味着来自C的端口,或者它可能意味着重写为Java。两者当然会给出不同的结果,但两者都会很有趣(我不是在寻找单一答案)。

5 个答案:

答案 0 :(得分:12)

最好不要把它留在C中,或者用Java重新创建它。

原因如下:

如果你只是端口它,你最终会得到“用Java编写的C”。使用Java时,您将无法获得任何好处。你会引入bug(每个端口都会引入bug),所以你的用户会不高兴。净结果:努力消耗,用户不满意,没有积极的结果。

相比之下,将它留在C中也意味着没有积极的结果,但至少没有花费任何努力。

仅供参考:如果您决定使用Java重新设计系统,使用OO原则和Java框架以及随之而来的所有内容,那么需要花费精力,但您会获得更积极的结果。

答案 1 :(得分:3)

我认为我要做的是将应用程序的基本功能与用户界面分开。您可以通过JNI调用C库。如果您的设计干净地将显示与底层处理分开,那么只需迁移用户界面就可以节省大量时间。

答案 2 :(得分:2)

正如评论已经提到的那样,答案在很大程度上取决于您的应用程序的工作方式。

如果您的C代码几乎是面向对象的(传递结构,编写指向这些结构的指针的方法,......)那么转换就会变得相对容易。

如果您的C代码在指针算法,工会甚至某些直接硬件访问中大量使用,那么Java的端口几乎不可能(除非将您的C代码“包装”在瘦JNI / JNA层中)

即使您设法进行转换,生成的Java代码也只是Java语法。 C传承仍将熠熠生辉并为自己所知。

答案 3 :(得分:2)

这在很大程度上取决于您期望的结果以及您的代码库。在没有真正使用面向对象的情况下移植到java是可能的,但肯定不会赢得你的选美比赛。如果代码本身已经是面向对象的,那就更好了。如果你使用各种预处理器技巧,那么移植到java会带来很多困难。使用OS调用相同(因为java本身(没有JNI)不支持许多非泛型调用。

答案 4 :(得分:2)

这是一个非常粗略的指标:

12 + [number of lines]/1000 - [number of comments]/50
+ [number of functions]/100 + [number of pointer variables]/50
+ [number of macros]/10     + [number of bitwise operators]/5
+ [number of #if[def]s]/3   + [number of function pointers]/2
+ [number of pointer casts and unions]/2
- [average variable name length]

你得到一个数小时的数字。