পরিচিতি
সবাইকে স্বাগতম! আমি আশা করি আপনারা সবাই ভালো আছেন।
Exercism-এ আমাদের আগস্ট কেটেছে বেশ ব্যস্ততায়। আমরা Premium আর Insiders একত্র করেছি, এডিটরের ভেতরেই সরাসরি স্বয়ংক্রিয় ফিডব্যাক যুক্ত করেছি, ট্র্যাক ট্রফি চালু করেছি, আর সাইটে ছোট ছোট অনেক উন্নতিও করেছি! কোন ট্রফি পাচ্ছেন দেখার জন্য যদি এখনো নিজের ট্র্যাকগুলো না দেখে থাকেন, তাহলে অবশ্যই একবার দেখে নিন। একটি বা একাধিক ট্রফি যাদের আছে, তাদের সবাইকে আমরা ইমেইল পাঠিয়েছি, তাই সেটার দিকেও নজর রাখুন। আগস্টজুড়ে #12in23-এ আমরা দারুণ মজা করেছি, সাধারণত মানুষ অ্যাপ বানাতে যে ভাষাগুলো ব্যবহার করে সেগুলো ঘেঁটে দেখেছি।
এই মাসটি স্লিমলাইন সেপ্টেম্বর, যেখানে আমরা এমন ভাষাগুলো ঘেঁটে দেখব যাদের সিনট্যাক্স সাধারণত খুবই সংক্ষিপ্ত ও কড়া। নির্দিষ্ট করে বললে, আমরা দেখছি 8th (Forth-এর একটি উত্তরসূরি), AWK, Bash, jq, Perl আর Raku (যেটি আগে Perl 6 নামে পরিচিত ছিল)।
ব্যাজ
স্লিমলাইন সেপ্টেম্বর ব্যাজ পেতে হলে সেপ্টেম্বর মাসে ওই ভাষাগুলোর যেকোনো একটিতে যেকোনো পাঁচটি অনুশীলনী সম্পন্ন করতে হবে।
সারা বছরব্যাপী 12in23 ব্যাজও আছে। সেটি পেতে হলে ওই ভাষায় আমাদের নির্বাচিত পাঁচটি অনুশীলনীর সমাধান করতে হবে।
- গিগাসেকেন্ড: তারিখ নিয়ে কাজ করা
- অ্যাটবাশ সাইফার: স্ট্রিং নিয়ে কাজ করা
- ডার্টস: সংখ্যা ও শর্ত নিয়ে কাজ করা
- লুহন: স্ট্রিং, শর্ত ও সংখ্যা নিয়ে কাজ করা
- সিরিজ: স্ট্রিং ও সিকোয়েন্স নিয়ে কাজ করা
এই অনুশীলনীগুলো আর আগের মাসগুলোর অনুশীলনীগুলো সবই #12in23 পাতায় পাওয়া যাবে।
এক নজরে
চলুন, প্রতিটির এক নজরে বিবরণসহ ভাষাগুলো ঘেঁটে দেখি।
8th
- Ron Aaron তৈরি করেছিলেন।
- নামটি আসলে Forth ভাষার উপর একটি শ্লেষ, যেটিই এর মূল অনুপ্রেরণা। তবে Forth-এর সাথে অনেক পার্থক্যও আছে:
- স্ট্রংলি টাইপড
- ক্রস-প্ল্যাটফর্ম
- উন্নত নিরাপত্তা (সরাসরি মেমরি অ্যাক্সেস বা বিল্ট-ইন অ্যাসেম্বলার নেই)
- একটি ফ্রি আর একটি কমার্শিয়াল, এই দুই সংস্করণই পাওয়া যায়; পরেরটিতে আরও ফিচার আছে।
- ক্লোজড-সোর্স, তবে এন্টারপ্রাইজ লাইসেন্স কিনলে সোর্স কোড দেখা যায়
AWK
- ১৯৭০-এর দশকে Bell Labs-এ Alfred Aho, Peter Weinberger আর Brian Kernighan AWK তৈরি করেন। নামটি এর লেখকদের পদবিগুলোর আদ্যক্ষর দিয়ে গঠিত একটি সংক্ষিপ্ত রূপ।
- এটি একটি ডোমেইন-স্পেসিফিক ভাষা, টেক্সট প্রসেসিংয়ের জন্য তৈরি, তবে অন্য কাজেও ব্যবহার করা যায়
- AWK হলো একটি Unix ফিল্টার, sed আর grep-এর মতো, পাইপলাইনে ব্যবহারের জন্য তৈরি
- Single UNIX Specification আর Linux Standard Base স্পেসিফিকেশন দুটোই যেকোনো ইমপ্লিমেন্টেশনে এটি রাখা বাধ্যতামূলক করে, তাই বেশিরভাগ *nix মেশিনে এটি পাওয়া যায়
- AWK ভাষার বিভিন্ন ইমপ্লিমেন্টেশন:
- awk (অথবা মূল AWK-এর জন্য oawk): মূল ইমপ্লিমেন্টেশন
- GNU AWK (gawk), ১৯৮৮ সালে প্রকাশিত, ভাষাটিকে উল্লেখযোগ্যভাবে পরিমার্জন ও সম্প্রসারিত করেছে
- BWK AWK (যা nawk নামেও পরিচিত), নব্বইয়ের দশকের শেষদিকে প্রকাশিত
- mawk: দ্রুত বাইটকোড ইন্টারপ্রেটেড ইমপ্লিমেন্টেশন
- অনেক *nix সিস্টেমে
awkকমান্ডটি আসলেgawkবাnawk-এর একটি সিমলিংক
Bash
- Bash হলো একটি Unix শেল, যা Brian Fox তৈরি করেন এবং ১৯৮৯ সালে প্রকাশিত হয়।
- Bourne শেলের একটি ফ্রি বিকল্প হিসেবে তৈরি, আর এখন বেশিরভাগ Linux ডিস্ট্রিবিউশনের ডিফল্ট লগইন শেল। এটি Bourne শেল কমান্ড সিনট্যাক্সের একটি সুপারসেট, যা রূপান্তরটা সহজ করে দেয়
- অনেক দিক থেকেই এটি Bourne শেলকে বাড়িয়ে তোলে: ব্রেস এক্সপ্যানশন, কমান্ড-লাইন কমপ্লিশন, সিগন্যাল হ্যান্ডলিং আরও কত কী
jq
- Stephen Dolan তৈরি করেছেন এবং ২০১২ সালে প্রকাশিত
- JSON ডকুমেন্ট সহজে কোয়েরি, রূপান্তর আর ম্যানিপুলেট করার জন্য তৈরি ("JSON-এর জন্য sed")
-
jqটুলটি (যা ভাষাটি ইমপ্লিমেন্ট করে) প্রথমে Haskell-এ লেখা হয়েছিল, পরে C-তে পোর্ট করা হয়। Go আর Rust-ভিত্তিক পোর্টও আছে
Perl
- ১৯৮০-র দশকের শেষদিকে Larry Wall Perl তৈরি করেন এবং এটি প্রথম প্রকাশিত হয় ১৯৮৭ সালে।
- রিপোর্ট প্রসেসিং সহজ করতেই একটি জেনারেল-পারপাস স্ক্রিপ্টিং ভাষা হিসেবে তৈরি
- অত্যন্ত প্রভাবশালী, বিশেষত এর রেগুলার এক্সপ্রেশন সাপোর্ট (এই বিষয়ে পরে আবার ফিরে আসব)
Raku
- Larry Wall (Perl-এর স্রষ্টা) এটি তৈরি করেন এবং ২০১৫ সালে প্রকাশিত হয়
- প্রথমে Perl 6 নামে পরিচিত ছিল, উদ্দেশ্য ছিল ভাষাটিকে পরিষ্কার করা আর এমন কিছু ফিচার বাদ দেওয়া যেগুলো খুব একটা কাজের নয় বা বিভ্রান্তিকর বলে মনে করা হতো (মজার একটি উক্তি: "Perl 6-এ আমরা সিদ্ধান্ত নিয়েছিলাম, ব্যবহারকারীকে সারানোর চেয়ে ভাষাটিকেই সারানো ভালো।", Larry Wall)। শেষ পর্যন্ত Perl 6, Perl 5-এর সাথে সোর্স-সামঞ্জস্যপূর্ণ হলো না, তাই এর নাম বদলে Raku রাখা হয়
- ডিজাইন দর্শনের কেন্দ্রে আছে প্রোগ্রামিংকে আনন্দদায়ক ও উৎপাদনশীল করা, পাশাপাশি বিভিন্ন রকম প্রোগ্রামিং চ্যালেঞ্জ মোকাবিলার জন্য বিস্তৃত সরঞ্জাম দেওয়া (জেনারেল পারপাস)
- Raku যেহেতু একটি স্পেসিফিকেশন, তাই এর একাধিক ইমপ্লিমেন্টেশন থাকতে পারে (আছে-ও)। এখন সক্রিয়ভাবে উন্নয়ন হচ্ছে কেবল Rakudo-র, তবে Pugs (Haskell-এ লেখা), v6-KindaPerl6 আর Niecza (CLR-কে টার্গেট করা) -র মতো পুরোনো ইমপ্লিমেন্টেশনও আছে
এই ভাষাগুলো কোথায় ব্যবহৃত হয়?
8th
- দুঃখের বিষয়, এটি কোথায় ব্যবহৃত হয় তা আমরা খুঁজে পাইনি
AWK
- ডেটা এক্সট্রাকশন ও রিপোর্টিং, আর সাধারণভাবে স্ক্রিপ্টিংয়ে ব্যবহৃত হয়
Bash
- প্রধানত সিস্টেম অ্যাডমিনিস্ট্রেশনে ব্যবহৃত হয়, তবে CLI ইউটিলিটি বা অন্য টুলের র্যাপার বানাতেও ব্যবহার হয়। Exercism রেপো নিয়ে একসাথে অনেক কাজ করতে আমরা এটি প্রচুর ব্যবহার করেছি
jq
- JSON ডকুমেন্ট কোয়েরি, রূপান্তর ও ম্যানিপুলেট করতে ব্যবহৃত হয়, প্রায়ই শেল স্ক্রিপ্টের আকারে।
Perl
- ডেটা ম্যানিপুলেশন, ফাইল পার্সিং, ওয়েব প্রোগ্রামিং আর সিস্টেম অ্যাডমিনিস্ট্রেশনের কাজে ব্যবহৃত হয়। স্ট্রিং ম্যানিপুলেশনের ক্ষমতা আর বিশাল মডিউল ইকোসিস্টেমের কারণে ওয়েবের শুরুর দিনগুলোতে এটি জনপ্রিয়তা পায়।
Raku
- টেক্সট প্রসেসিং, সিস্টেম অ্যাডমিনিস্ট্রেশন আরও কত কী-তে ব্যবহৃত হয়
প্রোগ্রামিংয়ের দৃষ্টিকোণ থেকে এই ভাষাগুলোকে আকর্ষণীয় করে তোলে কী?
বেশিরভাগ ভাষাই ডাইনামিক্যালি টাইপড ও ইন্টারপ্রেটেড, যা তাদের স্ক্রিপ্টিং চরিত্রের সাথে ভালোই মেলে। তবে কিছু ব্যতিক্রমও আছে, বিশেষত সাপোর্টেড প্যারাডাইমের ক্ষেত্রে।
8th
- স্ট্রংলি টাইপড
- মাল্টি-প্যারাডাইম: প্রোসিডিউরাল, তবে আরও মজার ব্যাপার হলো এটি স্ট্যাক-ভিত্তিক (স্ট্যাক-ভিত্তিক এক্সিকিউশন মডেল), রিফ্লেক্টিভ (নিজের গঠন ও আচরণ পরীক্ষা ও পরিবর্তন করার ক্ষমতা) আর কনক্যাটেনেটিভ (সব এক্সপ্রেশনই ফাংশন, আর ফাংশনগুলোর পাশাপাশি বসানো মানে ফাংশন কম্পোজিশন)
- নেটিভ কোডে কম্পাইল হয়, তবে REPL-এ ইন্টারপ্রেটও করা যায়
AWK
- ডাইনামিক্যালি টাইপড, আর প্রায়ই ইন্টারপ্রেটেড (ব্যবহৃত ইমপ্লিমেন্টেশনের উপর নির্ভর করে)
- মূল প্যারাডাইমটি ডেটা-ড্রিভেন, যেখানে ধাপে ধাপে কী করতে হবে সেটি স্পষ্টভাবে বলে দেওয়ার বদলে, মেলাতে হবে এমন ডেটা আর প্রয়োজনীয় প্রসেসিং বর্ণনা করা স্টেটমেন্ট দিয়ে প্রোগ্রাম লেখা হয়। AWK প্রোসিডিউরাল প্রোগ্রামিংও সমর্থন করে
Bash
- ডাইনামিক ও ইন্টারপ্রেটেড ভাষা
- ইম্পারেটিভ ও প্রোসিডিউরাল প্রোগ্রামিং সমর্থন করে
jq
- ডাইনামিক ও ইন্টারপ্রেটেড ভাষা
- পিউরলি ফাংশনাল ভাষা (সব মানই ইমিউটেবল), "পাইপলাইন"-এর উপর জোর দেয়। খুব Unix-ঘেঁষা লাগে
Perl
- ডাইনামিক্যালি টাইপড ও ইন্টারপ্রেটেড
- মাল্টি-প্যারাডাইম, ফাংশনাল, অবজেক্ট-ওরিয়েন্টেড আর ইম্পারেটিভ প্রোগ্রামিং সমর্থন করে
Raku
- ডাইনামিক্যালি টাইপড, তবে গ্র্যাজুয়াল টাইপিং সমর্থন করে, যেখানে দরকারমতো স্ট্যাটিক টাইপিং যোগ করা যায় (Perl ডাইনামিক)
- মাল্টি-প্যারাডাইম ভাষা: ইম্পারেটিভ, প্রোসিডিউরাল, অবজেক্ট-ওরিয়েন্টেড আর ফাংশনাল
কী করে এগুলোকে দুর্দান্ত ভাষা বানায়?
8th
- খুব কম সিনট্যাক্স থাকায় ভাষাটি শেখা ও বোঝা সহজ। ডেটা বর্ণনা করতে JSON ব্যবহার করে (যেমন অবজেক্ট আর অ্যারে)। স্ট্যাক, কিউ আর হিপ-এর মতো অন্য কন্টেইনারও সমর্থন করে
- কোনো রিজার্ভড কিওয়ার্ড নেই। সাবরুটিনগুলোকে "words" বলা হয়, আর নতুন word সহজেই ডিফাইন করা যায়। চালানোর সময়েই সব word পুনরায় ডিফাইন করা যায়, বিল্ট-ইন হোক বা ব্যবহারকারীর তৈরি
- ক্রস-প্ল্যাটফর্ম। সাপোর্টেড যেকোনো প্ল্যাটফর্মের জন্য সহজেই একটি এক্সিকিউটেবল তৈরি করা যায়
- নিরাপদ। নানা ধরনের বাগ প্রতিরোধে বিল্ট-ইন নিরাপত্তা ফিচার (সরাসরি মেমরি অ্যাক্সেস নেই, রানটাইম ডাইনামিক লাইব্রেরির সাথে লিংক করে না)
AWK
- সরল সিনট্যাক্স, AWK কোডের অত্যন্ত সামঞ্জস্যপূর্ণ গঠন, যার ফলে AWK কোড শেখা ও পড়া সহজ। এর ডেটা স্ট্রাকচারও সরল ও নমনীয়
- অত্যন্ত অভিব্যক্তিপূর্ণ, খুব কম কোডেই অনেক কিছু করা যায়। ওয়ান-লাইনার-এর জন্য আদর্শ
- বেশিরভাগ *nix মেশিনে ইনস্টল করা থাকে, মানে আপনার AWK দক্ষতা অনেক জায়গায় কাজে লাগাতে পারবেন (/bin/sh-এর সাথে, স্ট্যান্ডার্ড Unix-এ এটিই একমাত্র স্ক্রিপ্টিং ভাষা)
- পাইপলাইন আর শেল স্ক্রিপ্টে দুর্দান্ত কাজ করে, যেখানে AWK অন্য টুলের আউটপুট প্রসেস করে বা উল্টোটাও
Bash
- বেশিরভাগ প্ল্যাটফর্মেই ব্যবহার করা যায়। macOS সহ প্রায় সব *nix মেশিনে এটি ইনস্টল করা থাকে। Windows Subsystem for Linux (WSL)-এর মাধ্যমে এখন Windows সিস্টেমেও bash পাওয়া যায়।
- আলাদা আলাদা কমান্ড চালানোর জায়গা হিসেবে, বা ফাইল থেকে কোড পড়ে চালানোর জায়গা হিসেবে (যাকে শেল স্ক্রিপ্ট বলা হয়) এটি একটি RE(P)L-এর মতো ব্যবহার করা যায়। Linux টার্মিনাল ব্যবহার করে থাকলে আপনি সম্ভবত bash কোড লিখেছেনই, কারণ টার্মিনাল সাধারণত একটি bash RE(P)L
- সিস্টেম অ্যাডমিনিস্ট্রেশন, ডেভঅপস আর কম্পিউটার ম্যানেজমেন্টে Bash ও শেল স্ক্রিপ্ট ব্যাপকভাবে ব্যবহৃত হয়।
- অত্যন্ত বহুমুখী ও নমনীয়
- শক্তিশালী স্ট্রিং ম্যানিপুলেশন ক্ষমতা, যার মধ্যে খুবই সহজ স্ট্রিং ইন্টারপোলেশনও আছে
jq
- JSON নিয়ে কাজ করার জন্য সরল, সংক্ষিপ্ত সিনট্যাক্স, যা শেখা সহজ করে তোলে
- আরও জটিল কাজের জন্য কাস্টম ফাংশন ডিফাইন করার সুযোগ দেয়।
- টেইল রিকার্শন অপটিমাইজেশন সমর্থন করে, যা রিকার্সিভভাবে ডেটা প্রসেস করার জন্য দুর্দান্ত
- jq টুলটি একটি একক বাইনারি হিসেবে বিতরণ করা হয়, যার আকার মাত্র ৩০-এর কাছাকাছি কেবি
-
yqটুলটিjq-কে মোড়ক করে, যাতে একই সিনট্যাক্স দিয়ে XML, TOML আর YAML ফাইল ম্যানিপুলেট করা যায় (ভেতরে ভেতরে এটি ওই ডেটা টাইপগুলোকে JSON-এ রূপান্তর করে) - C আর Go, দুই ইমপ্লিমেন্টেশনই অন্য অ্যাপ্লিকেশনে এমবেড করা সমর্থন করে
Perl
- বেশিরভাগ প্ল্যাটফর্মেই চলে। ক্রস-প্ল্যাটফর্ম স্ক্রিপ্ট লেখার জন্য দুর্দান্ত
- নমনীয়তাই Perl-এর ডিজাইন দর্শনের মূল ভিত্তি। এর বিখ্যাত স্লোগান: "একই কাজ করার একাধিক উপায় আছে" (TMTOWTDI)। হাতের কাজ অনুযায়ী ভিন্ন ভিন্ন পদ্ধতি ব্যবহার করা যায়
- শক্তিশালী কমিউনিটি আর প্রভাবশালী অনেক প্রকল্পের ঐতিহ্য। Perl দিয়ে অনেক স্ক্রিপ্ট, টুল আর অ্যাপ্লিকেশন তৈরি হয়েছে। একে একসময় বলা হতো: "ইন্টারনেটকে জোড়া ধরে রাখার ডাক্ট টেপ"
- মডিউল ও লাইব্রেরির সমৃদ্ধ ইকোসিস্টেম, Comprehensive Perl Archive Network (CPAN)-এর মাধ্যমে পাওয়া যায়
Raku
- বড়, জটিল আর শক্তিশালী, তবে এমনভাবে তৈরি যাতে একবারে সবটা শিখতে না হয়। শুরু করা সহজ, আর শক্তিশালী ফিচারগুলোতে পরে ডুব দেওয়া যায়
- শক্তিশালী ও সম্প্রসারণযোগ্য টাইপ সিস্টেম, যাতে গ্র্যাজুয়াল টাইপিংও আছে। মানে আপনি যতটা টাইপ চেকিং চান তা ঠিক করতে পারেন, ফলে ডাইনামিক আর স্ট্যাটিক টাইপিংয়ের মধ্যে ভারসাম্য রক্ষা হয়
- মাল্টিপল-ডিসপ্যাচ সমর্থন করে, যা ইনহেরিটেন্স ছাড়াই পলিমরফিজম ব্যবহার করতে দেয়
- Raku-তে Unicode প্রথম শ্রেণির নাগরিক। ভিন্ন ভিন্ন ক্যারেক্টার এনকোডিং সামলানোর জন্য এটি নেটিভ সাপোর্ট দেয়
- অ্যাডভান্সড কনকারেন্সি আর প্যারালালিজম ফিচার দেয়। অ্যাসিনক্রোনাস প্রোগ্রামিং, রিঅ্যাকটিভ প্রোগ্রামিং আর প্যারালাল এক্সিকিউশনের বিল্ট-ইন সাপোর্ট আছে
এদের বিশেষ বৈশিষ্ট্যগুলো কী?
8th
- ভিন্নভাবে ভাবতে শেখায়। এর অনন্য প্যারাডাইম-মিশ্রণ অন্য ভাষার চেয়ে অনেক আলাদা, আর এটি আপনাকে নতুন নতুন উপায়ে সমস্যার কাছে যেতে চ্যালেঞ্জ করে
- স্ট্যাক-ভিত্তিক আর রিভার্স পোলিশ নোটেশন (RPN) সিনট্যাক্স প্রোগ্রাম চালানোর একটি খুবই সরল মানসিক মডেল তৈরি করে। মানগুলো স্ট্যাকে রাখা হয়, আর বেশিরভাগ word স্ট্যাকের উপর প্রভাবের ভিত্তিতে ডিফাইন করা হয়
AWK
- ডেটা-ড্রিভেন প্যারাডাইমটি খুবই শক্তিশালী। এটি ভিন্নভাবে ভাবতে শেখায়, কারণ এখানে প্রোগ্রাম লেখা হয় শর্ত/কাজের জোড়ার একটি সেট হিসেবে, আর টেক্সট ভাগ করা হয় রেকর্ডে (সাধারণত প্রতি রেকর্ডে একটি লাইন), আর প্রতিটি রেকর্ড ভাগ হয় ফিল্ডে (যেমন CSV ফিল্ড বা প্রতি ফিল্ডে একটি শব্দ)। একবার এতে অভ্যস্ত হয়ে গেলে এই পদ্ধতির সৌন্দর্য আর অভিব্যক্তিপূর্ণতা উপভোগ করবেন, আর সব জায়গায় এর ব্যবহার দেখতে শুরু করবেন
- টেক্সট নিয়ে কাজের জন্য আদর্শ। টেক্সট পার্স হোক, রূপান্তর হোক, বা রিপোর্ট বানানো হোক, AWK আপনার পাশে আছে। সিস্টেমের প্রতিটি ব্যবহারকারীর শেল প্রিন্ট করা বা একটি CSV কলাম যোগ করার মতো কাজে আপনি অবাক হবেন কত কম কোড লাগে দেখে
Bash
- অটোমেশনের জন্য আদর্শ। একঘেয়ে কাজ অটোমেট করার জন্য শেল স্ক্রিপ্ট দুর্দান্ত।
- Bash স্ক্রিপ্ট পাইপলাইন ব্যবহার করে, আর সহজেই অন্য প্রোগ্রামগুলোকে জুড়ে দিতে দেয়। একটি কমান্ডের আউটপুট আরেকটি কমান্ডে পাঠানোর স্ক্রিপ্ট বানানো, বা চালানো যেকোনো কমান্ড ব্যর্থ হলে স্ক্রিপ্টটি থেমে যাওয়ানো, একেবারে সহজ কাজ।
- শক্তিশালী। অন্য টুলগুলো যত সহজে ব্যবহার করা যায়, তা bash-কে অবিশ্বাস্য রকমের শক্তিশালী টুল বানিয়ে তোলে
jq
- JSON ডেটা (যা আজকাল আমাদের প্রচুর আছে) সহজে ও পরিচ্ছন্নভাবে এক্সট্রাক্ট/ম্যানিপুলেট করার জন্য দুর্দান্ত। JSON ডেটা রূপান্তরের ডি-ফ্যাক্টো টুলে পরিণত হয়েছে। jq দিয়ে এমনকি JSON ডেটাও তৈরি করা যায়
- স্ট্রিমিং ডেটা সমর্থন করে, মানে মেমরির ঝামেলা ছাড়াই "অসীম" ডেটা নিয়ে কাজ করা যায়
- পাইপলাইনের উপর জোর দেওয়াটা স্ট্রিমের সাথে পরিচিত যেকারও (যেমন Unix টুল) সহজেই ধরে ফেলা যাবে। এতে jq কোড নিয়ে যুক্তি করা বেশ সহজও হয়
Perl
- এর সংক্ষিপ্ততা আর অভিব্যক্তিপূর্ণতার জন্য বিখ্যাত। অনেক কিছু করতে খুব কম কোডই লাগে
- টেক্সট নিয়ে কাজের জন্য বিশেষভাবে উপযুক্ত, বেশিরভাগটাই এর শক্তিশালী রেগুলার এক্সপ্রেশন সাপোর্টের কারণে। বিশেষত Perl 5 অনেক নতুন ফিচার এনেছিল (যেমন ব্যাকরেফারেন্স, নেমড ক্যাপচারিং গ্রুপ আর লেজি কোয়ান্টিফায়ার)। Philip Hazel তৈরি করেছিলেন PCRE (Perl Compatible Regular Expressions), একটি C লাইব্রেরি যা Perl 5-সামঞ্জস্যপূর্ণ রেগুলার এক্সপ্রেশন ইঞ্জিন ইমপ্লিমেন্ট করে। এমনকি যে ভাষাগুলো PCRE-র উপর তৈরি নয়, তারাও প্রায়ই তাদের রেগুলার এক্সপ্রেশন সাপোর্ট PCRE-সামঞ্জস্যপূর্ণ করে ডিজাইন করে (ফলে Perl 5 সিনট্যাক্স ব্যবহার করে)
Raku
- অটো-থ্রেডিং জাংশন সমর্থন করে, যা প্যারালালিজম নিয়ে কাজ করা অনেক সহজ করে দেয়
- লেজি ইভালুয়েশন সমর্থন করে, যার ফলে মেমরির ঝামেলায় না পড়েই অসীম লিস্ট আর সিকোয়েন্স নিয়ে কাজ করা যায়। বড় ডেটাসেট নিয়ে কাজ করার সময় বা অসীম ডেটা স্ট্রিম জড়িত অ্যালগরিদম নিয়ে কাজ করার সময় এটি বিশেষভাবে কাজে লাগে
- টেক্সট প্রসেসিংয়ের জন্য দুর্দান্ত, আরও সরল, আরও পঠনযোগ্য ও আরও শক্তিশালী রেজেক্স সিনট্যাক্স দেয়
- গ্রামার ব্যবহার করে কাস্টম ডোমেইন-স্পেসিফিক ভাষা (DSL) ডিফাইন করার বিল্ট-ইন সাপোর্ট আছে। এটি দিয়ে নির্দিষ্ট ডেটা ফরম্যাট বা ভাষার জন্য পার্সার তৈরি করা যায়, ফলে জটিল টেক্সট ডেটা নিয়ে কাজ করা সহজ হয়
কোনটি দিয়ে শুরু করবেন?
- যদি মূলত Unix সিস্টেম ব্যবহার করেন বা ডেভঅপস করেন, তাহলে Bash শেখাটা অমূল্য। AWK, Perl বা Raku শেখাও সত্যিই উপকারী হতে পারে, আর প্রথম দুটি তো অনেক সিস্টেমেই আগে থেকেই ইনস্টল করা থাকে
- যদি JSON (বা XML/YAML/TOML) নিয়ে কাজ করেন, jq স্পষ্ট পছন্দ
- যদি টেক্সট প্রসেস করতে চান, AWK, Perl আর Raku স্পষ্ট পছন্দ।
- যদি একটু আলাদা কিছু চেষ্টা করতে চান, 8th দারুণ একটি বিকল্প