如何选择适合自己项目的编程语言
与操作系统一样,在办公室软件套装和计算机中也具有各种计算机语言。存在这种多样性的原因与其它地方的多样性一样—-因为没有单一的解决方法能 够解决所有的问题。有些语言在原始速度上更出色。有些语言能够帮助你更轻松地编写防止崩溃的代码。有些语言非常擅于剖析文本并有效作用于服务器上。有些语 言具有强大的公司投资。也有些语言之所以存在是因为它们与大量不适合重新编写的现有代码相兼容。
你的语言选择将影响着你的项目,并且你不可能在项目中途突然改变语言,所以这是你必须重视的一个选择。这也不是一个你能够根据自己的个人喜好或 朋友的提议而做出的选择。你关于项目的计算机语言的选择应该是经过仔细研究且务实的。最重要的是你的结果的质量而不是语言是否配得上你个人的编程技巧。
本文将分析一些游戏程序员经常使用的语言。这并不是一个完整或深入的列表。本文倾向于呈现给你最受欢迎的游戏开发语言,同时还会提供一些简短的介绍以及它们在哪种情境下是有利于项目或不利于项目。
如果你还是一位新手,那么这一列表可能会包含一些你并不熟悉的术语,并且也没有足够的空间对这些术语进行详细解释。所以我建议你可以在维基百科上进行相关搜索。
C
C 程序设计语言可以说是父辈一般的存在,或者对于本文提到的其它语言具有非常重要的影响。尽管C是源自一些已经被淘汰的其它语言,但是现在它也成为了计算机 “根植”语言之一。虽然今天还存在一些比C先诞生的语言存在(如 COBOL,FORTRAN,Lisp,Smalltalk)并且与C没有多大关系,但是 20 世纪 80 年代以来所诞生的每一种语言至少在某种程度上具有与C语言类似的语法。
C 是经典的“支柱语言”,也就是使用开放和关闭的花括号将一些表述组合在一起的有结构的 goto-less 语言。这是之后许多语言中所呈现的方式(包括C++, Java, C#, ActionScript, PHP)。C语言的无尽结构的一个优势便是一旦你理解了如何基于C语言完成某事,你便能够将其带到其它语言中(并且几乎没有任何改变)。例如C和 PHP 中的 if (), while (), and for ()表述都是相同的。也就是说如果你熟悉了C语法,它将在之后带给你非常大的帮助。
优点:C适用于编写简短且快速的程序。这是我们很容易与之互动的语言。该语言本身与库子程序一样都是标准化的,所以讲程序移向其它平台将会是一个直接的过程(如果你事先计划好的话)。
缺点:快速编写小程序的能力对于C来说也是不利的,因为通常情况下C并不是用于对象导向型编程,这是构建更加适合于基于分散式开发的大型程序的 方法,而大型C程序很容易变得杂乱无章。尽管许多大型项目是基于C语言 Unix,Windows,Oracle 进行编写,但是管理一个基于C语言的大型项目要求比围绕着更加模块性所创造的语言更多纪律。
可移植性:尽管语言本身以及 ISO 功能调用是可移植的,但是这些调用却受限于控制流,简单的内存管理以及文件处理方面。现代用户界面设计,如菜单,按键,对话框等等都是不可移植的,所以你需要编写对第三方 UI 工具箱是有效的代码或计划再次编写你的用户界面。
尽管这并不是最早出现的语言,但是C程序库却呈现出了它的年龄。像内存管理和附带条件等许多较有意义的程序库功能都拥有一个简单的语法,能够在后续语言中进行有效调整。
尽管为了与时俱进C语言进行过多次的重新设计与调整,但是仍有些语法却是违反直觉的。为了与现有的代码保持兼容仍保留了一些较为奇怪的语言结构。
是否适合新手:并没有很好。尽管C语言非常简洁且容易掌握,但是许多C程序库调用却很陈旧,且很容易用于一些后续语言中。
资源:尽管 Kernighan 和 Ritchie 的《The C Programming Language》是该主题的“经典”著作,但是该书只是快速地提及该主题,甚至未能让编程新手们好好理解。不过还有其它值得推荐的相关书籍,如《C How to Program》,《C Programming: A Modern Approach》和《C Primer Plus》。
C++
C++是C语言最早建立的“子”语言。它诞生于 20 世纪 80 年代,是作为C语言的延伸版本并支持“类”,这是将原始数据类型和算法聚集到更容易创建现实世界(或者游戏中的模拟世界)对象模型的内容中的抽象数据结 构。C++类同样也支持“隐藏数据”概念,在这里你可以将一个对象的根本执行隐藏起来。尽管这一方法看似有点难理解,但在基于团队环境编程时这却非常有帮 助。这让你们能够在对象界面如何运行且无需考虑其内部运行方面达成一致意见。这就像是在说“我将给你一份工作,但我不关心你是如何做的,只要你能够完成 它,并且结果是我想要的便可。”
优点:完全支持面向对象(OO)的范式,这比支持大型项目的C语言好多了。与C不同的是,它包含了一个带有常见数据结构和算法的设计精巧的程序库。
缺点:随着每一次迭代,C++的算法变得更大且更复杂,现在这一预言完全变成是拜占庭风格了。该算法本身很容易被滥用,虽然 C++ 支持团队变成,但是且巨大且深层次的算法会让代码变得更难读。
可移植性:尽管是源于C语言,C++却拥有比前者更棒的可移植性。引导大多数现代移植工具箱都是执行于 C++ 对象程序库而不受早前的C功能程序库。此外,C++的标准程序库以及非常有用的 Boost 程序库非常标准化且是跨平台的,尽管这两者都很复杂。
是否适合新手:尽管在 C++ 中内存管理和I/O操作都比C语言好理解,从规模来看 C++ 拥有非常高的学习曲线。他们并不需要为此学习整个语言。
资源:关于 C++ 的一本完美的新手书籍是 Steve Heller 的《C++: A Dialog》。这是一本节奏适度且容易理解的书,非常适合编程新手。
还有更加全面的方法,即 Bruce Eckel 的《Thinking in C++》系列将通过 1600 页内容告诉你所有你需要知道的C++。
你都可以免费下载到这些书籍。或者在谷歌上进行搜索,你便能够找到它们的官网。
C 或C++:除“DirectX 或 OpenGLad”以外,这是在准备学习语言时最常被问到的问题。除了一些较小的例外外,C++可以说是C语言的超集。这意味着所有C语言所做的都与 C++ 一样。每一个 C++ 编译器都将编译C语言,而在今天我们很难找到唯独支持C语言的编译器。尽管这些事实让选择从C语言开始然后再学习剩下的语言更具逻辑性,但是尽早学习类和 OO 编程将会更有帮助。
Objective-C
Objective-C 是带有动态执行时间的对象导向型编程语言。就其本质来看,它就是C语言的一个超集。它集成了来自C语言的基本语法规则,同时也拥有一些构造上的变化。例如它将包含一些方法调用,整体的定义规则等等。
Objective-C 是 MAC OS X 和 ioS 编程的主要语言,也是专属于苹果的语言。它支持各种开发技巧,功能,程序库以及许多能够凸显该语言的额外功能。该语言支持处理 2D 和 3D 图像(基于 OpenGL)的广泛嵌入式程序库,这能够帮助许多小型游戏开发者通过使用强大且原生的解决方法创建自己的第一款游戏。其它程序库也能够帮助游戏开发,特 别是手机游戏开发。还有一个突出的功能便是引用计数垃圾收集器,与非常复杂的内存管理系统相互协作。
优点:Objective-C 是C语言的一个强大超级,能够创造并允许强大且灵活的应用。它能够利用C/C++代码并轻松移植全新项目,扩展现有的能力等等。该语言能够拥有各种有帮助 的程序库以及 Xcode 最佳的开发环境之一。这是一直能够基于多种方式进行使用的强大 OOP 语言。
缺点:Objective-C 是专属于苹果的语言,因此你需要拥有一台苹果计算机,运行最新的 Mac OS X 版本才能开发你的应用。另外一件需要注意的事是该语言的有些语法规则可能会让新手感到困惑。方法调用远未达到标准,类定义也会引起没有C/C++经验的新 手的困惑。此外,如果你计划面向 iOS 开发应用的话,你便需要掌握基于较高层次的内存管理知识。
可移植性:没有。任何基于 Objective-C 进行编写的内容都必须属于苹果的产品。如果未基于其它语言重新编写,你便不能移植 Objective-C 项目到任何平台上。也就是说 Objective-C 只适用于 Mac OS X 和 iOS 开发。
是否适合新手:Objective-C 并不是最适合新手的语言,尽管它也不是最复杂的。如果学习 C# 或 Java 的话你会更轻松,然而相对于C++,精通 Objective-C 会更简单。新手通常需要阅读许多关于内存管理等理念,如果你刚刚起步,这有可能是一个较为困难的过程,但是将带给你长期的帮助。
资源,除了官方的苹果向导,在 onlineprogrammingbooks.com 上还有许多有帮助的免费电子书—-http://www.onlineprogrammingbooks.com/objective-c/
参考:
Objective-C 基础
- http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html
- http://www.otierney.net/objective-c.html
- http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-1/
Objective-C 内存管理
- https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html
- http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html
基于 Objective-C 的游戏开发:
- http://people.oregonstate.edu/~doneb/downloads/iPhone%20Game%20Development%20Developing%202D%20%26%203D%20games%20in%20Objective-C~tqw~_darksiderg.pdf
- http://www.idevgames.com/articles/for-beginners/2
Objective-C 与 Java 的比较:
Objective-C 与 C++ 的比较:
一般的 iOS 开发与 Android 开发的比较:
Java
从实用性来讲,Java 可以说是第一种“网页”语言。尽管像 Perl 等语言会突然发现它们处理字符串的能力在恢复价值和发送 HTML 到网页浏览器上是天生的,但是 Java 是最早发现自己是根植于浏览器中,最初是在一个有趣但却非常古怪的 HotJava 浏览器(基于 Java 本身进行编写),而之后又以现有浏览器的扩展形式呈现出来。
尽管从表面上看其结构与C和 C++ 类似,但是 Java 的后端表现却与这两种语言不同。比起编译 Java 源代码到原生及其代码中,Java 编译器将编译由 Virtual Machine 或 VM 所运行的“字节码”。Java 字节码是一种汇编语言,但却不是与特定处理器有关系的汇编语言。Java VM 是字节码的运行时解释器,将为你的机器目标处理器解释字节码。这一方法的优点在于,如果目标及其拥有可兼容的 Java VM 或 Java 所承诺的“编写一次就能够在任何地方运行”,你便可以在不同机器间移动 Java 字节码,并且可以无需做出任何改变而运行。这一方法的缺点在于 Java 字节码并不是原生机器代码,尽管像“及时”编译器能够完善 VM 性能,但实际上你是在运行时间做一些解释,这将引起较小但却可衡量的性能打击。
还有其它缺点便是,Java 的现实性并不符合语言的早期承诺。尽管在网页中执行游戏的理念几乎能够马上让所有人动心,但现实是 Java VM 并不能与所有内容兼容,使用特定 VM 而编写的 Java 应用或支程序可能不能运行于带有其它 VM 版本的机器上。“编写一次就能够在任何地方运行”被改为“编写一次便能够移植到任何地方”,也就是说一旦你完成你的 Java 代码的编写,它便能够有效地运行于一个平台上,然后你所面临的重要任务便是确保你的应用能够有效运行于所有系统上。
Java 的第三个缺点便是源自其 GUI。尽管首次“传递”促使 Java GUI 使用原生的 OS 控制(按键,滚动条等等),较小且较快,但却没有深度。下一次传递 Swing 虽然看起来好多了,但是表现仍然很早,并且完全不同于最初的控制。最糟糕的是 Sun(Java 之父),太慢了,难以添加现有的 OS 功能,就像关于 ClearType 字体渲染的支持。因此,Java 应用总是着眼于一些与现代化不着边的版本。
但是在服务器编程方面,Java 便扬眉吐气了。VM 的一大优势便是,它并非真正的处理器,只是一个模拟,所以销毁 VM 并不是多大的问题。如果你对于 Java VM 感到困惑,这并不会真正影响基本的操作系统,你大可以选择关闭并重新开始,并且不需要重启整个机器。再加上 Java 的内存管理模式是源自 C++ 和C语言,所以像分配内存(无需将其带回之前的系统)这样的问题便不再是多大的问题了。像这样的系统非常适合服务器环境。服务器可以突然出现并在必要的时 候消灭 VM 且不会对潜在 OS 造成任何影响。同样地,GUI 问题也并不适用,如果你的服务器软件看起来并不壮观,它便一点都不重要,除非你想要给服务器管理员留下深刻印象。今天你将会发现许多商业大型多人游戏在服 务器端使用了 Java。Three Rings 的多人游戏便是个很好的例子,他们不仅在客户端,同时也在服务器端使用了 Java 语言。
Java 发挥重要作用的另一个领域便是手机市场。J2ME(Java 2,Micro Edition)是带有删节类程序库(游戏包注:专门为在手机和其它较小的设备上运行而设计的)的 Java VM 的微小版本。实际上,如果你包含了手机目标群体,Java 可以说是现在最受欢迎的平台之一。
优点:Java 的 Virtual Machine 加上其内存管理和不再需要的内存的自动收集让你能够创造非常诱惑力且足以避免被摧毁的软件。它同样也带有强大的扩展文件传统。
缺点:Java 的“编写一次便能够在任何地方运行”的承诺未能兑现。Java 类程序库已经经过多次重新编写且未删除早前的调用,所以即使程序库与早前的代码是反向兼容,似乎还有三种方法能够做到一切,除了因为“过时”而被拒绝。
可移植性:非常不错,但却不像想象中那么棒。基于 Java 创造一款可移植且能够使用潜在的 OS 最新功能的应用与在 C++ 上这么做一样困难。
是否适合新手:非常适合。尽管在不遭遇弃用对象的前提识别执行某项任务的“正确”方式对于那些还在摸索语言的新手来说有点困难,但是语言本身的核心是很容易理解的。同样地,Java 也是许多大学课程的标准语言。
资源:Oracle Inc. 拥有许多对 Java 程序员有帮助的优秀资源。
.NET Languages(特别是 C# 何 Visual Basic)
.NET 是微软对于 Java VM 的基本答案。实际上,.NET 是以整体技术命名的。真正的 VM 名字是 CLR(公共语言运行时),之前所谈论的关于 Java VM 的一切内容都适用于 CLR,但也有一个例外:CLR 从一开始便不是用来“匹配”单一语言,就是 Java 那样。因为这样,有许多语言使用了 CLR 去执行后端处理。不管是像 COBOL 和 FORTRAN 这样的早前语言还是像 Python 这样的现代语言都能够瞄准 CLR。需要提醒你们的是,有些 CLR 项目是小型的单人项目,所以如果你在 CLR 版本中找到你最喜欢的语言也不要太过兴奋,因为在这里有些编译器还不够成熟。
微软所开发的 C# 和 Visual Basic 都是最受欢迎的 CLR 语言。C#是源自 Java 的语言,它带有 90% 的 Java 语法,尽管从表面看它更像是源自C或C++。C#拥有一些很棒的语言扩展,即基于 Java 慢慢添加的内容,并重新编写了类程序库。
简称 VB.NET 的 Visual Basic 是 CLR 执行以及对于微软已建立且受欢迎的 Visual Basic 环境的替换。尽管它仍被称为“Basic”,但却不再是全部大写,它与早前的 BASIC 解释器(贯穿于 20 世纪 80 年代所出售的所有计算机的 ROM 中)只带有少量的相似处。现在,它的语法与本列表中的其它语言非常相似,尽管它仍然未使用括号去整合某些内容。它同样也使用了更具对象导向型“点记法”去 调用功能而不受语言的前 CLR 版本的更大的功能程序库。
优点:尽管 Java 并未投入太多努力面向 Java VM 编译语言,但是 CLR 从一开始便是为了支持这一点。因此存在许多基于 CLR 的语言,并且它们很容易进行互通。
.NET 技术获得微软的 Visual Studio 环境的大力支持,而这也是一个非常成熟且具有丰富的功能的开发环境。
C#对于微软的 XNA 技术来说应该算是首要的编程语言,这是创造在 Windows 和 XBox 360 游戏主机间可移植游戏的一种方法。
缺点:与 Java 不同的是,CLR 应用不能像网页中小程序那样运行。尽管“Silverlight”技术允许这点,但是对于游戏来说这却太迟了,并且不能像 Java 和 Flash 那样根植于浏览器中。
基于 CLR 的应用比想象中更难移植。
可移植性:尽管存在第三方将 CLR 移植到到除 Windows 外的其它操作系统,但是基于这一方向的努力却远小于面向 Windows 的努力。所以尽管你可能面向 Windows 创造一个非常有活力的 .NET 应用,但是你在 Mac 和 Linux 上的执行却不会多么顺畅。
是否适合新手:都适合。这两种语言都是很直接且容易理解的。此外,它们与 Visual Studio 环境的紧密关系也让设置变得更加简单。
资源:Microsoft.com
Flash 和 ActionScript
Flash 在这一列表中算是一个不寻常分子,因为它并不是源自语言本身,而是伴随着一个动画工具诞生。在 20 世纪 90 年代,一些开发者对在网页上呈现动画图像所要求的规格以及它们所呈现的方法感到震惊,所以他们便创造了一个名为“FutureSplash”的浏览器插件 以及一个能够创造紧凑的向量式动画的绘制和动画工具。互动网页业务巨头 Macromedia(已经拥有能够通过自己的 Director 动画工具播放内容的 Shockwave 插件)购买了 FutureSplash,并将其重命名为“Flash”。
在经历了几个版本后,Macromedia 添加了一个 JavaScript 子集,将“ActionScript”整合到插件中,于是 Flash 便成为了一个完整的编程环境,尽管它经历了几个语言版本,并且开发工具也发展成对除简单网页游戏之外的内容有帮助的优秀环境。今天,属于 Adobe 的 Flash 是基于 ActionScript 3,这是完全执行了 ECMAScript 标准并且与本列表的其它语言一样具有重要作用。
几年前,Adobe 公开了一个名为“Flex”的工具,即尝试着将 Flash 发展成更加适合创造基于浏览器的用户界面和 RIA 内容,而不再只是针对于动画和游戏。尽管并不是 Flash 的替代品,但是 Flex 比前者更适合创造用户界面,因为它是带有丰富 UI 支持而不是只伴随着固定变成语言的动画工具的 XML 编程语言。
基于最近的 Flex 版本,Adobe 公开了一个名为 AIR 的产品,它能够从浏览器中分离 Flash 内容。使用 AIR 和一些新创造的对象(游戏邦注:致力于帮助 Flash 内容使用更多机器资源而不只是浏览器插件),你将能够从 Flash 中创造优秀的可执行内容,并运行于各种平台上。
优点:Flash 完整的绘制和编程工具让编写基于网页的游戏变得更加简单。尽管没有 Visual Studio 血统,Flash 环境仍具有非常丰富的功能。
缺点:尽管对于一个人来说是个很棒的环境,但是 Flash 却不能有效支持团队编程。
尽管 Flex 编译器是免费的,但是 FlexBuilder Flex 内容创造工具却不是。
与这一列表中的其它语言不同的是,ActionScript 是针对于客户端的技术。尽管有些服务器端的 ActionScript 解释器可能会阻碍你学习单独的服务器语言,但事实上却不存在这样的情况。
可移植性:Flash 执行时间播放器可以允许于 Windows,Mac,Linux 多种手机以及一些游戏主机上。但并非所有设备都支持同样本本的 Flash,所以你需要学习每周版本的能力,并在开始前决定好目标平台。
是否适合新手:非常适合,特别是结合其绘制和动画工具。尽管容易在 Flash 环境中创造内容,但却不适用于其它语言。例如,C++使用的一种技巧或创造工具可能在 Java 中拥有等价内容,反之亦然。但是 Flash 的开发环境却与其它语言不同。
资源:就像微软是能够满足你的所有 .NET 需求的万能商店一样,Adobe 对于 Flash 也是这样的存在。
Python
与之前提到的语言不同的是,Python 并不是始于一家大型公司或大学项目。它更接近于大学学生的基层工作,并且在之后变成产业中喜欢语言结构以及缺少就功能的人的选择。该语言本身非常紧凑且很 容易使用。我们同样也能够轻松地将 Python 语言解释器整合到现有的项目中,这也是为何你会发现 Python 作为许多游戏的内涵脚本语言的原因。
呈现了许多 Java 的服务器友好型属性的 Python 也是非常棒的服务器语言。实际上,Python 编译器能够棉鞋 Java VM 和微软的 CLR 编译 Python 代码。你会发现许多服务器(游戏邦注:如 油Tube,谷歌和雅虎)都使用了 Python 进行后端处理。
基于用户支持的 PyGame 程序库,Python 在游戏社区越来越受欢迎。PyGame 是一个能够将已建立的 SDL 跨平台图像程序库抽象化为一些容易使用的 Python 内容的对象程序库。一些让人印象深刻的游戏都是使用 Python 进行编写。
优点:是一种免费的开放源。专注于用户社区。能够完全整合到谷歌的 AppEngine—-这是谷歌的“付费”处理服务器。
缺点:事实上,几乎所有处理都不是经过一家大型公司而是通过其用户社区,所以这可能是为了让公司签订一个 Python 项目的强行推销方式,尽管一些巨头已经在 Python 做出了巨大投资,所以现在的 Python 不再像过去那样作为一种“业余语言”了。
可移植性:非常好。大多数适合 Python 的第三方程序库都是围绕着像 SDL 和 OpenGL 等可移植技术进行创造,所以我们能够基于 Python 轻松编写一些可运行于任何平台的内容。
是否适合新手:Python 语言拥有能够轻松上手的语法并且很容易学医。此外,还存在一些很棒的社区编写教程。
资源:Python.org 拥有所有与 Python 相关的内容。这同样也是许多活跃社区论坛的集中营,在此你能够获得各种问题的答案。
汇编语言
关于汇编语言你必须了解两件事。
语言的名字是“汇编”。将汇编语言转换成低级别的机器编码的工具名字是“汇编程序”。这是一个很常见的错误,甚至连有经验的程序员也会犯这样的错误,即将语言称为“汇编程序”。所以请先叫对它们彼此的名字。
默认情况下,汇编语言是本文中最小且最快的语言。因为它并非高级语言,但却是你的 CPU 指令系统助记码代表,任何基于高级语言所编写的内容都能够快速用汇编语言呈现出来。
鉴于以上事实,你可能会认为你的研究就此结束了。毕竟,如果一种语言是最小且最快的,又有什么不使用它的理由呢?实际上,为什么其他人会在你能够基于汇编语言编写代码并获得最佳结果的时候还费心去研究C或 C++ 呢?
那是因为“最佳代码”这一词并不是指代你的程序的原始速度和规模。存在可读性,就像你可能需要递交部分代码给同事让他能够基于这些内容完成自己 的任务。存在可移植性,即你可能需要将代码移植到其它操作系统或硬件体系结构中。存在可维护性,即需要能在项目快结束时轻松解决问题。存在抽象性,即你可 以基于向下移动角色而不是操控内存中的数字去编写代码。
基于所有的这些元素,汇编语言绝对是最后一位。汇编语言很难读也难以维护。除非经过仔细评述,否则很少有人能够传承其代码。修改漏洞以及延伸现有的代码很复杂。你必须不断专注于可移植性,以防你最终编写出不能运行于来自同一制造商的不同处理器模型。
实际上,汇编语言从未被用于完成游戏。汇编语言通常是作为程序的一部分将执行计算并会经过多次调用。有时候修改功能中的一些机器指令将帮助你创 造一些额外且有价值的内容。但却不是在项目已开始便能够执行的过程。这是在早前测试所执行的,即在决定变成瓶颈到底出现在哪里时。
汇编语言并非最热门的选择,如果你阅读了这篇文章并尝试着明确该选择怎样的语言,你便可能会转向其它语言。
优点:如果你知道自己在做什么的话这可能会是最快且最有影响的方法。
缺点:如果你正在阅读这一内容,你可能就不知道自己在做什么。所以请准备好花较长时间去学习无数能够推动处理器棒的技巧。
可移植性:糟糕透顶。除非你正在面向基本处理器编写代码,否则你的程序可能不能运行于其它“可兼容的”处理器上。例如,AMD 处理器上一些特殊的指令在 Intel 上便不可行,反之亦然。
是否适合新手:一点都不。
资源:如果你想要面向 Intel 处理器编写代码的话,面向基于 Intel 的计算机的汇编语言便是个很好的推荐。但如果不是的话,你应该着眼于目标 CPU 的制造商。
服务器语言
尽管上述提到的许多语言都能够有效作用于服务器上,但是它们所围绕的许多技术都较为陈旧,而现在也存在更容易使用的解决方法。关于为网页编写一 个定制后端的最初标准是所谓的 CGI,这是在服务器端运行一个定制的可执行文件的一个定制后端,将在网页上传输数据,并收集文本输出内容然后将其回传给用户。尽管这在服务器端很容易执 行,但这却并未按照今天网页的使用方式去创建互动体验模型,最好的情况便是面向互动网页应用的 CGI 解决方法会很笨拙。
PHP
PHP 是最早的网页“嵌入式”脚本语言之一,并且它将给予多种方式改变所编写的网页。尽管 PHP 可以作为一种脚本语言,基于网页形式获得输入内容,处理它并返回输出内容,但是其真正优势是在于作为超文本预处理器的作用。一旦被设置为服务器的预处理 器,PHP 便能够处理嵌入页面中的代码。所以比起编写一个独立代码,在一个页面上打出当前日期,你可以选择直接将 PHP 代码嵌入印有日期的网页中,如此代码将被最终文本所取代。PHP 同样也能够添加本机命令程序库与强大的 MySQL 数据库进行交流,从而是保存和检索持久数据变得更简单。
推动 PHP 瞬间倍受欢迎的另一点是价格。它是免费的,因此帮它基金了名为 LAMP(Linux,Apache,MySQL 和 PHP)的服务器配置中。这 4 个技术的结合为刚起步或低预算的网页设计师提供了免费切容易使用,的强大网页设置。作为奖励,它还能够基于低成本的硬件而运行。这对于网页开发者并没有影 响。在今天存在许多待执行的免费货低价 PHP 脚本,不管是简单的用户数据库还是完整的网站设置。
ASP.NET
不甘示弱的微软很快便基于微软的技术,也就是 Windows,Internet Information Server(微软的网页服务器),CLR 和 SQL Server,组合了自己的 PHP 式的配置。尽管并不是免费的也不属于 PHP 联盟,ASP.NET 却拥有所有技术支持费用能够买到的优势,且能够支持除 PHP 外的语言。如果你非常熟悉客户端的 Visual Basic,你便能够基于 ASP.NET 在服务器端使用它。
但如果你的预算非常有限,LAMP 设置可能会是更好的选择。
Ruby on Rails (通常简称为 Rails)本身并不是一种编程语言,但却是伴随着 Ruby 编程语言的一个类程序库架构。尽管 Ruby 本身是一种不具有重大改革性的对象导向型脚本语言,同时集成了 Python 和 Perl,但是其 Rails 程序库却创造了系统改革。Rails 程序库完全整合了 MVC(Model View Controller)范式并致力于防止技术的重复。这让你能够基于较小的代码创造一个相对丰富的服务器系统。Rails 使用者将能够自豪地炫耀基于少量代码所编写的网页论坛和社交网站。
与 PHP 一样,Ruby on Rails 也是免费的。
值得一提的其它语言
上面全部是关于在游戏开发世界拥有自己一席之地的语言,不管是在客户端还是服务器端。也就是说大规模或受欢迎的游戏都是使用这些语言进行编写。但是仍有一些并非游戏一流语言,但却呈现了许多希望的有趣的技术存在。我们将会在未来的一些重要项目中看到这些语言的出现。
JavaScript
我们已经在关于 Flash 和 ActionScript 的部分中简要提及了 JavaScript。JavaScript 拥有与 ActionScript 同样的根源,这两种语言可以有效地组合在一起。JavaScript 最早获得关注是因为作为编写网页脚本的语言,而今天它却是作为推动,延伸并说服网络浏览器按照你想要的方式去呈现网页内容的语言。如果你曾经因为为了适应 页面内容而调整自身规格的网页而烦恼,你便可以选择 JavaScript。
但 JavaScript 的作用不只是解决让人烦恼的网页问题,它也成为了编写台式机上所有有趣但却无用的小工具的语言。此外,该语言非常完善,足以用于编写一款完整的游戏,如果是基于小工具框架的话,便能够在浏览器或单机中运行。
还存在两个主要问题阻碍着 JavaScript 成为网页游戏中更受欢迎的语言。第一个问题便是,与 Flash 插件不同的是,JavaScript 的解释器是依赖于浏览器制造者。尽管语言是基于非常完整的 ECMA 标准,但是浏览器所使用的 JavaScript 执行在语言功能和性能中却是不同的。因此我们很难编写一个能够运行于所有浏览器上的强大的 JavaScript 应用。
第二个问题便是关于你的知识产权的保护。JavaScript 并不是作为源代码进行编译,然后再由浏览器本身进行解释。尽管存在一些有效的工具能够向你的用户隐藏代码,但是你的游戏的源代码却从未能逃离你的浏览器的 “查看源代码”指令。如果你并不想你的游戏被模仿/改变/偷走,你就应该仔细着眼于一些有效的安全性解决方法。
D
D 是C,C++和 Java 的“非官方”子孙。这是 Walter Bright(注:作为 PC 上C和 C++ 编译程序构造的先驱之一)脑力劳动的产物。随着不断发展的类程序库以及对于反向兼容性的需求所带来的各种压力,Bright 决定从头开始创造某些内容,汲取C,C++和 Java 的最佳功能,同时舍弃任何不具有存在下去的正当理由的内容。结果便创造了一种比其前辈更紧凑且更容易学习的语言,且无需牺牲任何重要的功能或运行速度。D 是当你将语言设计带离整体领域的产物。
尽管D以简洁的名义舍弃了反向兼容性,但是它却拥有与C代码交流的有效方法,所以如果你拥有第三方程序库或一些你不愿意重新编写的C源代码,你便可以轻松地与之进行沟通。
也就是说如果D能够获得更多支持,它便可能成为世界上最棒的语言。它只是还未拥有巨大的代码程序库,丰富的工具,以及其它语言的用户支持基础罢了。希望关于该语言的支持能够不断发展,并且它也能够获得更多关注,即使这还需要花费一些时间。
结论
一开始我便清楚在关于到底该使用怎样的语言,本文是不可能达到一个让人满意的结论。实际上,并不存在能够解决所有问题的单一解决方法。希望这一列表至少能够帮助你预留出 2 至 3 个不错的候选对象。而剩下的研究便取决于你自己。
幸亏上述所提到的几乎每一个解决方法都拥有免费的执行过程,所以你可以尝试这些语言并选择最适合你自己项目的对象。
(本文为游戏邦/gamerboom.com 编译,拒绝任何不保留版权的转功,如需转载请联系:游戏邦)