আমি ডায়েটারিচ এপ্পের সাথে একমত: এটি বেশ কয়েকটি জিনিসের সংমিশ্রণ যা জিএইচসি দ্রুত তৈরি করে।
প্রথম এবং সর্বাগ্রে, হাস্কেল খুব উচ্চ-স্তরের। এটি আপনার কোডটি না ভেঙে আক্রমণকারী অপ্টিমাইজেশানগুলি সম্পাদন করতে সংকলককে সক্ষম করে ।
এসকিউএল সম্পর্কে চিন্তা করুন। এখন, আমি যখন একটি SELECT
বিবৃতি লিখি , এটি একটি অত্যাবশ্যক লুপের মতো দেখায় , তবে তা হয় না । এটি দেখতে সম্ভবত দেখতে পারা যায় যে এটি সারণীতে সমস্ত সারিগুলিতে নির্দিষ্ট শর্তগুলির সাথে মেলে এমন একটির সন্ধান করার চেষ্টা করছে, তবে আসলে "সংকলক" (ডিবি ইঞ্জিন) পরিবর্তে একটি সূচক লক করতে পারে - এতে সম্পূর্ণ ভিন্ন পারফরম্যান্স বৈশিষ্ট্য রয়েছে। তবে এসকিউএল এত উচ্চ-স্তরের হওয়ায় "সংকলক" সম্পূর্ণ ভিন্ন অ্যালগরিদমগুলি প্রতিস্থাপন করতে পারে, একাধিক প্রসেসর বা আই / ও চ্যানেল বা পুরো সার্ভারগুলি স্বচ্ছভাবে প্রয়োগ করতে পারে এবং আরও অনেক কিছু করতে পারে।
আমি হাস্কেলকে একই বলে মনে করি। আপনি মনে করতে পারেন যে আপনি সবেমাত্র হাস্কেলকে ইনপুট তালিকাকে দ্বিতীয় তালিকায় মানচিত্র করতে বলেছেন, দ্বিতীয় তালিকাটিকে তৃতীয় তালিকায় ফিল্টার করুন, এবং তারপরে কতগুলি আইটেমের ফলাফল হয়েছে তা গণনা করুন। কিন্তু আপনি জিএইচসি দৃশ্যের পিছনে স্ট্রিম-ফিউশন পুনর্লিখনের নিয়মগুলি প্রয়োগ করতে দেখেন নি, পুরো জিনিসটিকে একটি একক টাইট মেশিন কোড লুপে রূপান্তর করে যা কোনও বরাদ্দ ছাড়াই ডেটা একক পাসে পুরো কাজটি করে - এমন কী জিনিস যা ক্লান্তিকর, ত্রুটি-প্রবণ এবং হাত দ্বারা লেখার জন্য অ-রক্ষণাবেক্ষণযোগ্য হোন। কোডে নিম্ন-স্তরের বিশদ না থাকায় এটি কেবল সত্যই সম্ভব।
এটি দেখার আরেকটি উপায় হতে পারে… কেন হাস্কেল দ্রুত হওয়া উচিত নয় ? এটি কী করে যা এটি ধীর করে দেয়?
এটি পার্ল বা জাভাস্ক্রিপ্টের মতো ব্যাখ্যা করা ভাষা নয়। এটি জাভা বা সি # এর মতো ভার্চুয়াল মেশিন সিস্টেমও নয়। এটি নেটিভ মেশিন কোডের নিচে সমস্ত উপায়ে সংকলন করে, তাই ওভারহেড নেই।
ওও ভাষাগুলি [জাভা, সি #, জাভাস্ক্রিপ্ট ...] এর বিপরীতে, হাস্কেলের পুরো টাইপ ক্ষয় রয়েছে [যেমন সি, সি ++, পাস্কাল…]। সমস্ত ধরণের চেকিং কেবল সংকলন সময়ে ঘটে happens সুতরাং আপনাকে চালিয়ে দেওয়ার জন্য রান-টাইম টাইপ-চেকিং নেই। (এই বিষয়টির জন্য কোনও নাল পয়েন্টার চেক নেই In এর মধ্যে, জাভা বলতে, জেভিএম অবশ্যই নাল পয়েন্টারগুলির জন্য পরীক্ষা করতে হবে এবং যদি আপনি কোনওটিকে শ্রদ্ধা করেন তবে ব্যতিক্রম ছুঁড়ে ফেলতে হবে Has হাসেলকে এই চেকটি নিয়ে বিরক্ত করার দরকার নেই))
আপনি বলছেন যে "রান-টাইমে ফ্লাইতে ফাংশন তৈরি করা" ধীর বলে মনে হচ্ছে, তবে আপনি যদি খুব মনোযোগ দিয়ে দেখেন তবে আপনি আসলে এটি করেন না। এটি আপনার মতো দেখাচ্ছে তবে আপনি তা করেন না। যদি আপনি বলেন (+5)
, ভাল, এটি আপনার উত্স কোডটিতে হার্ড কোডেড। রান-টাইমে এটি পরিবর্তন করতে পারে না। সুতরাং এটি সত্যিই একটি গতিশীল ফাংশন নয়। এমনকি ত্রিযুক্ত ফাংশনগুলি কেবলমাত্র একটি ডেটা ব্লকে প্যারামিটারগুলি সংরক্ষণ করে। সমস্ত নির্বাহযোগ্য কোড আসলে সংকলন সময়ে উপস্থিত; রান-টাইম ব্যাখ্যা নেই is (অন্য কয়েকটি ভাষার মতো নয় যা "ইভাল ফাংশন" রয়েছে))
পাস্কাল সম্পর্কে চিন্তা করুন। এটি পুরানো এবং সত্যই কেউ এটিকে আর ব্যবহার করে না, তবে কেউই অভিযোগ করবে না যে পাস্কাল ধীর । এটি সম্পর্কে অপছন্দ করার মতো প্রচুর জিনিস রয়েছে তবে আস্তে আস্তে আস্তে এগুলির মধ্যে একটি নয়। ম্যানুয়াল মেমরি ম্যানেজমেন্টের বদলে আবর্জনা সংগ্রহের চেয়ে হাস্কেল সত্যিই পাসকালের চেয়ে আলাদা যে কিছুই করছে না। এবং অপরিবর্তনীয় ডেটা জিসি ইঞ্জিনে [যা অলস মূল্যায়ন কিছুটা জটিল করে তোলে] বেশ কয়েকটি অনুকূলকরণের অনুমতি দেয় allows
আমি মনে করি বিষয়টি হ্যাস্কেলকে উন্নত এবং পরিশীলিত এবং উচ্চ স্তরের দেখায় এবং প্রত্যেকেই মনে করে "ওহ বাহ্, এটি সত্যিই শক্তিশালী, এটি অবশ্যই আশ্চর্যজনকভাবে ধীর হতে হবে! " তবে এটি তা নয়। বা কমপক্ষে, এটি আপনি যেভাবে প্রত্যাশা করবেন তা নয়। হ্যাঁ, এটি একটি আশ্চর্যজনক টাইপ সিস্টেম পেয়েছে। তবে আপনি কি জানেন? যে সমস্ত সংকলন সময়ে ঘটে। রান-টাইমে, এটি চলে গেছে। হ্যাঁ, এটি আপনাকে কোডের একটি লাইন দিয়ে জটিল এডিটিগুলি তৈরি করতে দেয়। তবে আপনি কি জানেন? একটি এডিটি শুধু একটি প্লেইন সাধারণ সি union
এর struct
গুলি। বেশি না.
আসল ঘাতক অলস মূল্যায়ন। আপনি যখন নিজের কোডটির কঠোরতা / অলসতা পেয়েছেন তখন আপনি বোকামি দ্রুত কোডটি লিখতে পারেন যা এখনও মার্জিত এবং সুন্দর। তবে আপনি যদি এই জিনিসগুলি ভুল হয়ে থাকেন তবে আপনার প্রোগ্রামটি কয়েক হাজার গুণ ধীর হয়ে যায় এবং এটি কেন ঘটছে তা সত্যই স্পষ্ট নয়।
উদাহরণস্বরূপ, আমি একটি ফাইলের মধ্যে প্রতিটি বাইট কতবার প্রদর্শিত হয় তা গণনা করার জন্য একটি তুচ্ছ ছোট্ট প্রোগ্রাম লিখেছি। একটি 25 কেবি ইনপুট ফাইলের জন্য, প্রোগ্রামটি চালাতে 20 মিনিট সময় নিয়েছিল এবং 6 গিগাবাইট র্যাম গিলে ফেলেছে ! এটাই অযৌক্তিক !! তবে আমি বুঝতে পারলাম সমস্যাটি কী, একক ঠাঁই-ধাঁচ যুক্ত করেছে এবং রান- টাইমটি 0.02 সেকেন্ডে নেমে গেছে ।
এই যেখানে Haskell, অপ্রত্যাশিতভাবে ধীরে ধীরে যায়। এবং এটি নিশ্চিত হয়ে যায় যে এটি অভ্যস্ত হতে কিছুটা সময় নেয়। তবে সময়ের সাথে সাথে, দ্রুততম কোড লেখা সহজ হয়ে যায়।
হাস্কেল এত তাড়াতাড়ি কী করে? বিশুদ্ধতা. স্থির প্রকারের। আলস্য। তবে সর্বোপরি, পর্যাপ্ত উচ্চ-স্তরের হয়ে যা সংকলকটি আপনার কোডের প্রত্যাশা ভঙ্গ না করে বাস্তবায়নের আমূল পরিবর্তন করতে পারে।
তবে আমার ধারণা এটি আমার মতামত ...