楼主自己是个sdlc工程师,平时主要负责软件安全威胁建模,源代码安全审计,模拟黑客渗透测试,之前也干过python,c/c++,golang,javaweb开发,下面结合各个语言说下现在软件移植现状,先说结论,目前各种语言想跨平台很简单开发,前提是不涉及到调用的一些c语言库。当macos去推动arm生态完善时,这些第三方c语言库会被移植到arm平台,因此win10 on arm确实能吃到mac的红利。
对于java,绝大多数的web服务端都使用java开发,并且我们手机上的app也使用java开发,java属于半编译半解释型语言,java天生就是考虑了跨平台型的,java执行过程中,java的代码被编译成jvm(java虚拟机)认识的class中间代码,代码都在jvm执行,因此无论是arm还是x86,如果是纯java实现的程序,只要运行着jvm就能跨平台。但问题是许多Java的包是调用C语言代码的,这时候就要考虑 .so 的动态库移植及内联的汇编语言。
对于python,目前用于爬虫,人工智能,网络安全中开发漏洞利用程序,python属于纯解释型语言,python运行这一个解释器,这个解释器你可以简单理解为近似jvm的东西,不过少了java的中间层静态编译过程,python的性能很差,但是python解释器也是可以跨平台的。但日常我们使用的python都是cpython(jpython和pypy都属于异类),许多python的库底层都是c语言写的,因此只要那些库被移植,python跨平台还是简单的。
c/c++算是最经典的编译型语言了,c语言先被编译成汇编语言,之后汇编语言再被翻译成操作系统直接能执行的机器码,在windows中最终出来的是exe,linux是elf文件,这个过程由gcc来实现,gcc版本繁多,同一套代码在不同版本gcc上可能编译错误,且针对arm和x86都有对应平台下的gcc,x86 c代码用arm版本编译还可能出问题,还需要解决解决x86下值溢出,x86平台SSE、SSE2指令集的迁移问题,XCHGL的迁移问题等问题
对于java,绝大多数的web服务端都使用java开发,并且我们手机上的app也使用java开发,java属于半编译半解释型语言,java天生就是考虑了跨平台型的,java执行过程中,java的代码被编译成jvm(java虚拟机)认识的class中间代码,代码都在jvm执行,因此无论是arm还是x86,如果是纯java实现的程序,只要运行着jvm就能跨平台。但问题是许多Java的包是调用C语言代码的,这时候就要考虑 .so 的动态库移植及内联的汇编语言。
对于python,目前用于爬虫,人工智能,网络安全中开发漏洞利用程序,python属于纯解释型语言,python运行这一个解释器,这个解释器你可以简单理解为近似jvm的东西,不过少了java的中间层静态编译过程,python的性能很差,但是python解释器也是可以跨平台的。但日常我们使用的python都是cpython(jpython和pypy都属于异类),许多python的库底层都是c语言写的,因此只要那些库被移植,python跨平台还是简单的。
c/c++算是最经典的编译型语言了,c语言先被编译成汇编语言,之后汇编语言再被翻译成操作系统直接能执行的机器码,在windows中最终出来的是exe,linux是elf文件,这个过程由gcc来实现,gcc版本繁多,同一套代码在不同版本gcc上可能编译错误,且针对arm和x86都有对应平台下的gcc,x86 c代码用arm版本编译还可能出问题,还需要解决解决x86下值溢出,x86平台SSE、SSE2指令集的迁移问题,XCHGL的迁移问题等问题