» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 52 1234
发新话题
打印

[电脑] 外行问一个各种编程软件的问题

1,不同编程软件理论上是不是可以编出同一种功能的软件?比如basic,c++都能写出office??谢谢。
2,编写mac系统的软件可以在windows环境下用微软出编程软件编出来么??还是必须是mac系统自己的编程软件?


TOP

1某些编程软件由于固有的限制,是无法达到的,如对内存大小操作限制,函数限制等等
2微软下的是可执行文件exe,mac下的不是这个吧,当然理论上是可以的,因为都是二进制



TOP

对于现在的高级语言来说就不一定了

高级语言在某些方面比较快捷方便,比较有针对性了,很多东西都进行了封装


如果说的是低级语言的话那基本是什么都能做出来了,越低级的能实现的越多


TOP

1. 是  , 但 运行效率有区别
2. mac软件必须objective-c语言

TOP

1,不同编程软件理论上是不是可以编出同一种功能的软件?比如basic,c++都能写出office??谢谢。
是的,用Basic也可以写出和C++一样的office来,LS几位说得不透彻,因为Basic里面也可以嵌入汇编代码,或者执行汇编级别的操作,只要是能够编译成硬件可直接执行的二进制文件的,几乎都可以实现一样的功能。
除非是在虚拟机上运行的,例如java、php、python之类的,在某些地方因为虚拟机的关系(因为人家最大也只能控制虚拟机,虚拟机的功能比实际上运行的电脑还是有些地方缺乏的,要获得全部的功能不太可能。)而且也不具备太底层的操作方法,所以会比编译类的语言功能少一些。
但是也可以做出Office类的软件。

不同之处在于,编程语言的级别,越高级的语言,写起来越简单,高级语言相当于吧显卡、声卡、主版、CPU都做好了,你只要拼接在一起就能实现一台电脑的功能了,开发起来非常快捷简单,缺点是对于标准模块以外的东西(例如你要开发个以前没有过的能实现实时光线跟踪的硬件加速模块)就很费力(因为压根没有这种模块),而且实现起来麻烦(因为这种语言本身就是为快速开发设计的,底层操控的方式要么就是没有,要么就是很简陋或者很麻烦,就像basic实现汇编比较麻烦),甚至不能实现(压根就不让你进行底层操控的语言不是没有,javascript就是,虽然人家依然用这个东东做出了所见即所得的编辑器,例如我现在正在回帖的输入框)。

回过头来,编译型的语言虽然也有一些模块,但是基本还是要你用更底层的东西做,回到电脑的例子,你就要从电容、电路板之类的小零件开始搭建整台电脑了。而像汇编语言,你基本是要从原材料级别来制作电脑啦!优点是你可以做出各种各样的东西,这些只受限制于你的想象力和目前PC的处理能力。

不过其实像C语言这种发展了很久,玩家众多的语言,有很多函数库,相当于已经做好的显卡、声卡之类的,你也可以快速搭建一台可以用的电脑来,但是缺点在于,这种东西并不是官方设定的标准(当然官方也设定过一些,但是这些模块数量不太多),相当于这家公司出的显卡有72个引脚,另一家的有172个引脚…………,发展太久,规范太多,而且针对不同的平台,甚至导致这些语言在不同平台有不同的特性,例如插在支持SLI主板上才能支持SLI,支持双通道主板才支持双通道。虚拟机型的语言由于是存在一个虚拟的电脑上的,所以特性基本是一样的。

2,编写mac系统的软件可以在windows环境下用微软出编程软件编出来么??还是必须是mac系统自己的编程软件?
这个就涉及到跨平台的问题了,像前面说过的,不同平台的特性不一样,所以,专用的编程语言是不同的,你不能换到其他平台还能用,就算mac的objective-c和win的VC都是C语言,但是他们是发展不同的变种,很多特性不同,甚至有些函数不同,你需要做很多修改也许才能用。但是跨平台的语言就能通用了,采用虚拟机运行的语言就是这样一种,因为前面说过了嘛,虚拟机的规格都是一样的,java语言编写的程序在mac平台和win平台基本都能通用,因为sun公司发布了mac和win平台的虚拟机,虚拟机把jaca语言编写的程序都翻译成统一的东西。

还有一种东西,例如著名的gun编译器,它可以在mac平台上编写win平台的软件,反之也行,甚至还可以编写gba、psp之类游戏机程序,只要你编写程序没有用到某平台的独有特性,例如你写个gba游戏,不会去调用DX 11就行,只要针对不同的平台编译一份软件就行了(当然,还要做一点点小小的处理)。

简单点就是说,你要是编写一些各种设备都支持的程序(例如计算:1+1=2并显示在屏幕上),用支持交叉编译的编译器,你就可以再一个系统下编写出其它系统可以用的程序啦。或者是用跨平台的解释性、虚拟机类语言编写。
本帖最近评分记录
  • alucardx2004 激骚 +7 这么厚道居然没人加JS 2010-1-10 22:24

TOP

[posted by wap, platform: Android]

Ps3游戏都不是在ps3上编出来的

TOP

好吧我写错了是gnu不是gun……

TOP

1,不同编程软件理论上是不是可以编出同一种功能的软件?比如basic,c++都能写出office??谢谢。
可以
编程语言是相对于编译器来说的,只要编译器能解析编译,你就是用天顶星语言都行。编译器会最终生成2进制可执行代码,由于该可执行程序是在操作系统下运行的,其中包含了大量针对目标OS的section信息,所以它是OS依赖的。它们通常不直接操作硬件(除非是驱动程序),而是直接通过各种封装好的库函数来使用OS提供的系统调用

有一种程序是完全不依赖OS而是直接依赖硬件平台的,比如说bootloader,比如说grub4dos,比如说windows软激活程序,它并不是在OS下运行的,而是直接操作硬件,以及使用bios提供的软中断资源。这类程序在编写时不能调用任何动态库,哪怕一个printf也要自己直接操作硬件寄存器去实现,我们称之为裸板程序。编译时只要在最后生成的可执行程序上多加一道工序(去掉OS依赖的section信息,转换成纯bin文件)即可


2,编写mac系统的软件可以在windows环境下用微软出编程软件编出来么??还是必须是mac系统自己的编程软件?
不清楚微软有没有出过针对mac的交叉编译器,如果有,当然可以
至于为什么,从上面第一点相信你已经能得出答案,不多解释

TOP

关于交叉编译器,欲知详细请猛击下面的网站
http://www.codesourcery.com/

TOP

引用:
原帖由 henvelleng 于 2010-1-10 14:49 发表
有一种程序是完全不依赖OS而是直接依赖硬件平台的,比如说bootloader,比如说grub4dos,比如说windows软激活程序,它并不是在OS下运行的,而是直接操作硬件,以及使用bios提供的软中断资源。
这句话其实狭义在X86体系是可以成立的,因为X86体系的引导方式都是一样的。

但是涉及更多的硬件就不行了,其他硬件上,引到方式和X86完全不同,这也是gurb根本一直不到其他硬件上的缘故。

TOP

其实其他平台的引导也是很容易的,只是x86有bios存在变得异常统一

就我自己来说,在手册相关硬件的章节看明白后写一个能引导kernel的bootloader大致在几百行代码左右(99%以上代码是C),真正需要初始化的硬件并不多(时钟、内存、设置中断向量表和中断处理等),主要精力反而在如何将一个几兆大小的kernel镜像弄到内存里。比较简单的是直接从flash或硬盘中读取到内存,复杂的有通过网络下载或传输到内存,那么一个走UDP的网络协议栈大概也是几百行代码,网卡裸板操作的封装也要几百行这样

如果要功能全面的话就移植u-boot过来,代码量看u-boot对该平台支持度而定,大概需要添加和修改千余行代码这样

当然,这只是引导kernel,kernel要在目标平台上运行是肯定要经过移植的,主要工作量其实就在这里,除了添加一些必要的板级启动静态信息外,几乎可以肯定要自己添加许多外设的驱动程序,因为是基于kernel的驱动框架,所以代码量比uboot这种裸板的硬件操作复杂得多

TOP

引用:
原帖由 henvelleng 于 2010-1-10 15:53 发表
其实其他平台的引导也是很容易的,只是x86有bios存在变得异常统一

就我自己来说,在手册相关硬件的章节看明白后写一个能引导kernel的bootloader大致在几百行代码左右(99%以上代码是C),真正需要初始化的硬件并不 ...
嗯嗯,引到的部分其实都是蛮简单的,代码量不大,了解硬件特性和引导步骤后都能编写出来

TOP

我发觉我说话越来越没重点了 我来总结下上面说的:启动kernel的过程很容易,工作量的大头是kernel的移植,在熟练kernel的移植后,android的移植也就不难了

还有一些像数码相框之类的项目,则根本不用跑kernel,如此简单的应用可以直接用裸板程序从头到尾实现

TOP

[posted by wap, platform: GoogleChrome]
引用:
henvelleng 发表于 2010-1-10 16:00
我发觉我说话越来越没重点了 我来总结下上面说的:启动kernel的过程很容易,工作量的大头是kernel的移植,在熟练kernel的移植后,android的移植也就不难了

还有一些像数码相框之类的项目,则根本不用跑kern ...
就是单片机开发,直接用汇编写程序,好像进好几年来也有用C之类开发的了

TOP

只要在汇编里设好栈指针就可以跳到C里去了,有一些只能用cpu特定的汇编指令操作的寄存器也可以用内嵌汇编

这里面唯一一个算的上难点的地方是运行地址和链接地址的区别,必须清楚C语言中哪些语法特性是用链接地址实现的,比如函数指针。如果不能确定就用反汇编观察

之所以要区分运行地址和链接地址是因为有些平台的启动过程中,第一条指令在内部sram中执行,之后在初始化了内存后才把自身copy到内存中并跳过去的,由于绝大部分代码是在内存中运行,所以在代码编译链接的时候指定的地址是内存地址而非sram地址,这样在sram中运行时实际运行地址和链接地址是不一致的,在这种状态下是不能使用依赖链接地址的指令和语法特性的

TOP

 52 1234
发新话题
     
官方公众号及微博