Programming languages microISV应该使用什么语言编写商业软件?

Programming languages microISV应该使用什么语言编写商业软件?,programming-languages,Programming Languages,我已经用Java编写软件很多年了,但它总是用于部署到服务器上的内部应用程序。我现在想开始编写桌面应用程序,但我不知道从哪里开始。我已经编写了一些Java/Swing应用程序,但它们也是供内部使用的 我的理解是,Java和其他半编译和解释语言太容易进行逆向工程,因此不适合商业软件。我知道有针对Java和其他解释语言的编译器,但我也听说它们价格昂贵和/或不可靠 假设我创办了一家microISV,并希望开发和销售应用程序给广大受众,那么我的最佳选择是什么?我更喜欢可以编写一次,并针对不同操作系统进行编

我已经用Java编写软件很多年了,但它总是用于部署到服务器上的内部应用程序。我现在想开始编写桌面应用程序,但我不知道从哪里开始。我已经编写了一些Java/Swing应用程序,但它们也是供内部使用的

我的理解是,Java和其他半编译和解释语言太容易进行逆向工程,因此不适合商业软件。我知道有针对Java和其他解释语言的编译器,但我也听说它们价格昂贵和/或不可靠


假设我创办了一家microISV,并希望开发和销售应用程序给广大受众,那么我的最佳选择是什么?我更喜欢可以编写一次,并针对不同操作系统进行编译的内容,但如果其他语言会影响Windows的体验(安装简易性和用户体验),我并不反对.NET和只使用Windows的用户。我唯一的问题是,我没有一个庞大的启动预算,而且向wazoo支付所需开发工具的费用也不太可能。

好吧,如果你想成为一个独立的服务供应商,而不是一个软件供应商,那么从某种意义上说,如果你使用像Java这样可以反编译的语言,这并不重要。因为你会把自己推销成为客户集成和定制软件的最佳人选。软件是真正让你赚钱的东西的传递机制:你和你的技能。许多公司通过免费赠送他们的软件和承包他们的服务来为他们的客户安装软件来赚取利润。您可以通过使用模糊器在某种程度上缓解Java反编译问题,但这是一场错误的战斗

如果你想通过销售软件而不是服务来赚钱,那么Java将是一条相对危险的路线


这完全取决于你的商业计划。

如果你要创办一家一人公司,那么你就是在推销你的个人专长。因此,你使用的语言必须是你最熟悉和最精通的一种(或两种)。我很惊讶你觉得有必要问这个问题

人们为什么要对你的软件进行逆向工程?他们可能会盗版,但无论你使用何种语言,你都无法阻止盗版。我怀疑你有一个绝密的算法,你试图隐藏,在这种情况下,逆向工程可能是一个问题

你应该选择你最了解的东西,Java可以很好地工作

如果您打算切换到另一种语言,我建议您看看Qt。Qt是一个免费的开源C++跨平台工具包,允许您编写应用程序,这些程序将以最小的努力在Windows、MAC和Linux上编译和运行。您可以使用Qt及其LGPL许可证免费编写商业软件


编辑:GCJ将Java编译为本机代码,但只支持Java1.4。

任何代码都可以在一定程度上进行反编译。我认为您可以将Java混淆到一定程度,从而阻止随意的用户。。。但我认为其他人一针见血。在所有不使用Java的原因中,反编译的易用性应该是非常低的。如果这就是阻止你前进的原因,那就努力吧!Google Java Fuzzcate,你会发现一些东西。

我对用Java编写的复杂软件进行反向工程的风险表示怀疑,但出于你的问题,我愿意规定它。我假设同样的问题排除了仅在JVM上实现的任何其他语言

Java最突出的方面是

  • 静态类型系统
  • 基于类的对象系统
  • 自动内存管理
  • 类/接口系统外没有独立的函数或模块
  • 仿制药
这种组合可以在C#之类的语言中复制,但我假设您对分发JVM字节码的反对意见也适用于MSIL字节码

我很难想出一种具有所有这些特性的语言。以下是附近的一些语言:

  • 除了自动内存管理之外,C++拥有所有功能,另外它还允许独立的函数。然而,C++通用机制(模板)不是针对心脏的模糊,它还没有支持模块化类型检查。与Java相比,它具有更多的灵活性,但也有更多的方法可以让你一脚踢开。小心使用

  • < > >模块-3具有上述所有的内容,但本质上是一种死语言,加上C++,没有泛型的模块化检查。

  • 我对埃菲尔不够熟悉,无法做出很好的比较,但我认为值得研究一下

  • 德尔菲可能也值得研究。除了泛型之外,它似乎拥有上述所有功能。它主要是一个专有的Windows环境(以前称为Object Pascal),但似乎存在一个支持Delphi的开源“Free Pascal”编译器

  • 有许多面向对象的语言具有自动内存管理和动态类型,其中可能会重点介绍ruby、Python和Smalltalk。所有这些都不能很好地、可靠地编译成独立的本机代码,尽管它们都在推动某种形式的实验编译。它们都是动态类型的,这与您习惯的情况大不相同

如果我处在你的位置,我可能会继续使用Java,并承担一些逆向工程的风险。反编译器并不像你想象的那么好,它们也不会产生可维护性很强的代码。但是,如果您真的希望能够生成本机代码,我将研究Delphi和Eiffel。(我自己会使用Modula-3,但那是因为我曾经在学习上投入了大量精力