托pipe代码(特别是.NET)是否可以成为“非托pipe”?

托pipe代码(特别是.NET)是否可以成为“非托pipe”?,第1张

概述托pipe代码(特别是.NET)是否可以成为“非托pipe”?

最近我正在和几个月前开始C ++课程的朋友(他第一次接触编程)交谈。 一般来说,我们已经谈到了C#和.NET的主题,他向我指出,他认为这是所有常见问题(低速,易碎字节码等)的“注定”。 我在所有这些问题上都同意他的观点,但是我不得不说,这是注定的,只是因为我觉得,像C#这样的语言可能会成为本地代码(如果微软select将.NET的实现从字节码,JIT运行时环境直接编译为本地代码,就像你的C ++程序那样)。

我的问题是,我在这里吃午饭吗? 我的意思是,它可能需要很多的工作(可能会打破太多的东西),但是没有什么types的魔法屏障阻止了C#代码的本地编译(如果有人想这么做的话),对吧? 曾经有一段时间C ++被认为是一种非常高级的语言(现在它仍然是,但是不像以前那么多),现在它已经成为微软本土API的基石(和C一样)。 .NET有朝一日和C ++在这方面的水平似乎只是时间和精力的问题,而不是语言devise中的一些基本缺陷。

编辑 :我应该补充说,如果.NET的本地编译是可能的,为什么微软select不走这条路线? 为什么他们select了JIT字节码path?

windows窗体Webbrowser控件和iframe

使用BinaryReader读取大文件(> 1 GB)时,最佳缓冲区大小是多less?

将批处理shell脚本输出读入C#.Net程序

如何为xbuild添加缺less的程序集引用? (单声道/ linux)的

如何获得当前windows用户的*networking身份,而不是他们的交互式login身份?

使用CreateDirectory时奇怪的exception消息

如何在两个窗口服务之间形成依赖关系

windows窗体.net框架中的位移控件

通过C#确定本地组的成员

如何使表格停留在另一个上面

Java使用字节码。 C#虽然使用IL作为中间步骤,但总是编译为本机代码。 IL永远不会像Java字节码那样被直接解释执行。 你甚至可以在分发前预编译IL,如果你真的想的话(提示:如果你不这样做,长期来看性能通常会更好)。

C#慢的想法是可笑的。 一些winforms组件很慢,但是如果你知道你在做什么,C#本身就是一个非常快速的语言。 在这个时代,通常归结为算法, 语言的选择不会帮助你,如果你实施一个不好的泡沫排序。 如果C#可以帮助您从更高层次使用更高效的算法(以我的经验,通常会这样做),这将超越其他任何速度问题。

根据你的编辑,我也想再次解释(典型的)编译路径。

C#被编译为IL。 这个IL被分配给本地机器。 用户运行该程序,然后该程序被JIT编译为该机器的本地代码一次 。 用户下一次在该机器上运行该程序时,他们正在运行一个完全原生的应用程序。 还有一个JIT优化器,可以把事情弄糊涂,但这是一般的情况。

这样做的原因是允许单个机器进行适合于该机器的编译时优化。 平均而言,如果您将相同的完全编译的应用程序分发给每个人,则平均得到的代码更快。

关于反编译:

首先要注意的是,如果您真的想要,可以在分发之前预编译为本机代码。 在这一点上,你已经接近与分发本地应用程序相同的水平。 但是,这不会阻止一个坚定的个人。

这也在很大程度上误解了经济。 是的,有人可能会对你的工作进行逆向工程。 但是这个假设应用程序的所有价值都在技术上。 程序员高估代码非常普遍,并且低估了产品的执行情况:界面设计,市场营销,与用户连接以及持续的创新。 如果你这样做是正确的,那么一点额外的竞争将会帮助你,就像在你的市场上建立需求一样。 如果你做错了,隐藏你的算法不会救你。

如果您更担心自己的应用出现在商店网站上,那么您就更加被误导了。 无论如何,它会出现在那里。 一个更好的策略是吸引这些用户 。

目前,采用(imo)的最大障碍是可重新分发的框架已经变得庞大。 希望他们能在相对较近的版本中解决这个问题。

你是否暗示C#是托管代码的事实是一个设计缺陷?

C#可以使用NGEN等工具进行本地编译,MONO(开放源代码.net框架)团队开发了完整的AOT(提前编译),允许C#在iPhone上运行。 然而,完整的编译是非常繁琐的,因为它破坏了跨平台的兼容性,而且一些机器特定的优化是无法完成的。 但是,注意到.net不是一种解释型语言,而是一种JIT(即时)编译语言,这意味着它在本机上运行。

伙计,你可以随时使用ngen.exe将你的C#程序集编译成本地映像

并建议.net是有缺陷的设计? 这是.net,它从ms糟糕的vb 5,vb 6,com时代带回了ms。 这是他们最大的赌注之一

java做同样的事情 – 你也暗示java也是一个错误?

REG。 大的供应商 – 请注意.net在所有规模的公司中都取得了巨大的成功(除了那些开源的公司 – 没有任何问题)。 所有这些公司都在.net框架中投入了大量的资金。

并根据我来比较C#速度与C + +是一个疯狂的想法。 c ++是否可以为您提供托管环境以及世界级的强大框架?

如果你对反编译非常偏执,你总是可以混淆你的程序集

它不是关于C ++ V / SC#,管理V / S非托管。 两者在自己的领域同样好,同样强大

C#可以本地编译,但基类库不可能会去那里。 另一方面,我看不到超越JIT的优势。

当然可以,但真正的问题是为什么呢? 我的意思是,可以肯定的是,它可能会很慢(呃),但是大多数情况下,性能上的任何主要差异都归结为设计问题(错误的算法,线程争用,资源浪费等),而不是语言问题。 至于“易碎”的字节码,考虑采用率,似乎并不是大多数公司所关心的。

究竟什么是最好的工具是什么? 对于某些人来说,这是C ++; 对于其他人,Java; 对于其他人,C#或Python,或者Erlang。

注定? 由于假设的性能问题? 如何比较价格:

程序员的小时

硬件组件

如果你的应用程序出现性能问题,那么相比于从更高抽象语言转换到更低抽象语言的优势,购买更好的硬件要便宜得多(而且我对C ++没有任何反应,长期以来一直是C ++开发者)。

在比较垃圾收集的C#代码时,如何在C ++代码中查找内存泄漏时比较维护问题?

“硬件便宜,程序员很贵”: http : //www.Codinghorror.com/blog/archives/001198.HTML

总结

以上是内存溢出为你收集整理的托pipe代码(特别是.NET)是否可以成为“非托pipe”?全部内容,希望文章能够帮你解决托pipe代码(特别是.NET)是否可以成为“非托pipe”?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1290515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存