আপনি কিভাবে একটি প্রোগ্রামিং ভাষা ডিজাইন করবেন? [বন্ধ]


41

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


12
এই প্রশ্নটি খুব অস্পষ্ট। ভাষার উদ্দেশ্য নির্ধারণ না করা পর্যন্ত ভাষার বৈশিষ্ট্যগুলি সত্যই আলোচনা করা যায় না।
blucz

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

3
আমি একটি পদ্ধতির সাহায্যে খুব উচ্চ-স্তরের ভাষা তৈরি করব: সর্বজনীন শূন্য DoWhatIMeant ();
ডেভ 18

6
আদর্শ প্রোগ্রামিং ল্যাঙ্গুয়েজ? ... আমি আমার মন পড়ার সংকলকটি পেতে পারি এবং ঠিক কীভাবে এটি চাই তা একটি প্রোগ্রাম উত্পন্ন করার জন্য আমি :) :) কিছুটা সময় নিতে পারে তবে এটি মূল্যবান হবে।
ওয়াল্টারজে 89

2
সংকলন এবং ব্যাখ্যা হ'ল ... ভাল, সংকলক বা দোভাষী (দুহ) ভাষা নয়। সমস্ত ভাষা সংকলক বা দোভাষী দ্বারা প্রয়োগ করা যেতে পারে। এবং প্রকৃতপক্ষে, প্রায় সবগুলিই হ'ল। সেখানে রুবি, পাইথন ECMAScript, পিএইচপি জন্য কম্পাইলার হয়, সেখানে সি, সি ++, জাভা, Haskell, ... জন্য দোভাষী হয়
Jörg ডব্লিউ Mittag

উত্তর:


55
  • আমি অবশ্যই মনে করি যে কার্যকরী প্রোগ্রামিং ভাষাগুলি ধরা পড়বে, তাই আমার ভাষাটি কার্যকরী হবে। কার্যকরী প্রোগ্রামিং সহ টিমিংয়ের প্রভাবগুলি দেখুন

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

  • আমি আরও মনে করি যে ওওপি ব্যর্থ হয়েছে, বস্তুর মধ্যে যোগাযোগকে অ্যাসিঙ্ক্রোনাস হিসাবে ধরে নেওয়া হয়েছিল । সুতরাং আমি মনে করি আমাদের অপরিবর্তনীয় বার্তা সহ বার্তা প্রেরণ করা দরকার need প্রেরণ এবং ভুলে যান। অভিনেতা মডেল হিসাবে। দেখুন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং: ভুল পথে?

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

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

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


4
আসলে স্কেলার মতো শোনাচ্ছে, দুর্দান্ত ইউআই লাইব্রেরি বাদে except
এপি-ইনাগো

আমি ভেবেছিলাম স্কালায় মেসেজ পাসিং এবং অভিনেতা রয়েছে। আমার ধারণা, ওওপির সাথে এটি কীভাবে সম্পর্কিত।
এপি-ইনাগো

@ জোনাস: দুর্দান্ত দেখাচ্ছে :) অভিনেতার মডেল সম্পর্কে আমি খুব বেশি কিছু জানি না, গো গরোটাইনগুলির সাথে গো কি করেছিল এটির মতো?
ম্যাথিউ এম।

1
কেবলমাত্র আমি সন্দেহ করি যা স্থির টাইপিং। আমি অবশ্যই দুর্বল টাইপিংয়ের পরিবর্তে শক্তিশালী পছন্দ করব, তবে কখনও কখনও স্থির টাইপিং খুব সীমাবদ্ধ থাকে। তবে আমি হাস্কেলের সাথে পরিচিত নই, এবং আমি এর টাইপিং সিস্টেম সম্পর্কে কেবল ভাল জিনিস শুনেছি :)
সাকিস্ক

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

22

দ্রষ্টব্য: আমি এই পোস্টের বৈশিষ্ট্যগুলি বর্ণনা করতে সি-এর মতো সিনট্যাক্স ব্যবহার করেছি, তবে যতক্ষণ না এটি সমস্ত কীওয়ার্ডের সিএপিএস হওয়ার মতো হাস্যকর কিছু না ততক্ষণ আমি সিনটেক্সটি সম্পর্কে নিজেই পছন্দ করি না।

1. টাইপিং সিস্টেম

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

//variable declarations
int anInt = 42 //anInt is now irrevocably an integer and assigning another type to it is an error
vartype aVariable = 42 //aVariable is currently an integer, but any type can be assigned to it in the future

//function definitions
int countElements(Collection c)
{
  return c.count();
} 

//c HAS to be a collection, since countElements doesn't make sense otherwise

void addToCollection(Collection& c, vartype v) 
{
  c.append(v)
}

//c is passed by reference here

2. সংকলিত বনাম ব্যাখ্যা করা

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

3. বন্ধ

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

৪. অবজেক্ট-ওরিয়েন্টেড

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

int main(string<> args=null)
{
  printf("hello, world"); 
  return 0;
}

// this code also demonstrates two other features,
// default arguments for functions (not explained further)
// and immutable lists like string<> (see 6. Built-in datatypes)

5. নেমস্পেসস

নেমস্পেসগুলি একটি ভাল জিনিস। খুব অল্প জিনিস গ্লোবাল নেমস্পেসে প্রবেশ করা উচিত। তবে যদি আপনাকে অবশ্যই বিশ্বব্যাপী নেমস্পেসে স্টাফ রাখতে হয় তবে আপনি (আলা সি ++) করতে পারেন।

6. অন্তর্নির্মিত ডেটাটাইপগুলি

ভাষাটি অন্তর্নির্মিত ডেটাটাইপ হিসাবে নিম্নলিখিত রচনাগুলি থাকতে হবে:

  • একটি intডেটাটাইপ বা প্রকার। যদি কেবল একটি intপ্রকার থাকে তবে এর সীমাহীন ব্যাপ্তি থাকা উচিত। যদি আরও কিছু থাকে তবে সীমিত আকারের প্রকারটি সর্বাধিক আকারের সহিত সংখ্যার ফলাফল ধারণ করতে সক্ষম ক্ষুদ্রতম প্রকারের মধ্যে অন্তর্নিহিত আপসকাস্টিং থাকা উচিত ।
  • একটি একক অন্তর্নির্মিত বাইনারি floatটাইপ, যা একটি আইইইই 754 এর সমানdouble
  • একটি পরিবর্তনীয় listপ্রকার যা দ্বিগুণ লিঙ্কযুক্ত তালিকা বা প্রতিটি উপাদানকে সংলগ্ন মেমরির হোল্ড পয়েন্টার হিসাবে কার্যকর করা হয়
  • একটি অপরিবর্তনীয় listপ্রকার যা অ্যারের মতো কাজ করে তবে যার আকার তৈরির পরে পরিবর্তন করা যায় না
  • পরিবর্তনীয় এবং অপরিবর্তনীয় stringপ্রকারের সাথে ডিফল্ট অপরিবর্তনীয়।
  • একটি mapবা dictটাইপ যা পরিবর্তনযোগ্য, এবং অপরিবর্তনীয় কীগুলি এবং পরিবর্তনীয় এবং / বা পরিবর্তনযোগ্য মানগুলি ধারণ করে।
  • অন্তর্নির্মিত সংগ্রহের ধরণেরগুলি পূর্বনির্ধারিত অনুসারে একজাতীয় হওয়া উচিত, তবে vartypeপ্রয়োজনে এটি ডি হতে পারে
  • এক booleanপ্রকার
  • একটি nullবা noneটাইপ যা যে কোনও ধরণের ভেরিয়েবলের জন্য বরাদ্দ করা যেতে পারে।
  • পরিবর্তনীয় এবং অপরিবর্তনীয় setপ্রকারের
  • এক decimalপ্রকার যা দশমিক ভাসমান পয়েন্ট ভেরিয়েবল প্রয়োগ করে
  • একটি fixedপ্রকার, যা একটি নির্দিষ্ট পয়েন্ট নম্বর প্রয়োগ করে

decimal, floatএবং fixedধরনের ভাগ করা উচিত সঠিক একই সার্বজনীন ইন্টারফেস (হয় উত্তরাধিকার বা হাঁস টাইপিং এর মাধ্যমে), যার ফলে তাদের স্বচ্ছভাবে প্রেরণ এবং ফাংশন থেকে ফেরত পাঠানো হয়। প্যারেন্ট টাইপ কল করা যেতে পারে real

7. মান এবং রেফারেন্স দ্বারা কল করুন

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

8. পয়েন্টার

ভাষার পয়েন্টার থাকতে হবে এবং পয়েন্টার গাণিতিকের অনুমতি দেওয়া উচিত। পয়েন্টারগুলি কেবল স্থিতিশীলভাবে টাইপ করা যায় (যা দুঃস্বপ্নটি এড়াতে void*)। vartypeপয়েন্টারগুলি সুস্পষ্টভাবে অনুমোদিত নয়। পয়েন্টার এবং পয়েন্টার পাটিগণিত থাকার কারণে ভাষাটি সিস্টেম প্রোগ্রামিং ভাষা হিসাবে গুরুত্ব সহকারে ব্যবহার করা যায়।

9. ইনলাইন সমাবেশ

৮. এর সাথে সংযোগ স্থাপনের ক্ষেত্রে , ভাষাটি সেই পরিস্থিতিতে যেখানে ইনক্লুসিভ প্রয়োজন সেখানে ইনলাইন এসেম্বলি ভাষার কোডের অনুমতি দেওয়া উচিত।

10. সুরক্ষা

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

১১. অপরিবর্তিত আচরণ

স্পষ্টভাবে অনিরাপদ চিহ্নিত চিহ্নিত কোড ব্যতীত প্রোগ্রামটি সকল পরিস্থিতিতে কীভাবে আচরণ করবে তা ভাষার মানদণ্ডে উল্লেখ করা উচিত , অর্থাত, অনিরাপদ ব্লকের বাইরে কোনও অপরিজ্ঞাত আচরণ করা উচিত নয়। এটি আপনাকে একটি व्यवहार्य অ্যাপ্লিকেশন বিকাশের ভাষা হিসাবে ব্যবহার করার অনুমতি দেয়, তবুও আপনাকে এটিতে একটি ওএস লিখতে বলার অনুমতি দেয়।

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


5
: এর "ডি প্রোগ্রামিং ভাষা" দেখে নিন digitalmars.com/d
Wizard79

যতদূর আমি মনে করতে পারি, ডি এর optionচ্ছিক গতিশীল টাইপিং বা বিল্ট-ইন সীমাহীন সীমার পূর্ণসংখ্যার টাইপ নেই। পূর্ণসংখ্যার ধরণের সমস্যা এতটা সমস্যা নয়, তবে dynচ্ছিক ডায়নামিক টাইপিংয়ের অভাব এটিকে একেবারেই অপ্রত্যাশিত করে তোলে।
চিন্ময় কাঁচি

1
আমি সত্যিই decimalএখানে একটি টাইপ যোগ করতে হবে ।
কনফিগারকারী

3
"একটি নাল বা নন টাইপ যা কোনও ধরণের ভেরিয়েবলের জন্য নির্ধারিত হতে পারে” "- বুলিয়ান সহ? :-p
টিমউই

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

7

এইভাবে আমার স্বপ্নের প্রোগ্রামিংয়ের ভাষাটি দেখতে কেমন হবে:

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

ভাল লাগছে। যদিও আমি স্ট্যাটিকালি টাইপ-সেফ ম্যাক্রোগুলি করার কোনও ভাল উপায় দেখিনি।
Jörg ডব্লু মিটাগ

@ জার্গ: নিমারল?
মিসিংফ্যাক্টর

স্মল্টাল্কে সমস্ত নিয়ন্ত্রণ কাঠামো প্রকৃতপক্ষে পদ্ধতি এবং এটি তাদের প্রয়োগে ধারাবাহিকতা ব্যবহার করে না। একজনের অপরের প্রয়োজন হয় না।
ওক

@ ওক, আপনি কি পাইথনকে স্মলটাক এ প্রয়োগ করতে পারেন yield? ব্যবহার করার মতো পরিষ্কার হওয়া উচিত।
মিসিংফ্যাক্টর

ধারাবাহিকতা ছাড়াই একটি ফলন-সদৃশ মেকানিজম ইতিমধ্যে ছোট্টালকে লাইব্রেরি পদ্ধতি হিসাবে প্রয়োগ করা হয়েছে।
ওক

6

আমি এটি অনেকটা সি-এর মতোই ডিজাইন করতাম তবে মাইক্রোসফ্ট আমাকে এতে পরাজিত করে। :)

(অবশ্যই এই যে খনি সম্পর্কে কম চিন্তা করা হত এবং আরও বেশি অপেশাদার))

এটি সংকলিত বা ব্যাখ্যা করা হয়েছে কিনা তা নিয়ে আমি খুব একটা আপত্তি করি না, সুতরাং আমার এই বিটটিকে ন্যায়সঙ্গত করার দরকার নেই।

দৃ strong় স্ট্যাটিক টাইপিংয়ের ক্ষেত্রে, কেন এটি এমনকি ন্যায্যতা কেন প্রয়োজন তা উপলব্ধি করা আমার পক্ষে কঠিন। স্ট্যাটিক টাইপিং এমন একটি বৈশিষ্ট্য যা সংকলন সময়ে বাগগুলি ধরে cat গতিশীল টাইপিং হ'ল বৈশিষ্ট্যের অভাব এবং বাগ টাইম রানটাইম পর্যন্ত স্থগিত করে। আমার ব্যক্তিগত অভিজ্ঞতায় আমার কয়েকটি ব্যবহারের কেস ছিল যেখানে গতিশীল প্রেরণটি বোধগম্য হয়েছিল এবং এটি দরকারী ছিল, সুতরাং এটির জন্য সহজেই ন্যায্য হয়ে যায় get.০ এর আগে আমাকে সি # তে যে কনভলিউশনগুলি দিয়ে যেতে হয়েছিল। সি # 4.0 দিয়ে আমার এটিকে আর প্রমাণ করার দরকার নেই কারণ আমাদের এখন গতিশীল প্রেরণ রয়েছে।

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

আমাকে আর কী ন্যায্য প্রমাণ করতে চান?


+1 ভাল উত্তর! আমি পরে আমার নিজের একটি পোস্ট করব।
চিন্ময় কাঞ্চি

4
সি # একটি শক্তিশালী ভাষা, তবে বাক্য গঠনটি প্রায়ই অগোছালো হয়। আমি মনে করি এটি কারণ এই বৈশিষ্ট্যগুলির অনেকগুলি মূল নকশায় ছিল না।
কেসব্যাশ

সুতরাং "4.0", আমি অনুমান করি।
সি

5

আমি এখানে যে বৈশিষ্ট্যগুলি রেখেছি তা এখানে একটি তালিকা:


সিনট্যাক্সের মতো লিসপ

লিস্প স্টাইল

পেশাদাররা :

  • সহজেই প্রসারিত সিনট্যাক্স। সি-তে কোনও ফোরচ লুপ বাস্তবায়নের চেষ্টা করেছেন? এটা ঠিক সহজ নয়। (মনে মনে, আমি এটা করেছি )।
  • Homoiconicity। আপনি সহজভাবে পারেন(eval "your data files")

কনস :

  • নেস্টেড পোলিশ স্বরলিপি পড়া প্রায়শই শক্ত is

ফাংশনাল প্রোগ্রামিং

হাস্কেল স্টাইল

পেশাদাররা :

  • সহজ সম্মতি, সমস্ত কোড থ্রেড নিরাপদ।

কনস :

  • খাঁটি ফাংশনাল কোডে পার্শ্ব প্রতিক্রিয়াগুলি প্রয়োগ করতে অসুবিধা, যদিও মনডগুলি ভাল কাজ করে বলে মনে হচ্ছে।

শক্তিশালী গতিশীল টাইপিং

পাইথন স্টাইল

পেশাদাররা :

  • গতিশীল টাইপিং পরিষ্কার পাঠযোগ্য কোড তৈরি করে, শক্ত টাইপিং টাইপ ত্রুটিগুলি দূর করতে পারে

বাস্তবায়ন :

সিএল এর মতো ধরণের উপর ভিত্তি করে ফাংশন ওভারলোডিংকে মঞ্জুরি দিন defgeneric:

(define (+ (a <int>) (b <int>))
  (ints-add a b))

(define (+ (a <string>) (b <string>))
  (string-concat a b))

(define (+ a b)
  (add-generic a b))

সংকলনযোগ্য এবং ব্যাখ্যামূলক

পেশাদাররা :

  • সংকলিত হলে পারফরম্যান্স বুস্ট (সাধারণত সত্য, সবসময় নয়)

কনস :

  • ভাষার বৈশিষ্ট্যগুলিকে সীমাবদ্ধ করতে পারে, যদিও এলএলভিএম ভাল ব্যাক হবে।

সিস্টেম প্রোগ্রামিং

সি স্টাইল

পেশাদাররা :

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

কনস :

  • ভাষায় বিমূর্ততা সীমাবদ্ধ করে, গতিশীল টাইপিং প্রায়শই উপযুক্ত হয় না।

স্বাস্থ্যকর ম্যাক্রোস (সিএল স্টাইল এবং স্কিম শৈলী)

পেশাদাররা :

  • ভাষা প্রসারিত করা সহজ, বিশেষত লিসি ™ বাক্য গঠন সহ
  • আমি আগেও বলেছি, তাই না?

কনস :

  • লিসি ™ সিনট্যাক্সের সাহায্যে অনেকগুলি করা হয় না

এটি ভাবতে আসুন, সংকলন এবং সিস্টেম প্রোগ্রামিং বিট ব্যতীত এটি কম-বেশি স্কিমকে সংজ্ঞায়িত করে। এটি প্রায়শই libguile ব্যবহার করে এবং সিটিতে বিটগুলি লিখে কাজ করা যেতে পারে


1
আইওকে এবং সেফ এ একবার দেখুন। এটি আশ্চর্যজনক যে এস-এক্সপ্রেশনগুলির তুলনায় মাত্র এক কিশোর পরিমাণ সিনট্যাক্স যুক্ত করে আরও কত সহজে পঠনযোগ্য ভাষা পাওয়া যায় এবং এখনও পুরো ম্যাক্রো ক্ষমতা রাখে। (মূলত, পরিবর্তে "প্রত্যেক ফাংশন কল একটি তালিকা এবং এতে তালিকা প্রথম শ্রেণীর হল" এটা "সবকিছু একটি বার্তা পাঠাতে হবে এবং বার্তা চেইন প্রথম শ্রেণী"। এর পরিবর্তে যার তালিকার carফাংশন এবং cdrহয় আর্গুমেন্ট, আপনি একটি আছে nameকার ক্ষেত্রটি পদ্ধতি এবং যার argumentsক্ষেত্রটি আর্গুমেন্ট তা যুক্ত করুন object এবং বাসা বাঁধার পরিবর্তে আপনার কাছে prevএবং nextপয়েন্টার ক্ষেত্র রয়েছে))
জার্গ ডব্লু মিটাগ

ক্লোজুরের মতো ঠিক মতো শোনাচ্ছে (ধরে নিচ্ছেন আপনি সিস্টেম প্রোগ্রামিং অংশের জন্য এলএলভিএম-এ নেটিভ কোড জেনারেলেশনের জন্য মজলনির ব্যবহার করেন - github.com/halgari/mjolnir )
মাইক্রা

3

এখানে বেশ কয়েকটি ভাষা রয়েছে যা আমি বেশ ভালই বিবেচনা করি (সি # আমার বর্তমান প্রিয়)। যেহেতু এটি আমার ফ্যান্টাসি ভাষা, আমি এখানে যা চাই তা সত্যিই এখানে:

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

2
"কিক-অ্যাস ডকুমেন্টেশন" পয়েন্টগুলিতে পিএইচপি অন্তর্ভুক্ত করা উচিত: ডি
কোরি

3

সংকলক ইঙ্গিত

আমি ভাষা থেকে নকশার বিষয়ে তেমন কিছুই জানি না বলে আমি আমার কাছ থেকে কথা বলি, তবে আমি মনে করি যে বৈশিষ্ট্যটির বিষয়ে আমি কথা বলছি তাকে অন্য ভাষাগুলির ইঙ্গিত বলা হয় । সংকলক ইঙ্গিত , সম্ভবত?

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

ই: আমি যা জিজ্ঞাসা করছি সে সম্পর্কে স্পষ্ট করে দেওয়া মন্তব্যগুলির উদাহরণটি উল্লেখ করব বা যেখানে ইতিমধ্যে এটি বিদ্যমান রয়েছে তার উদাহরণ উদ্ধৃত করব appreciate


1
আপনি কমন লিস্পে এর কিছু করতে পারেন। উদাহরণস্বরূপ, আপনি সংকলকটি বলতে পারেন যে আমি যুক্তিসঙ্গত আকারের পূর্ণসংখ্যা। একটি দরকারী জিনিস হ'ল, মান safetyএবং speedমানগুলি পরিবর্তিত করে আপনি প্রায়শই হয় সংকলক চেক এবং প্রয়োগ করতে পারেন (সমস্যাগুলি খুঁজতে) বা আপনি যা বলেছেন তা সত্য (এবং দ্রুত কোডটি সংকলন) ধরে নিতে পারেন।
ডেভিড থর্নলি

2

নতুন ধারণা চেষ্টা করার জন্য:

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

// a view pattern (or Active Pattern in F#)
default = \def val: !!val.Type val def

// usage of the pattern
greet = \name<(default "world") `and` hasType Str>:
  p "Hello, \{name}!"

(p "Enter your name", .input).greet // (, ) is a sequence expression, returning the last value

এখানে একটি ব্যাখ্যা:

default =স্টোরেজ সেট করে, \def valদুটি আর্গুমেন্টের সাথে কারিড ফাংশন শুরু val.Typeহয়, একইভাবে Type[val], !!বুলিয়ানতে রূপান্তরিত হয়, এবং বুলিয়ান প্রয়োগ করা যায়, তাই valএবংdef are after it.

f x= f[x]= x.f .f=f[]

এবং ইন greet, এটি ব্যবহৃত হয়েছিল name<(default "world")এবং এর hasType Str>অর্থ প্যাটার্নটি default "world"ব্যবহৃত হবে এবং আবদ্ধ হবে name। ডিফল্ট প্যাটার্ন একটি ডিফল্ট মান নির্দিষ্ট করে। andহ'ল আরেকটি প্যাটার্ন যা দুটি প্যাটার্নকে এক সাথে চেইন করে। defaultযখন প্যাটার্ন ব্যর্থ করতে পারবে না hasTypeব্যর্থ হতে পারে। সেক্ষেত্রে এটি ব্যতিক্রম ছুঁড়ে দেয়।

ভেরিয়েবলগুলি আসলে স্টোরেজ, যা কার্যকরীভাবে পাস করা যায় এবং স্টোরেজ টেবিলগুলি রেফারেন্স হতে পারে, স্কোপগুলি পরিবর্তনের সাথে সাথে তৈরি এবং ধ্বংস হতে পারে।

হ্যাশস এবং এ জাতীয় লুয়া এবং জাভাস্ক্রিপ্টের মতো হবে।

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


1
এটি অ্যারলংয়ের মতো কিছুটা শোনায়, ডায়নামিক টাইপড ক্রিয়ামূলক প্রোগ্রামিং ল্যাঙ্গুয়েজ এবং এতে যোগ হয়েছে একটি বেশ অনন্য সমকালীন ভাষা নির্মাণ const
জোনাস

2

মনে রাখবেন যে আমি জানি কেবলমাত্র ভাষাগুলি হ'ল পিএইচপি এবং জাভাস্ক্রিপ্ট, এবং কোন ভাষা ডিজাইনের আগে আমার আরও কিছুটা শেখা উচিত:

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

বৈশিষ্ট্য:string ফাংশনগুলির একটি সেট রয়েছে , যা বারিগুলির ধারাবাহিক হিসাবে চলকগুলিতে পরিচালিত হয়, তবে পাঠ্য এবং textফাংশনগুলির একটি সেট বোঝে না , যা প্রচুর এনকোডিংগুলি বোঝে এবং ইউটিএফ -8 এবং অন্যান্য মাল্টবাইট স্ট্রিংগুলিতে পরিচালনা করতে পারে। (এবং ভাষার মধ্যে এনকোডিং স্যানিটি চেকস রয়েছে, এমন একটি ফাংশন সহ text.isValidEncoding(text, encoding)যা আপনাকে বলবে যে কোনও বাইট ক্রমটি যদি ত্রুটিযুক্ত এবং পাঠ্য হিসাবে বিবেচনা করা নিরাপদ নয়।

আমি দৃ strong় স্ট্যাটিক টাইপিংয়ের ধারণাটি পছন্দ করি বলে আমি মনে করি তবে আমি এটি কখনও ব্যবহার করি নি, তাই আমি সত্যি বলতে পারি না।


2

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

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


2

একটি ভাল ভাষা একটি ভাষা যা হ'ল:

  • সহজেই যুক্তিযুক্ত (কোন অস্পষ্ট সিনট্যাক্স নয়)
  • আপনাকে নূন্যতম বিকৃতি দিয়ে আপনার ধারণাগুলি প্রকাশ করতে দিন
  • আপনার কাছ থেকে কৌতুকপূর্ণ কৌতূহল বিবরণ লুকান (অপ্টিমাইজেশন / রিসোর্স পরিচালনা)
  • সহজেই সমান্তরালযোগ্য (একাধিক কোর, বিতরণ করা কম্পিউটিং)

এটিকে বৈশিষ্ট্যগুলির তালিকায় পরিণত করা বেশ শক্ত, তবে আমি মনে করি ফাংশনাল প্রোগ্রামিং, প্রাকৃতিক অনুভূতি না থাকা সত্ত্বেও , অত্যাবশ্যক প্রোগ্রামিংয়ের চেয়ে এইটির আরও কাছাকাছি (বিশেষত কৌতুকপূর্ণ কৌটা বিবরণ গোপনে)

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

এই মুহুর্তে, এই তালিকার নিকটবর্তী ভাষা সম্ভবত হাস্কেল, যদিও:

  • এতে রুটিনের অভাব রয়েছে: হাস্কেলের মধ্যে সমান্তরালতা প্রকাশের প্রাকৃতিক উপায় আমি এখনও দেখিনি (যদিও এটি আমার অজ্ঞতা হতে পারে ...)
  • এটি একটি অস্পষ্ট সিনট্যাক্স পেয়েছে: একরকম দেখে মনে হচ্ছে হাস্কেল প্রোগ্রামাররা শব্দের চেয়ে অদ্ভুত অপারেটর ব্যবহার করে সাফল্য অর্জন করে। এটি চতুর মনে হতে পারে তবে কী চলছে তা বোঝার জন্য এটি তেমন সাহায্য করে না।

2

আপনার প্রথম প্রশ্নটির জন্য, "আপনি এটি কীভাবে করবেন" - সংক্ষিপ্ত উত্তর, আমি করব না। এটিকে টানতে আমার কাছে পর্যাপ্ত পার্সার / সংকলক তত্ত্ব নেই। তবে আমি 25 বছর ধরে প্রোগ্রামিং করছি, তাই আমার কিছু ভাগ করার মতামত এবং মতামত রয়েছে।

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

আমাকে প্রদর্শন করার অনুমতি দিন। ধরা যাক একটি ক্লাস হাউসের একটি ডোর সম্পত্তি রয়েছে।

var door = house.Door;

আপনার এখন ডোর উদাহরণের সাথে একটি রেফারেন্স সহ একটি স্থানীয় ভেরিয়েবল রয়েছে।

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

আমার কাছে এটি মূলত ভুল।

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

এই যেমন একটি সরাসরি-এগিয়ে সম্পর্কের মডেল করতে অনেক কাজ মত শব্দ শুরু হয় না? অনেক কোড বজায় রাখতে হবে? মডেলটি বিকশিত হওয়ার সাথে সাথে রিফ্যাক্টরের অনেক কোড?

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

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

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

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

আমি দুর্ঘটনাজনিত রাষ্ট্রের সমস্ত প্রকারগুলিও দেখতে দেখতে চাই।

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

এটি কি অপ্রয়োজনীয় শোনানো শুরু হচ্ছে? এই সমস্ত উন্মাদনার সময়ে আমরা কোন মুহুর্তে সত্যিই দরকারী কিছু অর্জন করেছি? এবং দরকারী দ্বারা আমি বোঝাতে চাইছি, কিছু বাস্তব - এমন কিছু যা শেষ-ব্যবহারকারী বুঝতে পারে এবং তার যত্ন নিতে পারে। দিনের শেষে, আপনি ব্যবহারকারীরা বুঝতে পারে এমন কিছু তৈরিতে আপনি যে ঘন্টা কাটিয়েছিলেন তা হ'ল সত্যই কেবল ব্যয় করা ঘন্টা। অন্য সব কিছুই পার্শ্ব প্রতিক্রিয়া।

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

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

আবার, আমি এমনকি জানি না এটি একটি traditionalতিহ্যবাহী আইডিই দ্বারা সম্পন্ন হতে পারে কিনা, বা এটির জন্য যদি পুরোপুরি নতুন ধরণের ইন্টারফেসের প্রয়োজন হয়।

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

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

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

ভাল, যে শুভকামনা।


1

এটি সম্ভবত একাধিক দৃষ্টান্তের ভাষা হতে পারে, নিম্নলিখিতগুলি সমর্থন করে:

  • কাঠামোগত / পদ্ধতিগত প্রোগ্রামিং
  • অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং
  • ফাংশনাল প্রোগ্রামিং

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

কোড ব্লক চিহ্নিত করতে আমি পাইথনের মডেলটি ইনডেন্টড ব্লক সহ ব্যবহার করব। এটি খুব চতুর এবং পড়া ভাল।

পাইথন থেকে আমি অনেকগুলি ধারণা চুরি করব কারণ পাইথন খুব সুন্দর ভাষা a আমি এটি বিবৃতিতে নেব এবং আমি এর মানচিত্র, তালিকা এবং টিপলগুলি অনুলিপি করব।

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

পাইথন থেকে অনুলিপি ফিরে যান ;-)। আমি পছন্দ করি it'sচ্ছিক প্রক্রিয়া যুক্তিগুলি রাখার উপায় তাই আমার সম্ভবত এটি থাকত। পাইথন তবে পদ্ধতি ওভারলোডিং সমর্থন করে না, আমি এটি চাই।

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

এটি অভ্যন্তরীণ শ্রেণিকে সমর্থন করবে, আসলে, আমি একটি খুব শক্তিশালী অবজেক্ট ওরিয়েন্টেড ভাষা চাই।

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

এটি ইউনিকোড সমর্থন অন্তর্নির্মিত হবে; এই দিন আন্তর্জাতিকীকরণ অনেক গুরুত্বপূর্ণ।

এটি অবশ্যই আবর্জনা সংগ্রহ করা হবে। অভিশাপ আমি নিজেই মেমরি পরিচালনা করাকে ঘৃণা করি; উত্পাদনশীলতার জন্যও ভাল নয়।

শেষ পর্যন্ত, এটি একটি ভাল স্ট্যান্ডার্ড লাইব্রেরি হবে।

বাহ, ঠিক বুঝতে পেরেছি আমি পাইথনকে সত্যই কতটা ভালবাসি।


কেন Interpreted languages also promote platform independance? আমি অনুমান করি যে আরও সংখ্যক ক্রস-প্ল্যাটফর্ম ইন্টারপ্রেটার বরং সংকলক (শতাংশ) রয়েছে, তবে কেন এই বাক্যটি সত্য হওয়া উচিত তা বুঝতে পারি না? আমি মনে করি ক্রস প্ল্যাটফর্মের ক্ষমতা সম্পর্কে তাদের মধ্যে মোটেই কোনও পার্থক্য নেই।
মাহদি

1

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

তারপরে আমি ফিরে গিয়ে এই তালিকাটিতে আতঙ্কিত হয়ে তাকিয়ে দেখি যে আমি এখন এসেছি, এটি যদি এখনই শুরু করতাম তবে কোন ভাষায় আমি কী দিকনির্দেশে যাব সে সম্পর্কে এটি ছিল:

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

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


0

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

  • একটি প্রাক-প্রসেসরের #langনির্দেশনা, প্রোগ্রামিংয়ের জন্য ব্যবহৃত মানব ভাষার প্রাক প্রসেসরকে অবহিত করতে ব্যবহৃত হয়। উদাহরণস্বরূপ: #lang arশব্দটার ব্যবহার সম্ভব হবে فئةপরিবর্তে class, عرفপরিবর্তে def, ইত্যাদি। মানব-ভাষা-নির্দিষ্ট কীওয়ার্ডগুলি স্ট্যান্ডার্ড প্রিপ্রসেসর ফাইলগুলিতে সংজ্ঞায়িত করা হবে।
  • প্রাক-প্রসেসর কিছু optionচ্ছিক কীওয়ার্ডগুলি সরিয়ে ফেলবে যার একমাত্র উদ্দেশ্য কোডটিতে স্পষ্টতা যুক্ত করা। উদাহরণস্বরূপ, এটি class MyClass is composed of {হয়ে ওঠার জন্য "গঠিত" থেকে class MyClass {সরানো হবে, এবং "ইন" def MyMethod(x: Int) as {হয়ে ওঠার জন্য অপসারণ করবে def MyMethod(x: Int) {। কিছু (মানব) ভাষায়, কোডটি বোঝার জন্য আরও বেশি সহজ করে তুলবে, বিশেষত শিক্ষার্থীদের জন্য।
  • সংকলক সম্পত্তি অ্যাক্সেস জন্য উপসর্গ স্বরলিপি ব্যবহার করার অনুমতি দেবে। এটি বেশিরভাগ লাতিন-ভিত্তিক ভাষাভাষীদের জন্য অর্থবোধ করতে পারে না, তবে কিছু অন্যান্য ভাষার ক্ষেত্রে এটি সঠিক ধারণা দেয়। উদাহরণস্বরূপ, আরবিতে সম্পত্তি অ্যাক্সেস সাধারণত প্রিফিক্স হয় اعرض طول اسم محمد, যা print(length(name(Mohammad)))প্রোগ্রামিং- ইংলিশের সমতুল্য । (প্রথম বন্ধনী স্পষ্টতার জন্য।)

আমি বিশ্বাস করি যে প্রাক-প্রসেসর এবং সংকলকের এই ন্যূনতম পরিবর্তনগুলি অ-ইংরাজী স্পিকারগুলিতে প্রোগ্রামিংকে আরও সহজ করে তুলবে।


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

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

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