ক্রিয়ামূলক ভাষায় সংকলক লেখার কাজ কেন সহজ? [বন্ধ]


89

আমি এই প্রশ্নটি খুব দীর্ঘকাল ধরে ভাবছিলাম, তবে স্ট্যাকওভারফ্লোতে গুগলে উত্তরটি একইভাবে পাওয়া যায় নি। যদি সেখানে সদৃশ থাকে তবে আমি দুঃখিত sorry

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

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


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

17
লোকেরা, এটা কি আসলেই যুক্তিযুক্ত? নিশ্চয় কারও কিছু অন্তর্দৃষ্টি আছে। আমি নিজেকে জানতে চাই
রবার্ট হার্ভে

আমি মনে করি যে কোনও অত্যাবশ্যকীয় ব্যক্তির পক্ষে কার্যকরী ভাষা ব্যবহারের জন্য কমপক্ষে কিছু ভাল কারণ থাকতে হবে। আমি এমন একটি নিবন্ধ পেয়েছি যা মূলত সেই কার্যকরী ভাষায় নেমে এসেছে যার কোনও পার্শ্ব-প্রতিক্রিয়া এবং এর মতো নেই। তবে এটি আদৌ পরিষ্কার ছিল না। তবে এটি যদি তর্কাত্মক হয় তবে এটি বন্ধ করা বা প্রশ্নের সংস্কার করা ভাল it
wvd

12
কিছু কুলুঙ্গিগুলি ভাষার একটি নির্দিষ্ট স্টাইলের সাথে আরও উপযুক্ত কিনা তা স্বীকার করে নেওয়া কি আসলেই যুক্তিযুক্ত? "ডিভাইস ড্রাইভারদের লেখার জন্য জাভাস্ক্রিপ্টের চেয়ে কেন সি ভাল" তা বিতর্কিত হবে না, আমি ভাবি ...
সিএ ম্যাকক্যান

4
আমি ভেবেছিলাম এটি বিপরীত হবে। আমি "সুপার ছোট সংকলক" পড়ছি এবং এটি সমস্ত জায়গাতে পরিবর্তনশীল রূপান্তর ব্যবহার করে।
রোল্ফ

উত্তর:


102

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

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


এখনও অবধি সম্পূর্ণ উত্তর, আমি এটিকে স্বীকৃত উত্তর হিসাবে চিহ্নিত করব, তবে আমি মনে করি পিট কিরখমের উত্তরটিও ভাল good
wvd

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

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

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

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

38

প্রচুর সংকলক টাস্ক গাছের কাঠামোর সাথে প্যাটার্ন মেলানো।

ওসিএএমএল এবং হাস্কেল উভয়েরই শক্তিশালী এবং সংক্ষিপ্ত বিন্যাসের মিলের ক্ষমতা রয়েছে।

অপরিহার্য ভাষাগুলির সাথে প্যাটার্নের মিলটি যুক্ত করা আরও কঠিন কারণ বিপরীতে প্যাটার্নটির সাথে মিলের জন্য যা কিছু মান মূল্যায়ন বা আহরণ করা হচ্ছে তা পার্শ্ব-প্রতিক্রিয়ামুক্ত থাকতে হবে।


যুক্তিসঙ্গত উত্তরের মতো মনে হচ্ছে, তবে এটি কি একমাত্র জিনিস? উদাহরণস্বরূপ, লেজ রিকার্সনের মতো জিনিসগুলিও কি ভূমিকা পালন করবে?
wvd

এটি প্রকৃত মৃত্যুদন্ডের মডেলের চেয়ে প্রকারের সিস্টেমে ইস্যু করার ইঙ্গিত দেয় বলে মনে হয়। কাঠামোগত ধরণের চেয়ে অপরিবর্তনীয় মানগুলির সাথে জরুরী প্রোগ্রামিংয়ের উপর ভিত্তি করে কিছু সূক্ষ্ম হতে পারে।
ডোনাল ফেলো 25'10

@ ডাব্লুভিডি: টেল রিকার্সন অপটিমাইজেশন একটি বাস্তবায়ন বিশদ, কোনও ভাষার বৈশিষ্ট্য নয়, যা লিনিয়ার পুনরাবৃত্ত ফাংশনগুলিকে পুনরাবৃত্ত লুপের সমান করে তোলে। সি-তে লিঙ্কযুক্ত তালিকায় চলার জন্য একটি পুনরাবৃত্ত ফাংশন যেমন স্কিমের কোনও তালিকায় পুনরাবৃত্তি করায় ততই উপকৃত হবে।
সিএ ম্যাকক্যান

@ ডাব্লুভিডিডি জিসিসি সি-তে অন্যান্য পরিবর্তনীয় রাষ্ট্রের ভাষাগুলির মতো লেজ কল নির্মূলকরণ রয়েছে
পিট

4
@ ক্যাম্যাক্যান: ভাষাটির মানটি যদি টিসিওর গ্যারান্টি দেয় (বা কমপক্ষে গ্যারান্টি দেয় যে কোনও নির্দিষ্ট ফর্মের পুনরাবৃত্ত ফাংশনগুলি কখনও স্ট্যাকের উপচে বা মেমরির ব্যবহারের রৈখিক বৃদ্ধি ঘটাতে পারে না), আমি বিবেচনা করব যে কোনও ভাষা বৈশিষ্ট্য। মান যদি এটির গ্যারান্টি না দেয় তবে সংকলক যেভাবেই এটি করে, এটি একটি সংকলক বৈশিষ্ট্য।
sepp2k

15

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

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

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

/ আমি: আমার জাভা টাস্কগুলিতে কিছুটা কম আনন্দ করে ফিরে যায় ...


4
-1 এর জন্য "যে কোনও সমস্যা সমাধানের জন্য কার্যকরী ভাষা হ'ল সর্বোত্তম সরঞ্জাম।" যদি এটি সত্য হয় তবে আমরা সকলেই এগুলি সর্বত্র ব্যবহার করব। ;)
আন্ড্রেই ক্রোটকভ

15
@ আন্ড্রেই ক্রোটকভ: আজকের দিনের শব্দটি ফ্যাক্সি · তীব্র উচ্চারণ: \ ফা-শেস-শস \ ফাংশন: বিশেষণ ব্যুৎপত্তি: মধ্য ফরাসি ফেসটিক্স, ফেসবুক ঠাট্টা থেকে, লাতিন ফেসিয়া থেকে তারিখ: 1599 1: রসিকতা বা ঠাট্টা করা প্রায়শই অনুপযুক্তভাবে : ওয়াগিগিশ <সবেমাত্র চেহারায় হওয়া>> 2: এর অর্থ হাস্যকর বা মজার: গুরুতর নয় <a facetious remark> প্রতিশব্দ মজাদার দেখুন দেখুন রসিকতা মিস করার শীর্ষে, আপনার যুক্তিটি এখনও ত্রুটিযুক্ত। আপনি ধরে নিচ্ছেন যে সমস্ত লোকই যুক্তিবাদী অভিনেতা, এবং আমি যে ভয় পাচ্ছি তা মোটামুটি অনুমান নয়।
উকো

4
আমি অনুমান করি যে আমি রসিকতাটি মিস করেছি, কারণ আমি বাস্তব জীবনে এমন লোকদের জানি যা পুরোপুরি গুরুত্ব সহকারে বাদে সঠিক কথাটি বলবে। পোয়ের আইন আমি অনুমান করি। tvtropes.org/pmwiki/pmwiki.php/Main/PoesLaw
আন্দ্রে

13
@ আন্ড্রেই: আপনার যুক্তিযুক্ত বিজ্ঞাপনের পপুলামটি ব্যবহার করে : "কারণ যদি সংবেদনশীল অজ্ঞতার চেয়ে ভাল হয় তবে আমরা সকলেই এটিকে সর্বত্র ব্যবহার করব" "
টিম শ্যাফার

9

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


6

আরো দেখুন

এফ # ডিজাইনের ধরণ

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


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

6

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


4

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

মূলত আপনি সর্বাধিক সাধারণ জেনেরিক পার্সারকে কেবল ফাংশন হিসাবে উপস্থাপন করেন এবং আপনার বিশেষ ক্রিয়াকলাপ রয়েছে (সাধারণত উচ্চতর অর্ডার ফাংশন) যা আপনাকে এই ব্যাকরণের জন্য আরও জটিল, আরও সুনির্দিষ্ট পার্সারে রচনা করে pr

পেরের ফ্রেমওয়ার্কগুলি অফ কোর্স করার একমাত্র উপায় নয়।

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