তাহলে, কেন রুবি স্রষ্টাদের symbols
ভাষায় ধারণাটি ব্যবহার করতে হয়েছিল?
ঠিক আছে, তারা কঠোরভাবে "করতে" ছিল না, তারা বেছে নিয়েছিল। এছাড়াও, নোট করুন যে কঠোরভাবে বলা Symbol
s ভাষার ভাষার অংশ নয়, তারা মূল গ্রন্থাগারের অংশ। তারা কি ভাষা-স্তরের আক্ষরিক সিনট্যাক্স আছে, কিন্তু তারা ঠিক যেমন ভাল কাজ করবে যদি আপনি কল করে তাদের গঠন করা ছিল 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
গুলি হ'ল মান বস্তু , অপরিবর্তনীয়, সাধারণত তাত্ক্ষণিকভাবে (যদি ভাষা এইরকম কোনও জিনিস আলাদা করে), রাষ্ট্রহীন এবং কোনও পরিচয় নেই। দুই Symbol
s সমান সমান এছাড়াও অভিন্ন হওয়ার গ্যারান্টিযুক্ত, অন্য কথায়, দুটি 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 সামর্থ্য-নিরাপদ তৈরীর বিল্ডিং ব্লক। তারা প্রতিবিম্ব একটি বড় ভূমিকা পালন করে।