<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=gb2312"> <META NAME="GENERATOR" CONTENT="lfparser_2.51"> <META NAME="LFCATEGORY" CONTENT="SoftwareDevelopment"> <link rel="icon" href="../../common/images/lf-16.png" type="image/png"> <TITLE>lf350, SoftwareDevelopment: 与平台无关的软件开发</TITLE> <style type="text/css"> <!-- td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 } pre { font-family:monospace,Courier } pre.code { font-family:monospace,Courier;background-color:#aedbe8; } p.cl { color:#EE9500 } table.left { margin-right:0.3cm } a.nodec { text-decoration:none } p.trans { font-size:8pt; text-align:right } p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm; text-align:center } p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:none; border-width:medium; border-color:#aedbe8; padding:0.1cm; text-align:left } p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center } div.tbbutton { background: #ddd; border-right: 1px solid #aaa; border-bottom: 1px solid #aaa; margin: 2px 5px 2px 5px; text-align: center; width: 20em; line-height: 1.2em; padding: 2px; font-size: 12px; white-space: nowrap; color: #555; } div.bbutton { background: #ddd; border-right: 1px solid #aaa; border-bottom: 1px solid #aaa; float: left; margin: 2px 5px 2px 5px; text-align: center; line-height: 1.2em; padding: 2px; font-size: 12px; white-space: nowrap; color: #555; } --> </style> </HEAD> <BODY bgcolor="#ffffff" text="#000000"> <!-- this is generated html code. NEVER use this file for your translation work. Instead get the file with the same article number and .meta.shtml in its name. Translate this meta file and then use lfparser program to generate the final article --> <!-- lfparser can be obtained from http://main.linuxfocus.org/~guido/dev/lfparser.html --> <!-- this is used by a number of tools: =LF=AUTHOR: Michael Tschater =LF=CAT___: SoftwareDevelopment =LF=TITLE_: 与平台无关的软件开发 =LF=NUMBER: 350 =LF=ANAME_: article350.shtml =LF=PARSER: 2.51 --> <!-- 2pdaIgnoreStart --> <!-- start navegation bar, current, style=2 --> <!-- top navegation bar --> <TABLE summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%"> <TR bgcolor="#2e2292"> <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width= "100%"> <TR><TD width="319"><a href="../../index.shtml"><IMG src="../../common/images/logolftop_319x45.gif" alt="[LinuxFocus-icon]" width="319" height="45" align="left" border="0"></a></TD> <TD class="top"> <TABLE summary="topbar_1_links" width="100%"> <TR align="right"> <TD class="top"> <A class="nodec" href="../../index.shtml"><FONT color= "#DDDDDD" size="2"><--</FONT></A> | <A class="nodec" href="../map.html"><FONT color= "#DDDDDD" size="2">站点地图</FONT></A> | <A class="nodec" href="../indice.html"><FONT color= "#DDDDDD" size="2">索引</FONT></A> | <A class="nodec" href="../Search/index.shtml"><FONT color= "#DDDDDD" size="2">搜索</FONT></A> </TD> </TR> <TR align="right"> <TD class="top"> <HR width="100%" noshade size="1"> </TD> </TR> </TABLE> </TD> </TR> </TABLE> </TD> </TR> </TABLE> <!-- end top navegation bar --> <!-- blue bar --> <TABLE summary="topbar_2" cellspacing="0" cellpadding="0" border="0" align="center" width="90%"> <TR bgcolor="#00ffff"> <TD><IMG src="../../common/images/transpix.gif" width="1" height= "2" alt=""></TD> </TR> </TABLE> <!-- end blue bar --> <!-- bottom navegation bar --> <TABLE summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center" width="94%"> <TR bgcolor="#000000"> <TD> <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width= "100%"> <TR align="center"> <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color= "#FFFFFF">新闻</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../Archives/"><FONT color= "#FFFFFF">过往期刊</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../Links/index.shtml"><FONT color= "#FFFFFF">链接</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color= "#FFFFFF">关于LF</FONT></A> </TD> </TR> </TABLE> </TD> </TR> </TABLE> <!-- end bottom navegation bar --> <!-- stop navegation bar --> <!-- SSI_INFO --> <!-- tr_staticssi include virtual --> <!-- tr_staticssi exec cmd --> <!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">This document is available in: <A href="../../English/October2004/article350.shtml">English</a> <A href="../../ChineseGB/October2004/article350.shtml">ChineseGB</a> <A href="../../Deutsch/October2004/article350.shtml">Deutsch</a> <A href="../../Francais/October2004/article350.shtml">Francais</a> <A href="../../Italiano/October2004/article350.shtml">Italiano</a> <A href="../../Russian/October2004/article350.shtml">Russian</a> </FONT></TD></TR></TABLE><br> <!-- SSI_INFO STOP --> <!-- 2pdaIgnoreStop --> <!-- SHORT_BIO_ABOUT_THE_AUTHOR_AND_INDEX_START --> <TABLE ALIGN="LEFT" BORDER="0" WIDTH="195" summary="about the author" class="left"> <TR> <TD> <img src="../../common/images2/MichaelTschater.jpg" alt="[Photo of the Author]" width="182" height="186"> <BR>by Michael Tschater <br> <small><tschater/at/web.de></small> <BR><BR> <I>关于作者:</I><BR> <!-- aboutauthor_start --> <p> Michael主要做一些与硬件相关的软件开发(固件)。他在当前的 项目中在开发环境的策略上应用了一种附加的决策 - 并将这一决策 应用在基于固件编程的前端。 <br></p> <!-- aboutauthor_stop --> <!-- TRANSLATED_TO gb --> <!-- TRANSLATED_TO_STOP --> <!-- INDEX_START --> <BR><i>目录</i>: <UL> <LI><A HREF="#350lfindex0">编程语言</A></LI> <LI><A HREF="#350lfindex1">一个例子程序</A></LI> <LI><A HREF="#350lfindex2">C/C++ Libraries</A></LI> <LI><A HREF="#350lfindex3">Trolltech Qt</A></LI> <LI><A HREF="#350lfindex4">Qt总览 Overview</A></LI> <LI><A HREF="#350lfindex5">wxWidgets</A></LI> <LI><A HREF="#350lfindex6">Overview of wxWidgets</A></LI> <LI><A HREF="#350lfindex7">GTK+ (with gtkmm)</A></LI> <LI><A HREF="#350lfindex8">GTK+总览</A></LI> <LI><A HREF="#350lfindex9">FLTK</A></LI> <LI><A HREF="#350lfindex10">FLTK总览</A></LI> <LI><A HREF="#350lfindex11">FOX Toolkit</A></LI> <LI><A HREF="#350lfindex12">FOX overview</A></LI> <LI><A HREF="#350lfindex13">其他可能的方法</A></LI> <LI><A HREF="#350lfindex14">JAVA</A></LI> <LI><A HREF="#350lfindex15">平台无关性</A></LI> <LI><A HREF="#350lfindex16">面向对象</A></LI> <LI><A HREF="#350lfindex17">语法</A></LI> <LI><A HREF="#350lfindex18">类库</A></LI> <LI><A HREF="#350lfindex19">安全性</A></LI> <LI><A HREF="#350lfindex20">是否适合所有项目 </A></LI> <LI><A HREF="#350lfindex21">Java开发工具箱(JDK, Java Development Kit)</A></LI> <LI><A HREF="#350lfindex22">Java版的HelloWorld(JHelloWorld)</A></LI> <LI><A HREF="#350lfindex23">JavaScript和Java</A></LI> <LI><A HREF="#350lfindex24">试图标准化</A></LI> <LI><A HREF="#350lfindex25">反编译</A></LI> <LI><A HREF="#350lfindex26">奇迹般的语言还是短暂的兴奋</A></LI> <LI><A HREF="#350lfindex27">Java和GUI</A></LI> <LI><A HREF="#350lfindex28">SWT和Eclipse </A></LI> <LI><A HREF="#350lfindex29">JAVA中的一些缩写</A></LI> <LI><A HREF="#350lfindex30">Java总览</A></LI> <LI><A HREF="#350lfindex31">Kylix</A></LI> <LI><A HREF="#350lfindex32">Kylix总览</A></LI> <LI><A HREF="#350lfindex33">Smalltalk</A></LI> <LI><A HREF="#350lfindex34">Smalltalk总览</A></LI> <LI><A HREF="#350lfindex35">Mozilla</A></LI> <LI><A HREF="#350lfindex36"> Mozilla总览 </A></LI> <LI><A HREF="#350lfindex37">Microsoft的答案</A></LI> <LI><A HREF="#350lfindex38">.NET是什么?</A></LI> <LI><A HREF="#350lfindex39">什么是Visual Studio .NET ?</A></LI> <LI><A HREF="#350lfindex40">Visual Basic (VB)与VB .NET的不同</A></LI> <LI><A HREF="#350lfindex41">哪一咱编程语言是最适当的?</A></LI> <LI><A HREF="#350lfindex42">.NET和Linux</A></LI> <LI><A HREF="#350lfindex43">.NET总览</A></LI> <LI><A HREF="#350lfindex44">小结</A></LI> <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=350">对这篇文章发表评论</A></LI> </UL> </TD></TR></TABLE> <!-- INDEX_STOP --> <!-- SHORT_BIO_ABOUT_THE_AUTHOR_AND_INDEX_STOP --> <!-- HEAD_OF_THE_ARTICLE_START --> <br> <table border="0"><tr><td> <H2>与平台无关的软件开发</H2> <img hspace="10" alt="[Illustration]" src="../../common/images2/article350/osindep.gif" width="269" height="240"> <!-- ABSTRACT OF THE ARTICLE --> <P><i>摘要</i>: <P> <!-- articleabstract_start --> 几乎所有工业领域的设备都是通过网络控制的。 用户界面作为一个简单的终端程序运行在与主控程序不同的硬件上, 通过网络接收和发送数据, 并且对时间不是很敏感(比方说:初始化参数和显示测量结果)。 在下面的示意图中使用绿色的箭头显示: <br><img alt="[gui frontend]" src="../../common/images2/article350/frontend_en.png" width="560" height="220"><br> 软件项目经常需要回答这样一个问题:我们应该支持哪些操作系统? 本杂志的读者可能倾向于使用Linux, 而另一些人就可能需要其他的操作系统(通常是Windows)。 原则上,使用哪一种操作系统并不占应用程序的主要方面, 程序的使用者只要能够比较直观地看到执行结果就可以了。 <br> 下面本文就论证一个决策,在该决策中不需要特定的硬件平台, 因为写出可以在各种平台上编译运行的软件是可行的。 在本文中我们将仅限于运行Linux和Windows的PC, 使这些程序运行在Mac或MacOSX上也是可能的,但由于缺少硬件我们不能在这里进行演示。 <br> <!-- articleabstract_stop --> <br><!-- HR divider --><center><font color="#8282e0"><b>_________________ _________________ _________________</b></font></center><br> </td></tr></table> <!-- HEAD_OF_THE_ARTICLE_STOP --> <!-- BODY_OF_THE_ARTICLE_START --> 通过使用与平台无关的库我们可以区分在对话框中产生控件的两种不同的方法: <br> <ol> <li> 本机(native)库:使用与操作系统相关的例程来显示元素。 这可以保证所有的控件与本操作系统上标准的应用程序看起来是一样的。 而使用本机库显示的控件在Linux和Windows2000或XP上却有所不同。 <br> </li> <li> 第二种可能的方案就是编写一种具有适当的观感(look&feel) 的程序,使用所有的控件在不同的操作系统上看起来都是一模一样的。 <br> </li> </ol> 除了在单纯的编程技术角度上对程序库进行衡量, 其他一些操作上的因素,比如好用的 IDE、文档、支持成本等也占很重要的一个方面。让我们来比较一下: <br> <ul> <li> 开发环境:集成开发环境(如图形化的编译器,makefile生成器) 可以简化软件的开发过程。 </li> <li> 文档和支持:程序出现问题时应能够立即获得帮助。 </li> <li> 花费:因为大多数库允许个人自由使用,而应用于商业程序时有时收费却很高昂, 对于软件项目基本的决策来说这种开销需要由决策者来决定。 </li> <li> 在操作系统间移植的实际开销。 </li> </ul> 在实际应用中还需要考虑的其他方面(当然并不是对所有的项目来说): <br> <ul> <li> 为了与现有的系统结构集成,我们编写的软件应该能够应用本地控件。 用户应该在新的软件和本机上已有的软件之间看不出有什么不同。 <br> </li> </ul> 下图使用层的模型展示了程序库的结构: <br> <center> <img src="../../common/images2/article350/layer_en.gif" alt="layer-model" width="496" height="214"> </center> <A NAME="350lfindex0"> </A> <H2>编程语言</H2> 第一个标准就是选择编程语言。下面我们来讨论几种可能的选择: <br> <ol> <li>C/C++ libraries</li> <li>Java</li> <li>Kylix</li> <li>Smalltalk</li> <li>Mozilla</li> </ol> 除了C和C++,由于开发者使用的比较少我们将会详细的解释。 <br> <br> <A NAME="350lfindex1"> </A> <H2>一个例子程序</H2> 为了比较不同的软件包,我们将为所有的库生成一个例子程序。 该程序的实现并不提供什么实际的功能,但它可以显示最重要的一些控件。 我们使用Windows代码生成纯的Windows软件(Visual C++ 6.0, MFC Class-Library),其他的包会在观感(look&feel)上与之比较。 对于Linux发行套件我将选用RedHat fedora Core 2和Debian 3.0。 <br> <center> <table border="0"> <tr> <td><a href= "../../common/images2/article350/msvc_win2000.jpg"><img alt="Windows 2000 Screenshot" src="../../common/images2/article350/msvc_win2000_th.jpg" border="0" width="280" height="210"></a></td> <td><a href= "../../common/images2/article350/msvc_winxp.jpg"><img alt="Windows XP Screenshot" src="../../common/images2/article350/msvc_winxp_th.jpg" border="0" width="280" height="210"></a></td> </tr> </table> <br> Windows 2000和Windows XP屏幕截图 <a href= "../../common/src2/article350/win32_src.zip">(Visual C++源代码 win32_src.zip)</a>).<br> </center> <A NAME="350lfindex2"> </A> <H2>C/C++ Libraries</H2> <A NAME="350lfindex3"> </A> <H3>Trolltech Qt</H3> Qt是Norwegian company Trolltech开发的应用于平台无关编程的C++类库。 Linux窗口管理器KDE就是基于Qt的。 最早的时候Qt的许可证不能被很多Linux使用者接受, 因此就有人开发了构成Gnome窗口管理器基础的GTK+库。 其间Qt的Linux版本和MacOS版本也以GPL发布,并且包含所有源代码。 但Windows版本仍然只能商业性的获得。 一个供实验用的有时间限制的评估版本可以在它们的网页上下载- 应用于商业目的和学术研究目的的应用程序是不同的。 下面我们将以商业版为例来进行说明,这一版本需要先进行注册。 <br> <br> 除了Windows、Linux(Unix)和Mac版本,Qt还有一个嵌入式的版本, 该版本运行于一些嵌入式Linux变体上来提供简单的窗口管理。 <br> <br> 在Linux在安装应该没有任何问题。包括GUI生成器和Qt设计器、详细 的文档和示例程序、快速开始向导和类查看器。Qt设计器可以生成 使用XML描述的GUI界面。使用Qt工具qmake可以从XML描述生成合法 的Makefile。接下来qmake会调用Meta Object Compiler(Qt工具:moc),后者把Qt特定的语言扩展转换 成C++源代码。然后就可以使用标准的make程序编译成可执行的程序了。 <br> <br> 按下面的顺序手工生成源文件(输入文件是MyDialog.ui): <ul> <li>uic MyDialog.ui > MyDialog.h</li> <li>uic -impl MyDialog.h MyDialog.ui > MyDialog.cpp</li> <li>moc -o moc_MyDialog.cpp MyDialog.h</li> </ul> <br> <center> <table> <tr> <td><a href= "../../common/images2/article350/qt_linux.png"><img src="../../common/images2/article350/qt_linux_th.png" alt="qt linux" width="280" height="210"></a></td> <td><a href= "../../common/images2/article350/qt_win.jpg"><img src="../../common/images2/article350/qt_win_th.jpg" alt="qt win" width="280" height="210"></a></td> </tr> </table> <br> Linux and Windows 2000 屏幕截图 <a href="../../common/src2/article350/qt_src.tar.gz">源代码 (qt_src.tar.gz)</a> </center> <A NAME="350lfindex4"> </A> <H3>Qt总览 Overview</H3> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>名字:<br> </td> <td>Trolltech Qt<br> </td> </tr> <tr> <td>版本:<br> </td> <td>3.3.2<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Linux, Win32, MacOS, Solaris, IRIX, AIX, HP-UX<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>C++<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>GPL 或专有许可证(商业)<br> </td> </tr> <tr> <td>优点:</td> <td> <ul> <li>在Linux上它是KDE窗口管理器的基本类库</li> <li>在所有标准的发行套件上都提供安装包(安装非常简单)<br> </li> <li>提供普通的Windows控件</li> <li>有很强的的开发环境</li> <li>proven<br> </li> <li> 支持从Win32 MFC应用程序移植,允许增量转换MFC源代码<br> </li> </ul> </td> </tr> <tr> <td>缺点:</td> <td> <ul> <li>可能的许可证费用(很贵)</li> <li>评估版本的软件在Windows下安装时会产生错误</li> </ul> </td> </tr> <tr> <td>开发环境:<br> </td> <td>e.g. QtDesigner, KDevelop<br> </td> </tr> <tr> <td>主页:</td> <td><a href= "http://www.trolltech.com/">http://www.trolltech.com</a></td> </tr> <tr> <td>文档:<br> </td> <td>手册、教程、邮件列表<br> e.g. <a href= "http://doc.trolltech.com/3.3/index.html">http://doc.trolltech.com/3.3/index.html</a><br> </td> </tr> <tr> <td>参考项目:<br> </td> <td> <ul> <li>KDE Desktop (Default e.g. with SuSE)<br> </li> <li>Opera浏览器</li> <li>Photoshop Album</li> </ul> </td> </tr> <tr> <td>发行:<br> </td> <td>广为流传<br> </td> </tr> </table> <p><br> </p> <A NAME="350lfindex5"> </A> <H3>wxWidgets</H3> wxWidgets工具箱12年前就开始使用了,但直到几个月以前它才叫现在的名字。 原先一直使用的名字wxWindows在与Microsoft“talks”以后被放弃了。 wxWidgets包括应用到所有应用程序领域的大量的类。 参考应用程序列表展示了该软件包的成熟度。 <br> <br> 编程使用C++,与Windows下的Visual C++类似。 <br> <br> 不利的地方是在RedHat Fedora Core 2 上使用wxWindows2.4.2 编译我们的示例程序时会出错。因为在RedHat补丁后的GTK+版本中 GTK+调用被声明为私有的,系统不允许我们调用那些方法。 但这只是小问题,使用标准的GTK+库是不会有任何问题的。 在Debian上使用一切都OK。 <br> <br> 在Windows上安装也没有任何问题。 <br> <br> <center> <table> <tr> <td><a href= "../../common/images2/article350/wx_linux.png"><img src="../../common/images2/article350/wx_linux_th.png" alt="wxWidgets on Linux screenshot" hspace="5" width="280" height="224"> </a></td> <td><a href= "../../common/images2/article350/wx_win32.jpg"><img src="../../common/images2/article350/wx_win32_th.jpg" alt="wxWidgets on Windows screenshot" hspace="5" width="280" height="210"> </a></td> </tr> </table> <br> Linux and Windows 2000 屏幕截图 <a href= "../../common/src2/article350/wx_src.zip">源代码 (wx_src.zip)</a>). </center> <br> <A NAME="350lfindex6"> </A> <H3>Overview of wxWidgets</H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>名字:<br> </td> <td>wxWidgets<br> </td> </tr> <tr> <td>版本:<br> </td> <td>2.4.2<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Linux, Win32, 嵌入设备(embedded devices)<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>C++<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>LGPL </td> </tr> <tr> <td>优点:</td> <td> <ul> <li>处理起来简单(simple handling)有好多例子。<br> </li> <li>非常好的文档。</li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td> <ul> <li>wxWindows2.4.2与Fedora Core 2 组合时有问题</li> </ul> </td> </tr> <tr> <td>开发环境:<br> </td> <td><br> </td> </tr> <tr> <td>主页:</td> <td><a href= "http://www.wxwidgets.org/">http://www.wxwidgets.org</a><br> </td> </tr> <tr> <td>文档:<br> </td> <td>手册、教程、邮件列表、wiki<br> e.g. <a href= "http://wiki.wxwidgets.org/">http://wiki.wxwidgets.org</a></td> </tr> <tr> <td>参考程序:<br> </td> <td>AOL Communicator</td> </tr> <tr> <td>发行:<br> </td> <td>没有大量发行<br> </td> </tr> </tbody> </table> <p><br> </p> <A NAME="350lfindex7"> </A> <H3>GTK+ (with gtkmm)</H3> 缩写来自“The GIMP Toolkit”。两个众所周知的项目是Gnome 窗口管理器(任何Linux发行套件的一部分)和图形处理程序GIMP。 Gome是Linux上除了KDE外的第二大桌面环境, 在许多的发行套件上它也是默认的桌面环境。 在GTK+版本2中观感(look&feel)方面显著地增强了。 <br> <br> GTK+一个特殊的地方在于它完全是用C实现的,因而GUI builder <i>glade2</i>会产生C代码。使用<i>gtkmm</i>(以前叫GTK--) 也可以使用C++编程。 <br> <br> 与在Linux上专业的界面相比,GTK+ for Win32看起来可没有那么令人激动。 在GTK+的主页上有以下警告:<b>在Win32上程序可能会意外的崩溃或有什么 不可思议的表现(The program(s) might crash unexpectedly or behave otherwise strangely)。</b>(当然,其他也有好多商业的程序在Windows 上也是如此。)程序的稳定性看起来跟机器和显卡驱动程序或机器上安装 的其它应用程序有很大关系(这是2004年9月6日的情况)。 勇敢的软件开发者点击下载页面时会遇到一长串的单个的软件组件需要下载, 因为在一个包容性很强的软件包里面搜索是徒劳的。 但是你可以阅读关于如何安装一系列的软件组件的介绍, 当缺少一些特定的组件时你还可以返回下载页面进行下载。 这也正好应了“GTK+ for Windows”主页上的声明: “您必须有相当的经验才能在您自己的程序中使用GTK+, 这可不是Visual Basic。”(You are expected to be quite experienced to be able to use GTK+ in your own programs. This isn't Visual Basic.)在经过安装完一些初始化组件并运行了一个不成功的例子程序以后, 大部分的开发者都不愿再深入地进行下去了。 在任何商业程序中提供这么不专业的“GTK+ for Win32”组件会使其丧失软件包的资格。 <br> <br> <center> <a href="../../common/images2/article350/gtk.png"><img alt="GTK+ screenshot" src="../../common/images2/article350/gtk_th.png" width="280" height="210"></a><br> Linux上的GTK+屏幕截图<a href= "../../common/src2/article350/gtk_src.tar.gz"> 源代码for glade2 (gtk_src.tar.gz)</a> </center> <A NAME="350lfindex8"> </A> <H3>GTK+总览</H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>名字:<br> </td> <td>GTK+ - The GIMP Toolkit<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Linux, Win32<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>C (C++ mit gtkmm)<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>LGPL<br> </td> </tr> <tr> <td>优点:<br> </td> <td> <ul> <li>Linux上Gnome窗口管理器的基本库</li> <li>安装包包含在所有标准的Linux发行套件中(安装非常简单)<br> </li> <li>提供普通的Windows控件</li> <li>well-proven (under Linux)<br> </li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td> <ul> <li>Win32上的实现非常笨拙,不稳定(status 09-2004)<br> </li> </ul> </td> </tr> <tr> <td>开发环境:<br> </td> <td>e.g. <i>glade2</i> (GUI Builder), Anjuta</td> </tr> <tr> <td>主页:</td> <td><a href= "http://www.gtk.org/">http://www.gtk.org</a></td> </tr> <tr> <td>文档:<br> </td> <td>手册、教程、邮件列表<br> e.g. <a href= "http://developer.gnome.org/doc/API/2.0/gtk/index.html">http://developer.gnome.org/doc/API/2.0/gtk/index.html</a><br> </td> </tr> <tr> <td>参考项目:<br> </td> <td> <ul> <li>Gnome Desktop</li> <li>GIMP</li> <li>Gnumeric<br> </li> </ul> </td> </tr> <tr> <td>发行:<br> </td> <td>Linux: 广为流传, Windows:只有少数人使用<br> </td> </tr> </tbody> </table> <br> <br> <A NAME="350lfindex9"> </A> <H3>FLTK</H3> FLTK Toolkit (Fast, Light Tool Kit:快速轻量级的工具箱) 是一个鲜为人知的软件包。 它是作为 <a href= "http://freshmeat.net/projects/xforms/">XForms</a> 的继承者来实现的。全部的源代码都可以从它的网站上下载, 2.3MB(Linux)和3MB(Win)的大小体现了它的名字。 在Linux上安装没有任何困难:解包并且执行“<i>make</i>”就完了。 然后使用者就有了库、示例程序、GUI builder-“<i>fluid</i>” 和一本编程小册子。很显然与重量级的Qt和wxWindows 比起来它提供的类是比较少的。涵盖GUI的类有:windows,menus, controls,OpenGL和显示图片的类等。它并不包含网络通信等其他的类。 <br> <br> Windows上的安装会更复杂一些。当使用Visual C++做为开发环境时 只有主项目(main project)需要转换。但这可能在图形库上引起问题。 一种简单的解决办法是在配置文件config.h中将它们注释掉。另一种 在Windows上特有的功能是FLTK库的DEBUG版本总是会开启一个附加的DOS 窗口。这就保证了从命令行运行的程序可以写到标准错误(stderr) 和标准输出(stdout)。 <br> <br> 总之FLTK给我们留下了很深刻的印象,值得我们深深地思考。 它的文档中也强调可以生成很小的可执行程序(80kb for a "hello world") 和快速的2D和3D图形程序。还有它的可移植性也是值得一提的。 <br> <br> <center> <table border="0" cellpadding="2" cellspacing="2"> <tr> <td><a href= "../../common/images2/article350/fltk_linux.png"><img alt="Linux FLTK屏幕截图" src="../../common/images2/article350/fltk_linux_th.png" width="280" height="210"> </a><br> </td> <td><a href= "../../common/images2/article350/fltk_win32.jpg"><img alt="Windows FLTK屏幕截图" src="../../common/images2/article350/fltk_win32_th.jpg" width="280" height="210"> </a><br> </td> </tr> </table> <br> Linux and Windows 2000屏幕截图<a href= "../../common/src2/article350/fltk_src.tar.gz">源代码 (fltk_src.tar.gz)</a> <br> </center> <br> <A NAME="350lfindex10"> </A> <H3>FLTK总览</H3> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>名字:<br> </td> <td>Fast Light Tool Kit</td> </tr> <tr> <td>版本:<br> </td> <td>1.1.5rc2<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Linux, Win32, MacOS<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>C++<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>LGPL<br> </td> </tr> <tr> <td>优点:</td> <td> <ul> <li>非常小巧的库</li> <li>有源代码、文档和开发环境“fluid”。<br> </li> <li>很好的OpenGL支持(未测试)<br> </li> <li>普通的Windows控件</li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td> <ul> <li>在Win32 (Visual C++)环境中安装会有问题</li> <li>The fluid开发环境在Windows不稳定</li> </ul> </td> </tr> <tr> <td>开发环境:<br> </td> <td>e.g. fluid (GUI Builder)<br> </td> </tr> <tr> <td>主页:</td> <td><a href="http://www.fltk.org/">http://www.fltk.org</a>, 下载: <a href= "http://freshmeat.net/projects/fltk/">http://freshmeat.net/projects/fltk/</a><br> </td> </tr> <tr> <td>文档:<br> </td> <td>手册、教程、邮件列表<br> e.g. http://<br> </td> </tr> <tr> <td>参考项目:<br> </td> <td> <ul> <li><a href= "http://vtkfltk.sourceforge.net/">http://vtkfltk.sourceforge.net/</a><br> </li> </ul> </td> </tr> <tr> <td>发行:<br> </td> <td>很少发行量,即使用在软件开发者中也很少有人知道<br> </td> </tr> </table> <br> <br> <A NAME="350lfindex11"> </A> <H2>FOX Toolkit</H2> The Fox Toolkit声称是现有的最快的工具箱。 它提供大量的GUI元素和一个OpenGL界面。 <br> <br> 在Linux和Windows上安装没有任何问题。也有详细的文档和示例程序可以参考。 在该版本中不包含类浏览器但可以以线查看。 <br> <br> <center> <a href="../../common/images2/article350/fox_win.jpg"><img alt="FOX screenshot" src="../../common/images2/article350/fox_win_th.jpg" width="280" height="210"></a><br> <br> Windows 2000屏幕截图 <a href= "../../common/src2/article350/fox_src.zip">源代码 (fox_src.zip)</a> </center> <A NAME="350lfindex12"> </A> <H3>FOX overview</H3> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>名字:<br> </td> <td>FOX Toolkit</td> </tr> <tr> <td>版本:<br> </td> <td>1.2.9<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Linux, Win32<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>C++<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>LGPL<br> </td> </tr> <tr> <td>优点:</td> <td> <ul> <li>很好的文档</li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td> </td> </tr> <tr> <td>开发环境:<br> </td> <td> </td> </tr> <tr> <td>主页:</td> <td><a href= "http://www.fox-toolkit.org/">http://www.fox-toolkit.org</a><br> </td> </tr> <tr> <td>文档:<br> </td> <td>手册、教程、邮件列表</td> </tr> <tr> <td>参考项目:<br> </td> <td> <ul> <li>X File Explorer (Xfe)</li> </ul> </td> </tr> <tr> <td>发行:<br> </td> <td>少量发行</td> </tr> </table> <br> <A NAME="350lfindex13"> </A> <H2>其他可能的方法</H2> 除了上述的(类)库外我还想提一下下列项目, 但我们不准备在这里进行深入的探讨。 <br> <ul> <li>GNUstep [http://www.gnustep.org/]: 在windows中使用有局限性</li> <li>Visual Component Framework [http://vcf.sourceforge.net/]: 没有可用的完善的版本</li> </ul> <A NAME="350lfindex14"> </A> <H2>JAVA</H2> Sun公司在1995年推出了一种新的编程语言。 除了我们已经习惯的为工业产品(咖啡机、烤面包器等)设计的桌面PC Java外,最初通过Internet与Web浏览器相联系的Java applets 程序也取得了突破性的进展。同时, 由于Java的多种特性,使它也非常适合单独运行。 <br> <br> 下面我们将逐一简短地介绍一下Java最重要的一些特性。 <br> <br> <A NAME="350lfindex15"> </A> <H3>平台无关性</H3> Java是平台无关的。Java程序由一些可以由虚拟机翻译的字节代码(Byte-code)组成。 这样,Java程序就可以运行在所有可以运行Java虚拟机的硬件平台上。 使用虚拟机解释执行与编译程序相比意味着低速。为了克服这一缺点, 人们又进行了改进。比方说JIT(just-in-time compilation),使用JIT 可以将虚拟机的程序指令转换成物理机器的指令。 在这种情况下结果变成了内存中已经排列好的程序, 可以由机器快速执行而不需要解释了。 利用热点技术(Hotspot-technology)对运行时行为(runtime behavior) 进行附加的分析还可以获得额外的改进。 <br> <br> <A NAME="350lfindex16"> </A> <H3>面向对象</H3> Java是面向对象的。面向对象语言开发者的灵感来自于Smalltalk。 可能是由于性能的原因还有一些原始的数据类型没有用对象来实现。 <br> <br> <A NAME="350lfindex17"> </A> <H3>语法</H3> Java的语法与C和C++很相近,但避免了 C/C++ 中的一些很容易产生 Bug 的特性。 开发该语言的一个基本原则是组合已存在的编程语言中最好的概念。 <br> <br> 一些例子 <br> <ul> <li> 没有预处理器。因为所有的信息都直接从类文件中读取,预处理器和 头文件都不再需要了。 </li> <li> 指针:Java不使用指针而是用引用代替。一个引用代表一个对象。 </li> <li> 垃圾收集器:为了避免在创建和销毁对象时出现问题, 对象管理由Java运行时环境(JRE)控制。 离开活动数组的对象被自动销毁。没有使用的对象或内存数组, 错误的析构函数等都使用该技术进行控制。 </li> <li> 异常:与C++中相比在Java中更大量的使用异常。 <br> </li> </ul> <A NAME="350lfindex18"> </A> <H3>类库</H3> Java包括了一个扩展类库:JFC(Java Foundation Class)用来生成 界面。(代码的名字叫<i>Swing</i>) <br> <A NAME="350lfindex19"> </A> <H3>安全性</H3> Java代码在执行之初被一个检验器对其结构的正确性和数据类型的安全性进行检查。 一个安全管理器监视着所有对外设的访问。任何安全性问题都被报告为运行时的异常。 <br> <A NAME="350lfindex20"> </A> <H3>是否适合所有项目<br> </H3> 在所有项目中都使用Java是不明智的。上面提到的种种优点就有这种副作用。 有些属性不是语言本身的错误或者弱点,只是他们有意识地没有被实现, 这属于这种语言的设计哲学。例如: <br> <ul> <li>对于特定平台的外设访问</li> <li>直接访问硬件</li> <li>干预操作系统的行为</li> </ul> <A NAME="350lfindex21"> </A> <H3>Java开发工具箱(JDK, Java Development Kit)</H3> <p> JDK可以从Sun公司的网站下载。它包括一系列基本的程序, Java类和在线文档。其中程序包括一个编译器,一个调试器, 一个applet查看器以及各种各样的生成和测试Java程序和Java applets所需要的辅助程序。 该工具箱只提供从命令行上运行编译程序所需要的最基本的部分。 除上述之外,该软件包还包括Java运行时环境(JRE, Java Runtime Environment),其中包括虚拟机以执行字节代码(Bytecode)。 文档中描述了所有的API。 </p> <A NAME="350lfindex22"> </A> <H3>Java版的HelloWorld(JHelloWorld)</H3> 使用标准的JDK可以实现标准的“Hello world”程序。 <br> 第一步:生成源代码。 <br> <pre class="code"> sh>vi Helloworld.java<br> <br> public class HelloWorld {<br> public static void main (String[] args) {<br> <br> System.out.println("Hello World!");<br> }<br> } </pre> 注意文件名和类名必须一致。 <br>第二步,翻译。 <br> <pre class="code"> sh>javac Helloworld.java<br> </pre> <br> 第三步:使用虚拟机执行程序。 <pre class="code"> sh>java Helloworld<br> </pre> <br> <A NAME="350lfindex23"> </A> <H3>JavaScript和Java</H3> 经常有人认为JavaScript和Java是差不多的,其实那是错误的。JavaScript 是最早由Netscape开发的嵌入HTML的一种脚本语言。它必须借助于 浏览器而不是一种独立存在的语言。JavaScript这个名字看起来更像一个市场策略。 <A NAME="350lfindex24"> </A> <H3>试图标准化</H3> 直到今天所有对Java试图进行标准化的努力都失败了。 问题的原因可能是Sun不愿意放弃它在以后的Java标准开发中的主导地位。 <A NAME="350lfindex25"> </A> <H3>反编译</H3> Java程序存在的一个问题是可以被反编译。 且不管其他的安全性,Java字节代码可以被反编译成源代码。 因为与传统的汇编代码相比这些字节代码是写给虚拟机的, 因而有好多附加的信息,而利用这些信息可以很容易地进行反编译。 这样没有人可以在代码中隐藏有专有的API或一些特殊的技术。 <A NAME="350lfindex26"> </A> <H3>奇迹般的语言还是短暂的兴奋</H3> Java的概念最初被看作是对平台无关开发的一种终极回答。 但现在那种最原始的兴奋已经过去了。 在不同版本的Java虚拟机之间会有冲突,并且速度也是一个问题。 很多公司在经过试验后又回到了标准的C++编程。 越来越多的wxWidgets开发者的对wxWidgets大量的下载也是一个很有力的证明。 <br> <br> 有关这一问题一个很有趣的网站是: <a href= "http://www.internalmemos.com/memos/memodetails.php?memo_id=1321"> http://www.internalmemos.com/memos/memodetails.php?memo_id=1321</a> 看在那里Sun的员工是怎么反对Java的。 <A NAME="350lfindex27"> </A> <H2>Java和GUI</H2> Java缺省提供两种方式编写图形界面的程序: <ol> <li> Java包含很丰富的类库(JFC,Swing)。在这里没有使用面向对象的方法, 所有的窗口组件都是用Java代码画出来的。 这就使得在运行时改变程序的观感成为可能。 读者可以在下面的屏幕截图中看到。 </li> <li> 基本的AWT方法。AWT没有复杂的元素(如树形组件)所以对大多数程序都不适合。 </li> </ol> <br> <center> <table border="0" cellpadding="2" cellspacing="2"> <tr> <td><a href= "../../common/images2/article350/java_metal.jpg"><img alt="Java Metal screenshot" src="../../common/images2/article350/java_metal_th.jpg" width="280" height="210"> </a> </td> <td><a href= "../../common/images2/article350/java_motif.jpg"><img alt="Java Motif screenshot" src="../../common/images2/article350/java_motif_th.jpg" width="280" height="210"> </a> </td> </tr> <tr> <td colspan=2 align="center"><a href= "../../common/images2/article350/java_gtk.png"><img alt="Java Gtk screenshot" src="../../common/images2/article350/java_gtk_th.png" width="280" height="210"> </a> </td> </tr> </table> <br> Metal-, Motif- and GTK+ 观感的Java屏幕截图<a href= "../../common/src2/article350/java_src.zip">源代码 (java_src.zip)</a><br> <br> <table border="0" cellpadding="2" cellspacing="2"> <tr> <td><a href= "../../common/images2/article350/java_win2000.jpg"><img alt="Java on Win2k here." src="../../common/images2/article350/java_win2000_th.jpg" width="280" height="210"> </a><br> </td> <td><a href= "../../common/images2/article350/java_winxp.jpg"><img alt="Java on WinXP here." src="../../common/images2/article350/java_winxp_th.jpg" width="280" height="210"> </a><br> </td> </tr> </table> <br> Windows 观感的屏幕截图( Windows 2000 and Windows XP (idential source code))<br> </center> <br> 因为所有通用的浏览器都支持Java。 应用程序就可以写成像Applet那样在浏览器中运行。 这一技术可以用于其它技术比方说嵌入式系统, Java字节代码可以从集成了Web服务器的应用程序那里下载。 <br> <br> 下图显示了一个与Java-Applet相同的集成在Web页中的程序。 <center> <br> <a href= "../../common/images2/article350/java_applet.jpg"><img alt="Java applet screenshot" src="../../common/images2/article350/java_applet_th.jpg" width="280" height="210"></a><br> 示例程序作为Java Applet运行的屏幕截图 <a href= "../../common/src2/article350/java_applet.zip">源代码 (java_applet.zip)</a><br> </center> <A NAME="350lfindex28"> </A> <H3>SWT和Eclipse<br> </H3> 即使Java提供了与其他工具箱相似的GUI元素开发者还是不满意。 最大的问题就是执行速度不够并且功能也相对的少。 IBM开发了SWT(Standard Widget Toolkit)作为一个替代品。SWT 允许在Java中使用本地的GUI元素。IBM还开发了一个IDE Eclipse 项目提供平台无关的开发工具。工具箱和开发环境都是开源软件。 <br> <A NAME="350lfindex29"> </A> <H3>JAVA中的一些缩写</H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>JDK (Java Development Kit)</td> <td>生成Java应用程序的完整的工具包。包括程序,Java类库和文档。 <br> </td> </tr> <tr> <td>JRE (Java Runtime Environment)<br> </td> <td>组成虚拟机,是执行Java程序所必须的<br> </td> </tr> <tr> <td>J2ME (Java 2 Micro Edition)<br> </td> <td>在有限资源的设备上运行<br> </td> </tr> <tr> <td>J2SE (Java 2 Standard Edition)<br> </td> <td>Java for the desktop (Linux, Windows, ...)<br> </td> </tr> <tr> <td>J2EE (Java 2 Enterprise Edition)<br> </td> <td>可以生成多层的客户机/服务器应用程序和Java-servlets and Java server-pages.<br> </td> </tr> <tr> <td>JFC (Java Foundation Class)</td> <td>开发GUI的类库 (->Swing)</td> </tr> </tbody> </table> <br> <A NAME="350lfindex30"> </A> <H3>Java总览</H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>名字:<br> </td> <td>JAVA 2 PLATFORM STANDARD EDITION DEVELOPMENT KIT 5.0</td> </tr> <tr> <td>版本:<br> </td> <td>5.0<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td> <ul> <li>Linux, Windows, Solaris (SUN)</li> <li>Linux, Windows, AIX, Solaris (possibly MacOS, OS/2, FreeBSD, Amiga, BeOS) (Jikes -> IBM)</li> </ul> </td> </tr> <tr> <td>编程语言:<br> </td> <td>JAVA<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>proprietary license (SUN)<br> </td> </tr> <tr> <td>优点:</td> <td> <ul> <li>健壮的语言(很多可能产生错误的原因都在语言的概念中消除了)<br> </li> <li><br> </li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td> <ul> <li>专有的语言,被Sun控制</li> <li>虚拟机必须与目标机器与配套<br> </li> <li>执行速度慢</li> <li>SWT编程与Swing相比更复杂<br> </li> </ul> </td> </tr> <tr> <td>开发环境:<br> </td> <td>e.g.. Eclipse<br> </td> </tr> <tr> <td>主页:</td> <td><a href= "http://java.sun.com/">http://java.sun.com</a></td> </tr> <tr> <td>文档:<br> </td> <td>手册、教程<br> 普通的: <a href= "http://java.sun.com/j2se/1.5.0/docs/">http://java.sun.com/j2se/1.5.0/docs/</a>, <a href= "http://www-e.uni-magdeburg.de/mayer/java.html">http://www-e.uni-magdeburg.de/mayer/java.html</a><br> SWT: <a href= "http://eclipse-wiki.info/SWT">http://eclipse-wiki.info/SWT</a>, <a href= "http://www.java-tutor.com/java/swtlinks.html">http://www.java-tutor.com/java/swtlinks.html</a><br> </td> </tr> <tr> <td>参考项目:<br> </td> <td> </td> </tr> <tr> <td>发行:<br> </td> <td>大面积发行<br> </td> </tr> </tbody> </table> <A NAME="350lfindex31"> </A> <H2>Kylix</H2> Kylix是跨Linux和Windows平台的开发环境。用Delphi和C++开发应用程序, 使用Borland的CLX(Component Library for Cross-platform)库可以 使用应用程序在两种平台上运行。根据wikipedia的一张报告(Link <a href= "http://de.wikipedia.org/wiki/Kylix">de.wikipedia.org/wiki/Kylix</a>) CLX只是Qt库的一个包装。而且,Kylix IDE很显然只是一个基于<i>wine</i> 的非本地化的Linux程序(Link <a href= "http://de.wikipedia.org/wiki/WINE_Is_Not_an_Emulator"> de.wikipedia.org/wiki/WINE_Is_Not_an_Emulator</a>) ,该程序的执行都连接到<i>libwine</i>库。考虑到这些,Kylix 对C++程序员来说可能没有太多的好处, 因为找一个自由的IDE使用Qt库可能更直接一些。 <br> <br> <A NAME="350lfindex32"> </A> <H3>Kylix总览</H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>名字:<br> </td> <td>Kylix<br> </td> </tr> <tr> <td>版本:<br> </td> <td>3<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Windows, Linux<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>Delphi, C++<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>Proprietary software<br> </td> </tr> <tr> <td>优点:</td> <td> <ul> <li>使用Delphi and C++开发<br> </li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td> <ul> <li>许可证费用<br> </li> </ul> </td> </tr> <tr> <td>开发环境:<br> </td> <td>Kylix<br> </td> </tr> <tr> <td>主页:</td> <td><a href= "http://www.borland.de/kylix">http://www.borland.de/kylix</a></td> </tr> <tr> <td>文档:<br> </td> <td> <br> </td> </tr> <tr> <td>参考项目:<br> </td> <td><br> </td> </tr> <tr> <td>发行:<br> </td> <td>发行面不广<br> </td> </tr> </tbody> </table> <p><br> </p> <A NAME="350lfindex33"> </A> <H2>Smalltalk</H2> Smalltalk是编程语言中的经典。它是施乐(Xerox)公司在1969/70年开发的, 直到今天它也是面向对象语言经典的例子。 在Smalltalk中任何东西都是一个对象。它没有简单的数据类型。 Smalltalk像Java和.Net(下面会讲到)在虚拟机在运行。 它的语法尽量接近自然语言但与任何其他的编程语言全然不同。 Smalltalk从一开始就常被用来编写图形环境的程序。 它大约早出现了10到15年。直到Java出现之前它一直都是非常成功的。 <br> <br> 这里是用Smalltalk编写的“Hello World”程序: <pre class="code"> Transcript show: 'Hello world !'; cr. </pre> 今天Smalltalk仍在使用。最广泛使用的变体是Smalltalk-80(1980年标准化), 它有一个非常强大的开发环境如Squeak。 <A NAME="350lfindex34"> </A> <H3>Smalltalk总览</H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>名字:<br> </td> <td>Smalltalk (e.g. Squeak)<br> </td> </tr> <tr> <td>版本:<br> </td> <td>3.6<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Windows, Linux, Solaris, MacOSX, Darwin<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>Smalltalk<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>Open Source<br> </td> </tr> <tr> <td>优点:</td> <td>完全面向对象</td> </tr> <tr> <td>缺点:<br> </td> <td>Smalltalk被Java挤在一边,有很少的用户群</td> </tr> <tr> <td>开发环境:<br> </td> <td>e.g. Squeak<br> </td> </tr> <tr> <td>主页:</td> <td><a href= "http://www.smalltalk.org/">http://www.smalltalk.org</a></td> </tr> <tr> <td>文档:<br> </td> <td> <br> </td> </tr> <tr> <td>参考文档:<br> </td> <td><br> </td> </tr> <tr> <td>发行:<br> </td> <td>不广</td> </tr> </tbody> </table> <p><br> </p> <br> <A NAME="350lfindex35"> </A> <H2><a name="Mozilla"></a>Mozilla</H2> Mozilla?不是一个Web浏览器吗?怎么能用一个浏览器来编程呢? Mozilla并不仅仅是一个Web浏览器,它还是一个包括不同的标准 (比方说XUL-一种基于XML的界面语言)的跨平台的架构。 XUL用来定义应用程序内容的结构。所有的文件都是纯文本文件。 Mozilla也不区分程序和Web页。 <br> <br> 如果你在mozilla的地址栏中输入以下字符串你将会在浏览器中看到它自己: <pre class="code"> chrome://navigator/content </pre> 下面的代码会在Mozilla浏览器中显示一个按钮, 当你按下它时它将会打开一个窗口显示“Hello world”。 <br> <pre class="code"> <?xml version="1.0"?> <!-- Beispiel XUL Datei --> <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <box align="center"> <button label="Push" onclick="alert('Hello World');" /> </box> </window> </pre> 使用Mozilla进行软件开发与经典的软件开发不同。Mozilla有好多改革和创新。 比方说应用程序和表现形式的分离。这就使得改变程序的主题(Themes)成为可能。 Firefox项目的成功说明了这是一种非常健壮的架构。 <br> <center> <table border="0" cellpadding="2" cellspacing="2"> <tr> <td><a href= "../../common/images2/article350/moz_linux.png"><img alt="Mozilla on Linux Screenshot" src="../../common/images2/article350/moz_linux_th.png" width="280" height="210"> </a><br> </td> <td><a href= "../../common/images2/article350/moz_win.jpg"><img alt="Mozilla on Win2k" src="../../common/images2/article350/moz_win_th.jpg" width="280" height="210"> </a><br> </td> </tr> </table> Linux and Windows 2000 屏幕截图 <a href= "../../common/src2/article350/moz_src.tar.gz">源代码 (moz_src.tar.gz)</a><br> </center> <br> <A NAME="350lfindex36"> </A> <H3> Mozilla总览<br> </H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>名字:<br> </td> <td>Mozilla<br> </td> </tr> <tr> <td>版本:<br> </td> <td>1.6<br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Windows, Linux,<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>XUL<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>Mozilla Public License, Netscape Public License</td> </tr> <tr> <td>优点:</td> <td> <ul> <li>全新的编程概念</li> <li>支持很多Web标准 (JavaScript, Stylesheets,...)</li> <li>应用程序可以在浏览器中或单独运行</li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td><br> </td> </tr> <tr> <td>开发环境:<br> </td> <td><br> </td> </tr> <tr> <td>主页:</td> <td><a href= "http://www.mozilla.org/">http://www.mozilla.org</a><br> </td> </tr> <tr> <td>文档:<br> </td> <td>手册、教程、邮件列表 E.g www.xulplanet.com</td> </tr> <tr> <td>参考项目:<br> </td> <td>Mozilla firefox</td> </tr> <tr> <td>发行:<br> </td> <td>广泛发行,但很少用于软件项目<br> </td> </tr> </tbody> </table> <p><br> </p> <br> <A NAME="350lfindex37"> </A> <H2>Microsoft的答案</H2> 与此同时,Microsoft当然也意识到了这一问题并提出了他们自己的方法。 他们开发了一种叫做.NET的平台, 使用它将减少软件开发者向与之相竞争的Java平台的迁移,但并不仅限于此。 更近一步的观察可以看出他们很多的竞争者, 虽然它们隐藏在不同的名字后面。他们与Java的字节代码等价的是C# ('Intermediate Language' MSIL). <br> <br> <br> <A NAME="350lfindex38"> </A> <H3>.NET是什么?</H3> .NET是Microsoft专有的一项技术,它将是所有Microsoft未来产品的基础。 直到现在还被支持的Visusal C++的MFC库在.NET中被抛弃了。 .NET将简化网络和Internet应用程序的开发。其中采用了好多Java的思想。 它支持面向对象的语言并提供可以被其他几种语言(C#,VB.NET)使用的单一的类库。 这意味着,访问目标硬件的程序代码被转化为一种“中间语言(Intermediate language)” (相对于Java源代码->Java字节代码->虚拟机->物理硬件……) <br> <br> 未来版本的Windows将提供对.NET架构的支持。 <br> <br> <A NAME="350lfindex39"> </A> <H3>什么是Visual Studio .NET ?</H3> Visual Studio .NET是一种编程环境,旨在简化.NET软件的开发, 但并不是官方的。 <br> <br> <A NAME="350lfindex40"> </A> <H3>Visual Basic (VB)与VB .NET的不同</H3> 虽然由于兼容性等原因VB.NET支持好多原始的VB方法也保持了好多 原始的语法结构,VB.NET都是一种全新的编程语言。 <br> <br> <A NAME="350lfindex41"> </A> <H3>哪一咱编程语言是最适当的?</H3> 因为VB.NET和C#源代码都被翻译成MSIL,使用哪一种语言并没什么不同。 比方说,C#代码和VB.NET代码在执行速度上没有什么区别。 由于C#编译器是专为.NET编写的所以使用它可能会更适合一些。 <br> <br> <A NAME="350lfindex42"> </A> <H3>.NET和Linux</H3> 尽管Microsoft向平台无关性方面努力,但它不可能开发一个Linux版本的.NET变体。 这也是为什么一个开发小组(与Miguel de Icaza相近, Ximian:Evolution) 在致力于做这项工作。开源软件包<i>Mono</i>版本1.0同时可以使用了。 <br> <br> <A NAME="350lfindex43"> </A> <H3>.NET总览</H3> <table border="1" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>名字:<br> </td> <td>Microsoft .NET-Framework<br> </td> </tr> <tr> <td>版本:<br> </td> <td><br> </td> </tr> <tr> <td>操作系统:<br> </td> <td>Windows, Linux<br> </td> </tr> <tr> <td>编程语言:<br> </td> <td>C#, Windows: VB.NET<br> </td> </tr> <tr> <td>许可证:<br> </td> <td>proprietary license<br> </td> </tr> <tr> <td>优点:</td> <td> <ul> <li>它是未来Windows的一部分<br> </li> </ul> </td> </tr> <tr> <td>缺点:<br> </td> <td> <ul> <li>专有软件</li> <li>没有官方可用的Linux .NET版本<br> </li> <li>完全新的API<br> </li> </ul> </td> </tr> <tr> <td>开发环境:<br> </td> <td>Visual Studio .NET<br> </td> </tr> <tr> <td>主页:</td> <td><br> </td> </tr> <tr> <td>文档:<br> </td> <td> <br> </td> </tr> <tr> <td>参考项目:<br> </td> <td><br> </td> </tr> <tr> <td>发行:<br> </td> <td>发行量很少<br> </td> </tr> </tbody> </table> <p><br> </p> <br> <A NAME="350lfindex44"> </A> <H2><a name="Zusammenfassung"></a>小结</H2> 在我们结束最后的评估之前,让我们再回到我们尚未完成的任务: 我们的目标是开发一个可以通过网络与相连硬件进行通信的程序 的前端。为此我们的源代码需要能够在Linux和Win32平台间转换。 该应用程序也不能与系统中已存在的软件程序(在外观上)有所区别。 对于这项任务我们上面对软件包的看法和测试是歪曲的并不能作为有效的普遍的论断。 <br> <br> 关于这个问题最好的例子就是FLTK工具箱。 使用它我们可以获得一个很小但功能非常好的软件包。 它的强大之处在于很少的代码、漂亮的图形界面和良好的可移植性。 这些都反映出该工具箱适合开发嵌入式系统的图形程序。 但是对于前端程序的开发,可用的类的数量和对程序外观的控制会更重要。 那么FLTK就不大适合这样的任务。 <br> <br> 最令程序员失望的莫过于Windows上的GTK+项目。 Linux社区的成员可以有更多的应用。 网站上的警告也不利于稳定程序员的信心。因为GTK+软件包看起来是非常有造诣的, 这更令人觉得可惜。不过潜力还是非常大的,而且在Windows平台上的实现也是非常需要的。 <br> <br> 使用边缘的Smalltalk和Mozilla只剩个人爱好了。 一个依赖于自己内部开发的硬件获利的公司,是不会进行这种尝试的。 即使Smalltalk是一种非常好的面向对象的语言, Mozilla和XUL编程也赋于了它所包含的浏览器更深刻的意义, 这些软件包也始终不会成为最终产品的主流。 <br> <br> 我们回顾一下Kylix,象GTK+ for Win32一样,给我们留下更深的是 负面的印象,绝不像它最原始的产品Turbo Pascal那样辉煌。 80年代Borland推出了一款功能非常强大的IDE产品, 它可以运行在家用电脑和许多早期的PC上。 由于合情合理的价钱和快速的代码使得它广为人知。 但后来一切都变了。Borland变成了Inprise又回到Borland。Turbo Pascal变成Object Pascal,又变成Delphi最后变成Kylix (当然有所扩展和改变)。现在使用它没有任何理由,至少在新项目中是这样的。 <br> <br> 在这一环境中Microsoft显示他们已经意识到我们时代的需求。起初, 他们试图使用Visual J++推出Java标准。在Visual J++中,除了标准的Java命令, 对Win32-API甚至Windows注册表的访问都是允许的 (而这是与该语言的设计哲学相悖的)。而且,Win32可执行程序是自动生成的。 经过与Sun合法的磋商, 它必须显示一个警告指示新创建的应用程序在其他的操作系统上可能无法运行。 故事的结果是Microsoft停止了他们的Java计划,又开发了一个全新的策略。 通过.NET和C++他们又产生了一个新的标准。 .NET和C#的组合确实是一个非常匹配的软件包, 但即将退役的Visual++和MFC库的组合也是非常好的。 不利的一方面是人们必须无条件的接受他们的怜悯 - 实际上是被强制接受他们的标准(Windows)。 在可以预见的一段时期内Microsoft不可能计划将他们的.NET方案在其他操作系统上实现。 开源版本的Mono现在证明是可以胜任的。但不管开始的成就如何,现在还不能下任何结论。 <br> <br> 非常值得推荐的是Qt库、wxWindows和Java。由于所有三种产品都可以 产生很复杂的前端软件,做出最终的选择是困难的。不同的意见依赖于对支持、 花费、准备、编程哲学等的权衡。你可以详细研究他们之间的区别。 实际上在Java哲学中并不允许直接的硬件访问,但它会有其他的优点。 从技术的观点来看这三种竞争者都可以没有问题的达到我们的要求。 <br> <br> 最后是作者个人的主观结论:开源爱好者可能倾向于用wxWindows完成任务。 因为除了有一个适当的概念和很好的工具支持外还可以获得充分的文档。 <br> <br> <!-- vim: set sw=2 ts=2 et tw=74: --> <!-- BODY_OF_THE_ARTICLE_STOP --> <!-- 2pdaIgnoreStart --> <A NAME="talkback"> </a> <h2>对这篇文章发表评论</h2> 每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论: <center> <table width="250" border=0><tr><td> <div class="tbbutton"><A class="nodec" href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=350"> 反馈页面 </a></div> </td></tr></table> </center> <br clear="all"> <HR size="2" noshade> <table width="250" border=0><tr><td> <div class="bbutton"><a class="nodec" href="../../index.shtml"><--, LF 首页</a></div> </td><td> <div class="bbutton"><a class="nodec" href="index.shtml">Go to the index of this issue</a></div> </td></tr></table> <br clear="all"> <HR size="2" noshade> <!-- ARTICLE FOOT --> <CENTER><TABLE WIDTH="98%" summary="footer"> <TR><TD ALIGN=CENTER BGCOLOR="#bdc6d5" WIDTH="50%"> <A HREF="../../common/lfteam.html">主页由LinuxFocus编辑组维护</A> <BR><FONT COLOR="#1111aa"><a href="../../common/copy.html">© Michael Tschater</a><br>"some rights reserved" see <a href="../../license/index.shtml">linuxfocus.org/license/</a><br><a href="http://www.linuxfocus.org">http://www.LinuxFocus.org</a></FONT> </TD> <TD BGCOLOR="#bdc6d5"> <!-- TRANSLATION INFO --> <font size=2>翻译信息:</font> <TABLE summary="translators"> <tr><td><font size="2">de --> -- : Michael Tschater <small><tschater/at/web.de></small></font></td></tr> <tr><td><font size="2">de --> en: Jürgen Pohl <sept.sapins/at/verizon.net></font></td></tr> <tr><td><font size="2">en --> zh: SEVEN <seven1240/at/163.com></font></td></tr> </TABLE> </TD> </TR></TABLE></CENTER> <p><font size=1>2005-04-08, generated by lfparser version 2.51</font></p> <!-- 2pdaIgnoreStop --> </BODY> </HTML>