যখন কেউ একটি নতুন প্রোগ্রামিং ভাষা লেখেন, তারা এটিকে কী লিখবেন?


162

আমার অজ্ঞতা ক্ষমা করুন। আমি পিএইচপি-এ ছোঁড়াচ্ছি এবং আমার পা ভেজা ব্রাউজিং এসও পাচ্ছি, এবং এমন প্রশ্ন জিজ্ঞাসা করতে বাধ্য হচ্ছি যা আমি বছরের পর বছর ধরে ভাবছিলাম:

আপনি যখন সম্পূর্ণ নতুন প্রোগ্রামিং ভাষা লেখেন, আপনি কী এতে লিখবেন ?

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

আমার দুর্বল বুদ্ধি দিয়ে, আমি এই আকর্ষণীয় মনে করি ... দয়া করে আমাকে শিক্ষিত করুন!

উত্তর:


193

এটি একটি বোকা প্রশ্ন নয়। এটি একটি দুর্দান্ত প্রশ্ন।

ইতিমধ্যে উত্তর হিসাবে সংক্ষিপ্ত উত্তর হ'ল, "অন্য ভাষা।"

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

তবে আপনি এটিকে আরও পিছনে ঠেলাতে পারেন। প্রথম লেখা প্রোগ্রাম সম্পর্কে কি?

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

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

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

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

এমনকি তারও আগের কম্পিউটার প্রোগ্রামগুলিতে প্লাগ বোর্ডগুলির সাথে শক্ত ওয়্যার্ড থাকতে হয়েছিল !


20
+1, আমি মনে করি এই উত্তরটি আসলে প্রশ্নের চেতনার সাথে খাপ খায়।
stderr

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

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

তুলনামূলকভাবে অসীম সময়ের সাথে সাথে কম্পিউটারগুলিও মানুষের মতো বিবর্তিত হয়েছে।
গৌরব ওঝা

এখন এটি একটি নন-গঠনমূলক মন্তব্য হবে, তবে এটি লিখতে হবে ... এটি সমস্ত আকার, ফর্ম এবং তথ্যগুলিতে একটি উজ্জ্বল উজ্জ্বল উত্তর :-)
লুকা আডেক

23

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


1
কিছু ভাষা পিকোলিস্পের মতো এসেম্বলারে লেখা হয়। ( blog.kowalczyk.info/article/picoLisp-Arc-before-Arc.html )
অধ্যাপক

1
লেক্স / ইয়্যাক (ফ্লেক্স / বাইসন) প্রোগ্রামগুলি সম্পর্কে কী? এগুলি কি সি ভাষায় তৈরি করার জন্য পরিপূরক হিসাবে বিবেচিত হয়?
ডেভ

1
আপনার কাছে সর্বাধিক সাধারণ উত্তরটি প্রমাণ করার মতো কিছু আছে?
রিচার্ডড

আমি এখানে তালিকার মধ্য দিয়ে যেতে শুরু করেছি: google.com/Top/Computers/Programming/Languages/Open_Source তারপরে আমি ঘটনাক্রমে প্রায় 10 টি ভাষাতে আমার সম্পাদক উইন্ডোটি বন্ধ করে দিয়েছি এবং তার মধ্য দিয়ে যাওয়ার অনুপ্রেরণা হারিয়েছি। যাইহোক, এখনও পর্যন্ত প্রায় অর্ধেকটি সিতে প্রয়োগ করা হয়েছিল এবং বাকিগুলি বেশিরভাগ নিজেরাই বুটস্ট্র্যাপ করে।
অধ্যাপক ফ্যালকেন

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

14

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

উইকিপিডিয়া নিবন্ধটি আমি মুরগি এবং ডিমের সমস্যা নিয়ে আলোচনা করি । আমি মনে করি আপনি এটি বেশ আকর্ষণীয় পাবেন।


5
আপনি যখন আরম্ভ করবেন তখন কোনটি সম্ভব নয়।
মাইকেল বর্গওয়ার্ট

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

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

@ লেস- হ্যাঁ বুটস্ট্র্যাপিং একটি আকর্ষণীয় ধারণা।
রিচার্ডড

2
এখানে এলোমেলো মন্তব্য। কারা প্রথমে এসেছিল (মুরগী ​​বা ডিম) সেই বয়স্ক প্রশ্নের উত্তর হ'ল মুরগিটি প্রথম এসেছিল। কারণটি হ'ল কোনও কিছুর পুনরুত্পাদন / প্রতিলিপি তৈরি করতে, আপনার অবশ্যই পুনরুত্পাদন / প্রতিলিপি করার জন্য প্রথমে পুনরুত্পাদনকারী / প্রতিলিপি থাকতে হবে।
মশলাদার উইনি

10

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

ভাষা নকশায় বেশ কয়েকটি "ছোট্ট ভাষা" ব্যবহৃত হয়। লেক্স এবং ইয়্যাক ব্যবহার করা হয় সিনট্যাক্স এবং ব্যাকরণ নির্দিষ্টকরণের জন্য, উদাহরণস্বরূপ, এবং সেগুলি সিতে সংকলন করে (অন্যান্য ভাষার জন্য পোর্ট রয়েছে যেমন- অকামল্লেক্স / অকামালিয়্যাক এবং অন্যান্য অনেক অনুরূপ সরঞ্জাম))

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

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


4

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

আপনি যদি নতুন প্ল্যাটফর্মে স্ক্র্যাচ থেকে শুরু করে থাকেন তবে আপনি ক্রস-সংকলন করতে পারেন: আপনার নতুন প্ল্যাটফর্মের জন্য একটি সংকলক লিখুন, যা জাভাতে বা নেটিভালি x86 এ চলে। আপনার পিসিতে বিকাশ করুন এবং তারপরে প্রোগ্রামটি আপনার নতুন টার্গেট প্ল্যাটফর্মে স্থানান্তর করুন।

সর্বাধিক প্রাথমিক সংকলক সম্ভবত এসেমব্লার এবং সি are


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

2
যদি আপনি কোনও কাজের জন্য একটি অসমাপ্ত ভাষা নির্বাচন করেন তবে এটি আপনার নিজের দোষ। এটি যে কোনও প্রকল্পের জন্যই ঘটতে পারে, কেবল সংকলক / দোভাষী নয়।
ziggystar

4

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

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

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

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

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

[1] বেশিরভাগ জেভিএমগুলি পর্দার আড়ালে অনুবাদ করে তবে তারা সত্যই অনুবাদক নন যে জেভিএম-এর ইন্টারফেসটি "ইনপুট ভাষা -> আউটপুট ভাষা" নয়।


3

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


2
আপনাকে মেশিন কোডটি সংকলন করতে হবে না। এটি সংজ্ঞা অনুসারে সিপিইউয়ের স্থানীয় ভাষা।
স্টু থম্পসন

1
সত্য। আমি যা বলতে চাইছিলাম তা হ'ল "মেশিন কোডটি সমাবেশের ভাষা থেকে তৈরি করুন বা হাত দ্বারা অনুরূপ কিছু"। আমি ভুল হতে পারি, তবে আমি অনুমান করছি যে কিছু লোক কেবল কোডে টাইপ করে সরাসরি বাইনারি / হেক্স হিসাবে টাইপ করুন।
কাইভোসুকলতাজা

2

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

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

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

এডমন্ড গ্রিমলে ইভান্স তার এইচএক্স ভাষার সাথে একই রকম কিছু করেছিল

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


1

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


1

বেশিরভাগ সংকলক হ'ল উইরিটেন সি বা এসি প্রোগ্রামের মতো সি না হলে এসেম্বলি ল্যাং যাওয়ার উপায় তবে স্ক্র্যাচ থেকে নতুন ল্যাং লেখার সময় এবং আপনার কোনও প্রোটোটাইপ ভাষা থেকে ম্যাক্রো লিব বা সোর্স কোড নেই আপনার নিজের ফাংশনগুলি সংজ্ঞায়িত করতে হবে এখন কি ভাষায়? আপনি কেবল মেশিনে psedocode নামক উত্স কোডের একটি ফর্ম লিখতে পারেন এটি ফোর্টরান বেসিক আলগো লিসপের মতো অবজেক্ট ওরিয়েন্টেড স্ট্রাকচারড ল্যাং স্পিক থেকে কোনও বিএনএফ ব্যাকরণের মতো দেখায় image সুতরাং চিত্রগুলি এই ভাষার বাক্য বিন্যাসের অনুরূপ একটি ক্রস কোড লেখার জন্য এটি পিসডো কোড That's


1
আমি বিশ্বাস করি না যে পেসডো কোডটি মেশিনটি পঠনযোগ্য বলে মনে করা হচ্ছে
রিচার্ড টিংল

0

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


0

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

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

আমার নতুন ভাষায় আমি যা করেছি তা এখানে পাওয়া যাবে - http://www.singhajit.com/writing-a-new-programming-language/

আপনি যদি প্রথমবারের মতো কোনও ভাষা লিখছেন তবে সর্বোত্তম এবং আপনার আরও অনেক দীর্ঘ পথ যেতে হবে।


0

সাধারণভাবে প্রোগ্রামিং ভাষাগুলি কী কী?

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

উদাহরণস্বরূপ যদি আমাদের মতো কোনও নির্দেশ থাকে:

11001101

সমাবেশে এটি বলা হবে:

লোড_এ 15

যার অর্থ নিবন্ধের লিখিত সামগ্রীটি মেমোরি অবস্থানের মধ্যে লোড করুন ১৫. আমি যেমন বলেছিলাম যে এটি ট্রানজিস্টরের দুটি রাজ্যের জন্য কম্পিউটার এবং কম্পিউটারের অন্য কোনও কিছুর জন্য 0 এবং 1 বাছাই করার মত একটি কনভেনশন ছিল 50 নির্দেশাবলীর সাথে এইভাবে একটি প্রোগ্রাম রয়েছে, সমাবেশ ভাষা মনে রাখা সহজ হবে। সুতরাং ব্যবহারকারী অ্যাসেম্বলি কোডটি লিখতেন এবং কিছু প্রোগ্রাম (এই ক্ষেত্রে এসেমব্লার) কোডগুলি বাইনারি নির্দেশাবলী বা মেশিন ল্যাঙ্গুয়েজে তারা অনুবাদ করার সাথে সাথে অনুবাদ করবে।

তবে তারপরে কম্পিউটারগুলি প্রতিদিন উন্নত হওয়ার সাথে সাথে আরও নির্দেশাবলীর সাথে আরও জটিল প্রোগ্রামগুলির জন্য জায়গা ছিল, 10000 বলুন।

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

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

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

import mgh
mgh.connect(ip,port.data)...

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

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

এখন আর একটি জিনিস যা আপনি করতে পারেন তা হ'ল এমন একটি প্রোগ্রাম তৈরি করা যা সমস্ত কোডকে সমতুল্য ভাষায় অনুবাদ করতে পারে ঠিক যেমন সি এর সাথে ঘটেছিল তবে এই ক্ষেত্রে প্রোগ্রামটি সরাসরি এটি করতে পারে এবং সেখান থেকে বাকী সমস্ত কাজ সম্পন্ন করবে linker। আমরা জানি যে এই প্রোগ্রামটিকে সংকলক বলা হয়।

সুতরাং আমি যে বিষয়ে কথা বলছি তা হ'ল, কেবলমাত্র কোডটি সিস্টেমটি বোঝে 0,1, সুতরাং কোনওরকমভাবে আপনাকে সেই সিন্ট্যাক্সটি রূপান্তর করতে হবে, এখন আমাদের অপারেটিং সিস্টেমে অনেকগুলি বিভিন্ন প্রোগ্রাম যেমন এসেম্বলার, লিঙ্কার এবং ... আছে আপনাকে বলার জন্য তৈরি করা হয়েছে যে আপনি যদি আপনার কোডটি অ্যাসেম্বলিতে রূপান্তর করতে পারেন তবে তারা বাকীগুলির যত্ন নিতে পারে বা আমি বলেছি আপনি এমনকি আপনার কোডটিকে সেই ভাষায় রূপান্তর করে অন্যান্য প্রোগ্রামিং ভাষার সংকলকগুলিও ব্যবহার করতে পারেন।

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