> For the complete documentation index, see [llms.txt](https://clojure.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://clojure.howtocode.dev/part_1/1_1.md).

# এক নজরে ক্লোজার ও তার পরিবার

## অবতারণা

প্রোগ্রামিং ল্যাঙ্গুয়েজ শুধু কম্পিউটারকে দেয়া ইন্সট্রাকশন না; শুধু সঙ্কেত হিসাবে প্রোগ্রামিং ল্যাঙ্গুয়েজকে দেখলে ভুল হবে। প্রোগ্রামিং ল্যাঙ্গুয়েজ হল আপনার মস্তিষ্ককে কোন একটি প্যাটার্নে আবেশিত করার একটি অবকাঠামো, আর সেই অবকাঠামোতে থেকে আপনি সৃষ্টি করেন লজিকের ভাণ্ডার। একেক সমস্যার সমাধান করতে আপনাকে চিন্তা করতে হয় একেকভাবে, সৃজনশীলতাকে প্রয়োগ করতে হয় একেকভাবে, কিন্তু আপনি হয়ত কোন নির্দিষ্ট প্যাটার্নে চিন্তা করতে পছন্দ করেন। ওইসব কারণেই সৃষ্টি হয়েছে বিভিন্ন ল্যাঙ্গুয়েজের। ০ আর ১ দিয়ে যদি আপনি কম্পিউটারের সাথে কথা বলতেন তাহলে প্রোগ্রামারদের মধ্যে হয়ত আত্মহত্যার হার থাকত সর্বাধিক আর এত আনন্দময় পেশাও হয়ত হত না এটি, আর এর পিছনে কারণ হোল ভুরি ভুরি প্রোগ্রামিং মতবাদ, তত্ত্ব ও ল্যাঙ্গুয়েজ।

একেকটি ল্যাঙ্গুয়েজ একেক প্যাটার্নের চিন্তাকে প্রোমোট করে। কেউ কেউ অবজেক্ট ওরিয়েন্টেড আর কেউ কেউ ফাংশনাল, কেউ আবার প্রসিডিউরাল। আপনার হাতের প্রব্লেমকে আপনি কিভাবে মোকাবেলা করবেন তাঁর কিছু গাইডলাইন দেয় এইসব প্যারাডাইম, আর সেই প্যারাডাইমের ল্যাঙ্গুয়েজ সাহায্য করে আপনাকে ওই গাইডলাইন ফলো করতে। আপাতত আমরা আলোচনা করব ফাংশনাল ও অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং প্যারাডাইম নিয়ে। কারণ, ক্লোজারের আবির্ভাব হয়েছে এমন একটি যুগে যখন ইন্ডাস্ট্রি অবজেক্ট ওরিয়েন্টেডের মোহ কাটিয়ে পুনরায় ঝুঁকছে ফাংশনাল প্যারাডাইমে। আর ক্লোজারের সাথে হরহামেশা যুক্ত হয় দুটি নাম- লিস্প ও জাভা। আর এই দুটি নাম উল্লিখিত দুটি প্যারাডাইমের শক্তিশালী সদস্য। গেল লিস্প ও জাভা, ক্লোজার ডট নেটেও চলে, ক্লোজার সি এল আর নামে, আর এন্ড্রয়েড/আই ও এস ইকোসিস্টেমেও একে চালানো যায়, তবে সেগুলো উপরোল্লিখিত ল্যাঙ্গুয়েজগুলির মত পপুলার, এমনকি ম্যাচিউর না। তবে, এর জাভাস্ক্রিপ্ট রূপ, যাকে বলা হয়ে থাকে ক্লোজারস্ক্রিপ্ট, খুব অল্প সময়ের মধ্যে জনপ্রিয়তা লাভ করেছে এবং এর প্রগতি জাভা ভার্সনের সমতুল্য। কাজেই জাভাস্ক্রিপ্টকেও আমরা ক্লোজার পরিবারের সদস্য বলতে পারি।

## ক্লোজার পরিবার- জাভা

বর্তমান যুগে ইন্ডাস্ট্রিতে খুব শক্তিশালী একটি নাম জাভা। এন্টারপ্রাইজ বলতেই জাভা বলা চলে। এর পেছনের মূল কারণ কিন্তু ল্যাঙ্গুয়েজ না, প্লাটফরম। জাভা সর্বপ্রথম আপনাকে প্লাটফরম ইন্ডেপেন্ডান্স দেয়, কিন্তু ইন্টারেস্টিং বিষয় প্লাটফরম ইন্ডেপেন্ডান্স না, বরং জাভা কিভাবে তা করে সেটি। জাস্ট-ইন-টাইম কম্পাইলেশনের মাধ্যমে জাভা কোড পরিণত হয় বাইট কোডে, যা কিনা জে ভি এম (জাভা ভার্চুয়াল মেশিন) এর মেশিন ল্যাঙ্গুয়েজ, আর ঐ জে ভি এম হল হোস্ট মেশিনের খুব কাছাকাছি থাকা একটি এন্টিটি। রান করার সময়ে সেই কম্পাইল্ড হওয়া বাইট কোড ইন্টারপ্রেটেড হয় জে ভি এম এ। আর প্রতি বছর জে ভি এম উন্নত হচ্ছে, আর তার সাথে বাড়ছে জাভার স্পীড। জে ভি এম আরও পারদর্শী মাল্টীথ্রেডেড প্রোগ্রামিং করতে। জাভার এন্টারপ্রাইজ প্রীতি ও ইন্টারনেট প্রীতি, এবং এর ওপেন সোর্স হওয়া একে দিয়েছে অগুনতি লাইব্রেরী, যেখানে বহু নামীদামী প্রোগ্রামাররা তাদের শিল্পের প্রদর্শন ঘটিয়েছেন। এমন খুব কম প্রব্লেম ডোমেইন আছে যার সমাধান জাভা দ্বারা দেওয়া হয়নি। কাজেই, জাভা অদ্বিতীয় যদি আমরা মাইন্ড শেয়ার, লাইব্রেরীর সংখ্যা, আর বিশ্বস্ততার কথা ভাবি।

## ক্লোজার পরিবার- লিস্প

> The greatest single programming language ever designed.
>
> > \-- [Alan Kay](http://en.wikipedia.org/wiki/Alan_Kay)

এবার লিস্পের দিকে নজর দেওয়া যাক। অর্ধ-শতাব্দীরও আগে লিস্প এমন সব জিনিস নিয়ে আসে, যা আজকেও সব প্রোগ্রামিং ল্যাঙ্গুয়েজ পারে না। লিস্প কোড মূলত ডাটা স্ট্রাকচার। আপনি ডাটা স্ট্রাকচারের উপর কাজ করবেন, কাজেই আপনার সম্পূর্ণ ক্ষমতা থাকবে প্রোগ্রামিং ল্যাঙ্গুয়েজটির ইন্টারনালের উপর। কোন নির্দিষ্ট প্রব্লেম সল্ভ করতে আপনি প্রোগ্রাম লিখেন এমনভাবে যেন আপনি ওই প্রোগ্রামিং ল্যাঙ্গুয়েজটিকেই পুনর্গঠিত করছেন আপনার হাতের প্রব্লেম সমাধানের জন্যে। আজকে যে ডি এস এল নিয়ে লাফালাফি চলছে তা মূলত লিস্প পৃথিবীতে নিয়ে এসেছে সেই ৫০ এর দশকে। বিভিন্ন সমস্যা সমাধানে নিজেকে সেই সমস্যা অনুযায়ী পরিবর্তিত করতে লিস্প অসাধারণ। আর লিস্প প্রোগ্রাম হয় অত্যন্ত ছোট, আর সরলতার কারণে লিস্প এর কনসেপ্ট একবার বোঝার পর কোন সমস্যাকেই সমস্যা মনে হয় না (কাজেই আমার ভূমিকা পর্বে আমার শেয়ার করা বক্তব্য গুলি)। সবশেষে বলা চলে, লিস্প একটি ফাংশনাল ল্যাঙ্গুয়েজ। এই প্রজাতির ল্যাঙ্গুয়েজগুলো অপরিবর্তনশীল কাঠামো ব্যবহার করে যা কঙ্কারেন্সির জন্য উপযোগী। যেহেতু আপনি কোন ডাটাকে পরিবর্তিত করছেন না তাই যতগুলো কোর থাকুক, সবগুলিকেই আপনি কাজে লাগাতে পারবেন। আর আমরা সবাই জানি এর গুরুত্ব কত। আপনার চিন্তাধারাকে বিকশিত করতে ও সমস্যা যত উদ্ভটই হোক, এর সংক্ষিপ্ত ও সুন্দর সমাধান দিতে লিস্প অদ্বিতীয়।

![lisp\_image](http://imgs.xkcd.com/comics/lisp_cycles.png)

## ক্লোজার পরিবার- জাভাস্ক্রিপ্ট?

ল্যাঙ্গুয়েজ হিসেবে খুব প্রশংসা করা মুশকিল হলেও জাভাস্ক্রিপ্টের সর্ব্ব্যাপিতা অনশ্বিকার্য। ওয়েব ফ্রন্ট-এন্ডে এর জন্ম এমন এক সময়ে যখন রিচ ইউজার ইন্টার্ফেইস বলতে জাভা অ্যাপ্লেট ব্যবহৃত হত। এমনকি এর নামটিও "জাভা" থেকে ধার নেয়া, যদি কিনা একটু পপুলারিটি পাওয়া যায়। ব্রেন্ডান আইক জাভাস্ক্রিপ্ট তৈরি করেন "স্কীম" টাইপ একটি ল্যাঙ্গুয়েজ তৈরি করতে (স্কীম এক প্রকার লিস্প) কিন্তু সময়ের অভাবে এবং কার্লি ব্রেইসের জনপ্রিয়তার কারণে তা হয়ে দাঁড়ায় সম্পুর্ন ভিন্ন এক উপাদান। কিন্তু ইঞ্জিনিয়ারিংগত অথবা তাত্ত্বিক মাধুর্যগত ভাবে যেমনি হোক না কেন, জাভাস্ক্রিপ্ট একচ্ছত্র আধিপত্য বিস্তার করে আসছে এবং তা রেকোগ্নিশন পাচ্ছে ধাপে ধাপে, প্রথমে অ্যাজাক্সের আবির্ভাব, এরপর ওয়েব সকেট, নোড জে এস, ফ্রন্ট-এন্ড এম ভি সি, আর রিসেন্টলি রিয়াক্ট ও এর বন্ধুরা। এর সর্বব্যপিতা যেমন এর মাইন্ড শেয়ার বিস্তৃত করেছে, আর তারই সাথে একে হোস্ট প্ল্যাটফর্ম/লাঙ্গুয়াগেজে পরিণত করেছে, আর সাথে সাথে আবির্ভাব হয়েছে জাভাস্ক্রিপ্ট টার্গেটেড ল্যাঙ্গুয়েজ পরিবারের, যেমন কফিস্ক্রিপ্ট, ক্লোজারস্ক্রিপ্ট, এল্ম, ডার্ট ইত্যাদি।

## ক্লোজারের বিশেষত্ব

লিস্পের শক্তি এর ল্যাঙ্গুয়েজ কাঠামো, আর জাভার শক্তি এর প্লাটফরম কাঠামো। ক্লোজার এই দুয়ের সমন্বয়ে সৃষ্ট। জে ভি এম শুধু জাভা না, যে কোন ল্যাঙ্গুয়েজকেই স্থান দেয়, আর ওইসব ল্যাঙ্গুয়েজ অনায়াসে জে ভি এম এর শক্তি ও সুবিধা ব্যবহার করতে পারে। ২০০৭ সালে রিচ হিকি যে ভি এম ও লিস্পের মিশ্রণ ঘটিয়ে আবিষ্কৃত করেছেন ক্লোজারকে। লিস্পের প্রোগ্রামিং স্টাইল ও জে ভি এম এর লাইব্রেরী এর সম্মিলনে ক্লোজার উন্নত সাপোর্ট প্রদান করে প্যারালাল সিস্টেম তৈরিতে। আবার বর্তমান যুগে সৃষ্টি হওয়ায় এই ল্যাঙ্গুয়েজটিতে রয়েছে আধুনিক সব টেকনোলজির সমন্বয় যার লক্ষ্যই হল বর্তমান সময়ের চাহিদা পূরণ এবং আধুনিক প্রোগ্রামারদের মানসিকতার সাথে খাপ খাওয়ানো।

লিস্প হিসাবে ক্লোজার পারফেক্ট একটি অস্ত্র ডি এস এল তৈরীতে। আজকাল এটি খুবই জরুরী কারণ ফুল স্ট্যাক প্রোগ্রামারদের কাজ করতে হয় বিভিন্ন প্রবলেম ডোমেইন নিয়ে। একটি ল্যাঙ্গুয়েজ সব জায়গায় থাকলে অনেক কষ্টই কম হয়। আবার ল্যাঙ্গুয়েজ এক্সটেন্সিবল হওয়াতে এর সৃষ্ট প্রোগ্রাম হয় অনেক ছোট। জাভা তো বটেই, এমনকি পাইথন থেকেও ছোট থাকে ক্লোজার প্রোগ্রামগুলি। আর জাভা প্ল্যাটফরমের কারণে দ্রুততা তো রয়েছেই, খুব সহজেই ক্লোজার প্রোগ্রাম হয় পাইথন/রুবী থেকে ২ - ১০ গুন পর্যন্ত দ্রুত। যদিও ক্লোজার নিজেও ডাইনামিক ল্যাঙ্গুয়েজ। আরও গুরুত্বপূর্ণ হল, এর কঙ্কারেন্সি প্রিমিটিভ, যার মাধ্যমে কঙ্কারেন্ট, মাল্টীথ্রেডেড প্রোগ্রামিং হয়ে উঠে সহজতর।

কিন্তু এই ফাংশনাল প্রোগ্রামিং, ডাটা স্ট্রাকচার ইত্যাদি কি করে ভূমিকা রাখতে পারে ফ্রন্ট এন্ডে? এর উত্তর হবে, অনেকখানি। প্রথমত, ডাটা স্ট্রাকচার নির্ভর প্রোগ্রামিং আপনাকে দিবে একটা ডিক্লেরেটিভ ইন্টার্ফেস যা ইউজার ইন্টার্ফেস তৈরীতে সহায়ক। আর ইম্মিউটেবল ডাটা স্বাভাবতই রিয়েক্টিভ প্রোগ্রামিং করতে সরলতর একটি ব্যবস্থা করে দেয় যেহেতু আপনি জানছেন যে আপনার ডাটা পরিবর্তিত হবে না কাজেই একমুখী ডাটা-ফ্লো এবং পাবলিশ-সাবস্ক্রাইব করতে আপনার বেশী একটা ঘুরিয়ে চিন্তা করা লাগছে না।

## ভাষা হিসাবে ক্লোজার

...

## ক্লোজারের প্রয়োগ

...

## ক্লোজারস্ক্রিপ্ট এর আগমন

এই প্রেক্ষিতে আরেকটি ল্যাঙ্গুয়েজের কথা না বলেই নয়, আর তা হল জাভাস্ক্রিপ্ট। অনেক আগে সৃষ্ট এই ল্যাঙ্গুয়েজটি ধাপে ধাপে স্বীকৃতি পেয়েছে, প্রথমে অ্যাজাক্স এর আবির্ভাবে, এরপর নোড জে এস ও এর বন্ধুদের দিয়ে। জাভাস্ক্রিপ্ট দিয়ে আজকাল সবাই সবকিছু করে বসছে। কিন্তু, ল্যাঙ্গুয়েজ হিসেবে জাভাস্ক্রিপ্ট, অন্তত এর সর্বাধিক ব্যবহৃত ভার্সনে রয়েছে কিছু সমস্যা, যে কারণে অনেকেই অনেক প্রচেষ্টা করেছে এর সর্বব্যপিতাকে মাথায় রেখে শুধু চামড়া পাল্টে দিতে, অর্থাৎ,

## ক্লোজার বনাম অন্যান্য ল্যাঙ্গুয়েজ

...

## জানতে হলে

* <http://lispers.org/>
