তাহলে, কেন রুবি স্রষ্টাদের symbolsভাষায় ধারণাটি ব্যবহার করতে হয়েছিল?
ঠিক আছে, তারা কঠোরভাবে "করতে" ছিল না, তারা বেছে নিয়েছিল। এছাড়াও, নোট করুন যে কঠোরভাবে বলা Symbols ভাষার ভাষার অংশ নয়, তারা মূল গ্রন্থাগারের অংশ। তারা কি ভাষা-স্তরের আক্ষরিক সিনট্যাক্স আছে, কিন্তু তারা ঠিক যেমন ভাল কাজ করবে যদি আপনি কল করে তাদের গঠন করা ছিল Symbol::new।
আমি এটি বোঝার চেষ্টা করছেন এমন কোনও রুবিহীন প্রোগ্রামারের দৃষ্টিকোণ থেকে জিজ্ঞাসা করছি। আমি অন্য ভাষায় প্রচুর শেখেন এবং তাদের কেউ যদি আমি তার আচরণ বা রুবি কি কলগুলির মাধ্যমে করা হয় নি নির্দিষ্ট করতে হবে পেয়েছি symbols।
এই "প্রচুর অন্যান্য ভাষা" কী তা আপনি বলেননি, তবে এখানে Symbolরুবির মতো ডেটাটাইপযুক্ত ভাষার একটি ছোট্ট অংশ রয়েছে :
এছাড়াও অন্যান্য ভাষা রয়েছে যা Symbolবিভিন্ন আকারে এর বৈশিষ্ট্যগুলি সরবরাহ করে । জাভাতে, উদাহরণস্বরূপ, রুবির Stringগুলি এর বৈশিষ্ট্যগুলি দুটি (আসলে তিনটি) ধরণের মধ্যে বিভক্ত: Stringএবং StringBuilder/ StringBuffer। অন্যদিকে, রুবির Symbolপ্রকারের বৈশিষ্ট্যগুলি জাভা Stringপ্রকারে ভাঁজ করা হয়েছে : জাভা Stringগুলি অভ্যন্তরীণ হতে পারে , আক্ষরিক স্ট্রিং এবং Stringগুলি যা সংকলন-সময় মূল্যায়িত ধ্রুবক এক্সপ্রেশনগুলির ফলস্বরূপ স্বয়ংক্রিয়ভাবে অভ্যন্তরীণ হয়, গতিশীলভাবে উত্পাদিত Stringএসকে কল করে অভ্যন্তরীণ করা যায় String.internপদ্ধতি। Stringজাভাতে ইন্টার্ন করা হুবহু Symbolরুবির মতো, তবে এটি আলাদা ধরণের হিসাবে প্রয়োগ করা হয়নি, এটি জাভা থেকে আলাদা একটি রাষ্ট্র মাত্রStringথাকতে পারে। (দ্রষ্টব্য: রুবির পূর্ববর্তী সংস্করণগুলিতে, String#to_symবলা হত String#internএবং সেই পদ্ধতিটি আজও উত্তরাধিকারের নাম হিসাবে বিদ্যমান))
মূল প্রশ্নটি হতে পারে: symbolsরুবিতে কী ধারণাটি নিজের এবং অন্যান্য ভাষাগুলির উপর একটি পারফরম্যান্স অভিপ্রায় হিসাবে উপস্থিত রয়েছে,
Symbolগুলি সুনির্দিষ্ট শব্দার্থবিজ্ঞানের সাথে প্রথম এবং সর্বাগ্রে একটি ডেটাটাইপ । এই শব্দার্থবিজ্ঞানগুলি কিছু পারফরম্যান্স অপারেশনগুলি (যেমন দ্রুত ও (1) সমতা পরীক্ষা) বাস্তবায়ন করাও সম্ভব করে তোলে তবে এটি মূল উদ্দেশ্য নয়।
ভাষা ঠিকভাবে লেখার কারণে বা কিছু আছে যা প্রয়োজন?
Symbolরুবি ভাষায় মোটেই প্রয়োজন হয় না, রুবি সেগুলি ছাড়া ঠিক কাজ করবে। এগুলি খাঁটিভাবে একটি গ্রন্থাগার বৈশিষ্ট্য। ভাষার সাথে আবদ্ধভাবে ঠিক একটি জায়গা রয়েছে Symbol: একটি defপদ্ধতির সংজ্ঞা Symbolপ্রকাশটি যে পদ্ধতির সংজ্ঞা দেওয়া হচ্ছে তার নাম বোঝাতে একটি মূল্যায়ন করে । যাইহোক, এটি একটি বরং সাম্প্রতিক পরিবর্তন, তার আগে, রিটার্ন মানটি কেবল অনির্ধারিত ছিল। এমআরআই কেবল মূল্যায়িত হয় nil, রুবিনিয়াস কোনও Rubinius::CompiledMethodবস্তুর কাছে মূল্যায়ন করেন ইত্যাদি। এটি একটি UnboundMethod... বা মাত্র একটি মূল্যায়ন করা সম্ভব হবে String।
রুবির কোনও প্রোগ্রাম কি হালকা এবং / বা তার চেয়ে দ্রুততর হতে পারে, যাক, পাইথন বা নোডের অংশ? যদি তাই হয় তবে কি তা হবে symbols?
আপনি এখানে কি জিজ্ঞাসা করছেন তা আমি নিশ্চিত নই। পারফরম্যান্স বেশিরভাগ প্রয়োগের মানের বিষয়, ভাষা নয়। প্লাস, নোড এমনকি কোনও ভাষা নয়, এটি ইসমাস্ক্রিপ্টের জন্য একটি সন্নিবিষ্ট I / O কাঠামো। আয়রন পাইথন এবং এমআরআইতে সমমানের স্ক্রিপ্ট চালানো, আয়রন পাইথন দ্রুততর হওয়ার সম্ভাবনা রয়েছে। সিপিথন এবং জেআরবি + ট্রফলে সমমানের স্ক্রিপ্ট চালানো, জেরুবি + ট্রফল দ্রুততর হওয়ার সম্ভাবনা রয়েছে। এটির সাথে Symbolবাস্তবায়নের মানের সাথে কিছুই করার নেই : জেআরবি + ট্রফলের একটি আক্রমণাত্মকভাবে অপ্টিমাইজ করা সংকলক রয়েছে, প্লাস একটি উচ্চ-পারফরম্যান্স জেভিএম এর সম্পূর্ণ অপ্টিমাইজেশান যন্ত্রপাতি, সিপিথন একটি সরল অনুবাদক।
যেহেতু রুবির একটি উদ্দেশ্য মানুষের পক্ষে সহজভাবে পড়তে এবং লিখতে সহজ হয়, তাই এর নির্মাতারা কি অনুবাদকদের নিজেই (যেমন এটি অন্যান্য ভাষায় হতে পারে) উন্নতিগুলি প্রয়োগ করে কোডিংয়ের প্রক্রিয়াটি সহজ করতে পারেন না?
নং Symbolগুলি কোনও সংকলক অপ্টিমাইজেশন নয়। এগুলি নির্দিষ্ট শব্দার্থবিজ্ঞানের সাথে পৃথক ডেটাটাইপ। এগুলি YARV এর ফ্লোনমের মতো নয় যা এগুলির জন্য ব্যক্তিগত অভ্যন্তরীণ অপ্টিমাইজেশন Float। এ পরিস্থিতির জন্য হিসাবে একই নয় Integer, Bignumএবং Fixnum, যা হওয়া উচিত অদৃশ্য ব্যক্তিগত অভ্যন্তরীণ অপ্টিমাইজেশান বিস্তারিত, কিন্তু দুর্ভাগ্যবশত নয়। (এটি শেষ পর্যন্ত রুবি ২.৪ এ স্থির হতে চলেছে, যা সরিয়ে দেয় Fixnumএবং Bignumঠিক ছেড়ে যায় Integer))
জাভা এটির মতো করে তোলে, সাধারণের একটি বিশেষ রাষ্ট্র হিসাবে Stringএটি আপনাকে সর্বদা সচেতন হওয়া দরকার Stringযে আপনার বিশেষ বিশেষ অবস্থানে রয়েছে এবং কোন পরিস্থিতিতে তারা স্বয়ংক্রিয়ভাবে সেই বিশেষ অবস্থায় থাকবে এবং কখন নয় about এটি কেবল একটি পৃথক ডেটাটাইপ থাকার চেয়ে অনেক বেশি বোঝা।
প্রতীকগুলির ভাষা-অজ্ঞাত সংজ্ঞা এবং অন্য ভাষাগুলিতে এগুলি রাখার কারণ থাকতে পারে?
Symbolনাম বা লেবেলের ধারণাটি বোঝায় এমন একটি ডেটাটাইপ । Symbolগুলি হ'ল মান বস্তু , অপরিবর্তনীয়, সাধারণত তাত্ক্ষণিকভাবে (যদি ভাষা এইরকম কোনও জিনিস আলাদা করে), রাষ্ট্রহীন এবং কোনও পরিচয় নেই। দুই Symbols সমান সমান এছাড়াও অভিন্ন হওয়ার গ্যারান্টিযুক্ত, অন্য কথায়, দুটি Symbolসমান যেগুলি আসলে একই হয় Symbol। এর অর্থ হ'ল মান সমতা এবং রেফারেন্স সাম্যতা একই জিনিস এবং সুতরাং সাম্যতা দক্ষ এবং ও (1)।
এগুলিকে একটি ভাষায় রাখার কারণগুলি ভাষা থেকে পৃথক, একই রকম। কিছু ভাষাগুলি তাদের উপর অন্যের চেয়ে বেশি নির্ভর করে।
লিস্প পরিবারে, উদাহরণস্বরূপ, "পরিবর্তনশীল" কোনও ধারণা নেই। পরিবর্তে, আপনি Symbolমানগুলির সাথে যুক্ত হয়েছেন।
প্রতিফলিত বা অন্তর্মুখ ক্ষমতা ভাষায়, Symbolগুলি প্রায়ই রুবি মধ্যে, প্রতিফলন API গুলি প্রতিফলিত সত্ত্বা নামগুলি বোঝাতে যেমন, ব্যবহার করা হয় Object#methods, Object#singleton_methods, Object#public_methods, Object#protected_methods, এবং Object#public_methodsএকটি আসতে Arrayএর Symbolগুলি (যদিও তারা ঠিক যেমন ভাল একটি আসতে পারে Arrayএর Methodগুলি)। Object#public_sendএকটি সময় লাগে Symbolবার্তা নাম বাচক একটি আর্গুমেন্ট পাঠানোর জন্য (যদিও এটি একটি গ্রহণ Stringপাশাপাশি, Symbolআরও শব্দার্থগতভাবে সঠিক)।
এর নাম ECMAScript সালে Symbolকরা একটি দ্বারা মৌলিক ভবিষ্যতে এর নাম ECMAScript সামর্থ্য-নিরাপদ তৈরীর বিল্ডিং ব্লক। তারা প্রতিবিম্ব একটি বড় ভূমিকা পালন করে।