<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>藍色部落--km的技術部落格</title>
<link>http://itgroup.blueshop.com.tw/kmzs/blog</link>
<description><![CDATA[藍色部落--km的技術部落格 社群文章]]></description>
<language>zh-TW</language>
<copyright>Copyright 2007 BlueShop</copyright>
<item>
<title><![CDATA[REAL軟體釋出了REALbasic 2008 Release 5（多國語言版） (未分類)]]></title>
<author><![CDATA[kmzs]]></author>
<link><![CDATA[http://itgroup.blueshop.com.tw/kmzs/blog?n=convew&i=4396]]></link>
<description><![CDATA[<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Trebuchet MS'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; ">
<p class="pagetitle" style="font-weight: bold; font-size: larger; color: rgb(0, 152, 51); ">
<br class="Apple-interchange-newline">
REAL軟體釋出了REALbasic 2008 Release 5（多國語言版）</p>
<p class="buzzword" style="text-align: center; font-weight: bold; color: rgb(0, 64, 128); ">
繼續專注於產品品質</p>
<p><strong>美國德州奧斯丁（2008年12月9日）</strong><span class="Apple-converted-space">&nbsp;</span>—Windows、Mac 
OS X和Linux開發者的跨平臺開發環境REALbasic的創造者——從今日起開始發售REALbasic 2008 Release 5。 
這個版本添加了超過150處改建和幾個新功能包括用彩色列印代碼的能力和複製整個方法、屬性和常量的能力，並使所有圖形控制項支援KeyUp事件等。此外，用戶可以編寫自己的工具來自動化完成整個程式生成過程了。</p>
<p>REALbasic 2008 Release 
5也包含了對自動完成——REALbasic用戶經常使用的功能的改進。自動完成現在支援命名空間，並能使用圖示來標示列表中的專案。</p>
<p>關於REALbasic 2008 Release 5中的改進和新增功能的完整列表可以在產品下載頁面<a style="text-decoration: none; color: rgb(1, 168, 77); " href="http://workbench.realsoftware.com/download">www.realsoftware.com/download</a>找到。</p>
<p><strong>關於 REALbasic</strong></p>
<p>
REALbasic是全功能的跨平臺軟體開發環境，適合創建各種類型的應用程式，從實用工具到企業級的軟體，從桌面軟體到控制臺、伺服器程式都能用它來開發。REALbasic的Windows和Mac平臺的個人版售價為$80美元。REALbasic的Linux 
版則免費提供。REALbasic專業版提供了交叉編譯在內的眾多高級功能，售價為$320美元（中國及台港澳用戶及中文用戶需從我司中文客戶中心或當地經銷商処購買）。REALbasic現在可以從REAL軟體公司獲得，請直接從<a style="text-decoration: none; color: rgb(1, 168, 77); " href="http://workbench.realsoftware.com/download">www.realsoftware.com/download</a>下載。</p>
<p><strong>關於 REAL SQL Server</strong></p>
<p>REAL SQL Server是跨平臺多用戶資料庫伺服器。REAL SQL 
Server為REALbasic提供了比其他資料庫伺服器更快速高效地創建安全、健壯的資料庫應用程式的能力。專為REALbasic 
2006及更高版本設計，更多資訊以及有關REAL SQL Server的主要功能的列表可以在<a style="text-decoration: none; color: rgb(1, 168, 77); " href="http://workbench.realsoftware.com/realsqlserver">www.realsoftware.com/realsqlserver</a>找到。</p>
<p><strong>關於 REAL軟體公司</strong></p>
<p>跨平臺開發工具REALbasic和REAL SQL Server的提供商REAL軟體公司，為想要為Windows、Macintosh和Linux創建和釋出跨平臺軟體的人們提供了高效易用的解決方案。REAL軟體公司於1996年創建於美國德克薩斯州首府奧斯丁市。更多資訊請訪問<a style="text-decoration: none; color: rgb(1, 168, 77); " href="http://www.realsoftware.com">www.realsoftware.com</a>或撥打 
+1 512.328.7325。</p>
<p><i>歡迎在Macworld Expo上與REAL軟體公司見面，1月6-9日，三藩市，#3428號展位。</i></p>
</span>

]]></description>
<pubDate>2008-12-10 23:17:00</pubDate>
</item>
<item>
<title><![CDATA[跨平臺開發環境REALbasic內幕：外插模組與程式編譯 (未分類)]]></title>
<author><![CDATA[kmzs]]></author>
<link><![CDATA[http://itgroup.blueshop.com.tw/kmzs/blog?n=convew&i=4395]]></link>
<description><![CDATA[<b><font SIZE="5">
<p ALIGN="CENTER">跨平臺開發環境</font><font FACE="Verdana" SIZE="5">REALbasic</font><font SIZE="5">內幕：外插模組與程式編譯</p>
</font></b><font FACE="Verdana" SIZE="1">
<p ALIGN="JUSTIFY"><br>
<br>
</font><b><font FACE="Verdana" SIZE="3">1</font><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">外插模組格式</font></b><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的外插模組並非是對</font><font FACE="Verdana" SIZE="3">IDE</font><font SIZE="3">功能的擴展，它實際上是對</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">框架包（</font><font FACE="Verdana" SIZE="3">frameworks</font><font SIZE="3">）的功能擴展。</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的框架包的主要部分本身就是一組</font><font FACE="Verdana" SIZE="3">RBX</font><font SIZE="3">格式的外插模組，它們可以在</font><font FACE="Verdana" SIZE="3">Resources</font><font SIZE="3">目錄下的</font><font FACE="Verdana" SIZE="3">Internal 
Plugins</font><font SIZE="3">資料夾中找到（</font><font FACE="Verdana" SIZE="3">Mac OS 
X</font><font SIZE="3">版中，</font><font FACE="Verdana" SIZE="3">Resources</font><font SIZE="3">目錄在應用程式</font><font FACE="Verdana" SIZE="3">Bundle</font><font SIZE="3">內部，需要先在</font><font FACE="Verdana" SIZE="3">Finder</font><font SIZE="3">中對應用程式</font><font FACE="Verdana" SIZE="3">Bundle</font><font SIZE="3">使用顯示包內容命令）。框架包的另一部分在</font><font FACE="Verdana" SIZE="3">Resources</font><font SIZE="3">目錄下的</font><font FACE="Verdana" SIZE="3">Frameworks</font><font SIZE="3">資料夾中，稍後再介紹，我們先說說外插模組檔。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font FACE="Verdana" SIZE="3">RBX</font><font SIZE="3">檔是由一組或幾組動態庫</font><font FACE="Verdana" SIZE="3">/</font><font SIZE="3">共用庫檔和一些要在</font><font FACE="Verdana" SIZE="3">IDE</font><font SIZE="3">中使用的資源打包而成的。其中的每一組動態庫通常至少包含一個用於</font><font FACE="Verdana" SIZE="3">Win32</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">檔，一個用於</font><font FACE="Verdana" SIZE="3">Mac</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">UB</font><font SIZE="3">（通用二進位）格式的</font><font FACE="Verdana" SIZE="3">dylib</font><font SIZE="3">或</font><font FACE="Verdana" SIZE="3">bundle</font><font SIZE="3">檔，和一個用於</font><font FACE="Verdana" SIZE="3">Linux 
x86</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">so</font><font SIZE="3">共用庫檔。其中</font><font FACE="Verdana" SIZE="3">UB</font><font SIZE="3">格式的庫能用來為</font><font FACE="Verdana" SIZE="3">Intel</font><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">PowerPC</font><font SIZE="3">和</font><font FACE="Verdana" SIZE="3">UB</font><font SIZE="3">三種目標編譯應用程式。但是對於</font><font FACE="Verdana" SIZE="3">UB</font><font SIZE="3">格式（也就是既含有</font><font FACE="Verdana" SIZE="3">Intel 
CPU</font><font SIZE="3">指令，又含有</font><font FACE="Verdana" SIZE="3">PowerPC CPU</font><font SIZE="3">指令的</font><font FACE="Verdana" SIZE="3">Mac</font><font SIZE="3">程式）的支援是從</font><font FACE="Verdana" SIZE="3">REALbasic 
2006</font><font SIZE="3">第四版開始的，因此許多第三方的外插模組還提供一個僅用於</font><font FACE="Verdana" SIZE="3">PowerPC 
CPU</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">dylib</font><font SIZE="3">檔來支援較舊的</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">除了</font><font FACE="Verdana" SIZE="3">PE</font><font SIZE="3">格式的</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">，</font><font FACE="Verdana" SIZE="3">MachO</font><font SIZE="3">格式的</font><font FACE="Verdana" SIZE="3">dylib/bundle</font><font SIZE="3">，和</font><font FACE="Verdana" SIZE="3">ELF</font><font SIZE="3">格式的</font><font FACE="Verdana" SIZE="3">so</font><font SIZE="3">之外，有些第三方外插模組還提供一個</font><font FACE="Verdana" SIZE="3">PEF</font><font SIZE="3">格式的庫以支援</font><font FACE="Verdana" SIZE="3">Mac 
OS 9</font><font SIZE="3">及以前的作業系統。不過也是在</font><font FACE="Verdana" SIZE="3">2006</font><font SIZE="3">年，</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">不再提供對</font><font FACE="Verdana" SIZE="3">Mac 
OS 9</font><font SIZE="3">及以前的</font><font FACE="Verdana" SIZE="3">Mac OS</font><font SIZE="3">的支援，也不再支援為</font><font FACE="Verdana" SIZE="3">Mac 
OS X</font><font SIZE="3">生成</font><font FACE="Verdana" SIZE="3">PEF</font><font SIZE="3">格式的應用程式，因而現有的大部分第三方外插模組都只含有針對</font><font FACE="Verdana" SIZE="3">MachO</font><font SIZE="3">格式的</font><font FACE="Verdana" SIZE="3">Mac</font><font SIZE="3">可執行檔的庫。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">外插模組中每一組動態庫</font><font FACE="Verdana" SIZE="3">/</font><font SIZE="3">共用庫檔提供基本相同的功能，有幾乎一致的介面，具體功能的實現則因系統系統而異。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">除了這些庫文件之外，外插模組中還有一些其他資源，比如要在</font><font FACE="Verdana" SIZE="3">REALbasic 
IDE</font><font SIZE="3">的控制項列表中顯示的圖示（當然，只有外插模組提供的是繼承自</font><font FACE="Verdana" SIZE="3">Control</font><font SIZE="3">類別的控制項才需要）、要在語言參考視窗中顯示的幫助資訊，等等。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">所有這些檔是用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的虛擬卷宗格式封裝在一起的。即使您不使用專門處理外插模組的工具，只要用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">自帶的</font><font FACE="Verdana" SIZE="3">VirtualVolume</font><font SIZE="3">類編寫少量程式碼，就能一窺</font><font FACE="Verdana" SIZE="3">RBX</font><font SIZE="3">檔中的究竟。</font><font FACE="Verdana" SIZE="3"><br>
<br>
<b>2</b></font><font SIZE="3"><b>、外插模組的載入</b></font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font FACE="Verdana" SIZE="3">REALbasic 
IDE</font><font SIZE="3">和</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">程式都會在啟動時載入（</font><font FACE="Verdana" SIZE="3">load</font><font SIZE="3">）所需的外插模組，載入它們的目的卻不同。</font><font FACE="Verdana" SIZE="3">IDE</font><font SIZE="3">載入外插模組是為了讀取其中的介面資訊，以便給出語法提示和在編譯時進行語法檢查。用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">開發的程式載入它們，則是為了確保這些庫中含有所有運行時所需的常式，並獲得函式指標以便在需要時能立即呼叫和執行這些常式的已映射到記憶體中的</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">對於不同平臺，應用程式載入外插模組的方法也有差異。比如，對於</font><font FACE="Verdana" SIZE="3">Mac 
OS X</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">MachO</font><font SIZE="3">程式格式而言。由於</font><font FACE="Verdana" SIZE="3">MachO</font><font SIZE="3">可執行檔本身和其他</font><font FACE="Verdana" SIZE="3">Unix/Linux</font><font SIZE="3">可執行檔格式類似，是個沒有圖示沒有副檔名，可以從主控臺（</font><font FACE="Verdana" SIZE="3">console</font><font SIZE="3">）直接執行的實用程式（</font><font FACE="Verdana" SIZE="3">utility</font><font SIZE="3">）</font><font FACE="Verdana" SIZE="3">/</font><font SIZE="3">命令列程式</font><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">（</font></span><span LANG="EN"><font FACE="Verdana" SIZE="3">command 
line tool</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">）</font></span><span LANG="EN"><font SIZE="3">。</font><font FACE="Verdana" SIZE="3">Apple</font><font SIZE="3">出於多種目的</font><font FACE="Verdana" SIZE="3">——</font><font SIZE="3">比如為了讓它看上去好看些，為了易於國際化等等</font><font FACE="Verdana" SIZE="3">——</font><font SIZE="3">將文</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">字</font></span><span LANG="EN"><font SIZE="3">、介面描述、圖示、圖形圖像和其他一些資源與可執行檔本身</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">儲存</font></span><span LANG="EN"><font SIZE="3">在一個目錄結構中。並使這個目錄結構在</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">預設狀態</font></span><span LANG="EN"><font SIZE="3">下顯示為單一的程式檔。因此您的</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">專案</font></span><span LANG="EN"><font SIZE="3">中所使用的外插模組裏面的</font><font FACE="Verdana" SIZE="3">MachO</font><font SIZE="3">格式的共用庫，在生成</font><font FACE="Verdana" SIZE="3">MachO</font><font SIZE="3">程式時，會被放到這個目錄結構中，保存在</font><font FACE="Verdana" SIZE="3">Frameworks</font><font SIZE="3">子資料夾下。這樣</font><font FACE="Verdana" SIZE="3">Mac 
OS X</font><font SIZE="3">的載入器（</font><font FACE="Verdana" SIZE="3">loader</font><font SIZE="3">）會自動將這些共用庫載入到記憶體中（通常</font><font FACE="Verdana" SIZE="3">dylib</font><font SIZE="3">必須在啟動時載入，而</font><font FACE="Verdana" SIZE="3">bundle</font><font SIZE="3">可以隨需載入並且支援在不需要時卸載）。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">在</font><font FACE="Verdana" SIZE="3">REALbasic 
2008</font><font SIZE="3">第一版以後，</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">上的情況也基本是這樣。所需的外插模組中的用於</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">平臺的</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">，在程式編譯後會被寫出並保存在程式所在目錄下的「</font><font FACE="Verdana" SIZE="3">&lt;</font><font SIZE="3">程式名</font><font FACE="Verdana" SIZE="3">&gt;&nbsp;&nbsp;Libs</font><font SIZE="3">」資料夾中。它們必須與主程序一同安裝，且該自資料夾的名稱不應被更改。在程式啟動時會要求</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">的映射載入器來載入這些動態連結程式庫。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">在</font><font FACE="Verdana" SIZE="3">REALbasic 
2007</font><font SIZE="3">及以前的版本中，這些</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">是作為資源寫入</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">程式中的，然後</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">程式會</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">呼叫</font></span><span LANG="EN"><font SIZE="3">系統</font><font FACE="Verdana" SIZE="3">API</font><font SIZE="3">（應該是</font><font FACE="Verdana" SIZE="3">LoadLibrary</font><font SIZE="3">和</font><font FACE="Verdana" SIZE="3">LoadModule</font><font SIZE="3">之類的</font><font FACE="Verdana" SIZE="3">Win32 
API</font><font SIZE="3">）來載入這些</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">或其中的常式，也就是自己實現一個簡單的載入器。但是這對某些外插模組在一些特定情況下會產生問題，微軟技術支持中心應一些用戶的要求曾與數名</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">系統內核和載入器方面的專家花了數個小時</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">進行追蹤（</font></span><span LANG="EN"><font FACE="Verdana" SIZE="3">trace</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">）</font></span><span LANG="EN"><font SIZE="3">，以研究問題的原因，其結論是由於各種原因這些</font><font FACE="Verdana" SIZE="3">API</font><font SIZE="3">函</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">式</font></span><span LANG="EN"><font SIZE="3">在行為上與系統的映射載入器有些微妙的差異，因此建議</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">將這些</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">外部化，以便使用系統本身的載入器來載入它們。在運行時再將這些</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">寫出到暫存</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">資料</font></span><span LANG="EN"><font SIZE="3">夾也是一種辦法，不過考慮到會被一些比較敏感的殺毒軟體攔截，因此否決了這個方案。這就是在</font><font FACE="Verdana" SIZE="3">2008</font><font SIZE="3">第一版開始，這些</font><font FACE="Verdana" SIZE="3">dll</font><font SIZE="3">不再被內</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">建在程式檔中</font></span><span LANG="EN"><font SIZE="3">的原因。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">至於</font><font FACE="Verdana" SIZE="3">Linux</font><font SIZE="3">，目前沒有太多資料，但觀察，以前似乎也是將</font><font FACE="Verdana" SIZE="3">so</font><font SIZE="3">共用庫檔寫入到可執行檔本體中，然後</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">呼叫</font></span><span LANG="EN"><font SIZE="3">什麼系統功能來載入它們的。不過最新的</font><font FACE="Verdana" SIZE="3">REALbasic 
Linux</font><font SIZE="3">版編譯的程式會在啟動時將這些</font><font FACE="Verdana" SIZE="3">so</font><font SIZE="3">檔寫出到一個隱藏的暫存資料夾中。這個行為改變在</font><font FACE="Verdana" SIZE="3">Ubuntu</font><font SIZE="3">等</font><font FACE="Verdana" SIZE="3">Linux</font><font SIZE="3">發行版上沒有產生什麼問題。但筆者曾遇到過</font><font FACE="Verdana" SIZE="3">CentOS 
5</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">SELinux</font><font SIZE="3">阻止了</font><font FACE="Verdana" SIZE="3">REALbasic 
2008</font><font SIZE="3">第四版所編譯的程式，不讓它繼續運行的問題，在對</font><font FACE="Verdana" SIZE="3">SELinux</font><font SIZE="3">進行一些設</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">定</font></span><span LANG="EN"><font SIZE="3">後基本予以解決。</font><font FACE="Verdana" SIZE="3"><br>
<br>
<b>3</b></font><b><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的編譯器與</font><font FACE="Verdana" SIZE="3">RBScript</font></b><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">既然</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">IDE</font><font SIZE="3">是用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">語言寫的，而用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">語言為自己寫編譯器似乎不是個好主意，因此</font><font FACE="Verdana" SIZE="3">RB</font><font SIZE="3">的編譯器是用</font><font FACE="Verdana" SIZE="3">C/C++</font><font SIZE="3">（據筆者所知，還有一些</font><font FACE="Verdana" SIZE="3">Pascal</font><font SIZE="3">）寫成的。</font><font FACE="Verdana" SIZE="3">C++</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼要與</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">程式一起工作當然要製作成外插模組。因此</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的編譯器也是個外插模組。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">這個被稱為</font><font FACE="Verdana" SIZE="3">Spawn 
Compiler</font><font SIZE="3">的外插模組是不公開的，不過其中的部分動態連結程式庫</font><font FACE="Verdana" SIZE="3">/</font><font SIZE="3">共用庫還是能被找到的。比如在</font><font FACE="Verdana" SIZE="3">REALbasic 
2008</font><font SIZE="3">及更高版本中，您可以在「</font><font FACE="Verdana" SIZE="3">REALbasic 
200X Libs</font><font SIZE="3">」資料夾中找到一個名為「</font><font FACE="Verdana" SIZE="3">Spawn 
Compiler.dll</font><font SIZE="3">」的</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">檔案</font></span><span LANG="EN"><font SIZE="3">。這就是</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">版的編譯器。如果將這個檔複製到</font><font FACE="Verdana" SIZE="3">Plugins</font><font SIZE="3">資料夾中，並重啟</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">IDE</font><font SIZE="3">，隨後嘗試輸入一些</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼，您會看到</font><font FACE="Verdana" SIZE="3">IDE</font><font SIZE="3">的關鍵字自動完成列表會暴露出一些</font><font FACE="Verdana" SIZE="3">Spawn 
Compiler</font><font SIZE="3">的外插模組中的類</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">別</font></span><span LANG="EN"><font SIZE="3">和函</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">式</font></span><span LANG="EN"><font SIZE="3">的介面。不過這個外插模組貌似非常複雜，沒有文</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">件或説明</font></span><span LANG="EN"><font SIZE="3">還真沒辦法用。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">但是有一個簡化定製版的</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">編譯器是公開的，這就是</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">自帶的</font><font FACE="Verdana" SIZE="3">RBScript</font><font SIZE="3">類</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">別</font></span><span LANG="EN"><font SIZE="3">（對應於</font><font FACE="Verdana" SIZE="3">Internal 
Plugins</font><font SIZE="3">資料夾中</font><font FACE="Verdana" SIZE="3">RBScript.rbx</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">檔</font></span><span LANG="EN"><font SIZE="3">）。</font><font FACE="Verdana" SIZE="3">RBScript</font><font SIZE="3">能在記憶體中編譯</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">腳本，並將編譯好的</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令直接映射到當前的</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">行程</font></span><span LANG="EN"><font SIZE="3">空間</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">（</font></span><span LANG="EN"><font FACE="Verdana" SIZE="3">process 
space</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">）</font></span><span LANG="EN"><font SIZE="3">中執行，並回返執行結果。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">這使得在用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">編寫的程式中可以即時編譯</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">並</font></span><span LANG="EN"><font SIZE="3">執行</font><font FACE="Verdana" SIZE="3">REALbasic</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼。</font><font FACE="Verdana" SIZE="3">REALbasic 
IDE</font><font SIZE="3">腳本功能就是使用</font><font FACE="Verdana" SIZE="3">RBScript</font><font SIZE="3">使得自動化控制</font><font FACE="Verdana" SIZE="3">IDE</font><font SIZE="3">以及自動化實現複雜的編譯構建過程成為可能。除此之外，</font><font FACE="Verdana" SIZE="3">Inspiring 
Applications</font><font SIZE="3">公司製作的網頁開發工具</font><font FACE="Verdana" SIZE="3">YUMA</font><font SIZE="3">也依賴於它。</font><font FACE="Verdana" SIZE="3">YUMA</font><font SIZE="3">的主要原理是使用一個用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">編寫的後臺服務程式從網頁中解析出內嵌的</font><font FACE="Verdana" SIZE="3">REALbasic</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼，然後</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">呼叫</font></span><span LANG="EN"><font FACE="Verdana" SIZE="3">RBScript</font><font SIZE="3">來編譯並執行這些</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼，再用回返結果生成需要傳回給用戶的動態頁面。除了所支援的是</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">語言的一個子集之外，它與</font><font FACE="Verdana" SIZE="3">PHP</font><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">ASP</font><font SIZE="3">等沒有本質上的區別，並且</font><font FACE="Verdana" SIZE="3">YUMA</font><font SIZE="3">的企業版也能與</font><font FACE="Verdana" SIZE="3">Apache</font><font SIZE="3">等一同使用。與</font><font FACE="Verdana" SIZE="3">PHP</font><font SIZE="3">等相比的主要優點在於，網頁內嵌的腳本是編譯執行，而不是解釋執行的。據稱，在同等條件下，平均運算速度為</font><font FACE="Verdana" SIZE="3">PHP</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">2</font><font SIZE="3">倍，</font><font FACE="Verdana" SIZE="3">JavaScript</font><font SIZE="3">的</font><font FACE="Verdana" SIZE="3">4</font><font SIZE="3">倍左右。</font><font FACE="Verdana" SIZE="3"><br>
<br>
<b>4</b></font><b><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">程式的編譯</font></b><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">從廣義上說編譯包括兩大步驟：</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">第一步是將高階語言</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼編譯成原生的</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令（即機器碼）。執行這一任務的模組即狹義上的編譯器（</font><font FACE="Verdana" SIZE="3">compiler</font><font SIZE="3">），或稱編譯器前端。有時也會有專門用來處理資源的資源編譯器，本文不對它進行討論。既然</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的編譯器外插模組叫做</font><font FACE="Verdana" SIZE="3">Spawn 
Compiler</font><font SIZE="3">，可想而知，生成</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令是其主要功能。由於</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令不受作業系統影響</font><font FACE="Verdana" SIZE="3">——</font><font SIZE="3">也就是說不論是</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">Intel 
Mac</font><font SIZE="3">還是</font><font FACE="Verdana" SIZE="3">Linux x86</font><font SIZE="3">，處於相同狀況下的</font><font FACE="Verdana" SIZE="3">RB</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼「</font><font FACE="Verdana" SIZE="3">a=1+2</font><font SIZE="3">」，理論上可以編譯為一組完全相同的</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令</font><font FACE="Verdana" SIZE="3">——</font><font SIZE="3">因此</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">的編譯器只要能將</font><font FACE="Verdana" SIZE="3">REALbasic</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼為</font><font FACE="Verdana" SIZE="3">x86</font><font SIZE="3">和</font><font FACE="Verdana" SIZE="3">PowerPC</font><font SIZE="3">系列</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">編譯成兩類不同的機器</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">指令</font></span><span LANG="EN"><font SIZE="3">就可以了。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">第二步是將編譯好的</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令、各種資源按照作業系統支援的檔格式組合成應用程式檔。執行這一任務的模組就是連接器（</font><font FACE="Verdana" SIZE="3">Linker</font><font SIZE="3">），或稱編譯器後端。</font><font FACE="Verdana" SIZE="3">MachO</font><font SIZE="3">格式的</font><font FACE="Verdana" SIZE="3">Mac</font><font SIZE="3">程式將資源保存在外部，因此連接工作相對比較簡單，在</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">和</font><font FACE="Verdana" SIZE="3">Linux</font><font SIZE="3">上則比較複雜。實際上</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">並沒有</font><font FACE="Verdana" SIZE="3">Windows</font><font SIZE="3">和</font><font FACE="Verdana" SIZE="3">Linux</font><font SIZE="3">版的連接器，其連接工作依賴於</font><font FACE="Verdana" SIZE="3">Resources</font><font SIZE="3">目錄下的</font><font FACE="Verdana" SIZE="3">Frameworks</font><font SIZE="3">資料夾中的一組檔</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">案</font></span><span LANG="EN"><font SIZE="3">。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">在</font><font FACE="Verdana" SIZE="3">Frameworks</font><font SIZE="3">資料夾中，</font><font FACE="Verdana" SIZE="3">App 
Resources Carbon</font><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">HXRuntime 
Carbon Mach-O</font><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">HXRuntime 
Mach-O Console</font><font SIZE="3">等檔是生成有圖形介面（桌面的）或無圖形介面（控制臺的或後臺服務的）</font><font FACE="Verdana" SIZE="3">Mac</font><font SIZE="3">程式時所需的資源檔案和一些預先編譯好的功能。它們相當於靜態庫，其中的資源或功能是大多數程式都需要的，這也包括初始化程式和載入及處理外插模組等所需的</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼。因此由</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">直接提供而無需另外編寫或另外附帶外插模組。在編譯</font><font FACE="Verdana" SIZE="3">Mac</font><font SIZE="3">程式時，它們將與主程序連接在一起。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">而</font><font FACE="Verdana" SIZE="3">X86RunHoudini.exe</font><font SIZE="3">、</font><font FACE="Verdana" SIZE="3">X86HoudiniConsole.exe</font><font SIZE="3">等檔則是一些預編譯連接好的空殼程式檔，可以稱之為占位檔。它們基本上是用</font><font FACE="Verdana" SIZE="3">C/C++</font><font SIZE="3">寫成的，必要的資源或功能也已經連接到其中。</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">在為</font><font FACE="Verdana" SIZE="3">Windows/Linux</font><font SIZE="3">程式編譯好</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令後，對這些占位檔進行修改，將</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令和各種資源填入到占位檔的</font></span><span LANG="ZH"><font FACE="&Euml;&Icirc;&Igrave;&aring;" LANG="ZH-CN" SIZE="3">程式</font></span><span LANG="EN"><font SIZE="3">碼段和資料段中，最終生成您的</font><font FACE="Verdana" SIZE="3">Windows/Linux</font><font SIZE="3">程式。</font><font FACE="Verdana" SIZE="3"><br>
</font><font FACE="Times New Roman" SIZE="3">&nbsp;&nbsp;&nbsp;&nbsp;</font><font SIZE="3">因此不必懷疑</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">生成的</font><font FACE="Verdana" SIZE="3">Windows/Linux</font><font SIZE="3">程式不是編譯執行的。可以說，是不是編譯執行，主要看得看編譯過程的第一大部生成的是不是機器碼。對於</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">程式來說，不論是裏面那些由預編譯好的占位檔所提供的、用</font><font FACE="Verdana" SIZE="3">C++</font><font SIZE="3">編寫的部分，還是後插入的、用</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">編寫並編譯出來的部分，都是原生的</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令，都會直接送給</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">去執行，而不是先送給解釋器去解釋為</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">指令，再由</font><font FACE="Verdana" SIZE="3">CPU</font><font SIZE="3">執行。因為</font><font FACE="Verdana" SIZE="3">REALbasic</font><font SIZE="3">生成的是編譯執行的程式，這一點是毋容置疑的。</p>
</font></span>]]></description>
<pubDate>2008-12-07 22:45:00</pubDate>
</item>
</channel>
</rss>
