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


1356

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

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!");
}

সুতরাং একটি মন্তব্য "মৃত্যুদন্ড কার্যকর" হওয়ার ফলস্বরূপ।

যেহেতু এটি দূষিত কোড "লুকানোর" জন্য ব্যবহার করা যেতে পারে বা কোনও অশুভ প্রোগ্রামার যা ধারণা করতে পারে তাই মন্তব্যে কেন এটি অনুমোদিত ?

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


44
"কেন এটি অনুমোদিত" আমার কাছে খুব বেশি মতামত ভিত্তিক বলে মনে হচ্ছে। ভাষা ডিজাইনাররা সিদ্ধান্ত নিয়েছে, এর আর কী জানা দরকার? আপনি যদি সিদ্ধান্তটি গ্রহণকারী ব্যক্তির বিবৃতি না পান তবে আমরা কেবল অনুমান করতে পারি।
ইনগো বার্ক

194
একটি আকর্ষণীয় বিষয় হ'ল কমপক্ষে ওপ-এর আইডিই স্পষ্টতই এটি ভুল হয়ে যায় এবং ভুল হাইলাইটিং প্রদর্শন করে
h

14
সম্ভবত সম্পর্কিত: stackoverflow.com/questions/4448180/...
dhke

47
@ টবব তবে জাভা ডিজাইনাররা এসও-তে পরিদর্শন করছে তাই তাদের মধ্যে একটির দ্বারা উত্তর পাওয়া সম্ভব । এছাড়াও তারা এমন সংস্থান থাকতে পারে যা ইতিমধ্যে এই প্রশ্নের উত্তর দেয়।
Pshemo

41
সহজ উত্তরটি হ'ল কোডটি কোনও মন্তব্যে নেই, ভাষার নিয়ম অনুসারে, তাই প্রশ্নটি দ্বিধান্বিত।
ব্যবহারকারী 207421

উত্তর:


741

ইউনিকোড ডিকোডিং অন্য কোনও লিক্সিক অনুবাদগুলির আগে ঘটে। এর মূল সুবিধাটি হ'ল এটি ASCII এবং অন্য কোনও এনকোডিংয়ের মধ্যে পিছনে যেতে তুচ্ছ করে তোলে। এমনকি মন্তব্যগুলি কোথায় শুরু হয় এবং শেষ হয় তাও আপনাকে জানার দরকার নেই!

জেএলএস বিভাগে বলা হয়েছে ৩.৩ এটি কোনও এএসসিআইআই ভিত্তিক সরঞ্জামটিকে উত্স ফাইলগুলি প্রক্রিয়া করার অনুমতি দেয়:

[...] জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজ ইউনিকোডে লেখা একটি প্রোগ্রামকে এএসসিআইআইতে রূপান্তর করার একটি মানক উপায় নির্দিষ্ট করে যা একটি প্রোগ্রামকে এমন একটি রূপে পরিবর্তন করে যেটিকে ASCII- ভিত্তিক সরঞ্জামগুলি দ্বারা প্রক্রিয়া করা যায়। [...]

এটি প্ল্যাটফর্মের স্বাধীনতার (সমর্থিত চরিত্রের সেটগুলির স্বাধীনতা) জন্য একটি মৌলিক গ্যারান্টি দেয় যা জাভা প্ল্যাটফর্মের জন্য সর্বদা একটি মূল লক্ষ্য ছিল।

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

এই থিমটিতে অনেকগুলি গোচাচা রয়েছে এবং জোশুয়া ব্লচ এবং নীল গিটারের জাভা পাজলারের মধ্যে নিম্নলিখিত রূপটি অন্তর্ভুক্ত রয়েছে:

এটি কি আইনী জাভা প্রোগ্রাম? যদি তাই হয় তবে এটি কী মুদ্রণ করে?

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d

(এই প্রোগ্রামটি সরল "হ্যালো ওয়ার্ল্ড" প্রোগ্রাম হিসাবে পরিণত হয়েছে))

ধাঁধার সমাধানে, তারা নিম্নলিখিতগুলি নির্দেশ করে:

আরও গুরুতরভাবে, এই ধাঁধাটি পূর্বের তিনটি পাঠকে আরও শক্তিশালী করে তোলে: আপনার প্রোগ্রামে অন্য কোনও উপায়ে প্রতিনিধিত্ব করা যায় না এমন অক্ষরগুলি সন্নিবেশ করার দরকার হলে ইউনিকোড পলায়ন করা অত্যাবশ্যক। অন্যান্য সমস্ত ক্ষেত্রে এগুলি এড়িয়ে চলুন।


সূত্র: জাভা: মন্তব্যে কোড কার্যকর করছে ?!


84
সংক্ষেপে, জাভা ইচ্ছাকৃতভাবে এটি অনুমতি দেয়: "বাগ" ওপেনের আইডিইতে রয়েছে?
বাথশেবা

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

62
অন্য একটি সাধারণ ভুল হ'ল কোডটিতে উইন্ডোজ পাথগুলি // C:\user\...আটকে দেওয়া যা \userকোনও বৈধ ইউনিকোড এস্কেপ ক্রম নয় বলে একটি সংকলন ত্রুটির দিকে পরিচালিত করে ।
অ্যারন দিগুলা

50
গ্রহণের পরে কোডটি \u000dআংশিকভাবে হাইলাইট করা হয়।
সিটিআরএল

20
@ দ্য লস্টমাইন্ড যদি আমি উত্তরটি সঠিকভাবে বুঝতে পারি তবে আপনার এটিকে ব্লক মন্তব্যেও পুনরুত্পাদন করতে সক্ষম হওয়া উচিত। \u002A/মন্তব্য শেষ করা উচিত।
তাইমির

141

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

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

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

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

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

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


1
মজার বিষয় হল, সিনট্যাক্সটি native2asciiব্যবহার করার মতো মনে হচ্ছে না \uu...xxxx,
নিনজালজ

5
হ্যাঁ, কেবলমাত্র লাতিন -১ পড়ার জন্য ঠিক করা হয়েছে, native2asciiসংস্থার বান্ডিলগুলি আইসো-ল্যাটিন -১ এ রূপান্তর করে সহায়তা করার উদ্দেশ্যে তৈরি Properties.loadহয়েছিল। এবং সেখানে, নিয়মগুলি আলাদা, কোনও \uuu…সিনট্যাক্স এবং কোনও প্রারম্ভিক প্রক্রিয়াজাতকরণের পর্যায়ে নেই। সম্পত্তি ফাইলগুলিতে, property=multi\u000alineপ্রকৃতপক্ষে একই property=multi\nline। (ডকুমেন্টেশনের জাভা ™ ল্যাঙ্গুয়েজ স্পেসিফিকেশনের ৩.৩ অনুচ্ছেদে বর্ণিত "ইউনিকোড ব্যবহার করে পালিয়ে গেছে" এই
হোলগার

10
নোট করুন যে এই নকশার লক্ষ্যটি কোনও মস্তক ছাড়াই অর্জন করা যেতে পারে; সবচেয়ে সহজ উপায় \uহ'ল ইউ + 0000–007F পরিসরে অক্ষর তৈরি করতে পলায়নকারীদের বারণ করা। (এই জাতীয় সমস্ত চরিত্রগুলি 1990 এর দশকে প্রাসঙ্গিক সমস্ত জাতীয় এনকোডিংগুলি দ্বারা স্থানীয়ভাবে উপস্থাপিত হতে পারে — ভাল, সম্ভবত নিয়ন্ত্রণের কিছু অক্ষর বাদে তবে জাভা লেখার জন্য আপনার প্রয়োজন নেই।)
zwol

3
@ জওয়ল: ভাল, আপনি যদি জাভা উত্স কোডের মধ্যে যেমন অনুমোদিত অক্ষরগুলি নিয়ন্ত্রণের অক্ষরগুলি বাদ দেন তবে আপনি ঠিক বলেছেন। তবুও, এটি নিয়মকে আরও জটিল করে তুলেছে। এবং আজ, সিদ্ধান্তটি নিয়ে আলোচনা করতে খুব দেরী হয়েছে ...
হোলার

আহ নথিটি utf8 এ সংরক্ষণ করার সমস্যা এবং লাতিন বা অন্য কিছু নয়। আমার সমস্ত ডাটাবেসগুলিও পশ্চিমের এই
নোংরাসের

106

আমি সম্পূর্ণ অকার্যকরভাবে পয়েন্টটি যুক্ত করতে যাচ্ছি, কেবলমাত্র আমি নিজের সাহায্য করতে পারি না এবং এখনও এটি তৈরি করতে দেখিনি, কারণ প্রশ্নটি অবৈধ, কারণ এটিতে একটি গোপন ভিত্তি রয়েছে যা ভুল, যথা কোডটি রয়েছে একটি মন্তব্য!

জাভা উত্স কোড \ u000d একটি ASCII সিআর চরিত্রের প্রতিটি উপায়ে সমান। এটি যেখানেই ঘটে সেখানে লাইন সমাপ্ত, সরল এবং সরল। প্রশ্নের বিন্যাসটি বিভ্রান্তিমূলক, অক্ষরের সেই ক্রমটি আসলে সিন্টেক্সিকভাবে কীসের সাথে মিলে যায়:

public static void main(String... args) {
   // The comment below is no typo. 
   // 
 System.out.println("Hello World!");
}

আইএমএইচও সবচেয়ে সঠিক উত্তর তাই: কোডটি কার্যকর করে কারণ এটি একটি মন্তব্যে নেই; এটি পরের লাইনে জাভাতে "মন্তব্যে কোড কার্যকর করা" অনুমোদিত নয়, যেমনটি আপনি আশা করেছিলেন।

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


6
আমি সম্মত, এটি জাভা "ডিজাইনের ত্রুটি" নয়, তবে এটি একটি আইডিই বাগ।
বিভিডিবি

3
প্রশ্নটি বরং কোডটি কেন ভাষাটির এই বিশেষ দিকটির সাথে পরিচিত নয় এবং সম্ভবত সিনট্যাক্স হাইলাইটিংয়ের উল্লেখ ছাড়াই কারও মতামত বলে মনে হচ্ছে তা আসলে কোনও মন্তব্য নয়। প্রশ্নের ভিত্তির ভিত্তিতে আপত্তি করা অবৈধ হওয়া আপত্তিজনক।
ফিল

@ ফিল: এটি নির্দিষ্ট মন্তব্যের সাথে দেখা হলে কেবল একটি মন্তব্যের মতো লাগে, অন্যরা তা অন্যথায় প্রদর্শন করে।
jmoreno

1
@ জোরমোরনো কোড পড়ার জন্য কোনও পাঠ্য সম্পাদক ছাড়া আর কিছু থাকতে হবে না । খুব কমপক্ষে, এটি সর্বনিম্ন আশ্চর্যের মূলতাকে লঙ্ঘন করে, যথা // স্টাইলের মন্তব্যগুলি পরবর্তী character n চরিত্র অবধি অব্যাহত থাকে - অন্য কোনও ক্রম নয় যা শেষ পর্যন্ত replaced n দ্বারা প্রতিস্থাপিত হয়। মন্তব্যগুলি কখনও ছাঁটা ছাড়া অন্য কিছু হতে পারে বলে আশা করা যায় না। খারাপ প্রিপ্রোসেসর।
ফিল

69

\u000dপালাবার একটি মন্তব্য বন্ধ কারণ \uবেরিয়ে অবিশেষে সংশ্লিষ্ট ইউনিকোড অক্ষর রূপান্তরিত হয় সামনে কর্মসূচি tokenized করা হয়। আপনি মন্তব্য শুরু করার \u0057\u0057পরিবর্তে সমানভাবে ব্যবহার করতে পারেন ।//

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

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

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

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

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

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


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

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

3
@ সুপের্যাট যে বৈশিষ্ট্যগুলি সি 98 এ ফেলেছিল তারা স্ক্র্যাচ থেকে কোনও বৈশিষ্ট্য নকশার পরিবর্তে মূল কে ওআর প্রিপ্রসেসরের আচরণকে সাধারণীকরণ করছিল। আমার সন্দেহ তারা পাঞ্চ কার্ড সর্বোত্তম কার্যাভ্যাস সাথে পরিচিত ছিল, এবং আমি এও সন্দেহ নেই যে বৈশিষ্ট্য আছে কি কখনো তার বিবৃত উদ্দেশ্যে ব্যবহার করা হয়েছে, একটি বা দুটি retrocomputing ব্যায়াম জন্য হয়তো ছাড়া।
zwol

8
@ সুপের্যাট জাভাতে \uপ্রি-টোকেনাইজেশন রূপান্তর হিসাবে আমার কোনও সমস্যা হবে না যদি এটি ইউ + 0000..U + 007F পরিসরে অক্ষর তৈরি করতে নিষেধ করা হয়। এটি "এটি সর্বত্র এটি কাজ করে" এবং "এই প্রকৃতিটি সিনট্যাকটিক তাত্পর্য সহ এএসসিআইআই অক্ষরগুলি" এর সংমিশ্রণ যা এটিকে বিশ্রী থেকে ফ্ল্যাট-আউট ভুলকে ডমোট করে।
zwol

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

22

এটি ছিল ইচ্ছাকৃত ডিজাইনের পছন্দ যা জাভাটির মূল নকশায় ফিরে যায়।

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

এটি উত্সাহক্রমে প্রোগ্রামগুলির মধ্যে একটি ঘাটতি (আইডিইগুলির মতো) উত্স পাঠ দেখতে ব্যবহৃত হয় যে এই জাতীয় প্রোগ্রামগুলি ইউনিকোড পলায়নের ব্যাখ্যা করতে পারে না এবং সংশ্লিষ্ট গ্লাইফটি প্রদর্শন করতে পারে।


8
আজকাল আমরা আমাদের উত্স কোডের জন্য ইউটিএফ -8 ব্যবহার করি এবং ইউনিকোড অক্ষর সরাসরি ব্যবহার করতে পারি, পালানোর প্রয়োজন নেই।
পাওলো ইবারম্যান

21

আমি @zwol এর সাথে একমত যে এটি একটি ডিজাইনের ভুল; তবে আমি এর চেয়ে আরও সমালোচিত।

\uপালা স্ট্রিং এবং চর আক্ষরিক ক্ষেত্রে দরকারী; এবং এটিই একমাত্র জায়গা যেখানে এটির অস্তিত্ব থাকা উচিত। এটি অন্যান্য পলায়নের মত একইভাবে পরিচালনা করা উচিত \n; এবং ঠিক বোঝা "\u000A" উচিত"\n"

\uxxxxমন্তব্যে থাকার একেবারেই অর্থ নেই - কেউ এটি পড়তে পারে না।

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

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

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


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

15
তারা যথাযথ ফাইল এনকোডিং ব্যবহার করতে পারে। int \u5431আপনি যখন করতে পারেন তখন কেন লিখবেনint 整
ZhongYu

3
আপনি যখন তাদের এপিআই এর বিপরীতে কোড সংকলন করতে হবে এবং সঠিক এনকোডিংটি ব্যবহার করতে পারবেন না তখন আপনি কী করবেন (ধরে নিন যে UTF-81995 সালে ব্যাপক সমর্থন ছিল না )। আপনাকে কেবল একটি পদ্ধতিতে কল করতে হবে এবং সেই একক পদ্ধতির জন্য আপনার অপারেটিং সিস্টেমের এশিয়ান ভাষা সমর্থন প্যাকটি ইনস্টল করতে চান না (মনে রাখবেন, নব্বইয়ের দশক)
হোলার

5
1995 এর চেয়ে এখন যা আরও পরিষ্কার হয়েছে তা হল আপনি যদি প্রোগ্রাম করতে চান তবে আপনি আরও ভাল ইংরেজি জানেন। প্রোগ্রামিং একটি আন্তর্জাতিক মিথস্ক্রিয়া, এবং প্রায় সমস্ত সংস্থান ইংরাজীতে in
ঝোংইউ

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

11

স্পষ্টকরণটি লিখেছেন এমন লোকেরা শুধুমাত্র ইউনিকোড কেন পালাতে পেরেছিল তার উত্তর দিতে পারে।

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

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

এটি অবিশ্বাস্যরূপে কঠিন যখন ইউনিকোড পলায়ন করে মাঠে প্রবেশ করে: এটি সম্পূর্ণ নতুন লেক্সারের নিয়ম তৈরি করে।

সহজ উপায়টি হ'ল দুটি ধাপে লেক্সিং করা: প্রথমে সমস্ত ইউনিকোড পলাতককে এটি প্রদর্শিত চরিত্রের সাথে অনুসন্ধান করুন এবং প্রতিস্থাপন করুন এবং তারপরে ফলাফলটি নথিটি এমনভাবে পার্স করুন যেন ইউনিকোড পলায়নের অস্তিত্ব নেই।

এর উল্টোটি এটি নির্দিষ্ট করা সহজ, সুতরাং এটি স্পেসিফিকেশনটিকে সহজ করে তোলে এবং এটি কার্যকর করা সহজ।

খারাপ দিকটি হ'ল, আপনার উদাহরণ well


2
বা, সনাক্তকারী, স্ট্রিং ল্যাটারালস এবং চরিত্রের ধ্রুবকগুলিতে \ uxxxx এর ব্যবহারকে সীমাবদ্ধ করুন। যা সি 11 করে।
নিনজালজ

এটি যদিও পার্সার বিধিগুলিকে জটিল করে তোলে, কারণ সেগুলিই সেই জিনিসগুলির সংজ্ঞা দেয়, যা আমি অনুমান করছি এটি কারণ হিসাবে এটি of
মার্টিজন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.