প্রকল্প সম্পর্কে

RE2 একটি দক্ষ এবং নীতিগত রেগুলার এক্সপ্রেশন লাইব্রেরি, যা মূলত ২০০৬ সালে গুগলে তৈরি করা হয়েছিল। এর প্রাথমিক ডিজাইন লক্ষ্য হলো নিরাপত্তা, নিশ্চিত করা যে এটি অবিশ্বস্ত ব্যবহারকারীদের কাছ থেকে রেগুলার এক্সপ্রেশন পরিচালনা করতে পারে বিপর্যয়কর ব্যাকট্র্যাকিং বা ডিনায়াল-অফ-সার্ভিস আক্রমণের ঝুঁকি ছাড়াই। PCRE, Perl, বা Python-এর re মডিউলের মতো ঐতিহ্যবাহী ইঞ্জিনগুলির বিপরীতে, RE2 নিশ্চিত করে যে ম্যাচের সময় ইনপুট স্ট্রিংয়ের দৈর্ঘ্যের সাথে রৈখিক। মূল বৈশিষ্ট্যগুলির মধ্যে রয়েছে: - **নিরাপত্তা**: RE2 রিকার্সন এড়িয়ে চলে এবং একটি কনফিগারযোগ্য বাজেটের মাধ্যমে মেমরি ব্যবহার সীমিত করে, শেষ হয়ে গেলে সুন্দরভাবে ব্যর্থ হয়। এটি স্ট্যাক ওভারফ্লো এবং ব্যাকট্র্যাকিং ইঞ্জিনগুলিতে সাধারণ এক্সপোনেনশিয়াল রানটাইম সমস্যা প্রতিরোধ করে। - **কার্যক্ষমতা**: সাধারণ প্যাটার্নগুলিতে সমান্তরাল মূল্যায়নের ওভারহেডের কারণে এটি সর্বদা অন্যান্য ইঞ্জিনের চেয়ে দ্রুত নয়, তবে এটি বিকল্পগুলিকে ক্রমান্বয়ে নয় বরং সমান্তরালভাবে মূল্যায়ন করে জটিল এক্সপ্রেশনগুলিতে ধারাবাহিক কর্মক্ষমতা প্রদান করে। - **সিনট্যাক্স সমর্থন**: ডিফল্ট Perl মোডে, এটি বেশিরভাগ Perl অপারেটর গ্রহণ করে তবে ব্যাকট্র্যাকিং প্রয়োজন এমনগুলি বাদ দেয় (যেমন, ব্যাকরেফারেন্স, লুক-অ্যারাউন্ড অ্যাসারশন)। POSIX মোডে, এটি বাম-থেকে-ডান দীর্ঘতম ম্যাচিং সহ স্ট্যান্ডার্ড POSIX (egrep) সিনট্যাক্স সমর্থন করে। - **ইউনিকোড হ্যান্ডলিং**: RE2 সরাসরি ইউনিকোড কোড পয়েন্টগুলিতে কাজ করে এবং স্বাভাবিকীকরণ করে না। প্রয়োজনে ব্যবহারকারীদের আগে থেকে ইনপুট এবং প্যাটার্ন স্বাভাবিক করতে হবে। লাইব্রেরিটি C++ এ বাস্তবায়িত এবং একটি C++17 কম্পাইলার এবং Abseil লাইব্রেরি প্রয়োজন। এটি GNU make, CMake, বা Bazel ব্যবহার করে তৈরি করা যেতে পারে। যদিও এটি C++-এ স্থানীয়, Python (`google-re2`) এর জন্য অফিসিয়াল র্যাপার রয়েছে এবং Node.js, Java (RE2J), JavaScript (RE2JS), D, Erlang, OCaml, Perl, R, Ruby, এবং WebAssembly-এর জন্য কমিউনিটি পোর্ট উপলব্ধ। Go এবং Rust-এর মতো অন্যান্য ভাষাগুলি RE2-এর নীতিগুলি অনুসরণ করে অনুরূপ লাইব্রেরি অফার করে তবে এর সাথে কোড ভাগ করে না।