আপনি কী চান ভাষা ডিজাইনাররা মনোযোগ দিয়েছেন? [বন্ধ]


38

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

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

দয়া করে পোস্ট করবেন না:

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

দয়া করে না পোস্ট:

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

আমার আশা এই একটি মজাদার এবং উদ্দীপক বিষয় হবে।

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


সিনট্যাক্সটি কেবলমাত্র একটি প্রয়োগের বিশদ বলে বলা ঠিক সরল ভুল। সিনট্যাক্স ডিজাইন কোনও ভাষা ডিজাইনের একটি মৌলিক গুরুত্বপূর্ণ অঙ্গ। আর পয়েন্ট অনেক আপনি যে কি পোস্ট আসলে সিনট্যাক্স যুক্ত থাকতে পারে দেখতে চাই। কৃপা. একটি আকর্ষণীয় প্রশ্নের মত মনে হচ্ছে।
কনরাড রুডল্ফ

আমি যা এড়াতে চাই তা হল শিখা যুদ্ধ war যদি আপনি শিখা যুদ্ধ শুরু না করে বাক্য গঠন নিয়ে আলোচনা করতে পারেন তবে এর জন্য যান।
বেরিন লরিটস

উত্তর:


49

ডিফল্টরূপে ইউনিকোড সমর্থন

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


2
+1 আসলে ভাষাটি আপনাকে নিজের শনাক্তকারীদের জন্য কোনও অক্ষর ব্যবহার করার অনুমতি দেয়। আমরা সবাই ইংরাজ নই।
বেরিন লরিটস

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

11
আমি যুক্ত করব যে ভাষাটি ব্যবহার করার সময় ইউনিকোড সমর্থন স্বাভাবিক হওয়া উচিত। যদি সম্ভব হয় তবে "এটিকে যুক্ত করার" জন্য অতিরিক্ত কোনও প্রচেষ্টা নেওয়া উচিত নয়, এটি "স্রেফ কাজ" করা উচিত (যেখানে যুক্তিসঙ্গত)।
আরএইচসিগার

4
সম্পর্কিতভাবে, ভাষার পাঠ্য (অক্ষরের অনুক্রম) এবং বাইনারি (বাইটের ক্রম) ডেটার মধ্যে একটি মৌলিক পার্থক্য করা উচিত। সি # stringএবং এর সাথে এই অধিকার পায় byte[]। হিসাবে পাইথন 3.x করে strএবং bytes। সি (++) charএটি মারাত্মকভাবে ভুল হয়ে যায়।
dan04

1
@ আরএইচসিগার - সত্যই !!! এমনকি পাইথনে আপনাকে টাইপ করতে হবে u'My Unicode Štring'। আমি আশা করি আপনি কী ধরণের স্ট্রিংয়ের সাথে ভুলে গেছেন এবং লেখার কোডটি ফ্রেগগিন করেছেন।
orokusaki

25

আমার একটি দম্পতি রয়েছে:

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

  • স্ট্যান্ডার্ড লাইব্রেরিতে শুভ তারিখ সমর্থন। আমার অর্থ তারিখ, ঘন্টা এবং মিনিট যোগ করতে এবং বিয়োগ করতে সক্ষম হওয়া এবং ১ জানুয়ারি, ১৯ 1970০ সাল থেকে মিলি সেকেন্ডের সংখ্যার সাথে ডিল করতে হবে না।


2
"শুভ তারিখ সমর্থন" যদিও বেশ খাড়া প্রয়োজন! এমনকি এর অর্থ কি? আমি মনে করি তারিখ এবং সময়গুলি সেই জিনিসগুলির মধ্যে একটি যেখানে আপনি এটি মোটেও ভাল পেতে পারেন না। হয় আপনি এটিকে সহজ এবং ভুল হিসাবে তৈরি করেন, অথবা আপনি এটিকে সঠিক এবং অধার্মিক জটিল করে তোলেন। ভাল মিডল গ্রাউন্ডে আঘাত করা সত্যিই শক্ত।
সারা

@ কাই কথাটি হ'ল তারিখ সমর্থনটি সাধারণত বেশ ভয়ঙ্কর। পুরানো java.util.Dateপ্রায় সব সম্ভাব্য গোচা এবং সমস্যা আছে। আমি নতুন java.time.*প্যাকেজের কেবলমাত্র একটি অংশ জানি , তবে এটি পরিষ্কার, ব্যবহার করা সহজ এবং বগমুক্ত AFAICT T আরও উন্নত ব্যবহারকারীরা সমস্যাগুলি খুঁজে পেতে পারে তবে এটি একটি বিশাল উন্নতি। +++ সমস্যাটি মনে হচ্ছে, এটি একটি জটিল সমস্যা এবং প্রথম সংস্করণটি তাড়াতাড়ি এবং নষ্ট হয়ে গেছে।
মার্টিনাস

24

কম্পিউটার সুরক্ষার লোকদের জন্য আপনার ভাষাটিকে বিশ্লেষণযোগ্য / শ্রুতিমধুর করে তুলুন।

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

যখন ভাষা বা কোর লাইব্রেরিগুলির একটি নতুন সংস্করণ প্রকাশিত হয়, তখন যে জিনিসগুলি আগে নিরাপদ ছিল সেগুলি আর না থাকতে পারে:

  1. গ্রন্থাগারগুলি আরও শক্তিশালী হয়ে উঠতে পারে: যেমন ইউআরএল লাইব্রেরি এখন সমর্থন করে javascript:
  2. স্ট্রিং বা বাইটগুলিকে কোডে রূপান্তর করার জন্য নতুন উপায় থাকতে পারে: যেমন evalবা deserialization লাইব্রেরি
  3. ভাষার প্রতিবিম্ব কৌশলগুলি আরও শক্তিশালী হয়ে উঠতে পারে: যেমন স্থানীয় ভেরিয়েবলগুলি প্রকাশ করা

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

সুতরাং, ভাষাটি ডিজাইন এবং সংস্করণ করার সময় দয়া করে আমাদের সম্পর্কে চিন্তা করুন। নীচে কয়েকটি টিপস দেওয়া হল:

কয়েকটি আদিম সংজ্ঞা দিন যা একটি প্রোগ্রামকে পচে যেতে পারে।

এইচটিএমএল 5 বিশেষভাবে খারাপ। তারা স্পষ্টতই সুরক্ষার জন্য অনেক চিন্তাভাবনা তৈরি করেছে এবং কিছু অতি স্মার্ট লোক রয়েছে, তবে <video>পুরানো বিষয়গুলির মতো নতুন প্রোগ্রামের উপাদানগুলি নির্দিষ্ট করে বা নতুন <video>এবং পুরাতন <img>উভয় ক্ষেত্রেই নির্দিষ্ট করা যেতে পারে এমন একটি সাধারণ বিমূর্ততা তৈরি করার পরিবর্তে <video>এখনও রয়েছে নিজস্ব সুরক্ষা পরিণতি সহ আরেকটি এক-অফ প্রোগ্রাম উপাদান।

আপনার ভাষা স্থিতিশীল বিশ্লেষণে (এমনকি স্থিতিযুক্ত টাইপ না করে) উপযুক্ত করে তুলুন।

সুরক্ষা লোকেরা প্রায়শই নিদর্শনগুলি খুঁজে পেতে এবং কোনও প্রোগ্রামের অংশগুলি চেষ্টা করার চেষ্টা করে এবং তাদের রায় দেওয়ার জন্য স্থির বিশ্লেষণ ব্যবহার করে যাতে তারা সত্যই কৌতুকপূর্ণ বিটগুলিতে ফোকাস করতে পারে।

এটি স্পষ্ট হওয়া উচিত যা সনাক্তকারীরা স্থানীয় ভেরিয়েবল এবং কোনটি নয়।

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

if (Math.random() > 0.5) {
  Object.prototype.x = 0;
}

function f() {
  var x = 1;
  (function () {
    alert(x);  // Might alert 0, might alert 1.
  })();
}

ক্ষয়যোগ্য সুরক্ষার জন্য অনুমতি দিন

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

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

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

তবে আপনি যদি এটি না করতে পারেন তবে মডিউল গ্রাফকে স্ট্যাটিক্যালি বিশ্লেষণযোগ্য আর্টিক্ট তৈরি করা আপনাকে বেশ খানিকটা উপকার পেতে পারে। যদি আমি প্রমাণ করতে পারি যে কোনও মডিউল I / O মডিউল (টিসিবির মডিউলে কোড কল করে) ফাইলটি পৌঁছতে পারে না, তবে আমি সেই মডিউলটি থেকে পুরো ক্লাসের সমস্যাগুলি বাতিল করতে পারি।

এম্বেড থাকা স্ক্রিপ্টিং ভাষার কর্তৃত্ব সীমাবদ্ধ করুন

প্রচুর দরকারী সিস্টেমগুলি একটি স্ট্যাটিক কোর হিসাবে সংগঠিত হয় যা গতিশীল (এমনকি কার্যকরী) ভাষায় প্রচুর কোড বন্ধ করে দেয়।

এবং স্ক্রিপ্টিং ভাষা এম্বেড করা কোনও সিস্টেমকে আরও প্রসারিত করতে পারে।

তবে কোনও স্ক্রিপ্টিং ভাষার ভিএম-এর পূর্ণ কর্তৃত্ব থাকা উচিত নয়।

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

আচরণ evalএকটি ভাষা হিসাবে একটি স্ক্রিপ্টিং ভাষা হিসাবে নিজেকে এম্বেডিং

যদি আপনার ভাষা যদি তার নিজস্ব সংকলককে স্ট্রিংকে কোডে পরিণত করতে অনুরোধ করতে পারে তবে আপনার যেকোন এম্বেডড স্ক্রিপ্টিং ভাষার মতো স্যান্ডবক্সও করার অনুমতি দিন।

একটি সাধারণ সমাবর্তন মডেল ব্যবহার করুন

সুরক্ষা সম্পত্তি রক্ষণাবেক্ষণ করা হয় কিনা তা নির্ধারণের চেষ্টা করার সময় আমরা সুরক্ষার লোকেরা জাতিদের অবস্থার বিষয়ে চিন্তা করতে পছন্দ করি না।

প্রায় অসম্ভব-সুরক্ষিত ডিফল্ট বিকল্প হিসাবে থ্রেডগুলিতে স্থির হওয়ার আগে দয়া করে থ্রেডিংয়ের বিকল্পগুলি বিবেচনা করুন।

একটি সহজ হল ইভেন্ট লুপ সমষ্টি যেমন E, Verilog এবং জাভাস্ক্রিপ্টে পাওয়া যায়।

বিভ্রান্তির উদ্ধৃতি উত্সাহিত করবেন না

কিছু ভাষা আঠালো ভাষা এবং এগুলি বিভিন্ন ভাষায় স্ট্রিংয়ের সাথে ডিল করে।

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

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


সুন্দর ভাঙ্গন।
কিউস

23

কিছু সেরা ভাষাগুলি এমন লোকেরা ডিজাইন করেছিলেন যারা নিজের জন্য একটি ভাষা তৈরি করতে চেয়েছিলেন।

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


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

5
@ বেরিন: আমি মনে করি না যে বক্তব্যটি আপনার ব্যবহারকারীদের কাছে কখনই শোনা উচিত নয় , তবে যে ভাষাটি এটির জন্য ডিজাইন করা হয়নি সেটির জন্য ভাষাটি ব্যবহার করতে চান না listen আপনি যদি কোনও নির্দিষ্ট সেট বা সমস্যাগুলি সমাধান করার জন্য কোনও ভাষা ডিজাইন করেন তবে আপনার সেই ব্যবহারকারীদেরও যত্ন নেওয়া উচিত যাদের এই সমস্যাগুলি সমাধান করা দরকার। তবে আপনি চূড়ান্ত বিষয়টি সম্বোধন করেন এবং কখনও কখনও কোনও ভাষা একটি নতুন ডোমেনে একটি কুলুঙ্গি খুঁজে পেতে পারে, সুতরাং +1।
জেরেমি হিলার

2
@ জেরেমি, হ্যাঁ, আমি যা বলছি ঠিক তেমনই, তবে আমি মনে করি যে কোনও ভাষার পক্ষে এটির জন্য নকশাকৃত নকশাকৃত ভাষায় ভাল কাজ করা অস্বাভাবিক।
ড্যান_ওয়াটারওয়ার্থ

@ উদ্যান_ ওয়াটারওয়ার্থ: সফল ভাষাগুলি সাধারণত ডোমেনগুলির জন্য নকশাকৃত নয় এমন প্রায়শই ভাল কাজ করে।
ডেভিড থর্নলি

8
"ব্যবহারকারীর কথা শুনবেন না" পরিবর্তে পরামর্শটি "আপনার ব্যবহারকারীর কাছে শোনো না" হিসাবে আরও ভালভাবে বর্ণিত।
খ্রিস্টিয়াকক

16

5-10% সময় আসলে কোড লেখার জন্য ব্যয় হয়। ভাষা ডিজাইনারদের আসলে সফ্টওয়্যার তৈরির অসুবিধাগুলির দিকে মনোযোগ দেওয়া উচিত, যার অর্থ ত্রুটি এবং বাগগুলি ঠিক করা।

তার মানে সেখানে থেকে ভাল ডিবাগারটি পাওয়া উচিত। আরকেন সিনট্যাক্স এবং কী কমান্ডগুলির সাথে এমন কোনও সরঞ্জাম নয় যা মুদ্রণ বিবরণের টনগুলির চেয়ে সামান্য ভাল।


2
+1 টি। ডিবাগিং হ'ল এমন একটি স্থান যেখানে কয়েকটি ভাষা অন্যের চেয়ে ভাল - এবং কিছু আইডিই ব্যবহারযোগ্য ভাষা এবং আপনার পথে চলে এমন একটি ভাষার মধ্যে সমস্ত পার্থক্য তৈরি করে।
বেরিন লরিটস

2
আমি এটিতে কিছুটা যুক্ত করব এবং বলব, যেখানে সম্ভব, দরকারী স্ট্যাকের চিহ্নগুলি। যদি কোনও ত্রুটি থাকে (বা আপনার ভাষার উপর নির্ভর করে ব্যতিক্রম বা যা কিছু থাকে) তবে আমি ব্যবহৃত আর্গুমেন্টের মান সহ পুরো কল স্ট্যাকটি দেখতে পেলাম। টিসিএল এটি ব্যতিক্রমীভাবে খুব ভাল করে তোলে .. তবে, সত্যি কথা বলতে, সবকিছুই টিসিএল-এ স্ট্রিং, তাই আপনি আপেক্ষিক স্বাচ্ছন্দ্যের সাথে সমস্ত কিছুর মান মুদ্রণ করতে পারেন।
আরএইচসিগার

1
কেবল ডিবাগিং নয়, ত্রুটিগুলি লিখতে এটি শক্ত করে তুলছে। জাভা অ্যারেগুলিতে স্বয়ংক্রিয় সীমানা-চেকিং চালু করার সময় আমি খুব খুশি হয়েছিলাম ... তবে এখানে আমরা 15 বছর পরে রয়েছি, এখনও অন্য ভাষাগুলিতে সেই ভুলগুলি করছি।
অ্যালেক্স ফেনম্যান

3
সংকলনের সময় বাগগুলি খুঁজে পাওয়া কোনও ভাষা থাকলে কী আরও ভাল হবে না? উদাহরণস্বরূপ, আমি যখন অ্যাডা ব্যবহার করি তখন ডিবাগারে উল্লেখযোগ্যভাবে কম সময় ব্যয় করা হয় যখন আমি সি বা সি ++ ব্যবহার করি।
মার্টিন

12

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

সেখানে প্রাসঙ্গিক যে দার্শনিক ধারণা সম্পর্কে, এটি পাইথনের জেন থেকে সর্বাধিক গুরুত্বপূর্ণ:

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

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

পাইথনে আমি যে প্রযুক্তিগত বৈশিষ্ট্যটি মিস করছি তা হ'ল "অবধি" বিবৃতি (যেমনটি প্রকাশ করার পরে, তবে প্রথমবারের মত প্রকাশের পরীক্ষা করা হচ্ছে না) is তারপরে পাইথন এবং অন্যান্য ভাষার স্ট্যান্ডার্ড লাইব্রেরিগুলিতে অনেক কিছুই রয়েছে যা উন্নত করা যেতে পারে, তবে এটি কঠোর ভাষায় নয় , তাই এটি আলাদা প্রশ্ন। :-)


4
আমি আরও দুটি বিষয়কে আরও গুরুত্বপূর্ণ হিসাবে বিবেচনা করি, বিশেষত একটি ভাষা নকশা স্তরে: "বিধিগুলি ভঙ্গ করার জন্য বিশেষ বিশেষ ক্ষেত্রগুলি যথেষ্ট বিশেষ নয়" " কারণ "যদিও বাস্তবতার দ্বারা বিশুদ্ধিকে মারধর করা হয়" এর সাথে এক হাজার বিশেষ মামলা বা আরকেন বিধি সহ একটি ভাষা ব্যবহার করা শক্ত। কারণ অন্যথায় আপনি ট্যারিপিটকে ট্যুরিটসের ক্ষেত্রের দিকে নিয়ে যান।

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

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

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

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

11

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

আরও সাধারণ অর্থে, এটি রূপান্তরকামী ... তবে আমি বেশিরভাগ ক্ষেত্রে এটি নতুন নিয়ন্ত্রণ কাঠামো তৈরির জন্য ব্যবহার করি।


মজাদার. ভাল মেটা প্রোগ্রামিং সমর্থন সঠিকভাবে পাওয়া কঠিন হতে পারে তবে এটি যখন খুব শক্তিশালী হয়। আমি লিস্পের পছন্দকারী লোকদের কাছ থেকে শুনেছি যে লিস্পের বাস্তবায়ন সবচেয়ে ভাল - তবে তারা লিস্পের সবকিছু সম্পর্কে বলে say আপনি কী মনে করেন এর কোনও উদাহরণ মেটা প্রোগ্রামিং সঠিকভাবে হয়েছে?
বেরিন লরিটস

"Metaprogramming done done" এমনটি হয়ে গেছে যেখানে সঠিক কাজটি করা সহজ (ভাল, যুক্তিসঙ্গত সহজ ক্রিয়াকলাপের জন্য) এবং যেখানে শেষ ফলাফলটি ভাষার একটি প্রাকৃতিক অংশের মতো অনুভূত হয়।
ডোনাল ফেলো

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

আমি মনে করি মাতা-লুয়া বা টেম্পলেট হাস্কেল এটি সরবরাহের জন্য একটি ভাল কাজ করে। (স্কিম ম্যাক্রোর মতো সুন্দর নয়, তবে কোনও ভাষায় পেরেন ব্যবহার করার জন্য আপনি যা অর্থ প্রদান করেন)
থিও বেলার ২

10

সর্বাধিক গুরুত্বপূর্ণ বিষয়টি হল আপনার ভাষার একটি "স্টাইল" থাকা দরকার। উদাহরণস্বরূপ, আমি সি একটি পয়েন্টার ভিত্তিক সিস্টেম প্রোগ্রামিং ভাষা কল করব। আমি এরলংকে একটি অত্যন্ত যুগ্ম ক্রিয়ামূলক প্রোগ্রামিং ভাষা বলি। কিছু অন্যান্য ভাষা (যেমন সি ++ এবং তর্কযোগ্যভাবে জাভা) হ'ল অ্যালান কে "আগলুটিনেটিভ" ভাষা বলে: ফ্রাঙ্কেনস্টাইন ভাষাগুলি একত্রে বৈশিষ্ট্যযুক্ত একাধিক বৈশিষ্ট্য নিয়ে গঠিত।

এরপরে সর্বাধিক গুরুত্বপূর্ণটি হ'ল ভাষাতে পরিবর্তনগুলি নিজেই একটি শেষ রিসোর্ট হওয়া উচিত। এমনকি ভাষাটির অন্যান্য বৈশিষ্ট্যগুলির সাথে একত্রিত হয়ে সর্বাধিক সৌম্যর শব্দটি জটিল হয়ে উঠতে পারে। আমি বলব যে কোনও ভাষায় একটি নতুন বৈশিষ্ট্য রাখার জন্য আপনার প্রয়োজন:

  1. প্রমাণ করুন যে এটি সত্যই প্রয়োজনীয়।
  2. প্রমাণ করুন যে এটি কোনও লাইব্রেরিতে করা যায় না।
  3. প্রমাণ করুন যে এটি ভাষাতে অন্তর্ভুক্ত।

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

1
আমাকে আমার প্রিয় সি ++ উদ্ধৃতি মনে করিয়ে দেয় ... কুকুরের উপরে অতিরিক্ত পা পেরেক দিয়ে তৈরি একটি অক্টোপাস।
অক্টোডো

4
প্রমাণ করুন যে এটি কোনও লাইব্রেরিতে করা যায় না । +1
কিউস

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

10

একটি দুর্দান্ত প্রশ্নের জন্য ধন্যবাদ। আপনি বেশ ভাল উত্তর পেয়ে যাচ্ছেন।

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

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

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

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

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


9

প্যাসকেল এবং অ্যাডা এর মতো বৌদ্ধ এবং স্বতন্ত্র পূর্ণসংখ্যার প্রকারগুলি। সত্য: কত ঘন ঘন আপনার পূর্ণসংখ্যার পূর্ণ পরিসর প্রয়োজন? আমি মনে করি আসল বিশ্বের আরও ভালভাবে উপস্থাপন করার জন্য আদিম ধরণের অনেক উন্নতি হওয়ার দরকার আছে।


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

2
আমি কী ভেবেছিলাম যেখানে আডা যেখানে আপনি ঠিক বলতে পারেন type Date_Of_Month is 1 .. 31;এবং 16 বা 32 বিটের মতো সিদ্ধান্তগুলি অপ্টিমাইজারের কাছে রেখে যেতে পারেন types কিন্তু আরো গুরুত্বপূর্ণ বরাদ্দ 32 বা 0 বা -5 ধরনের একটি পরিবর্তনশীল আপনি একটি দান করেন RANGE_ERROR
মার্টিন

Date_Of_Month(বা Month_Of_Year) এর মতো জিনিসগুলির জন্য ব্যাপ্তিগুলি ভালভাবে কাজ করে যেখানে বেশিরভাগ ক্ষেত্রে - সম্ভবত বেশিরভাগ ক্ষেত্রেই অস্পষ্ট। type Persons_Age is 0..120? কেউ যদি দীর্ঘায়ু রেকর্ড ভঙ্গ করে? type Year is 0..9999? আপনি যদি একজন মিশর বিশেষজ্ঞ হন?
dan04

যদি আপনি একজন মিশরোলজিস্ট হন তবে আপনার অবিশ্বাস্য প্রয়োজন type Egyptian_Year is -9999 .. 300;। আমার অভিজ্ঞতায় আপনি বেশিরভাগ সময় পূর্ণসংখ্যার জন্য দরকারী সীমানা পেতে পারেন। এই ক্ষেত্রে আপনার বিবেচনা করা type Scrolls_Found is array Egyptian_Year of Natural;উচিত আপনার অ্যারে সূচক হিসাবে আনবাউন্ডেড টাইপ থাকতে পারে না। এটি হ্যাকারের জন্য কেবল আক্রমণ আক্রমণকারী। বিটিডাব্লু: অ্যাডা রানের সময়সীমা সীমার জন্য মঞ্জুরি দেয়।
মার্টিন

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

8

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


8

নামকরণ কনভেনশন (আমি আপনাকে পিএইচপি খুঁজছি)


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

3
আপনি স্ট্যান্ডার্ড লাইব্রেরি করতে পারেন।
মালফিস্ট

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

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

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

7

বিকাশের পরিবেশের সাথে প্রথম শ্রেণীর সংহতকরণ।

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

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

এই ক্রিয়াকলাপগুলির জন্য সমর্থন সরবরাহ করার জন্য ভাষাগুলি তৈরি করা উচিত। কিছু বিকাশ হয়েছে - জাভাতে টীকাগুলি অন্যান্য বিকাশকারীদের কোডের উদ্দেশ্য বুঝতে সহায়তা করে।

তবে বেশিরভাগ ক্ষেত্রে এটি স্ট্যাক হ্যাক হয়ে যায়, যেমন কোনও মন্তব্যে $ আইডি using ব্যবহার করা যাতে সিভিএস-নিয়ন্ত্রিত উত্সটিতে কোনও সংস্করণ নম্বর থাকতে পারে। আমি কেন ভাষা থেকে এই জাতীয় কিছু করতে পারি না?


আপনি এএসআইএস (আইএসও / আইইসি 15291: 1999 "অ্যাডা শব্দার্থবিজ্ঞান ইন্টারফেস স্পেসিফিকেশন") এর মতো কিছু বলতে চান? এএসআইএস আপনার সমস্ত কিছুই কভার করে না তবে অনেকটা। আমি প্রায়শই অন্যান্য প্রোগ্রামিং ভাষার জন্য এএসআইএস এর মতো কিছু কামনা করি। বিশদ জানতে sigada.org/wg/asiswg দেখুন ।
মার্টিন

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

6

বিতরণ গণনা

ফ্রি লাঞ্চ শেষ। আজকে এমন একটি প্রোগ্রামের প্রয়োজন যা একাধিক কোর / একাধিক প্রসেসরের (এবং বিশেষ পরিস্থিতিতে একাধিক কম্পিউটারে) চলমান।

দুর্ভাগ্যক্রমে মাল্টি-থ্রেড কোড লেখা শক্ত ধারণা, সুতরাং ভাষাটিকে বাধা হিসাবে যুক্ত করার দরকার নেই really

ভবিষ্যতের সি ++ 0x ব্যবহার অবশ্যই আকর্ষণীয়, কারণ এটি একটি গ্রন্থাগার হিসাবে এনেছে এবং আপনাকে প্রকৃত সিনক্রোনাইজেশন সমস্যাগুলি থেকে মুক্তি দেয় না (আপনি জানেন যেগুলি সমাধানের পক্ষে এত সহজ ...)

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

আমি মনে করি যে কার্যকরী ভাষাগুলির মতো ডেটার অপরিবর্তনীয়তার পক্ষে থাকা ভাষাগুলিরও এর অধিকার থাকতে পারে (যদিও আমি সেখানে অভিজ্ঞতা পছন্দ করি)।

এছাড়াও, অভিনেতা মডেলটি আমাদের পরবর্তী লক্ষ্য হতে পারে। এটি বিতরণ করা কম্পিউটিংয়ের জন্যও ছিল।


আর একটি উদাহরণ এর্লাং হবে lang এই ধরণের ভাষার মধ্যে একটি সাধারণ থিম হ'ল একটি ভাগ করা কিছুই নয় , যেখানে বার্তাটি সহ রাষ্ট্রটি মূলত পাস করা হয়। পদ্ধতির ভাল স্কেল।
বেরিন লরিটস

@ বেরিন: আপনি ঠিকই বলেছেন, যদিও আমি বার্তায় এরলংকে উদ্ধৃত করি নি কারণ আমি এর কিছুটা জানি না, এটি আমার সঠিকভাবে মনে আছে এটি অভিনেতার মডেলটি প্রয়োগ করে।
ম্যাথিউ এম।

6

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


জাভাডক, সিপ্পডোক, রুবিডক ইত্যাদি স্ট্যান্ডার্ড লাইব্রেরিগুলির পাশাপাশি আপনার তৈরি লাইব্রেরিগুলি বোঝার ক্ষেত্রে একটি দুর্দান্ত সম্পদ ছিল। এগুলি সবাই সমানভাবে তৈরি হয় নি এবং কিছু অন্যের চেয়ে নেভিগেট করা সহজ।
বেরিন লরিটস্ক 5'11

সম্মত, জাভা এপিআই সাইটটি একটি দুর্দান্ত সম্পদ। এপিআই ডকুমেন্টেশন তৈরির জন্য এটি একটি স্ট্যান্ডার্ড ফর্ম্যাটযুক্ত great জাভাডক (নেটবিন) বিশ্লেষণের জন্য নির্মিত আইডিই ব্যবহার করে উত্পাদনশীলতা লাভ আশ্চর্য। যদিও আমার একটি ভয়াবহ স্মৃতি রয়েছে তাই এটি সম্ভবত অন্যের চেয়ে আমার বেশি উপকৃত হয়।
toc777

6

সংকলককে আপনার কোড পরীক্ষা করতে সহায়তা করার আরও ক্ষমতা।

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

EG আমি একটি ফাংশন করতে পারেন

f(int x)

তবে আমি পছন্দ করি

f(int range[-5..25] x)

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


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

3
আপনার পাস্কেল ব্যবহার করা উচিত। আপনি এমন একটি সংজ্ঞা দিতে পারেন যা সংখ্যার একটি স্বেচ্ছাসেবী পরিসীমা কভার করে, যেমন -5..25, যা সংকলক সংকলন সময়ে যাচাই করতে পারে। (যতক্ষণ না আপনি কেবল ধ্রুবককে নিযুক্ত করছেন, ততক্ষণ)
ম্যাসন হুইলারের

1
@ কুগেল: সংকলক বৈশিষ্ট্য বাদে আর কী আছে? এবং ইউনিট পরীক্ষা উত্পাদনের কোডটি পরীক্ষা করবে না। এবং উত্পাদন পরীক্ষা না করা প্রথম যাত্রার পরে সরাসরি নৌকাগুলি ছাড়ার মতো। জ্বালানী সাশ্রয় করতে এবং জাহাজটিকে দ্রুততর করতে।
মার্টিন

1
আমি অ্যাডা ব্যবহার করব, আমি যে প্ল্যাটফর্মটিতে কাজ করছি তার কোনও অ্যাডায়ার সংকলক নেই except এটিতে কেবলমাত্র একটি সি সংকলক রয়েছে, সুতরাং যাইহোক এটি সমস্ত শিক্ষাগত।
রকেটম্যাগনেট

1
আমি ইতিমধ্যে প্রচুর সংস্থান ব্যবহার করেছি তবে ভাষা বৈশিষ্ট্য হিসাবে এটি এবং অন্যান্য জিনিস রাখা আরও ভাল।
রকেটমেগনেট

5

যতটা সম্ভব কিওয়ার্ড সহ ছোট সিনট্যাক্স কারণ ভার্বোজ সিনট্যাক্স শেখা কঠিন এবং পঠনযোগ্যতা সাহায্য করে না।

সবচেয়ে খারাপ উদাহরণ অ্যাডা:

procedure Hello is
begin
  Put_Line("Hello World!");
end Hello;

ফিলার শব্দের মতো, যেমন, .. প্রোগ্রামিং ভাষার জন্য অর্থবোধ করে না।


4
আমি মনে করি সবচেয়ে খারাপ উদাহরণ হ'ল ভাষাগুলি যেখানে আপনি বলছেন public static void
জোয়ে অ্যাডামস

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

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

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

3
@Konrad: এটা সিনট্যাক্স disambguates পারেন, এটা না একটি গর্ত ইত্যাদি বোজানো। is হয় একটি গর্ত ইত্যাদি বোজানো কারণ আদা পারে অনুমতি দিয়েছে procedure Hello begin ... endকোন অস্পষ্টতা রয়েছে।
dan04

4

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

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

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

আপনি যদি কোনও ভাষা ডিজাইনার হন তবে অনুগ্রহ করে আপনার ভাষাটি কোন শিক্ষার ভাষা বা প্রয়োগকৃত ভাষা কিনা তা মনে রাখবেন। এটি আপনার ডিজাইনে আপনি কতটা পরিশুদ্ধি নিয়োগ করতে চান তা নির্ধারণ করবে।


2
হাস্কেলের ফাংশন রচনাটি কোনওভাবে পিছিয়ে কীভাবে? এটি একটি সরাসরি অনুবাদ (f ∘ g)(x) = f(g(x))
জন পুর্ডি

@ জোন পূর্ব: এর অর্থ আপনি তাদের প্রয়োগের বিপরীতে ক্রিয়া লিখতে হবে। উভয় ফর্মে, gপ্রথমে যুক্তি প্রয়োগ করা হয়, তারপরে অনুসরণ করা f। আপনি একটি তালিকা, এটা গ্রুপ সাজাতে, এবং পেতে সেই তালিকার প্রথম আইটেম চান, আপনি লিখতে হবে (map head . group . sort) listবা map head $ group $ sort listবা map head (group (sort list))। সব ক্ষেত্রেই, আপনি অপারেশনগুলি পিছনের দিকে লিখে শেষ করেন। যাইহোক, আমদানি Control.Arrowআপনাকে বলতে দেয় (sort >>> group >>> map head) list, তবে >>>অপারেটরটি আমার কাছে বরং বিশ্রী এবং ভার্বোস দেখাচ্ছে।
জোয় অ্যাডামস

2
আমি জানি, আমি এখনও মনে করি ডান থেকে বামে বোঝা যায়। (map head . group . sort) list"এক প্রকারের প্রতিটি গ্রুপের প্রথম আইটেম" হিসাবে পড়ে list, যা বেশ স্বাভাবিক — এবং আমার কানে, এর চেয়েও বেশি কার্যকরী (sort >>> group >>> map head) list, যা "বাছাইয়ের পরে গোষ্ঠী" নামক পরিবর্তে অপরিহার্যভাবে এবং পশ্চাদপসরণে পড়ে প্রতিটি গ্রুপের প্রথম আইটেমটি গ্রহণ করে। .. list"।
জন পুরী

@JoeyAdams - অপারেটর সৌন্দর্য বরং বিশ্রী এবং বাগাড়ম্বরপূর্ণ - আরো কয়েকটি সাম্প্রতিক কার্মিক ভাষায় ব্যবহার করতে শুরু করেছেন একটি বাম-থেকে-ডান chaining অপারেটর, যা সম্ভবত একটি সামান্য চোখ সহজ করুন ...>>>|>
জুলে

4

যেহেতু আমরা ২০১১ সালে আছি,

  • একটি সম্পূর্ণ সম্পূর্ণ স্পেসিফিকেশন। কোনও আর্কিটেকচার-নির্ভরশীল গর্ত সি এর মতো নয়
  • মাল্টিথ্রেডিং সমর্থন; কেবল সিঙ্ক্রোনাইজেশন বৈশিষ্ট্য (লকস) নয়, এমন ভাষা বৈশিষ্ট্য যা মাল্টিথ্রেডিংকে লুপ লেখার মতো সহজ করে তোলে:

    সমস্ত (ও মাইক্রোলেশনে) {o.someMethod ()}

  • বহু-দৃষ্টান্ত; প্রোগ্রামার, আমাকে সিদ্ধান্ত নিতে দিন যে আমি স্থির ভাষার সংকলন-সময় সুরক্ষা চাই বা গতিশীল ভাষার সংক্ষিপ্ততা, কেস-বাই-কেস বেসে; আমাকে অবজেক্ট ওরিয়েন্টেড ফিচারস, ফাংশনাল ফিচারস ইত্যাদি দিন

  • ধারাবাহিকতা (আমি জানি এটি ধারাবাহিকতা এবং বহু-দৃষ্টিকোণ উভয়ের জন্যই অনেক কিছু জিজ্ঞাসা করছে ...)


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

স্কালার মতো ভাষা (এবং সম্ভবত হাস্কেল? আমি এটি যথেষ্ট জানি না) দৃ strong় স্ট্যাটিক টাইপ সিস্টেম এবং নীরবতা রয়েছে, অনুমিতি টাইপ করার জন্য ধন্যবাদ এবং ফলস্বরূপ।
ফিলোহো

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

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

3

লাইটওয়েট প্রক্রিয়া

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

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

লেজ-পুনরাবৃত্তি জন্য সমর্থন

আমি লেজ পুনরাবৃত্তি জন্য সমর্থন চাই। রানটাইম পরিবেশের জন্যও এটি সমস্যা হতে পারে। যেমন জেভিএমের পুচ্ছ-পুনরাবৃত্তির জন্য সমর্থন নেই।

সহজ বিতরণ প্রোগ্রামিং

আমি পাঠাতে জন্য সমর্থন আছে চাই ( ! ) এবং গ্রহণ Erlang একই Netword অন্যান্য মেশিনে চলমান অ্যাপ্লিকেশনের অংশ প্রিমিটিভের। এটি স্কেলযোগ্য অ্যাপ্লিকেশন যেমন বিতরণ করা ডেটাস্টোরগুলি তৈরি করা সহজ করে তোলে। ভাষায় অন্তর্নির্মিত যে সিরিয়ালাইজেশনের সাথে যুক্ত করাও এরলংয়ের মতো খুব সহায়ক। এবং জাভা হিসাবে না আমি নিজে এটি করতে হবে।



স্কালায় লেজ পুনরাবৃত্তি হয় এবং এটি জেভিএম-এ সংকলিত হয়। আইবিএম জাভা সংকলক খুব সহজেই লেজ পুনরাবৃত্তি করতে পারে - কখনও কখনও।
মার্টিন

3

রূপক সুবিধার।

বিশেষ ফর্ম সীমাবদ্ধ

পাইথনে এটি কোনও বিল্টিন ফাংশন না ছাপানোর উপযুক্ত কারণ নেই। এটি প্যারেন্সের সাথে কিছু না করার জন্য ব্যতীত কোনও ফাংশনের মতো দেখায় এবং কাজ করে।

আমরা কি সত্যিই প্রয়োজন for, foreach, whileএবং তাদের নিজস্ব বিশেষ ফর্ম হিসাবে একে মত। বৈকল্পিক লুপিং ফর্মগুলির সিনট্যাকটিক চিনি সরবরাহ করতে কীভাবে একটি লুপিং নির্মাণ এবং কিছু ডিফল্ট ম্যাক্রোগুলি।

বিশেষ ফর্মগুলির জন্য মেটা-প্রোগ্রামিং

form['if'](test-fn, body-fn)


রুবি সাজানোর লুপিংয়ের জন্য "বিশেষ ফর্মগুলি" রয়েছে, অন্তত এই অর্থে যে পুনরাবৃত্তিযোগ্য বস্তুগুলির সাধারণত একটি পদ্ধতি থাকে eachযা আর্গুমেন্ট হিসাবে কোডের একটি ব্লক নেয়। ( forwhile
রুবিরও

@ মিপাডি: আমি রুবি ব্লক এবং সম্পর্কিত আইডিয়ামগুলির একটি বড় অনুরাগী।
ডায়েটবুদ্ধ

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

@ বেরিন: আমি আসলে ব্যবহার করি এবং পাইথনের ভক্ত যা এটি আরও মজাদার করে তোলে।
ডায়েটবুদ্ধ

এক ধরণের লুপ কোড অস্পষ্ট করে তোলে। উদাহরণস্বরূপ, do..whileশীর্ষে মূল্যায়ন আছে এমন এক ধরণের লুপ থাকলে লুপটি কীভাবে দেখায়? এটি মোটেও ডো-এর মতো দেখায় না।
কিউস

2

নেটওয়ার্ক ক্ষমতা

এমন একটি ভাষা যা কিছু নেটওয়ার্ক সমর্থন ছাড়াই জাহাজগুলি আজকের বিশ্বে বেশ লম্বা।

বেশিরভাগ আসল ওয়ার্ল্ড অ্যাপ্লিকেশনগুলিকে কোনও না কোনও নেটওয়ার্কের মাধ্যমে যোগাযোগ করা দরকার:

  • স্বয়ংক্রিয় আপডেট
  • ডাটাবেস অ্যাক্সেস
  • ওয়েব সার্ভিস

এটি অবশ্যই বিতরণ / ক্লাউড কম্পিউটিং সমর্থনের একটি ভিত্তি।


8
তবে এটি একটি স্ট্যান্ডার্ড লাইব্রেরি বৈশিষ্ট্য হতে পারে ঠিক ঠিক।
ডোনাল ফেলো

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

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

1

আমি এমন একটি প্রোগ্রামিং ভাষা পছন্দ করি যা শিখতে সহজ এবং নতুন জিনিস তৈরির জন্য একত্রিত করা সহজ।

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

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

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

পরিশেষে, ভাষার বাক্য গঠনটি তার ব্যবহারকারীর ইন্টারফেস এবং এর মতো এটি স্পষ্ট, সংক্ষিপ্ত, স্বজ্ঞাত, ব্যবহারযোগ্য সহজ হওয়া উচিত এবং আপনার অভ্যাসকে সম্মান করা উচিত।


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

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

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

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

4
@ ম্যাসন: আমি, এবং অনেক ভাল প্রযুক্তি লেখক (যেমন উইলিয়াম জিনসার) একমত নন। ভার্বোসিটি হ'ল পাঠ্যতার শত্রু, ক্ষয়তা নয়।
কনরাড রুডল্ফ

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

1
আপনার প্রথম পয়েন্টটি আপনার দ্বিতীয়টির সাথে সরাসরি বিরোধ করে।
কিউস

1

বিদ্যমান প্রোগ্রামিং ভাষার একটি বৈশিষ্ট্য যুক্ত করা হচ্ছে। সুতরাং, নতুন ভাষা বি হ'ল পুরানো ভাষা এ প্লাস বৈশিষ্ট্য এক্স।

বিদ্যমান উদাহরণ:

  1. সি যুক্ত শ্রেণি => সি ++
  2. জাভা কিছু জিনিস যোগ করে => সি #

2
এটি একটি বিশাল ওভারসিম্প্লিফিকেশন। এর চেয়ে আরও ভাল উদাহরণ হ'ল সি এবং অবজেক্টিভ-সি এর মধ্যে পার্থক্য।
জন পূর্ব

0

প্রযুক্তি / প্ল্যাটফর্ম / ভাষা / ডাটাবেস ইত্যাদির ক্ষেত্রে এটি বেশিরভাগ সময় কর্মক্ষমতাতে নেমে আসে। ভবিষ্যতে অনেক আজকের সফ্টওয়্যার একটি গ্রাফিক্যাল ভাষা ব্যবহার করে ডিজাইন করা হতে পারে যেহেতু আমাদের কাছে আরও বেশি গণনামূলক শক্তি রয়েছে।

আমি সেই দিনের জন্য আশা করি যখন আমাদের কাছে কম্পিউটেশনাল শক্তি এবং এমন একটি ভাষা রয়েছে যেখানে আপনি নিজের অ্যাপ্লিকেশনটি ডিজাইন করেন এবং আপনাকে ভাষার বিবরণ সম্পর্কে চিন্তা করতে হবে না

আপডেট: আমি এ জাতীয় ভাষার ল্যাভভিউতে একটি লিঙ্ক প্রেরণ করি

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


3
কম্পিউটারগুলি ইতিমধ্যে এটি করার জন্য যথেষ্ট শক্তিশালী। এটি কেবল ব্যবহারিক নয়, কারণ আপনাকে কোনও কারণে বা অন্য কোনও কারণে কোডের মধ্যে নামতে হবে ।
জেরেমি হিলার

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

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

1
@ আমির: তাহলে দয়া করে ব্যাখ্যা করুন কেন সফ্টওয়্যার বিকাশ চালানোর জন্য কম্পিউটারগুলিকে "গ্রাফিকাল প্রোগ্রামিং" করার জন্য আরও শক্তিশালী হওয়া দরকার?
জেরেমি হিলার

7
@ আমির: আপনি আরও একটি মৌলিক সাথে প্রযুক্তিগত সীমাবদ্ধতা বিভ্রান্ত করছেন। আমাদের অনেকগুলি গ্রাফিকাল কম্পিউটারের ভাষা না থাকার কারণটি হ'ল আমরা সেগুলি কীভাবে ভাল করতে হয় তা জানি না (এবং সেগুলি ভালভাবে করা যায় কিনা তাও জানি না)। আমি ল্যাবভিউ সম্পর্কে সচেতন এবং এর মধ্যে জটিল জিনিসগুলি করা বা সহজ জিনিসগুলি পরিবর্তন করার বিষয়ে যথেষ্ট বিচক্ষণ শুনেছি। এ জাতীয় ভাষা ডিজাইনের জন্য আমাদের আরও শক্তিশালী কম্পিউটারের প্রয়োজন নেই, তাই এগিয়ে যান এবং এই জাতীয় অনুমানের ভাষায় কিছু নমুনা প্রোগ্রাম স্কেচ করার চেষ্টা করুন।
ডেভিড থর্নলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.