程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> [譯文]PHP千年蟲(y2k compliance),

[譯文]PHP千年蟲(y2k compliance),

編輯:關於PHP編程

[譯文]PHP千年蟲(y2k compliance),


時鐘將我們無情地逼近2000年的最後一年,第二年厄運塞耶斯都預言前所未有的電腦故障在每一個可以想象的領域。通常被稱為2000年問題,或千年蟲,這種 情況很容易解釋。程序解釋兩位在形成XX日期19 XX行為就開始在2000年及以後為下一年。如果你的生日是“2/2/05”,你是在101年101歲,還是一年?

成本估算的修復這個bug到數十億美元的資金,至少有那麼多錢的可能威脅再次發生曠日持久的法律費用由於真實和所謂的賠償。由於這些毀滅性的成本預測,企業和政府日益加大的壓力,要求他們使用安全的具有法律約束力的聲明,所有的軟件是保證2000年兼容。

您 可能猜到,這種壓力往往源於lawyer-wary保險公司,相當相當恐懼death-by-litigation甚至超過他們可能實際成本的影響,產生 損失。保衛自己免受法律風險,組織世界各地急於安全,在所有可能的匆忙,宣誓書,如此這般的軟件是2000年兼容。他們打算揮舞的某種法律保護不可避免的 混亂來襲時,正直地宣稱自己無Y2K污染和重定向訴訟對上述文件的簽署者。

記住這一點:如果有人問你保證2000年的軟件是免費的缺陷,他們只是找借口告你如果他們濫用你的軟件,即使它應該恰好是自己的錯。可能他們已經忘記了他們的軟件許可證的條款,這可能讀而接近以下:

沒有作者或分銷商概為任何一方直接,間接,特殊,附帶的,或間接損害引起的使用這個軟件,文檔,或任何衍生品,即使作者建議的這種損害的可能性。

作者和經銷商特別聲明不負任何保證,包括但不限於適銷性的隱含保證,健身為特定目的和不侵權。這軟件是提供一個“目前的”基礎上,作者和經銷商沒有義務提供維護、支持、更新、改進,或修改。

你有沒有停下來想知道只是一個汽車制造商能存活多久政府審查這種anti-warranty嗎?為什麼軟件制造商有什麼不同?不知為何,不過,他們似乎是。這樣的事情是否存活的法院litigational瘋狂在幾年肯定會接踵而至,仍有待觀察。別指望什麼。

關 於千年蟲的焦慮情況達到日益狂熱程度在大多數大型組織。每隔幾天,你看別的東西在大眾媒體預測一定的破壞。幾乎所有的這些報告都是穿插著模糊 prevarications或技術混淆。這並不是說,這裡不是一個真正的問題,,我們可以假裝沒有什麼打擾自己。回答當然是肯定的。但這問題源於什麼, 能做些什麼,充其量是通常被誤解。一般三個重復謊言加劇的情況。

三個流行千年蟲的謊言

第一個謊言通常講述的是千年蟲問題歷史上來自昂貴的電腦去年的記憶非常親愛的,程序員維護日期在兩個數字的格式控制成本。

這種說法顯然是錯誤的。考慮一下。一個兩位數需要存儲多少錢?兩個字節,16位嗎?沒有,更不用說:數值型數據很少以文本格式存儲,因為一個更緊湊的表示是現成的。兩位數的一年將會是一個號碼00至99不等。可以在短短7位代表。

如 何使用完整的年,1985年或2010年嗎?這些數字可能會在11位代表。那些資深的程序員也老真正興高采烈地攫取的速度大幅節約成本4整個位/日期嗎? 這肯定非常寶貴的硬件可能幸免4位!即使不是,可以使用一個偏移量從一個合理的基礎。如果僅使用最後兩位數字,而是年日期可能是代表沒有絕對值,而是自 1900年以來的年數。如果是這樣,這也仍然適合那些提到的7位,至少一段時間。添加另一個點,我們明確到2156年。結束的問題。節省內存不是為什麼是 這樣做。

雖然那天的用戶可以選擇非擴展性表示年,一年% 1900年而不是1900年,這並不使其硬件成本的問題。它仍然是一個目光短淺的,柔軟的設計錯誤。

第 二個謊言是這種現象是全新的,在2000年,無數系統會突然失敗,這種事情以前從來沒有發生過。想想古代老人出生於1895年。一段程序,其讀取他們的生 日作為“95”將不會支付他們幾個月檢查,自1998年以來,他們似乎只有三歲。2000年沒有發生在這個方程。所謂的“年- 2000”問題是在沒有時尚新,也不局限於那一年。然後它會更明顯。

第三,也是目前為止最嚴重的撒謊千年蟲問題,是,你的公司可以通過收購合規的宣誓書,保護自己免受傷害,是否真實或訴訟。它不能。這個信念在法律文件實際上是中空的,危險的。最明智的做法是立即糾正自己的欺騙。

陰險,底層整個問題的根本原因是無論是硬件還是軟件。不,那太容易了,我們知道如何修復。應用一個幾百美元,你瞧�,一切都照顧。

不幸的是,這並不是它。真正的問題是濕件。這是正確的:缺陷不在於我們的電腦,也沒有在他們的編程中,而是在我們自己。

大 多數時候,人們想到的日期,他們只使用的最後兩個數字。他們把它寫在支票。他們在家庭聖經寫。隨便你聽到有人說,“我記得早在65年,”或“代”98年他 們的集體意識的根基被動搖了美國在加勒比海的驚人的失敗,“,你就應該知道他們的意思。只是這65是嗎?議長假設生活,它可能為1965。只是這98是 嗎?為什麼,這不是當年,而是早在1898年,當西班牙失去了剩余的破舊的帝國那些暴發戶新的Worlders和隨後死於國家反思,彌漫在整個時代的文 學。在這兩種情況下,你解決歧義從上下文推斷全年,當然可以。但如果你沒有上下文,那麼你只能猜測。記住:電腦使猜測而“臭名昭著”。

最恐怖的地方就是,即使完全准確和計算機程序工作,顯然是“千年蟲兼容”,你還麻煩大了。舉個例子,著名的Unix卡爾程序。讓我們看看當前的月。

  $ cal 2 98
		 February 98
	    Su Mo Tu We Th Fr Sa 
			 1  2  3
	     4  5  6  7  8  9 10
	    11 12 13 14 15 16 17
	    18 19 20 21 22 23 24
	    25 26 27 28

等一等。那是什麼?不是情人節應該是星期六,不是星期三,今年?哎呀,錯了年!你真正要的類型是:
 $ cal 2 1998
		February 1998
	    Su Mo Tu We Th Fr Sa 
	     1  2  3  4  5  6  7
	     8  9 10 11 12 13 14
	    15 16 17 18 19 20 21
	    22 23 24 25 26 27 28

如你所見,不管程序是否兼容,因為人類用它們不是!修復程序當然是一個必要的步驟,但遠遠不夠。你可以證明每一個程序存在,它仍然是不夠安全。直到等時間的數十億人在這個世界上——甚至只是數百萬使用電腦——都是同樣的認證,並保證不忘記,就沒有安全。這是不會發生的。

尋 求具有法律約束力的聲明,一個特定的程序不能有意無意濫用只不過是政治迫害注定要失敗的終極目標保護你和你的。你不能幫助,總會有cluefully- challenged用戶和程序員,甚至人的線索,他偶爾也會有記憶喪失。你不能找到他們,你不能責怪工具或語言,你不能保護自己。每次一個人想著一年只 有兩位數而言,這一問題再次顯現出來。和沒有人想出了如何解決軟件。

Perl

Perl呢?Perl 2000年“兼容”?答案是,Perl是一樣Y2K兼容你的鉛筆,沒有更多的,沒有少。安慰你呢?這是不應該的。就像你可以用你的鉛筆提交千年蟲的過犯, 也可以用Perl——或與任何其他工具,。甚至你真的不需要走很遠的路去做;見證完美兼容卡爾的示范項目提供。

Perl提供的日期和時間函數是gmtime()和本地時間()函數,這是源於他們的C編程語言。這些供應充足的信息來確定遠遠超過2000年。2038發生危機時,只對我們仍然停留在32位機器上,有點不太可能盡管誠然不是完全不可想象的情況。

這 些函數返回的一年(在列表上下文),與流行的誤解,而不是定義一個兩位數。相反,它僅僅是現在這樣的。它實際上是什麼,是當前減去一千九百年。多年來在 1900年和1999年之間發生這種情況便是十進制數,但這不會持續太久。為了避免2000年問題,根本不把年便是號碼。容易說,容易打破。假設你想要找 出今年似乎在過去5年中,所以你這樣編寫代碼。

   use Time::localtime;
    $then = time() + ( 60 * 60 * 24 * 365 * 5 );  # 5 years from now
    $that_year = localtime($then) -> year;

    printf("It shall be 19%d\n", $that_year);		# WRONG! 19103
    printf("It shall be %d\n", 1900 + $that_year);	# right:  2003

如你所見,在壞人手中,甚至一個名義上的2000年兼容的工具如Perl或卡爾underclued或者僅僅是可以被濫用的健忘。

Perl 沒有保修,TPI不支持Perl。此外,Perl是一種語言,語言可以在許多方面被濫用。但這是程序員和用戶的責任,不是許多Perl的創造者。然而,作 為Perl spokes-organization免費軟件運動,我們覺得有必要指出,Perl是一樣Y2K兼容的C語言接口為基礎,和Perl編譯器和解釋器的自 己寫。即在Perl接口訪問日期信息,當用作設計,Y2K兼容的在每一個意義上的詞。

如果讓你的律師或經理快樂,為他們好。你仍然有很多擔心。

 

原文:http://www.perl.com/pub/1999/01/y2k.html




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved