ব্যবসায়িক কাজে ব্যবহৃত এক বিশেষ ধরনের কম্পিউটার ভাষা
ID DIVISION.
PROGRAM-ID. BLOAT.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 THE-TEST-STRINGS.
05 FILLER OCCURS 11584 TIMES.
10 TEST-STRING PIC X(11584).
LOCAL-STORAGE SECTION.
01 FIRST-TIME-FLAG PIC X VALUE "Y".
01 DISP-BEFORE-STRING COMP PIC 9(8).
01 LOOP-COUNTER COMP PIC 9(8).
01 START-STRING.
05 FILLER OCCURS 0 TO 11584 TIMES
DEPENDING ON DISP-BEFORE-STRING.
10 FILLER PIC X.
05 THE-SUBSTRING PIC X(12).
01 INITIAL-STRING PIC X(12)
VALUE "HELLO WORLD!".
LINKAGE SECTION.
01 STRING-PARAMETER PIC X(11584).
01 THE-RESULT PIC X.
PROCEDURE DIVISION USING
STRING-PARAMETER
THE-RESULT
.
IF FIRST-TIME-FLAG = "Y"
PERFORM SET-UP-STRINGS
END-IF
PERFORM
VARYING LOOP-COUNTER
FROM 1
BY 1
UNTIL LOOP-COUNTER
GREATER THAN 11584
OR STRING-PARAMETER
EQUAL TO TEST-STRING
( LOOP-COUNTER )
END-PERFORM
IF STRING-PARAMETER
EQUAL TO TEST-STRING ( LOOP-COUNTER )
MOVE "Y" TO THE-RESULT
ELSE
MOVE "N" TO THE-RESULT
END-IF
GOBACK
.
SET-UP-STRINGS.
PERFORM
VARYING LOOP-COUNTER
FROM 0
BY 1
UNTIL LOOP-COUNTER
EQUAL TO 11584
MOVE 11584 TO DISP-BEFORE-STRING
MOVE SPACE TO START-STRING
MOVE LOOP-COUNTER TO DISP-BEFORE-STRING
MOVE INITIAL-STRING TO THE-SUBSTRING
MOVE START-STRING TO TEST-STRING
( LOOP-COUNTER + 1 )
END-PERFORM
MOVE "N" TO FIRST-TIME-FLAG
.
অল্প জ্ঞান বিপদজনক জিনিস হতে পারে।
অনেক ছোট তুলনার তুলনায় একটি বড় তুলনা করা দ্রুততর হতে পারে; আইবিএম এর এন্টারপ্রাইজ কোবল (সংস্করণ 4.2 অবধি) 128 এমবি সর্বাধিক ওয়ার্কিং-স্টোর থাকতে পারে (সংস্করণ 5.0 এ 2 জিবি থাকতে পারে); আপনার আরও জায়গার প্রয়োজন হলে স্থানীয়-স্টোর আরও 128MB অফার করে।
কাজটি নিশ্চিত করা হয় যে একটি 11584-বাইট স্টোরেজের মানটির "হেল্লো ওয়ার্ল্ড!" কোথাও, এবং বাকি স্থান।
, কল্পিত, প্রোগ্রামার এই জন্য একটি উপ-প্রোগ্রাম লেখার সিদ্ধান্ত নিয়েছে (কেবল অন্যত্র এটির প্রয়োজন হলে) এবং তাদের উচ্চ-সম্পাদন কৌশল (বোনাস) অন্তর্ভুক্ত করার জন্য।
প্রোগ্রামার গণনা করে যে 11584 * 11584 হল 128MB, সুতরাং বিশাল টেবিলের জন্য ওয়ার্কিং-স্টোর ব্যবহার করে এবং প্রয়োজনীয় সমস্ত কিছুর জন্য স্থানীয় স্টোর ব্যবহার করে।
প্রোগ্রামার এটিকে কোড আপ করে এবং সংকলনটি পরিষ্কার হওয়ার পরে নিজের কাছে জেনে শুনে হাসে। তারা 128MB সম্পর্কে ঠিক ছিল।
কোডটি পরীক্ষা করে। এটা কাজ করে। সম্ভবত কিছুটা ধীর, তবে মেশিনে একটি ভারী ভার রয়েছে load আবার হাসি, এই চিন্তা করে যে তাদের স্তরের বিশেষজ্ঞের জ্ঞান ছাড়াই কোড করা থাকলে এটি কত ধীর হবে।
ওয়ার্কিং-স্টোরেজ 134,189,056 বাইটে আসে এবং অন্যান্য স্টাফগুলির পাশাপাশি বেশ কয়েকটি ভাল বাইট রয়েছে। যথেষ্ট বড় হওয়া উচিত।
বাস্তবতা হ'ল এখানে প্রয়োগ হিসাবে সংক্ষিপ্ত তুলনার পরিবর্তে দীর্ঘ তুলনা করা এটি করা খুব ধীর উপায়।
এমনকি ধীরে ধীরে, লোকাল-স্টোরেজ, যা রান-টাইম রুটিন দ্বারা প্রতিবার উপ-প্রোগ্রামটি কল করার সময় শুরু হয়, প্রতিটি সিএলএল এর জন্য পুরো 128 এমবি সেট আপ করে দেয়।
প্রোগ্রামারটি টেবিলের আকার সম্পর্কে ঠিক ভুল ছিল, লোকাল-স্টোর ব্যবহার না করে পর্যাপ্ত জায়গা রয়েছে। দীর্ঘ তুলনা সংক্ষিপ্ত তুলনা বীট করতে পারে, কিন্তু শুধুমাত্র যখন তুলনা প্রকৃত সংখ্যা হ্রাস করা হয়।
আমি চারপাশে লোকাল-স্টোরেজ এবং ওয়ার্কিং-স্টোরকে অদলবদল করার বিষয়টি বিবেচনা করেছি, এটি সম্ভবত এত কম যে কেউ এটিকে রাউন্ডে কোড করবেন, তাই আমি তা করি নি। টেবিলের উপরে একটি ভ্যালু স্পেস স্থাপন (যদি এটি স্থানীয়-স্টোরেজে থাকত) প্রতিটি সিএল- তে দু'বার টেবিলটির সূচনা করত , তাই ধীর গতিতেও ।
প্রোগ্রামটি পুনর্লিখন ছাড়া ব্লোটটি সরানো যাবে না। বেশিরভাগ কোডটি খারাপ, যদিও একটি কার্যকর কৌশল রয়েছে।
এটি বাস্তব জীবনের উদাহরণ নয়, তবে কেউ যদি যথেষ্ট চালাক হন তবে আমি এটি কল্পনা করতে পারি :-)
সংকলন মোটেও সমস্যা নয়। প্রতিটি সম্ভাব্যতার সাথে এটি চালানো দ্রুত প্রমাণ করার চেষ্টা করার মতো নয় বলে প্রমাণিত হয়।
অবশ্যই, পাশাপাশি একটি সরল পুরানো বাগ আছে। "অনুসন্ধান" কার্যগুলিতে খুব সাধারণ একটি।