নির্দিষ্ট ধরণের কি এখনও প্রয়োজনীয়?


20

যে জিনিসটি আমার কাছে অন্য দিন ঘটেছিল তা হ'ল নির্দিষ্ট ধরণের এখনও প্রয়োজনীয় বা একটি উত্তরাধিকার যা আমাদের পিছনে ফেলেছে। আমি যা বলতে চাইছি তা হল: আমাদের কি আসলেই সংক্ষিপ্ত, দীর্ঘ, দীর্ঘ, বিগিন্ট ইত্যাদি প্রয়োজন need

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

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

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

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


6
পিএইচপি, রুবি, পার্ল এবং অন্যদের আপনার ভেরিয়েবলের ধরণের বিবরণ দেওয়ার প্রয়োজন হয় না। পরিবেশ এটি আপনার জন্য চিত্রিত করে।
হতাশ

7
ইউনিকোড স্ট্রিংগুলি কেবল এএসসিআইআই (ইউটিএফ -8) এর জন্য ব্যবহৃত হওয়ার পরে অতিরিক্ত মেমরি নিতে হবে না।

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

এটি আমাকে এই প্রকল্পের স্মরণ করিয়ে দেয়: tom.lokhorst.eu/media/…
লেনি প্রোগ্রামার

4
আদার কি হবে? type hour is range 0 .. 23;
mouviciel

উত্তর:


12

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

এটি পারফরম্যান্স সমালোচনামূলক প্রোগ্রামিং প্রতিস্থাপন করেনি। এটি কেবল অ-পারফরম্যান্স সমালোচনামূলক প্রোগ্রামিংকে আরও উত্পাদনশীল করে তুলেছে।



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

9

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

এমনকি সাধারণ-উদ্দেশ্যমূলক ভাষাগুলি যা দেরীতে বাইন্ডিংকে সমর্থন করে (ভিবি 6 এর মতো রানটাইমের ধরণের রেজোলিউশন) এখন শক্তিশালী টাইপিং (VB.NET) প্রচার করে, কারণ দেরীতে বাঁধাই করা হয় যখন প্রদর্শিত পারফরম্যান্স হিট যে কারণে দেখা হত এবং কারণ আপনি প্রায়শই প্রকারভেদগুলি স্পষ্ট না হলে কুরুচিপূর্ণ কোডের সাথে শেষ করুন ( ভিজ্যুয়াল বেসিকের রেফারেন্স / পেশাদার রিফ্যাক্টরিং - ড্যানিজেল আরসেনোভস্কি )।


দয়া করে "স্বয়ং-টাইপিং" সংজ্ঞায়িত করুন।

@ ডেলানন: দেরীতে বাইন্ডিংয়ের সাথে অটো টাইপিং প্রতিস্থাপন করা হয়েছে যা আমি বোঝাতে চাইছিলাম :)
ম্যাথিউ

প্রচুর সাধারণ-উদ্দেশ্যমূলক ভাষা রয়েছে যা রানটাইমের সময় বিভিন্ন ধরণের সমাধান করে, কেবলমাত্র একটির নাম কমন লিস্প। (পারফরম্যান্সের উদ্দেশ্যে, আপনি কমন লিস্পে প্রকারগুলি ঘোষণা করতে পারেন, তাই আপনি কেবল পারফরম্যান্স-সমালোচনা বিভাগে এটি করতে পারেন))
ডেভিড থর্নলে

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

4

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

একটি অ্যারে এবং ভেক্টর (বা লিঙ্কযুক্ত তালিকার) এর মধ্যে বাণিজ্য সম্পর্কে চিন্তা করুন। একটি অ্যারের সাথে, একটি নির্দিষ্ট অবস্থানের সন্ধান করা প্রারম্ভিক অবস্থান পাওয়া এবং মেমরির সেই নতুন অবস্থানটি সনাক্ত করার জন্য মেমরি পয়েন্টার এক্স স্পেসগুলি স্থানান্তর করার একটি সহজ বিষয়। কিছুটা ইনট হিসাবে কিছুটা ভাবেন [৩২] কোন পাঠ পড়াতে সমস্ত বিট মান পেতে সেই অ্যারে দিয়ে হাঁটা জড়িত।

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

সিদ্ধান্ত নেওয়া হয়েছিল যে আকার এবং বৈধতা যাচাই করার জন্য বিকাশকারীকে অনুনাসন করা সিস্টেমের পারফরম্যান্সকে প্রভাবিত করার তুলনায় একটি ছোট বাণিজ্য is


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

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

সত্য কথা বলতে গেলে, এটি আপনার যতটা নির্মম নয়। আমার আসন্ন উত্তর সিএফ।
পল নাথান

3

হার্ডওয়্যার-কেন্দ্রিক ভাষা এবং প্রকল্পগুলির জন্য নির্দিষ্ট ধরণের প্রয়োজন। একটি উদাহরণ অন-ওয়্যার নেটওয়ার্ক প্রোটোকল।

তবে আসুন তৈরি করা যাক - মজাদার জন্য - সি ++ এর মতো ভাষায় একটি ভেরেন্ট টাইপ। এটি একটি new'অন্তর্নির্মিত অ্যারে থেকে তৈরি করুন ।

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

গুণ একইভাবে অনুসরণ করে; পুনরাবৃত্তি যুক্ত / স্থানান্তর ব্যবহার করুন। সর্বদা হিসাবে, আপনার লেজের আসল মোচড়টি বিভাগ [*]।

যদিও এটি ঘটে গেলে আপনি কী হারিয়েছেন?

  • নির্ধারিত সময়। আপনার সিস্টেমে ( new) রয়েছে যা পয়েন্টগুলিতে ট্রিগার করতে পারে যা প্রয়োজনীয়ভাবে নিয়ন্ত্রণযোগ্য নয়।

  • নির্ধারিত স্থান।

  • আধা সফ্টওয়্যার গণিত ধীর।

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

[*] সিএফ হার্ডওয়্যার গণিত অ্যালগরিদমগুলি এটির দ্রুত করার জন্য - সাধারণত কৌশলটি সমান্তরাল ক্রিয়াকলাপ হয়।


2

এটা একটা ভালো প্রশ্ন। এটি ব্যাখ্যা করে যে পাইথনের মতো কোনও ভাষার জন্য "সংক্ষিপ্ত, অন্ত, দীর্ঘ, বিগিন্ট ইত্যাদি" প্রয়োজন হয় না: পূর্ণসংখ্যাগুলি ভাল, পূর্ণসংখ্যার (পাইথন 3-তে একটি একক পূর্ণসংখ্যার টাইপ রয়েছে), এবং এর কোনও সীমা আকার নেই (এর চেয়েও বাইরে) কম্পিউটারের স্মৃতি অবশ্যই)।

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

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


1

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

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

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


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

1
@ এমকেও: ​​আপনি চেষ্টা করে দেখুন না কেন?
আনন

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

অবশ্যই সমস্ত প্রোগ্রামার হিসাবে আমি কোনও দিন নিজের ভাষা তৈরি করার স্বপ্ন দেখেছি;)
হোমডে

@ জ্প্রেটি: আমি একমত নই; বেশিরভাগ লোকেরা সম্ভাব্য বৃহত্তর মধ্যবর্তী ফলাফল সম্পর্কে অসচেতন। এই জাতীয় ভাষা বেশিরভাগ উদ্দেশ্যেই যথেষ্ট দ্রুত তৈরি করা যেতে পারে।
ডেভিড থর্নলি

1

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

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

ইন short, আরও সুনির্দিষ্ট প্রকারের জন্য এখনও একটি জায়গা রয়েছে, তবে অনেকগুলি বিকাশের সমস্যার জন্য সেই নির্ভুলতার প্রয়োজন হয় না।


0

আমি সম্প্রতি একটি মই লজিক সম্পাদক এবং রানটাইম তৈরি করেছি এবং আমি প্রকারের সাথে খুব সীমাবদ্ধ থাকার সিদ্ধান্ত নিয়েছি:

  • বুলিয়ান
  • সংখ্যা
  • দড়ি
  • তারিখ সময়

আমি বিশ্বাস করি এটি ব্যবহারকারীর জন্য এটি আরও স্বজ্ঞাত করে তুলেছে। এটি বেশিরভাগ পিএলসি থেকে মূলত প্রস্থান যা আপনি সি এর মতো কোনও ভাষাতে দেখতে পাবেন এমন সমস্ত "স্বাভাবিক" প্রকারের प्रकार রয়েছে which


0

প্রোগ্রামিং ভাষাগুলি সেই দিকে এগিয়ে চলেছে। উদাহরণস্বরূপ স্ট্রিং নিন। পুরানো ভাষায় আপনাকে স্ট্রিংয়ের আকার যেমন PIC X(42)সিওবিএল এর মতো , DIM A$(42)বেসিকের কিছু সংস্করণে বা এসকিউএল-তে [ VAR]] ঘোষণা করতে CHAR(42)হয়। আধুনিক ভাষায় আপনার কেবলমাত্র একটি গতিশীল-বরাদ্দ করা stringটাইপ রয়েছে এবং আকার সম্পর্কে ভাবার দরকার নেই।

পূর্ণসংখ্যা পৃথক, তবে:

আমি যা বলতে চাইছি তা হল: আমাদের কি আসলেই সংক্ষিপ্ত, দীর্ঘ, দীর্ঘ, বিগিন্ট ইত্যাদি প্রয়োজন need

পাইথন একবার দেখুন। এটি মেশিন-আকারের ( int) এবং স্বেচ্ছাচারিত আকারের ( long) পূর্ণসংখ্যার মধ্যে পার্থক্য করত । 3.x এ প্রাক্তনটি চলে গেছে (পুরানোটি longনতুন int) এবং এটির কোনওোটাই মিস করেন না।

কিন্তু এখনও জন্য একটি বিশেষ ধরনের সিকোয়েন্স আকারে 8-বিট পূর্ণসংখ্যার bytesএবং bytearray। কেন যথাক্রমে একটি tupleবা listপূর্ণসংখ্যার ব্যবহার করবেন না ? সত্য, bytesঅতিরিক্ত স্ট্রিং-জাতীয় পদ্ধতি রয়েছে যা tupleনা করে তবে অবশ্যই দক্ষতার সাথে এর অনেক কিছুই ছিল।

প্রকারটি আপনার প্রয়োজনীয় নির্ভুলতার উপর নির্ভর করে যেহেতু টাইপটি কিছুটা জটিল Flo

আসলে তা না. "সবকিছুই দ্বৈত-নির্ভুলতা" পদ্ধতিটি খুব সাধারণ।


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

@ কনরাড: আইএমএইচও, "স্বাক্ষরবিহীন" পূর্ণসংখ্যার কারণে সি তে এ জাতীয় মাথাব্যথার কারণ হ'ল তারা কখনও কখনও সংখ্যার প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কখনও কখনও মোড়ক বিমূর্ত বিজাতীয় রিংয়ের সদস্যদের প্রতিনিধিত্ব করতে ব্যবহৃত হয়। পৃথক "রিং" এবং "স্বাক্ষরবিহীন সংখ্যা" প্রকারগুলি থাকা নিশ্চিত করে যে unum64 += ring32a-ring32bডিফল্ট পূর্ণসংখ্যার প্রকারটি 16 বিট বা 64 হয় তা নির্বিশেষে কোডটি সর্বদা সঠিক আচরণ উপস্থাপন করতে পারে [নোট করুন যে এর ব্যবহার +=অপরিহার্য; মত unum64a = unum64b + (ring32a-ring32b);
প্রকাশটি

0

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

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

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

নির্বাচিত_রিয়াল_কিন্ড (পি, আর) দশমিক যথাযথতার সাথে কমপক্ষে পি অঙ্কগুলির এবং বৃহত্তর নূন্যতম আর এর চেয়ে বেশি দশমিক নির্ভুলতার সাথে একটি বাস্তব ডেটা ধরণের ধরণের মান প্রদান করে।

সুতরাং আপনি যান, উদাহরণস্বরূপ;

program real_kinds
integer,parameter :: p6 = selected_real_kind(6)
integer,parameter :: p10r100 = selected_real_kind(10,100) !p is precision, r is range
integer,parameter :: r400 = selected_real_kind(r=400)
real(kind=p6) :: x
real(kind=p10r100) :: y
real(kind=r400) :: z

print *, precision(x), range(x)
print *, precision(y), range(y)
print *, precision(z), range(z)
end program real_kinds

(আমি মনে করি এটি একটি বরং স্ব-ব্যাখ্যামূলক উদাহরণ)।

এখনও আমি জানি না আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি কিনা, এবং এটিই আপনি ment

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