青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

huaxiazhihuo

 

U8String的重構體會

近兩年來在寫C++的運行時環境,反射、運行時類型信息、內存管理、并行、字符串、協程、ORM等等,基本上重寫了一套標準庫以及運行庫。對于在c++下使用字符串,深有體會。一開始嘔心瀝血,殫精竭慮,支持多種編碼方式(Utf8Utf7GB2312Utf16LEUtf16BE等)的字符串類型,以及在此之上的對這些字符串提供格式化、字符串解析、jsonxml、文件讀寫BOM等等功能,必須承認,大C++真是變態,像是這樣變態無聊的概念都可以支持,還可以實現得很好,用起來確實也方便。可是,每次面臨字符串操作的時候,都會心里發毛,都會嘀咕此時此刻,糾結的是哪門子的編碼,也搞得很多代碼必須以template的形式,放在頭文件上,不放在頭文件,就必須抽象出來一個通用的動態字符串類型,代表任意編碼的一種字符串類型,代碼里面引入各種各樣臆造的復雜性。終于受不了啦,最后搞成統一用utf8編碼,重構了幾千行代碼(十幾個文件),然后,整個字符串世界終于清靜了,接口api設計什么的,也一下子清爽了很多。整個程序內部,就應該只使用同一種編碼的字符串。stl的帶有多個模板的string設計,就是無病呻吟,畫蛇添足。

為什么選擇Utf8編碼,首先,非unicode編碼的字符串是不能考慮的;其次,utf16也是變長的編碼方式,而且還有大小端的區別,所以也不能考慮;utf32又太占用內存了。想來想去,終于下定決心,utf8簡直就是唯一的選擇了。雖然可能有這樣那樣的小問題,比如說,純中文文本,utf8占用多50%內存(相比于Utf16),windowsutf8有點不友好。但其實都不是問題,也都可以解決。比如說,windows下,所有的涉及字符串與系統的api交互,先臨時轉換成utf16,然后再調用apiapi的返回結果為utf16,再轉換為utf8。好像有一點性能上的損失,其實沒啥大不了的。windows對于多字節也是這樣支持的,完全就感受不到性能上的影響。總之,utf8簡直就是程序處理的唯一字符串編碼。

吐槽一下std的字符串,以及與此相關的一切概念,iostreamlocale等等東西,垃圾設計的典范。接口不友好,功能弱,而且還性能差,更關鍵的是其抽象上的泄漏。一整天就只會在引用計數,寫時復制,短字符串優化上做文章,時間精力都不用在刀刃上。C++17終于引入string_view的類型,情況稍微有些改善。由于字符串使用上不方便,也因此損失了一大片的用戶,陣地一再失守。整體上講,stl的設計,自然是有精心的考慮,但是,作出這些抽象的標準會上一大群的老爺子們,大概率上講,應該是沒有用stl正兒八經地開發工業級上的代碼,臆造抽象,顧慮太多,表面上看起來好像是那么一回事,真正用起來的時候,就不太對勁,會有這樣那樣的不足,很不方便。

簡單說一下U8String的設計思路。U8String用以管理字符串編碼緩存的生命周期,追加縮短替換字符串,支持通過下標可以讀取字節char,但是不支持將字節寫入到某個索引上的位置,當然支持往字符串中插入unicode編碼的字符。至于字符串的比較、查找、Trim、截取子字符串這些常用操作,就全部壓在U8View上。如果U8String要使用這些,要先通過view的函數,獲取自己字節緩存下的視圖。U8View表示一段連續的字符編碼內存,U8View的任意一部分也是U8View,不要求以0結束。只要求U8View的生存周期不能比其宿主(U8String,字符數組,U8原生字符串)長命。事實上,很多api的字符串參數,其實只是要求為U8View就行了,不需要是什么const string&類型。此外,還提供U8PointPtr的指針類型,用以遍歷U8View,其取值為unicode編碼值,也就是wchar_t類型。另外,既然有U8View,自然也就有ArrayView,代表連續內存塊的任意類型。

自然,庫中必須提供格式化Fmt以及解析字符串Scanf的函數。StrFmt用以生成新的U8String,而Fmt格式化函數中傳入字符串的話,就將格式化結果追加到字符串后面。Fmt可以格式化數據到控制臺,文本文件,日志等等輸出結果上。StrFmt的實現只是簡單地調用Fmt并返回U8String。有了FmtScanf,操作字符串就很方便很靈活了,同時也消除很多很多有關字符串相關的處理函數。Fmt不僅僅能格式化基本類型,自定義類型,還能格式化數組,vectorlistpairtuple等模板類型的數據。庫中也提供了類似于iostream重載<<>>的操作符。大C++提高的feature,造出來的string類型,使用上的方便,一點都不遜色于其他任何語言的原生string類型。當然,std的那個string,簡直就是廢物。

不管怎么說,本人還是很喜歡C++的,用c++寫代碼很舒暢,可比用C#haskelllispscala時要開心很多。C++發展到C++11,基本功能也都完備了,當然,C++14C++17自然功能更加強大,特別是實現模板庫的時候,就更方便了,也確實很吸引人。自然,C++也非十全十美,也有很多的不足,比如不能自定義操作符,不提供非侵入式的成員函數,缺乏延遲求值的語言機制,引用的修改綁定(只要不綁定到nullptr就好了),成員函數指針的無端限制。但是,世界上又哪里存在完美的language呢,特別是對于這種直接操縱內存的底層語言來說。至于rust,叫囂著要取代c++,就它那副特性,還遠著呢。

posted on 2018-05-22 17:10 華夏之火 閱讀(1908) 評論(0)  編輯 收藏 引用 所屬分類: c++技術探討

導航

統計

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            香蕉免费一区二区三区在线观看 | 欧美高清日韩| 久久久精品国产99久久精品芒果| 欧美亚洲综合另类| 久久精品视频网| 米奇777超碰欧美日韩亚洲| 久久这里只有| 欧美久久久久久久久久| 欧美日韩国产在线看| 国产精品久久久久永久免费观看| 国产美女在线精品免费观看| 韩国欧美国产1区| 亚洲精品综合久久中文字幕| 一区二区三区日韩精品视频| 欧美一区二区在线观看| 欧美福利网址| 亚洲视频一二区| 久久久久久自在自线| 欧美日本在线看| 国产一区二区三区久久 | 艳妇臀荡乳欲伦亚洲一区| 国产精品99久久久久久久久| 久久国产99| 久久免费黄色| 国产欧美日韩| 亚洲国产精品久久人人爱蜜臀| 亚洲精品乱码视频| 欧美一区二区三区久久精品| 猛干欧美女孩| 亚洲免费网站| 欧美激情第五页| 国产综合精品| 亚洲欧美国产高清va在线播| 女同一区二区| 午夜精品亚洲一区二区三区嫩草| 欧美h视频在线| 国产欧美一区二区三区在线老狼 | 加勒比av一区二区| 亚洲午夜激情网站| 亚洲国产日韩在线一区模特| 亚洲一区www| 欧美日韩高清在线播放| 在线国产日韩| 久久五月激情| 欧美亚洲免费电影| 国产精品亚洲视频| 亚洲一区欧美二区| 日韩一本二本av| 欧美激情91| 亚洲人成在线观看一区二区| 久久久久亚洲综合| 欧美影院精品一区| 国产一区二区三区奇米久涩 | 亚洲成人在线免费| 久色成人在线| 久久久久国产精品人| 国产日产欧产精品推荐色 | 日韩亚洲成人av在线| 欧美mv日韩mv亚洲| 久久综合狠狠综合久久综合88| 黄色成人91| 亚洲成人自拍视频| 欧美第一黄网免费网站| 亚洲九九九在线观看| 亚洲黄色性网站| 欧美日韩国产三级| 亚洲制服欧美中文字幕中文字幕| 亚洲视频免费在线| 国产欧美精品国产国产专区| 欧美一级播放| 久久精品系列| 亚洲激情视频在线播放| 91久久久久久国产精品| 欧美日韩国产综合视频在线观看| 亚洲视频在线看| 亚洲综合精品自拍| 国产欧美亚洲视频| 欧美91视频| 久久精品夜色噜噜亚洲a∨ | 猫咪成人在线观看| 久久亚洲影音av资源网| 亚洲国产色一区| 亚洲免费黄色| 国产婷婷色一区二区三区| 久久亚洲一区二区三区四区| 蜜臀91精品一区二区三区| 日韩亚洲在线观看| 亚洲欧美日本国产有色| 国产亚洲精品v| 亚洲激情视频在线播放| 国产精品成人一区二区三区夜夜夜 | 亚洲欧美日韩国产成人| 午夜精品久久久久影视| 亚洲福利视频一区| 在线中文字幕不卡| 极品少妇一区二区三区精品视频| 亚洲欧洲另类国产综合| 国产精品视频成人| 亚洲电影在线免费观看| 欧美视频中文一区二区三区在线观看| 久久精品国产亚洲aⅴ| 欧美大片一区二区三区| 欧美在线啊v一区| 欧美激情视频免费观看| 久久精品成人欧美大片古装| 欧美高清一区| 乱人伦精品视频在线观看| 欧美体内she精视频在线观看| 狂野欧美激情性xxxx| 国产精品露脸自拍| 亚洲精品一区在线观看| 在线日韩中文字幕| 欧美亚洲综合久久| 亚洲尤物在线视频观看| 欧美成人中文字幕在线| 久久影音先锋| 国产麻豆一精品一av一免费| 亚洲国产中文字幕在线观看| 国产在线欧美日韩| 亚洲欧美亚洲| 香蕉久久夜色精品国产使用方法| 欧美精品七区| 欧美激情网站在线观看| 韩日在线一区| 欧美中文字幕精品| 久久精品欧美日韩| 国产麻豆成人精品| 亚洲专区一区| 性做久久久久久| 国产精品热久久久久夜色精品三区| 亚洲国产精品小视频| 亚洲精品视频在线播放| 美女啪啪无遮挡免费久久网站| 久久综合五月天婷婷伊人| 国产欧美日韩在线播放| 亚洲欧美国产制服动漫| 欧美在线观看天堂一区二区三区 | 中文在线资源观看视频网站免费不卡| 在线欧美日韩| 久久久久国产精品一区二区| 久久午夜色播影院免费高清| 国内精品久久久久久久97牛牛| 亚洲欧美日韩国产成人| 久久精品2019中文字幕| 一区二区三区在线观看国产| 久久久久九九九| 欧美阿v一级看视频| 亚洲国产另类精品专区 | 亚洲精品久久久久久久久| 亚洲精品黄色| 欧美午夜剧场| 亚洲在线观看免费视频| 久久久人成影片一区二区三区 | 亚洲欧美日韩国产另类专区| 国产精品卡一卡二| 欧美一区二区三区喷汁尤物| 久久综合中文| 亚洲日本中文字幕免费在线不卡| 欧美精品v国产精品v日韩精品| 日韩亚洲成人av在线| 先锋影音一区二区三区| 一区视频在线播放| 欧美女激情福利| 亚洲欧美一区二区原创| 欧美jizz19性欧美| 亚洲一区二区少妇| 激情视频一区二区| 欧美片第一页| 久久国产精品一区二区三区| 亚洲国产成人久久综合一区| 亚洲男人的天堂在线观看 | 欧美在线免费| 亚洲日本va午夜在线影院| 国产精品久久久久国产a级| 久久精品国产精品亚洲| 亚洲国产另类久久久精品极度| 亚洲一区在线观看免费观看电影高清| 国产欧美在线视频| 欧美理论在线播放| 久久激情久久| 日韩午夜中文字幕| 欧美成年人视频网站| 亚洲欧美大片| 亚洲精品一区二区三区蜜桃久| 国产精品永久免费观看| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲视频观看| 亚洲人成在线观看网站高清| 久久久www免费人成黑人精品| 99在线|亚洲一区二区| 韩日精品视频| 国产欧美日韩一区| 欧美午夜电影在线| 欧美大片在线观看一区| 久久成人资源| 亚洲欧美色一区| 正在播放亚洲| 99在线精品视频| 亚洲精品美女免费| 亚洲国产99|