したがっCobol本質的に作りやすい性質をY2K問題ということか。
質問
知っている多くのY2Kの取組/怖かった中心COBOL,deservedlyいます。(ゃったマイナY2Kのバグは、Perlスクリプトを壊し1/1/2000)
何に興味がある私にとって、がんに特有のCOBOL言語で受けやすくY2K問題ということか。
ることは、単に時代のほとんどのプログラム記述とその後の必要性skimpメモリー/ディスクの使用によ古いハードウェアのことは誰も予定プログラムの存続のための30年間ですか?
私は完全に見合わない場合は"定COBOL以外の時代"-単なる好奇心は、何も知らず約COBOL.
解決
はい、あなたは、あなたが実際に数すなわち、YEAR PIC 99
にあったどのように多くの桁言っていたような変数を宣言しなければならなかったCOBOL号は、それが唯一の2桁の10進数を保持することができることを変数YEAR
は、このような宣言しました。あなたが年としてint
またはshort
またはchar
を持っているし、まだCでprintf
を19%d
ingからあなたを保護することはできません。もちろん、99より大きい年の余地を持っているでしょうし、そうです、Cに比べてその間違いを作るために簡単でしたまだ99以下になる年を考えに基づいて、他の内部計算をあなたの出力に問題がある、またはなっています。
他のヒント
これは、純粋かつ単純な記憶容量、約80%であった。
人々は、あなたが2つのバイトを保存することは愚かだと思う自分のラップトップのハードドライブ、今日の容量は1980年にコストの何百万人を持っているということに気付いていませんか?あなたが100,000顧客レコードやハードドライブを持っているとき、冷蔵庫のサイズは20メガバイトを開催し、涼しく保つために特別な部屋が必要なわけではありません。
自分のコードが使用されるだろうどのくらい知らない人々のより多くの問題になると思われたので、彼らは2桁の年を使用することにしました。
だから、COBOLに固有のものは、それがCOBOLプログラムが重要と古いになりがちので、彼らが影響を受けることが多かっただけのことではありません。
COBOLで何かが本質的にそれが影響を受けやすい問題をY2Kすることがありましたか?
プログラマ 1 。そして、COBOLプログラムは 2 実行します。
システムが <時間><サブ> 1:彼らは30年間前向きに設計しませんでした。私は本当に彼らを責めることはできません。私は日ごとに2つのバイトを絞ると、それは後者の30年の仕事作り、最も可能性が高いとの間で、メモリの制約があった場合、私は同じ決断を下すだろう。サブ>
2:ハードウェアは2桁で年間保存した場合のシステムは同じ問題を抱えていたかもしれません。
魅力的な質問です。何Y2K問題の本質?この問題の ない有する宇宙状況があります。 ありませんでした重大な試みをモデルにすべての日付が、スペースがより重要だったのアプリをすることを義します。であり,ゆるレベルで行われるので大変重要:する効率的なoverdeclareメモリに必要なものは、店舗でのプログラムです。
が効率が重要なのは、我々はY2Kish誤り...この時にまた日付をDBになるtimezone.なのでレは絶対象Y2Kish誤差が発生するように心がけて効率的なスペースの使用かベットはいなものを最適化する、多くの場合、特に企業overdoべます。
一方で、避けY2Kishエラ-アプリケーションレベルでお仕事ください"と言っていたら、日程(Java、ということか)でも近でのトンの荷物(タイムゾーン).なぜですか?で日(およびその他多くのコンセプト)についてはOSのOSにおいてスマートずみモデルをフルに吹念日です。てお任せいたしましたその日付できませんねじアップ---でのモジュラー、差し替え可能!
新しい言語と内蔵のデータ型(設備)のような日など大きなメモリが、なに多くの可能性Y2Kishます。
でした。1-年齢/長寿のCobolソフトウェア、および2-80文字制限のデータを記録です。
先ほとんどのソフトの時には2桁の数年間貯蔵ないので、こちらからねそのソフトウェアが入っている。COBOLが採用されていましたが、銀行業界の方を言い捨てのコードです。ほとんどの他のソフトウェアがスローされるまで離れらの銀行はなかった!
第二に、COBOL制約80字/記録のデータによりサイズのパンチカード!), 開発者でも圧力のサイズを制限す。かね"2000年なんと、ここまで私が長引退!"の2文字の保存されたデータ。
これは、はるかに関連する唯一の0〜99(2つの文字、または2桁の10進数、または単一バイト)からの値を保持できるデータ項目で年を格納することにしました。これと年の値について同様の仮定を作った計算ます。
これは、ほとんどのCOBOL固有のものではなかったです。プログラムの多くが影響を受けました。
あっ COBOL
が悪化します。
- で、での使用を減らす図書館のコードは、国内のすべ
- では古いので、事前にインターネット、社会的ネットワーキング、NIHが少なくな枠組みは、よりカスタムも
- では古いので、抽象的率が上昇していることがオープンコードの解
- で、でいいただくことで省2バイトを行っているが、のような、重要な
- では古いので、前からSQL.レガシーソフトウェアの営業をもった物価連動記録型ディスクファイルを圧延-your-own-データベース-イン-べ-プログラムを少し楽になります。
- "printf"形式の文字列データ型を宣言したこと、また n 桁
見ているが巨大なFortranプログラムのない実際のサブルーチン.本当に、3,000線のメインプログラムではなく、単一の図書館互ったです。と思うことが行うことを目的として活動しているCOBOLの世界だくことができました読みすべての日付の取扱いに対する
COBOLは、任意の標準日付処理ライブラリに付属していることはありません。
だから、誰もが自分自身のソリューションをコード化されます。
いくつかのソリューションは、向かい合っ千年紀非常に悪かったです。アプリケーションが40以上の年住んでいないとして、これらの悪いソリューションのほとんどは問題ではありませんでした。悪いソリューションの-そうではない小さな少数派は、ビジネスの世界ではよく知られているY2K問題を引き起こします。
(いくつかのソリューションが優れていた私は、2027年までの良好な日付形式と1950年代にコード化されたCOBOLシステムを知っている - 一度に永遠に思えていなければならない;そして私は2079年までに優れている1970年代にシステムを設計しました)。
しかし、COBOLが持っていた標準の日付タイプ....
03 ORDER-DATE PIC DATE.
...業界全体のソリューションは、必要な修復の複雑さを切断し、コンパイラ・レベルで使用可能であったであろう。
教訓:。標準ライブラリに言語を使用する
COBOL 85(1985規格)およびそれ以前のバージョンでも2バイト余分な収納スペースの後に4桁の年の使用を思いとどまらCOBOLに固有の要因の一つだった、**現在の世紀を取得するためにどのような方法がありませんでしたもはや問題ではなかった。
**具体的な実装では、この目的のために非標準の拡張機能を持っていたかもしれない。
コボルとの唯一の本質的な問題は、それが元だた(1960年代後半)であった現在のシステム日付を、取得するための標準的な声明ます:
ACCEPT todays-date FROM DATE
これはYYMMDD形式の日付で6桁の数字を返した。
私たちは年の部分が70未満だったと日付がY2K070問題作っただろう20YY、だったと仮定した場合にだけチェックし、この文を使用して、90年代にコードを書いたように、しかし、これは必ずしも問題ではありませんでした。 : - )
標準は、後に(COBOL-85を、私は思う)延長されたので、あなたは次のように、異なる形式で日付を求めることができます:
ACCEPT todays-date FROM CENTURY-DATE
あなたCCYYMMDDとして日付と8桁の数字を持たせた。
あなた、そして他の人が指摘したように、、他の多くのコンピュータのプログラミング言語は、日付/年の「非可逆」の表現のために許可されます。
問題は、70年代後半80年代前半には、メモリとストレージの制限については本当にだった。
場合は百万ドルのコンピュータのあなたの四半期が128K、あなたはディスクストレージの12メガで256Kマシンの別の四半期ミルのためのあなたの管理を依頼するか、スペースについて非常に、非常に効率的な可能性のいずれかについての6メガバイト、合計4枚のディスクを持っていました。
だから、省スペースのトリックのすべての種類をuseredました。私のお気に入りは「最後のバイトのノックととして保存し、その後 『』 991231パック10進フィールドx'9912310Cに991231としてYYMMDDの日付を保存することでした。だからではなく、6バイトであなただけの3つのバイトを取り上げます。
コード12 - - > $ 19.99他のトリックは、価格のためのいくつかの陳腐ずる休み型encodeingが含まれています。