日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++能否成為你新的腳本語言?

一些背景

創(chuàng)新互聯(lián)公司于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目網(wǎng)站制作、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元六枝做網(wǎng)站,已為上家服務,為六枝各地企業(yè)和個人服務,聯(lián)系電話:13518219792

***個我真正喜愛的編程語言是 C。我花了不少時間才找到它:當我還是一個孩子,我就開始在珍貴的ZX Spectrum上使用 Z80 匯編。那些日子是你能夠真正掌握你的電腦的時候,你不需要蘋果,谷歌,微軟或者其他任何人的允許就能寫一個程序。我在漂亮的128K ZX Spectrum +2上學習了在超出 CPU 尋址空間時對內(nèi)存塊分頁。直到我進入大學,我才擁有一臺 IBM PC 機 。我玩遍了電子表格,試圖修復現(xiàn)存的 Fortran 程序,用土耳其字符給鍵盤驅(qū)動打補丁,還學了點 Pascal 語言。之后,在我就職于土耳其中央銀行期間,我又學習了 SQL 和 APL。

我一直對 C 語言有所耳聞,但我一直沒有接觸到一款C語言編譯器。直到我到康奈爾大學擁有了一個Unix 賬號之后,我編譯了我人生中的***個 hello.c 文件,不久之后,我有了***臺電腦……我在 DOS 分區(qū)上安裝了 DJGPP 編譯器,構建了我人生中***個 Linux 內(nèi)核(我***個發(fā)行版是 Debian),并且開始學習 C 語言。Plauger 的 “Standard C Library” 是我最喜歡的書。

當我開始享受用 C 編程的時候,C++ 已經(jīng)廣泛應用超過十年了。所以,我下一步使用 C++ 看起來是很自然的一步了。

除了……好吧,除了 C++ 是一片混亂。那段時間,所有人都被繼承層次深深吸引了,每個人都在編寫精心設計的字符串類。大多數(shù)硬盤都太慢,不能再有限的時間內(nèi)編譯出可靠的 C++ 庫(好吧,我有點夸張了),大部分 CPU 都在試圖實例化模板中融化了,大部分人,那些假裝 C++ 程序員的 C 程序員們,差點就把 malloc 的返回值給扔了。

在那時,我正忙于試圖建立定制化的網(wǎng)絡經(jīng)濟實驗,看起來 Java 似乎很有優(yōu)勢。至少,它不需要麻煩地拼湊出一個對話框。產(chǎn)生少量的 socket 連接,并且使你的應用編譯和運行在多種多樣的系統(tǒng)上。當然,AWT 和 Swing 都很丑陋且笨重,但對我的目的來說,那沒關系。

但是,僅僅是因為不能在實驗室之外運行我的實驗(因為在實驗室已經(jīng)配置了所有電腦,java應用程序運行不會有問題)。所以我快速的把 FreeBSD部署到了一臺擁有100Mhz奔騰處理器,16Mb內(nèi)存,在角落里收集灰塵的機器上,并搭建了一個擁有perl模塊(mod_perl)的 Apache服務器,然后就能工作了。那就是我愛上Perl的時候。

那份愛完全起源于實用的原因,我并不是認為Perl特別的***,并且那時候我認為包括其他許多語言都不是很***,他們中的每一個都有自己的瑕疵。

Perl總是能減少我必須解決的特別問題的工作的數(shù)量,有些是因為語言特性,但大部分是因為 CPAN。

舉例來說,作為一個 Perl 程序員,解析 HTML 作為 HTML 是一個解決方案。我必須決定,要么就構造整個樹, 或者使用流化的方式。在某些情況下,前者是具有優(yōu)勢的,但后者的好處是可以使內(nèi)存的需求降至***,即使是在這個年代,如果你處理 HTML 文檔以兆字節(jié)方式還是可以奏效的。不論哪種方式,這些工具都不會在無效的 HTML 上被卡住,并在非 XML 的有效 HTML 上運作良好。

還有,Perl 提供可移植性。如果我不需要操作系統(tǒng)特定的功能,不用任何修改地方,我的 perl 代碼就可以運行。

當我寫了一些類,并為它們做了封裝,也不會有復雜的架構。

C++ 涅槃

在過去的數(shù)年,C++如獲新生。許多聰明人已經(jīng)開始意識到須要向C++程序員提供同時涵蓋 work of the ISO committee和 boost的構建模塊。

在真實環(huán)境下,仍然有90%的菜鳥生成C++程序員就是沒有意識到new是一個合法符號的C程序員。在這方面,C++與Perl非常相似:大部分人寫過Perl代碼的人也沒有意識到Perl不是C、Java、Python、shell、Awk或者其他你可以列舉的語言。

但是,當你看到新C++標準中的新東西,以及編譯器不斷實現(xiàn)浙西特性的新聞時,我們無法抑制住內(nèi)心的興奮和好奇。

單詞計算練習

這是一個簡單的練習,使用 C++ 或者 Perl 并且不依賴外部庫,所以這是一個很好的起點。

這是 Perl 版本,供您參考:

 
 
  1. #!/usr/bin/env perl 
  2.  
  3. use strict; 
  4. use warnings; 
  5.  
  6. run(/@ARGV); 
  7.  
  8. sub run { 
  9.     my $argv = shift; 
  10.     my @counts; 
  11.  
  12.     for my $file ( @$argv ) { 
  13.         my $count = -1; 
  14.         eval { 
  15.             $count = word_count($file); 
  16.             1; 
  17.         } or warn "$@"; 
  18.  
  19.         push @counts, { 
  20.             file => $file, 
  21.             word_count => $count, 
  22.         }; 
  23.     } 
  24.  
  25.     for my $result (@counts) { 
  26.         printf "%s: %d words/n", $result->{file}, $result->{word_count}; 
  27.     } 
  28.  
  29. sub word_count { 
  30.     my $file = shift; 
  31.     my %words; 
  32.  
  33.     open my $fh, '<', $file 
  34.         or die "Cannot open '$file': $!"; 
  35.  
  36.     while (my $line = <$fh>) { 
  37.         my @words = split ' ', $line; 
  38.         $words{ $_ } += 1 for @words; 
  39.     } 
  40.  
  41.     close $fh; 
  42.  
  43.     my $word_count; 
  44.     $word_count += $_ for values %words; 
  45.     return $word_count; 

而且,這是我***的付出在轉(zhuǎn)化 Perl 到現(xiàn)代風格的 C++ 上面。我沒有嘗試寫特別搞笑的代碼:只是和 Perl 一樣,我把重點放在寫代碼上面,使得我感到非常自然,同時確保兩個程序都做大致相同的事情。

 
 
  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5. #include  
  6. #include  
  7. #include  
  8. #include  
  9. #include  
  10.  
  11. using std::accumulate; 
  12. using std::cerr; 
  13. using std::cout; 
  14. using std::endl; 
  15. using std::ifstream; 
  16. using std::make_pair; 
  17. using std::pair; 
  18. using std::strerror; 
  19. using std::string; 
  20. using std::unordered_map; 
  21. using std::vector; 
  22.  
  23. int word_count(const char *const file) noexcept(false); 
  24.  
  25. int main(int argc, char *argv[]) { 
  26.     vector< pair > counts {}; 
  27.  
  28.     for (auto i = 1; i < argc; i += 1) { 
  29.         try { 
  30.             counts.push_back(make_pair(argv[i], word_count(argv[i]))); 
  31.         } catch (const string& e) { 
  32.             cerr << e << endl; 
  33.             counts.push_back(make_pair(argv[i], -1)); 
  34.         } 
  35.     } 
  36.  
  37.     for (auto& result : counts) { 
  38.         cout << result.first << ": " << result.second << " words" << endl; 
  39.     } 
  40.  
  41.     return 0; 
  42.  
  43. int 
  44. word_count(const char *const file) noexcept(false) { 
  45.     errno = 0; 
  46.     ifstream fp(file); 
  47.     { 
  48.         // Does fp.fail() preserve errno? 
  49.         int save_errno = errno; 
  50.         if (fp.fail()) { 
  51.             throw("Cannot open '" + string(file) + "': " + strerror(save_errno)); 
  52.         } 
  53.     } 
  54.  
  55.     unordered_map word_count {}; 
  56.     string word; 
  57.  
  58.     while (fp >> word) { 
  59.         word_count[word] += 1; 
  60.     } 
  61.  
  62.     fp.close(); 
  63.  
  64.     return accumulate( 
  65.         word_count.cbegin(), 
  66.         word_count.cend(), 
  67.         0, 
  68.         [](int sum, auto& el) { return sum += el.second; } 
  69.     ); 

20 行代碼用于 #include 和 using 聲明可能看起來有點多,但是我抬眼 using namespace std,也討厭不斷地輸入 std::… 更多的是因為我喜歡較短的代碼行。

首先要注意的是沒有看得見的顯式的內(nèi)存分配。容器集裝箱管理自己的內(nèi)存。

第二,這是一個大問題:我們有自動導入(autovivification)!

 
 
  1. unordered_map word_count {}; 
  2. string word; 
  3.  
  4. while (fp >> word) { 
  5.     word_count[word] += 1; 

第三,我們有 lambda 表達式:

 
 
  1. return accumulate( 
  2.     word_count.cbegin(), 
  3.     word_count.cend(), 
  4.     0, 
  5.     [](int sum, auto& el) { return sum += el.second; } 
  6. ); 

在這背后,accumulate 將內(nèi)部變量初始化為 0,并調(diào)用一個匿名函數(shù),其***一個參數(shù)指定為當前值,以及word_count的下一個元素。

現(xiàn)在,我不得不承認,我不知道這些特性是如何實現(xiàn)的,但是 Microsoft Visual C++ 2015 RC 成功運行了,微軟似乎終于趕上了在該領域的***發(fā)展。

現(xiàn)在的情況

然而,一切都不樂觀。盡管 boost libraries 填補了許多空白,而且標準庫提供了令人印象深刻的構件,但是也很難戰(zhàn)勝 Perl 和 CPAN 結合帶來的那種編寫可在任何地方***運行的可移植代碼的便利性。

例如,我能找到一個平臺無關的庫,可以讓我在不需要 Excel 的情況下解析或創(chuàng)建 Excel 文件嗎?這個庫能夠用 clang、g++ 和 cl 輕易地編譯出來嗎?好像不太可能。

我真的非常感謝標準委員會的人們的辛勤工作,和那些開發(fā)編譯器,眾多庫的人們。它們讓我不必在編寫 C++ 程序時辛苦的思考。

這讓我在真正控制我的計算機時還能感覺舒適。

在這里,我真的非常感謝。

你可以在/r/cpp評論本文。


網(wǎng)頁名稱:C++能否成為你新的腳本語言?
網(wǎng)頁URL:http://www.5511xx.com/article/dhehdjo.html