Y avait-il quelque chose dans Cobol intrinsèquement les prédisposer aux questions Y2K?

StackOverflow https://stackoverflow.com/questions/1463434

  •  13-09-2019
  •  | 
  •  

Question

Je sais que beaucoup d'efforts Y2K / peur était en quelque sorte centrée sur COBOL, à juste titre ou non. (Diable, j'ai vu bug Y2K mineur dans un des scripts Perl qui ont éclaté 1/1/2000)

Ce que je suis intéressé, était là quelque chose de spécifique à COBOL comme une langue qui a rendu sensible aux questions Y2K?

C'est, par opposition à seulement l'âge de la plupart des programmes écrits en elle et ont besoin après lésiné sur l'utilisation mémoire / disque entraîné par le vieux matériel et le fait que personne ne prévoyait ces programmes pour survivre pendant 30 ans?

Je suis parfaitement heureux si la réponse est « rien d'autre spécifique à COBOL que l'âge » - simplement curieux, ne sachant rien de COBOL

.
Était-ce utile?

La solution

Oui et Non Dans COBOL vous deviez déclarer des variables telles que vous aviez en fait de dire combien de chiffres, il y avait un certain nombre à savoir, YEAR PIC 99 a déclaré la YEAR variable telle qu'elle ne pouvait contenir deux chiffres après la virgule. Alors oui, il était plus facile de faire cette erreur que dans C vous auriez été int ou short ou char comme l'année et ont encore beaucoup de place pour les années supérieures à 99. Bien sûr, cela ne vous protège pas de printfing 19%d en C et ayant toujours le problème dans votre sortie, ou de faire d'autres calculs internes en fonction de la pensée de l'année serait inférieur ou égal à 99.

Autres conseils

Il était de 80% sur la capacité de stockage, pure et simple.

Les gens ne se rendent pas compte que la capacité de leur disque dur portable aujourd'hui aurait coûté des millions en 1980. Vous pensez sauver deux octets est stupide? Pas quand vous avez 100.000 dossiers des clients et un disque dur de la taille d'un réfrigérateur tenu 20 méga-octets et nécessaire une salle spéciale pour garder au frais.

Il semble être plus un problème de personnes ne sachant pas combien de temps leur code serait utilisé, donc ils ont choisi d'utiliser 2 ans de chiffres.

Alors, rien de spécifique à COBOL, il est juste que les programmes COBOL ont tendance à être critique et vieux ils étaient plus susceptibles d'être affectés.

  

Y avait-il quelque chose dans Cobol intrinsèquement les prédisposer aux questions Y2K?

Programmation 1 . Et les systèmes où les programmes COBOL fonctionnent 2 .


1: Ils ne conçoivent avec impatience 30 ans. Je ne peux pas les blâmer vraiment. Si j'avais des contraintes de mémoire, entre 2 octets par compression date et le faire fonctionner 30 ans ce dernier, le plus probable que je ferais la même décision.

2: Les systèmes aurait eu le même problème si le matériel stocké l'année en deux chiffres.

question Fascinant. Quel est le problème Y2K, en substance? Il est le problème de ne définissant pas votre univers suffisamment. Il n'y avait aucune tentative sérieuse de modéliser toutes les dates, parce que l'espace était plus important (et les applications serait remplacé par là). Donc, en Cobol à tous les niveaux, ce qui est important:. Pour être efficace et non overdeclare la mémoire dont vous avez besoin, à la fois au magasin et au niveau du programme

Si l'efficacité est importante, nous commis des erreurs Y2Kish ... Nous faisons cela chaque fois que nous enregistrons une date dans le DB sans fuseau horaire. Ainsi, le stockage moderne est sans aucun doute l'objet d'Y2Kish erreurs, parce que nous essayons d'être efficace avec l'espace utilisé (même si je parie que c'est trop l'optimisation dans de nombreux cas, en particulier au niveau de tout-entreprise exagérer).

Par contre, nous évitons les erreurs Y2Kish au niveau de l'application, car chaque fois que vous travaillez avec, disons, une date (en Java, disons), il porte toujours autour d'une tonne de bagages (comme fuseau horaire). Pourquoi? Parce que Date (et bien d'autres concepts) font désormais partie du système d'exploitation, de sorte que le système d'exploitation-faire dudes intelligents tentent de modéliser un concept à part entière de ce jour. Puisque nous comptons sur leur concept de ce jour, nous ne pouvons pas le visser ... et il est modulaire et remplaçable!

langues plus récentes avec des types de données intégrées (et installations) pour beaucoup de choses comme la date, ainsi que d'énormes mémoire pour jouer avec, aider à éviter beaucoup de problèmes potentiels de Y2Kish.

Il était en deux parties. 1- l'âge / la longévité des logiciels Cobol et 2- la limite de 80 caractères des enregistrements de données.

La plupart des logiciels de Prénom cet âge utilisé seulement 2 chiffres pour le stockage de l'année, puisque personne ne figurait leur logiciel durerait aussi longtemps! COBOL avait été adopté par le secteur bancaire, qui sont connus pour ne jamais jeter le code loin. La plupart des autres logiciels a été jeté, tandis que les banques n'ont pas!

En second lieu, COBOL a été contraint à 80 caractères par enregistrement de données (en raison de la taille des cartes perforées!), Les développeurs étaient à une pression encore plus grande pour limiter la taille des champs. Parce qu'ils figurés « année 2000 ne sera pas ici jusqu'à ce que je suis long et à la retraite! » les 2 caractères de données enregistrées étaient énormes!

Il était beaucoup plus liée à mémoriser l'année dans des éléments de données qui ne peut contenir que des valeurs de 0 à 99 (deux caractères, ou de deux chiffres décimaux, ou un seul octet). Cela et les calculs qui ont fait des hypothèses similaires sur les valeurs de l'année.

Il était à peine une chose spécifique à Cobol. Beaucoup de programmes ont été touchés.

Il y avait des choses sur COBOL qui ont aggravé la situation.

  • il est vieux, donc moins utilisation du code bibliothèque, tout plus Homegrown
  • il est vieux, donc pré-internet, réseau-présocial, plus NIH, moins de cadres, des trucs plus personnalisés
  • il est vieux, donc, moins abstraite, plus susceptibles d'avoir des solutions ouvertes codées
  • il est vieux, donc, revenir en arrière assez loin et sauver 2 octets pourrait avoir, en quelque sorte, été important
  • il est vieux, donc, si elle est antérieure à SQL. Héritage du logiciel d'exploitation avait même indexé les fichiers de disque orienté enregistrement à faire roulement votre propre base de données-en chaque programme un peu plus facile.
  • chaînes de format "printf" et déclaration de type de données sont la même chose, tout avait n chiffres

J'ai vu des programmes géants Fortran sans réelle sous-routines. Vraiment, un programme principal 3000 en ligne, pas un seul sous-programme non-bibliothèque, qui était elle. Je suppose que cela aurait pu se produire dans le monde COBOL, maintenant vous devez lire toutes les lignes pour trouver la gestion des dates.

COBOL ne est venu avec une bibliothèque de gestion de date standard.

Ainsi, chacun codé leur propre solution.

Certaines solutions ont été très mal vis-à-vis du millénaire. La plupart de ces mauvaises solutions n'a pas d'importance que les applications ne vivaient pas plus de 40 ans. La minorité pas si petite de mauvaises solutions provoquer le problème Y2K bien connu dans le monde des affaires.

(Certaines solutions étaient mieux que je sais des systèmes COBOL codés dans les années 1950 avec un format de date bien avant 2027 - doit avoir semblé toujours à l'époque,. Et moi avons conçu des systèmes dans les années 1970 qui sont bonnes jusqu'à 2079) <. / p>

Cependant, eu COBOL avait un type de date standard ....

03 ORDER-DATE     PIC DATE.

.... l'industrie solutions à l'échelle auraient été disponibles au niveau du compilateur, coupe la complexité de toute mesure corrective nécessaire.

Moral:. Utiliser les langues avec les bibliothèques standard

COBOL 85 (norme 1985) et les versions antérieures n'ont aucun moyen d'obtenir ce siècle **, qui a été un facteur intrinsèque de COBOL qui a découragé l'utilisation des années quatre chiffres, même après 2 octets d'espace de stockage supplémentaire n'était plus un problème.

** implémentations spécifiques peuvent avoir eu des extensions non standard à cet effet.

Le seul problème intrinsèque avec Cobol était son origine (fin 1960) de déclaration standard pour la récupération de la date actuelle du système, qui était:

ACCEPT todays-date FROM DATE

a renvoyé un numéro à 6 chiffres avec la date au format AAMMJJ.

Cependant, même cela n'a pas été nécessairement un problème que nous avons écrit le code dans les années 90 en utilisant cette déclaration qui vient de vérifier si la partie de l'année était inférieure à 70 et a supposé que la date était 20AA, qui aurait fait un problème de Y2K070. : -)

La norme a été étendue plus tard (COBOL-85, je crois) pour que vous puissiez demander la date dans différents formats, comme:

ACCEPT todays-date FROM CENTURY-DATE

Ce qui vous a donné un numéro à 8 chiffres à la date SSAAMMJJ.

Comme vous, et d'autres ont souligné, beaucoup d'autres langages de programmation informatique a permis la représentation « lossy » des dates / années.

Le problème était vraiment des contraintes de mémoire et de stockage dans les années 70 fin des années 80 au début.

Lorsque votre quart de million de dollars ordinateur a 128K et 4 disques totalisant environ 6 méga-octets, vous pouvez soit demander à votre direction pour une autre usine de quart pour une machine 256K avec 12 Mo de stockage sur disque ou être très très efficace de l'espace.

Alors toutes sortes de trucs d'économie d'espace ont été usered. Mon préféré était de stocker la date YYMMDD comme 991231 dans un x'9912310C champ décimal emballé », puis frapper du dernier octet et le stocker comme « 991231 ». Ainsi, au lieu de 6 octets vous ne recueillîtes 3 octets.

Autres astuces inclus un certain type hokey Hooky encodeing des prix - Code 12 -> 19,99 $.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top