java নির্দিষ্ট ইউনিকোড অক্ষর দিয়ে মন্তব্যগুলিতে জাভা কোড কার্যকর করা কেন অনুমোদিত?





4 Answers

যেহেতু এটি এখনো সমাধান করা হয়নি, এখানে একটি ব্যাখ্যা রয়েছে, কেন ইউনিকোড পালানোর অনুবাদ অন্য কোনও উত্স কোড প্রক্রিয়াকরণের আগে ঘটেছে:

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

সুতরাং, জাভা সোর্স কোডটি কোনও এনকোডিংয়ে লেখা যেতে পারে এবং সনাক্তকারী, চরিত্র এবং String লিখন এবং মন্তব্যগুলির মধ্যে অক্ষরের বিস্তৃত অনুমতি দেয়। তারপরে, এটি হ্রাসহীনভাবে স্থানান্তরিত করার জন্য, টার্গেট এনকোডিং দ্বারা সমর্থিত সমস্ত অক্ষর তাদের ইউনিকোড পাল্টা দ্বারা প্রতিস্থাপিত হয়।

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

এটি অন্য অদ্ভুত বৈশিষ্ট্যটির কারণ যা এমনকি উল্লেখ করেনি: \uuuuuuxxxx সিনট্যাক্স:

যখন একটি অনুবাদ সরঞ্জাম অক্ষরগুলি থেকে পালাচ্ছে এবং এমন একটি ক্রমকে মুখোমুখি করে যা ইতিমধ্যে একটি পালানো ক্রম, এটি আপনার ক্রম অনুসারে একটি অতিরিক্ত সন্নিবেশ করা উচিত, \ucafe রূপান্তর করা। অর্থটি পরিবর্তন হয় না, তবে অন্য দিকে রূপান্তরিত হওয়ার সময়, কেবলমাত্র আপনার একটি u সরিয়ে ফেলতে হবে এবং কেবলমাত্র একটি ইউকোড অক্ষর দ্বারা আপনার একক সিক্যুয়েন্সগুলি প্রতিস্থাপন করবে। এভাবেই, এমনকি ইউনিকোড পালিয়ে যাওয়ার পরেও তাদের মূল রূপে ধরে রাখা হয়। আমি অনুমান, যে কেউ কখনও যে বৈশিষ্ট্য ব্যবহার করা হয় ...

java unicode comments

নিম্নলিখিত কোড আউটপুট উত্পন্ন "হ্যালো ওয়ার্ল্ড!" (না সত্যিই, চেষ্টা করুন)।

public static void main(String... args) {

   // The comment below is not a typo.
   // \u000d System.out.println("Hello World!");
}

এর জন্য জাভা কম্পাইলার ইউনিকোড চরিত্র \u000d একটি নতুন লাইন হিসাবে পার্স করে এবং এতে রূপান্তরিত হয়:

public static void main(String... args) {

   // The comment below is not a typo.
   //
   System.out.println("Hello World!");
}

সুতরাং একটি মন্তব্য "মৃত্যুদন্ড কার্যকর" ফলে।

যেহেতু এটি ব্যবহার করা যেতে পারে দূষিত কোড "গোপন করা" বা কোনও খারাপ প্রোগ্রামার কল্পনা করতে পারে, কেন এটি মন্তব্যগুলিতে অনুমোদিত ?

কেন এই জাভা স্পেসিফিকেশন দ্বারা অনুমোদিত?




\u000d অব্যাহতি একটি মন্তব্য বন্ধ করে দেয় কারণ প্রোগ্রাম টোকেনাইজ করার আগে \u escapes একই ইউনিকোড অক্ষরগুলিতে অভিন্ন রূপান্তরিত হয়। মন্তব্য করার জন্য আপনি // পরিবর্তে \u0057\u0057 ব্যবহার করতে পারেন।

এটি আপনার আইডিই-তে একটি বাগ, যা সিন্ট্যাক্স-লাইনটি হাইলাইট করতে হবে এটি পরিষ্কার করতে যাতে \u000d মন্তব্য শেষ করে।

এই ভাষা একটি নকশা ত্রুটি। এটি এখন সংশোধন করা যাবে না, কারণ এটি তার উপর নির্ভরশীল প্রোগ্রামগুলি ভাঙ্গবে। \u es আপনি কেবলমাত্র ইউনিকোড চরিত্রটিকে কম্পাইলারের রূপে রূপান্তরিত করতে পারেন যেখানে সেগুলি "ইন্দ্রিয়গ্রাহী" (স্ট্রিং লিটারাল এবং শনাক্তকারী এবং সম্ভবত অন্য কোথাও নেই) এ প্রসঙ্গে বা U + 0000- এ অক্ষর জেনারেট করার জন্য নিষিদ্ধ করা উচিত ছিল। 007F পরিসীমা, বা উভয়। এই \u000d মধ্যে \u000d অব্যাহতি দ্বারা বাতিল হওয়া থেকে মন্তব্যটি বাধাগ্রস্ত করবে, যেখানে আপনি \u000d ক্ষেত্রে হস্তক্ষেপ না করেই এটি \u000d নোট করুন যে এতে কোনও মন্তব্যকে এনকোড করার উপায় হিসাবে আপনার মন্তব্যগুলির মধ্যে অন্তর্ভুক্ত করা হয়েছে -ল্যাটিন স্ক্রিপ্ট, কারণ টেক্সট সম্পাদক কম্পাইলারের চেয়ে উল্লেখযোগ্য যেখানে \u চলেছেন তার একটি বৃহত্তর দর্শন নিতে পারে। (আমি কোনও সম্পাদক বা আইডিই সম্পর্কে সচেতন নই যা কোন প্রেক্ষাপটে সংশ্লিষ্ট অক্ষর হিসাবে \u পালিয়ে যাবেন।)

সি পরিবারের অনুরূপ নকশা ত্রুটি রয়েছে, 1 যেখানে ব্যাকস্ল্যাশ-নিউলাইনটি মন্তব্যের সীমানা নির্ধারিত হওয়ার আগে প্রক্রিয়া করা হয়, তাই উদাহরণস্বরূপ

// this is a comment \
   this is still in the comment!

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

1 প্যাডেন্টদের জন্য: আমি সচেতন যে C এর এই দৃষ্টিভঙ্গিটি 100% ইচ্ছাকৃত ছিল, যুক্তিসঙ্গতভাবে - আমি এটি তৈরি করছি না - এটি আপনাকে মাপকাঠিতে লম্বা লাইনগুলির সাথে পঞ্চযুক্ত কার্ডগুলিতে যান্ত্রিকভাবে কার্যকর-যোগ্য কোড করার অনুমতি দেবে। এটা এখনও একটি ভুল নকশা সিদ্ধান্ত ছিল।




আমি @ জওয়ালের সাথে একমত যে এটি একটি নকশা ভুল; কিন্তু আমি এটা এমনকি আরো সমালোচনামূলক।

\u পালাবার স্ট্রিং এবং গৃহস্থালি literals দরকারী; এবং এটি একমাত্র জায়গা যে এটি বিদ্যমান থাকা উচিত। এটি একইভাবে পরিচালনা করা উচিত যেভাবে অন্যগুলি পালিয়ে যায় \n ; এবং "\u000A" অর্থ অবশ্যই "\n"

\uxxxx মন্তব্যগুলিতে একেবারে কোনও পয়েন্ট নেই - কেউ তা পড়তে পারে না।

একইভাবে, প্রোগ্রামের অন্য অংশে \uxxxx ব্যবহার করার কোনও পয়েন্ট নেই। একমাত্র ব্যতিক্রম পাবলিক এপিআইগুলিতে রয়েছে যা কিছু অ-আসসি অক্ষর ধারণ করতে বাধ্য হয় - আমরা এটি দেখে শেষবার কি দেখেছি?

ডিজাইনারদের 1995 সালে তাদের কারণ ছিল, কিন্তু 20 বছর পরে, এটি একটি ভুল পছন্দ বলে মনে হচ্ছে।

(পাঠকদের প্রশ্ন - কেন এই প্রশ্নটি নতুন ভোট পেতে থাকে? এই প্রশ্নটি কি জনপ্রিয় কোথাও লিঙ্কযুক্ত?)




কম্পাইলারটি ইউনিকোড পাল্টাগুলিকে শুধুমাত্র টোকেনগুলিতে প্রোগ্রামটিকে পছন্দের আগে উপস্থাপিত অক্ষরগুলির মধ্যে অনুবাদ করে না, তবে এটি মন্তব্য এবং সাদা স্থান বাতিল করার আগে এটি করে।

এই প্রোগ্রামটিতে একমাত্র ইউনিকোড পাল্টা (\ u000d) রয়েছে, এটি একমাত্র মন্তব্যে অবস্থিত। মন্তব্যটি আপনাকে বলে, এই পালাটি লাইনফেড চরিত্রকে উপস্থাপন করে এবং কম্পাইলার মন্তব্যটি বাতিল করার আগে যথাযথভাবে অনুবাদ করে।

এই প্ল্যাটফর্ম নির্ভরশীল। ইউনিক্স হিসাবে নির্দিষ্ট প্ল্যাটফর্মগুলিতে, এটি কাজ করবে; উইন্ডোজ হিসাবে অন্যদের উপর, এটা হবে না। যদিও আউটপুট নগ্ন চোখে একই রকম দেখতে পারে তবে এটি সহজেই সমস্যার কারণ হতে পারে যদি এটি একটি ফাইলে সংরক্ষিত হয় বা পরবর্তী প্রক্রিয়াকরণের জন্য অন্য প্রোগ্রামে পাইপ করা হয়।




Related