• 生活小妙招免费各类生活中的小问题知识以及音乐简谱等,是你了解世界未知知识的好地方。

用C#、C++、Java能编写出Adobe等级的行业软件吗?

十万个为什么 空空 2024-4-05 08:40:36 3次浏览

关于问题用 C#、C++、Java 能编写出 Adobe 等级的行业软件吗?一共有 2 位热心网友为你解答:

【1】、来自网友【犍为真人】的最佳回答:

用 C++当然可以写出 adobe 的软件,因为它们本身就是用 C/C++写的。这里我没有区分 C 和 C++,可以不严格地认为后者就是前者的超集。

现在重点讨论的是 C#和 Java 到底能不能写出类似 adobe 这样的软件。

二八原则我们都听过,我们多数人可能只用到了 adobe 的 20%的功能,但是它却可以满足 80%的需求。如果问我们能否用 C#和 Java 去实现这 20%最基本的功能,那自然是没有问题的。现在网上就有用 C#写的图像处理软件,对标 photoshop。

但是一个优秀软件、专业软件,它们的竞争力恰好是那普通人很少用的功能。就像一辆汽车一样,基本功能很多厂家都能做(有的国产车可以卖到 5 万以下),绝对能满足多数人 80%甚至 99%的代步功能。而贵车就强在一些不常用或不必须的功能,安全问题就是其中之一。我们可能一辈子都经历不了一次车祸,但是遇到了,贵车就更能保命。

我们先以 adobe 的 photoshop 为例。基本的图像处理,对于 C#和 Java 来说那都不是事,无非就是加载图片、缩放、颜色、像素、保存等等这些东西。但是,很多人可能没有意识到,C#和 Java 是运行在虚拟机上的,它们的核心代码用的就是 C/C++。当我们写一个 Jpg 加载程序时,你以为你写的是纯粹的 C#和 Java,而实际上后端的关键实现是用的 C 语言。

为了证实这一点,我特地去网上下载了一份 JDK 的源码,清清楚楚地看到了在某一个 native 目录下,放着用 C 语言写的 JPG 处理程序。

除了 Jpg,还有 zip 压缩、音频、视频处理也是用的 C 语言。

网上几乎很难找到有用纯 C#和 Java 写的 JPG 处理程序。光是 JPG 的图片格式,都可以写一本书。不是那么容易的。就算写出来了,其性能也远远不如 C/C++。

你可能会说两点:一、虚拟机自带的 JPG 足够用了,那本身就是标准库,是语言的一部分。第二、用纯 C#和 Java 去实现 JPG 等算法,似乎性能不会低,无所谓。

第一、JVM 和.Net framework 自带的 JPG 能满足大部分需求,但是一旦涉及优化和修改,就傻眼了。而 PS 专业处理图像,必定需要反复优化。举个不一定对的例子,或许虚拟机只能处理某种最最主流的 Jpg 标准,遇到非主流就无能为力了。

第二、在底层算法方面,C#和 Java 是无法与 C/C++比速度的。这得益于后者对内存的精确掌控。这个具体原因讨论起来可以单独开一个帖子了,就不再展开。只说结论,现在主流的各类语言,在涉及复杂算法,特别是运算密集型时都用的 C 和 C++(也有用 fortran、go、rust 的)。JPG、压缩、加密、MP3、MP4、机器学习,等等。说到机器学习,有人说脚本语言 python 不是大行其道吗?其实 python 的大部分优秀算法底层都是 C/C++,比如大名鼎鼎的 tensorflow。

至于说现在硬件性能很高了,性能低一点无所谓,这就又回到之前的问题了,就是什么叫专业软件。一辆 5 万的汽车和 50 万的汽车,性能差别也是几乎可以忽略不计。起步块?动力足?跑高速能飙到 180?这就是二八原理了,人们往往反而喜欢这些不太重要的细节。我哪怕起步比你快 0.1 秒,我也自豪!你先别管我敢不敢跑不跑 180 码……专业软件也是如此,就是快,你别管我快几秒能干啥。要的就是体验……

上面说的还主要是 JPG 举例。如果遇到音频、视频这类专业 adobe 软件,C#和 Java 将更显得无力。尤其是视频。JPEG,比 MPEG-4,完全不在一个难度系数等级,对性能要求也高很多很多。不信?你看看网上能不能找到相关的 MP4 源代码,C 语言除外。

其实 C#和 Java 也是可以写出类似 adobe 的专业软件,只不过不是纯粹的,是要和 C/C++结合使用。前者负责写上层框架,特别是图形界面,后者负责其中一部分复杂的算法实现。

【2】、来自网友【扣扣熊】的最佳回答:

上述 3 中平台都可以编写出你想要的行业软件,但是如果真的编写首推 C++。

C++完全可以编写出不错的行业软件,因为 C++比较底层,可以操作指针、内存、硬盘分区等。以上特性可以完美处理计算机对应图像处理的高难度需求。看似简单的图像处理软件其实对底层算法有这很高的要求,这时候 C++的指针以及对内存的直接控制可以帮助软件提升处理能力与运行速度。顺便一提现在很多游戏中提到的游戏引擎也是使用 C++写的内核。毕竟 C++又叫做“带类的 C 语言”。

反观 C#与 JAVA 就比较高端,他们都在底层的外壳上包装了一层。JAVA 叫做 java 虚拟机,而 C#使用 framework。由于 C 与 C++的超级灵活性,对于软件编写的安全性等问题 C#和 JAVA 基本取消了指针这种神一般的类型,取而代之的是委托、继承、重载。可以说 C#JAVA 完全做到了面向对象编程,如果使用这 2 款平台开发在运行速度上会有所欠缺。

手工回答不易,点个赞再离去。

喜欢 (0)