線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1478
推到 Plurk!
推到 Facebook!

The Delphi Language for Mobile Development 白皮書

 
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-04-26 17:42:36 IP:112.104.xxx.xxx 訂閱

White Paper: The Delphi Language for Mobile Development


http://edn.embarcadero.com/article/43073
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-04-26 17:50:48 IP:112.104.xxx.xxx 訂閱
 在 4 月份的研討會中, 李維投影片曾提到:

Other Language Changes
  • Pointers
    • Remove all pointers, if you can
    • Avoid pointers to objects (because of ARC)
    • Use generic lists, rather than plain TList
  • Arrays
    • Replace static arrays with dynamic arrays
  • With
    • Going , going… still not gone!
其中的 "" 這個部份, 我在這份白皮書裡找不到相關的訊息, 是否有人知道相關的訊息?


編輯記錄
Main Chen 重新編輯於 2013-04-26 17:52:49, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-04-26 19:29:29 IP:115.81.xxx.xxx 訂閱
 原因與string 的mutable/immutable一樣。
它對應到cocoa的NSMutableArray。
簡單說就是因為ios裡的字串/陣列都分成mutable與immutable二類。對於runtime時若內容會被修改的資料,一律要mutable。
但這樣的觀念在delphi裡是比較混淆的…也就是,delphi是一種「混種」,即static的東西依舊還是可以變動內容。但這樣的觀念
在ios裡是不通的。所以,原則上用dynamic array 就不會有問題,因為這種本來就是隨時可變動其內容的型別。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2013-04-27 00:01:20, 註解 無‧
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-04-27 06:17:13 IP:112.104.xxx.xxx 訂閱
感謝蕭大俠的回復!

而 Replace static arrays with dynamic arrays 是不是意指下列的改法?


[code delphi]
// 原來用 static array
procedure test;
var ary: array[0..9] of integer;
begin
...
end;
// 改成 dynamic array
procedure test;
var ary: array of integer;
begin
SetLength(ary, 10);
end;
[/code]



編輯記錄
Main Chen 重新編輯於 2013-04-27 06:20:20, 註解 無‧
Main Chen 重新編輯於 2013-04-27 06:21:10, 註解 無‧
Main Chen 重新編輯於 2013-04-27 06:21:54, 註解 無‧
Main Chen 重新編輯於 2013-04-27 06:22:37, 註解 無‧
Main Chen 重新編輯於 2013-04-27 06:23:37, 註解 無‧
Main Chen 重新編輯於 2013-04-27 06:24:21, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2013-04-27 14:53:34 IP:49.215.xxx.xxx 訂閱
 yes!但要注意,你可能會有機會合併使用到FillChar的函式。
因setlength不能確保內容被初使化成0。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2013-04-27 20:33:31 IP:112.104.xxx.xxx 訂閱
之前有試著將源碼改成上述方式,但執行在 iPhone 實機此測試,速度也沒什麼提升,而程式確變大了不少。

而白皮書裡提到的迴圈裡的字串相加用 TStringBuilder 就有明顯的差異了。

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2013-04-28 00:30:30 IP:114.42.xxx.xxx 訂閱
我想,問題應該不是效能,而是會不會出事…

如果說你靜態array,定義後(即初始化後),若不在變動。原則上不會有問題,也很好,速度也快。

但若你定義後,在runtime的時間試著去改,比如 foo[3] = 'A' ,那麼理論上會出事…我不確定此刻的delphi for ios會不會掛,但未來應該是不被建議。就好像string,以目前來說似乎也是不會掛,只是效能變差… 但白皮書寫,未來應該會被禁止,所以建議…

我的看法是: 若靜態初始化後不再被變,比如宣告一週的

Days : array[0..6] of string =     (       'Sun', 'Mon', 'Tue', 'Wed',       'Thu', 'Fri', 'Sat'     ) ;  runtime時不去動這裡面的內容。那不需要去更動為 dynamic,但,若是會變動,還是建議用dynamic。理由是…(現在?)未來可能會掛,而非效能問題。


===================引 用 Main Chen 文 章===================
之前有試著將源碼改成上述方式,但執行在 iPhone 實機此測試,速度也沒什麼提升,而程式確變大了不少。

而白皮書裡提到的迴圈裡的字串相加用 TStringBuilder 就有明顯的差異了。

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2013-04-30 09:05:57 IP:112.104.xxx.xxx 訂閱
感謝您詳細的說明

另外如果在 record 或 class 裡的 static array 是否也一樣建議改成 dynamic array?

TData = class
x: array[0..9] of Double;
end;

改成:

TData = class
x: array of Double;
public
constructor Create; virtual;
end;

constructor TData.Create;
begin
SetLength(x, 10);
end;

感覺上好像多此一舉?

編輯記錄
Main Chen 重新編輯於 2013-04-30 09:07:58, 註解 無‧
系統時間:2024-05-05 15:35:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!