পাঠযোগ্য সি ++ তে কি উচ্চ স্তরের ভাষা সংকলন করা সম্ভব? [বন্ধ]


12

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

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

এই ইস্যুতে কোন কাজ আছে?


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

2
আপনি কি লিস্প -> সি ++ অনুবাদটি পরিষ্কার সি ++ কোড তৈরি করার কথাটি আশা করছেন, যখন (তর্কযোগ্যভাবে সহজ) সি ++ -> বিধানসভাটি অপঠনযোগ্য (মতামতের বিষয়) সমাবেশ উত্পন্ন করে? যাহাই হউক না কেন সংকলনের লক্ষ্য কে?

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

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

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

উত্তর:


13

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

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

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

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

হ্যাঁ সঠিক. আপনার বস আপনাকে সি ++ লিখতে চান এবং আপনি এটি লিখবেন না। আপনার জীবনবৃত্তান্ত আপডেট করুন এবং একটি নতুন কাজ সন্ধান করুন।


আমি আশা করি আমি আমার জীবনবৃত্তান্ত আপডেট করতে এবং অন্য একটি কাজ সন্ধান করতে পারি। দুর্ভাগ্যক্রমে যখন কাজ = "ছাত্র" এবং বস = "প্রফেসর" তখন এত সরল নয়। এবং সবচেয়ে দুর্ভাগ্যক্রমে, আমার একটি ডিপ্লোমা থাকার কথা। নির্বিশেষে আমি ক্লাসে যাই না, তবে এটি নিজে বাড়িতে শিখি। প্রকৃতপক্ষে আমি ইন্ডাস্ট্রিতে ইতিমধ্যে কাজ করছি এবং আমার জানা স্নাতকদের থেকে বেশি অর্থোপার্জন করা হচ্ছে। এটি ঠিক কিভাবে এটি কাজ করে। দুঃখজনকভাবে। খুশি হ'ল আমার প্রোফেসর আমাকে পাস করতে মেনে নিলেন আমি যদি সি ++ তে জটিল কিছু লিখি। আমি ইতিমধ্যে সি ++ জানি। তাই আমি বরং ভিন্ন কিছু শেখার সুযোগটি নেব (; ভাড়া আলাদা করে রাখুন, দুর্দান্ত উত্তর Thanks ধন্যবাদ।
মাইয়াভিক্টর

@ ডক্কাট: আপনি বিশ্বাস করেন না যে আপনি সি ++ জানেন। প্যারামিটারটির কোনও পদ্ধতি বা ফাংশন রয়েছে কি না তার উপর নির্ভর করে আপনি বিশেষ প্রয়োগের সাথে টেমপ্লেট লিখতে পারেন? আপনি কি Boost.MPL ব্যবহার করে সংকলন-সময় গণনা করেছেন? বুস্ট.ফোরএচ কীভাবে কাজ করে তা আপনি বুঝতে পারছেন? আপনার যদি এটি সি ++ এ করতে হয় তবে আরও উন্নত সি ++ শেখার সুযোগ হিসাবে এটিকে গ্রহণ করুন। এটি আপনার কাজের জন্য আরও ব্যবহারযোগ্য হবে।
জানু হুডেক

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

3

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

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


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

3

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

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

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


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


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