Cobol中是否有某种内在的东西使其容易受到Y2K问题的影响?

Cobol中是否有某种内在的东西使其容易受到Y2K问题的影响?,cobol,y2k,Cobol,Y2k,我知道很多Y2K的努力/恐慌不知何故都集中在COBOL上,不管是否值得。 (见鬼,我在打破2000年1月1日的Perl脚本中看到了小小的Y2K错误) 我感兴趣的是,COBOL作为一种语言是否有某种特定的东西使它容易受到Y2K问题的影响 也就是说,与之相反的是,大多数用它编写的程序都已经过时了,随后需要节省内存/磁盘的使用量,这是由旧硬件驱动的,而且没有人预计这些程序可以生存30年 如果答案是“除了年龄,没有什么是COBOL特有的”,我非常高兴——只是好奇,对COBOL一无所知。这似乎更像是人们不

我知道很多Y2K的努力/恐慌不知何故都集中在COBOL上,不管是否值得。 (见鬼,我在打破2000年1月1日的Perl脚本中看到了小小的Y2K错误)

我感兴趣的是,COBOL作为一种语言是否有某种特定的东西使它容易受到Y2K问题的影响

也就是说,与之相反的是,大多数用它编写的程序都已经过时了,随后需要节省内存/磁盘的使用量,这是由旧硬件驱动的,而且没有人预计这些程序可以生存30年


如果答案是“除了年龄,没有什么是COBOL特有的”,我非常高兴——只是好奇,对COBOL一无所知。

这似乎更像是人们不知道自己的代码将被使用多久的问题,所以他们选择使用2位数的年份


因此,与COBOL无关,只是COBOL程序往往是关键的、陈旧的,因此它们更容易受到影响。

这与将年份存储在只能保存0到99(两个字符、两个十进制数字或一个字节)的数据项中有关。这和对年值做出类似假设的计算结果


这几乎不是Cobol特有的东西。很多程序都受到了影响。

是和否。在COBOL中,您必须声明变量,以便您必须说出一个数字中有多少位数字,例如,
YEAR PIC 99
声明变量
YEAR
,这样它只能包含两个十进制数字。因此,是的,如果你将
int
short
char
作为年份,并且在大于99年的年份中仍然有足够的空间,那么犯这个错误比在C中更容易。当然,这并不能保护您免受C中的
printf
ing
19%d
,并且您的输出仍然存在问题,或者基于认为年份小于或等于99而进行其他内部计算

Cobol中是否有某种内在的东西使其容易受到Y2K问题的影响

程序员1。以及运行COBOL程序的系统2


1:他们没有设计30年的前瞻性。我真的不能怪他们。如果我有内存限制,从每个日期压缩2字节到30年后让它工作,我很可能会做出同样的决定

2:如果硬件以两位数字存储年份,系统可能会出现同样的问题。
这个问题很有趣。千年虫问题的实质是什么?这是没有充分定义你的宇宙的问题。没有认真尝试对所有日期进行建模,因为空间更重要(应用程序将在那时被取代)。因此,在Cobol的每一个级别上,这一点都很重要:在存储和程序级别上,都要高效且不过度使用所需的内存

在效率很重要的地方,我们会犯Y2Kish错误。。。我们每次在数据库中存储日期时都会这样做,而不带时区。因此,现代存储肯定会受到Y2Kish错误的影响,因为我们试图提高空间使用效率(尽管我打赌在许多情况下,尤其是在企业“万事俱备”级别,它会过度优化)

另一方面,我们在应用程序级别避免了Y2Kish错误,因为每次处理日期(比如Java)时,它总是携带大量行李(比如时区)。为什么?因为日期(和许多其他概念)现在是操作系统的一部分,所以操作系统制造的聪明人试图建立一个全面的日期概念模型。因为我们依赖于他们的日期概念,所以我们不能把它搞砸。。。而且它是模块化和可更换的


较新的语言具有内置的数据类型(和功能),可以处理诸如日期之类的许多事情,以及巨大的内存,有助于避免许多潜在的Y2Kish问题。

这是两部分。1-Cobol软件的年龄/寿命,2-数据记录的80个字符限制

首先,那个时代的大多数软件只使用2位数作为年度存储,因为没人想到他们的软件会使用那么长时间!COBOL已经被银行业采用,银行业因从不丢弃代码而臭名昭著。大多数其他软件都被扔掉了,而银行却没有


其次,COBOL被限制为每个数据记录80个字符(由于穿孔卡的大小!),开发人员在限制字段大小方面承受着更大的压力。因为他们认为“2000年将不会在这里,直到我长和退休!”保存的数据的2个字符是巨大的

关于
COBOL
的一些事情加剧了这种情况

  • 它很旧,所以很少使用库代码,所有东西都是自己开发的
  • 它很旧,所以在互联网之前,在社交网络之前,更多的NIH,更少的框架,更多的定制东西
  • 它很旧,所以不那么抽象,更可能有开放编码的解决方案
  • 它已经很旧了,所以,回过头来看,节省2个字节可能有点重要
  • 它很古老,所以,所以它比SQL早。传统的操作软件甚至有面向记录的索引磁盘文件,使在每个程序中滚动自己的数据库变得更容易
  • “printf”格式字符串和数据类型声明是一样的,都有n个数字

我见过没有实际子程序的大型Fortran程序。实际上,是一个3000行的主程序,而不是一个非库子程序。我想这可能发生在COBOL世界中,所以现在您必须阅读每一行来查找日期处理。

这是关于存储容量的80%,简单明了


人们没有意识到,在1980年,今天笔记本电脑硬盘的容量将耗资数百万美元。你认为节省两个字节是愚蠢的吗?当你有100000份客户记录,一个冰箱大小的硬盘可以容纳20兆字节,需要一个特殊的房间来保持凉爽时,就不会这样了。

COBOL从来没有提供任何标准的数据处理库

03 ORDER-DATE     PIC DATE.
ACCEPT todays-date FROM DATE
ACCEPT todays-date FROM CENTURY-DATE