এটি হ্যাস্কেল (এবং ছেলে আমি আনন্দিত যে আমি তা শিখতে শিখতে শিখিয়েছি ) এমন উদাহরণ এটি।
-- program to copy a file --
import System.Environment
main = do
--read command-line arguments
[file1, file2] <- getArgs
--copy file contents
str <- readFile file1
writeFile file2 str
ঠিক আছে, এটি একটি সংক্ষিপ্ত, পঠনযোগ্য প্রোগ্রাম। সেই অর্থে এটি একটি সি প্রোগ্রামের চেয়ে ভাল। তবে কীভাবে এটি একেবারে একই কাঠামোযুক্ত পাইথন প্রোগ্রাম থেকে (বলুন) এতই আলাদা?
উত্তরটি অলস মূল্যায়ন। বেশিরভাগ ভাষায় (এমনকি কিছু কার্যকরীও), উপরের মত একটি কাঠামোগত প্রোগ্রামের ফলে পুরো ফাইলটি মেমরিতে লোড হয়ে যায় এবং তারপরে আবার নতুন নামে লেখা হয়।
হাস্কেল "অলস"। এটি প্রয়োজনীয় জিনিস না হওয়া পর্যন্ত জিনিসগুলি গণনা করে না এবং এক্সটেনশনের মাধ্যমে জিনিসগুলির কখনই প্রয়োজন হয় না তা গণনা করে না । উদাহরণস্বরূপ, আপনি যদি writeFile
লাইনটি সরিয়ে ফেলেন তবে হাস্কেল প্রথমে ফাইলটি থেকে কিছু পড়তে বিরক্ত করবেন না।
যেমনটি রয়েছে, হাস্কেল বুঝতে পেরেছে যে writeFile
নির্ভর করে যে উপর নির্ভর করে readFile
এবং তাই এই ডেটা পাথটিকে অনুকূলিত করতে সক্ষম।
ফলাফলগুলি সংকলক নির্ভর করে যখন আপনি উপরের প্রোগ্রামটি চালাবেন তখন সাধারণত যা ঘটবে তা হ'ল: প্রোগ্রামটি প্রথম ফাইলটির একটি ব্লক (8KB বলুন) পড়বে, পরে এটি দ্বিতীয় ফাইলে লিখবে, এবং প্রথম থেকে অন্য একটি ব্লক পড়বে ফাইল, এবং দ্বিতীয় ফাইল এটি লিখুন, এবং। ( strace
এটি চালানোর চেষ্টা করুন!)
... যা একটি ফাইল অনুলিপি এর কার্যকর সি বাস্তবায়ন কি করবে অনেকটা দেখতে দেখতে।
সুতরাং, হাস্কেল আপনাকে কমপ্যাক্ট, পঠনযোগ্য প্রোগ্রামগুলি লিখতে দেয় - প্রায়শই প্রচুর পারফরম্যান্সের ত্যাগ ছাড়াই।
আরেকটি বিষয় যা আমি অবশ্যই যুক্ত করব তা হল হাস্কেল কেবল বাগি প্রোগ্রামগুলি লিখতে অসুবিধা বোধ করে। আশ্চর্যজনক টাইপ সিস্টেম, পার্শ্ব-প্রতিক্রিয়াগুলির অভাব এবং অবশ্যই হাস্কেল কোডের সংক্ষিপ্ততা কমপক্ষে তিনটি কারণে বাগগুলি হ্রাস করে:
আরও ভাল প্রোগ্রাম ডিজাইন। হ্রাস জটিলতা কম যুক্তি ত্রুটি বাড়ে।
কমপ্যাক্ট কোড। বাগের অস্তিত্বের জন্য কম লাইন।
ত্রুটিগুলি সঙ্কলন করুন। প্রচুর বাগগুলি কেবল হাস্কেলকে বৈধ নয় ।
হাস্কেল সবার জন্য নয়। তবে প্রত্যেকের চেষ্টা করা উচিত।