點睛文本編碼查詢 D 語言版

  本軟件用於將文本的字符串轉換爲 Text、Default、Unicode、UTF-8 之間的互相轉換,用於文本查詢。轉換結果使用十六進制表示。

  D 語言版不需要特殊的運行庫支持。相對於 VB5 版增加了允許輸入十六進制的功能,相對於 .net 版減少了一些功能。

  對於我自己來說,這是練習使用 D 語言的一個副產品。

  程序使用 D 1.015, phobos 和 dfl 開發。

  在這一次練習中,發現 D 語言使用上可以和 c# 很類似,比如我寫的 HexStringCoding 類,從 c# 複製過來,只修改了幾個小地方(如增加 cast,去除 unsafe),就可以正常編譯並且正常運行。另外,和 c/dll 的集成也不錯,使用 WideCharToMultiByte 之類的系統函數還是很方便的。dfl 大體模仿 .net,所以使用起來很方便。

  不過,問題也不少。

  比如 bool 類型可以和任何可以轉換爲 0 和 1 的值進行隱式轉換,就是一個語言方面的缺陷。

  另外,D 語言選擇 char[] 當作字符串來處理,也是一個非常不可理解的事情。char[] 被定義爲 utf8,所以如果要對它進行隨機檢索的話,就需要更多的代碼和更差的運行效率,在我看來,utf8 根本不適合作爲程序內部處理字符串的編碼方案。utf16 才適合。另外,沒有 string 類,而用數組來代替 string 的做法也問題多多,除了強類型檢測之外,string 類還應該提供相應的字符串處理函數,而不是使用全局函數處理字符串。在我做這個程序的時候,是都使用 utf16 的 wchar[] 來做中間的字符串代替品的,不過,dfl 遵循使用 char[] 的方案,所以,和界面交互的部分也做了轉換處理。也許以後可以修改一下 dfl 的代碼,使之直接使用 utf16 吧。

  另一個問題是,無法使用 obj == null 來判斷一個實例是否爲空,這個問題不知道別人有沒有遇到,或者有什麼別的解決方案,我是通過 try catch 的方式處理了,不過感覺很不爽。

  另外,還遇到一個問題,基類定義了 abstract 的函數,子類實現了,但是沒有使用 override 關鍵字,編譯通過,但是運行結果莫名其妙,加上 override 之後就正常了。這個問題可能造成錯誤的機率要比上面說的問題大的多,本來,D 應該在這種情況下編譯出錯纔是。

  再者,D 的 module 組織方式,感覺是在鼓勵大家把所有的類寫入一個文件中,實在不是一個好的方式。

  對於 dfl,也稍微說一下,它使用了首字母小寫的方式,在我看來,既然模仿 .net,就不如模仿個徹底,讓大家把 .net 的程序複製過來後,做最少的修改就能編譯運行纔好 —— 所有首字母改成小寫,也是一個不小的工程啊。

  Tango 的安裝步驟很羅嗦,我還沒有試過,不過,嗯,回頭還是應該試一下的。

發佈了0 篇原創文章 · 獲贊 0 · 訪問量 1312
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章