সি কোড ট্রান্সলেটিং একটি খুব সুপ্রতিষ্ঠিত অভ্যাস। ক্লাস সহ মূল সি (এবং প্রথম দিকে সি ++ বাস্তবায়ন, তারপরে সিফ্রন্ট নামে পরিচিত ) সফলভাবে তা করেছে। লিস্প বা স্কিমের বেশ কয়েকটি বাস্তবায়ন সেগুলি করছে, উদাহরণস্বরূপ চিকেন স্কিম , স্কিম 48 , বিগলু । কিছু লোক প্রোলোগ সি-তে অনুবাদ করেছিলেন । এবং মোজার্টের কয়েকটি সংস্করণও রয়েছে (এবং ওকামাল বাইটোকোড সিতে সংকলনের চেষ্টা করা হয়েছে )। জে.পাইট্রাটের কৃত্রিম বুদ্ধিমত্তা সিএআইএ সিস্টেমটি বুটস্ট্র্যাপ করে এটির সমস্ত সি কোড তৈরি করে। জিটিকে সম্পর্কিত কোডের জন্য ভালা সিতেও অনুবাদ করে। কুইনেনিকের বই লিসপ ইন স্মল পিসস অনুবাদ সি সম্পর্কে কিছু অধ্যায় আছে।
সি তে অনুবাদ করার সময় সমস্যাগুলির মধ্যে একটি হ'ল লেজ-পুনরাবৃত্তি কল । সি স্ট্যান্ডার্ড গ্যারান্টি দেয় না যে কোনও সি সংকলক তাদের যথাযথভাবে অনুবাদ করছে ("যুক্তি দিয়ে ঝাঁপ দাও", যেমন কল স্ট্যাক না খাওয়া), এমনকি কিছু ক্ষেত্রে, জিসিসির সাম্প্রতিক সংস্করণগুলি (বা ক্ল্যাং / এলএলভিএম) সেই অপ্টিমাইজেশনটি করে ।
আরেকটি বিষয় হ'ল আবর্জনা সংগ্রহ । বেশ কয়েকটি বাস্তবায়ন কেবল বোহম রক্ষণশীল আবর্জনা সংগ্রহকারী (যা সি বান্ধব ...) ব্যবহার করে। আপনি যদি আবর্জনা কোড সংগ্রহ করতে চেয়েছিলেন (যেমন বেশ কয়েকটি লিস্প বাস্তবায়ন যেমন, এসবিসিএল) যা দুঃস্বপ্ন হতে পারে (আপনি dlclose
পজিক্সে যেতে চান )।
তবুও আরেকটি সমস্যা প্রথম শ্রেণির ধারাবাহিকতা এবং কল / সিসি নিয়ে কাজ করছে । তবে চতুর কৌশলগুলি সম্ভব (চিকেন স্কিমের ভিতরে দেখুন)। কল-স্ট্যাক অ্যাক্সেস করতে প্রচুর কৌশল অবলম্বন করতে পারে (তবে জিএনইউ ব্যাকট্র্যাস ইত্যাদি দেখুন))। ধারাবাহিকতার অ र्थোগোনাল অধ্যবসায় (যেমন স্ট্যাক বা থ্রেড) সিটিতে কঠিন হবে would
ব্যতিক্রম হ্যান্ডলিং প্রায়শই লংজ্যাম্প ইত্যাদিতে চালাক কল নির্গত করার বিষয় ...
আপনি যথাযথ #line
দিকনির্দেশনা (আপনার নির্গত সি কোডে) উত্পন্ন করতে চাইতে পারেন । এটি বিরক্তিকর এবং প্রচুর gdb
পরিশ্রম লাগে (আপনি এটি চাইবেন উদাহরণস্বরূপ আরও সহজে- ডিবেজযোগ্য কোড তৈরি করা)।
আমার মেল্ট লিসি ডোমেন নির্দিষ্ট ভাষা (কাস্টমাইজ করতে বা জিসিসি প্রসারিত করতে) সিতে অনুবাদ করা হয়েছে (আসলে দরিদ্র সি ++ তে এখন)। এটির নিজস্ব প্রজন্মের অনুলিপি আবর্জনা সংগ্রহকারী রয়েছে। (আপনি দ্বারা আগ্রহী হতে পারে Qish বা Ravenbrook এমপিদের )। প্রকৃতপক্ষে, হাতে লিখিত সি কোডের চেয়ে মেশিন উত্পন্ন সি কোডে প্রজন্মের জিসি সহজ (
আমি জেনুইন সি ++ কোডে অনুবাদ করে এমন কোনও ভাষা বাস্তবায়ন জানি না , যেমন প্রচুর এসটিএল টেম্পলেট ব্যবহার করে এবং আরআইআই আইডিয়োমের সম্মান করে সি ++ কোড নির্গত করতে কিছু "সংকলন-সময় আবর্জনা সংগ্রহ" কৌশল ব্যবহার করে । (দয়া করে আপনার জানা থাকলে জানাবেন)।
আজ মজার বিষয়টি হ'ল (বর্তমান লিনাক্স ডেস্কটপগুলিতে) সি সংকলকগুলি সি তে অনুবাদ করা একটি ইন্টারেক্টিভ শীর্ষ স্তরের রিড-ইভাল-প্রিন্ট-লুপটি প্রয়োগ করতে যথেষ্ট দ্রুত হতে পারে : আপনি প্রতিটি ব্যবহারকারীর সি সি (কয়েকশ লাইন) নির্গত করবেন you'll মিথস্ক্রিয়া, আপনি fork
এটি একটি ভাগ করা অবজেক্টে এর একটি সংকলন, যা আপনি তারপর করতে হবে dlopen
। (মেল্ট এটি প্রস্তুত যা সমস্ত প্রস্তুত, এবং এটি সাধারণত যথেষ্ট দ্রুত হয়)। এগুলি হতে পারে এক সেকেন্ডের কয়েক দশমাংশ এবং শেষ ব্যবহারকারীদের দ্বারা গ্রহণযোগ্য হতে পারে।
সম্ভব হলে, আমি সি অনুবাদ করব, বিশেষত সি ++ তে নয়, কারণ সি ++ সংকলন ধীর।
আপনি আপনার ভাষা বাস্তবায়ন হয়, আপনি এছাড়াও (গ কোড emitting পরিবর্তে) কিছু বিবেচনা করতে পারেন জে আই টি JIT মত লাইব্রেরি libjit , গনুহ বাজ , asmjit , অথবা এমনকি LLVM বা GCCJIT । আপনি যদি সি অনুবাদ করতে চান, আপনি কখনও কখনও tinycc ব্যবহার করতে পারেন : এটি খুব শীঘ্রই উত্পাদিত সি কোড (এমনকি মেমরিতেও ) মেশিন কোডটি ধীর করতে সংকলন করে । তবে সাধারণভাবে আপনি জিসিসির মতো বাস্তব সি সংকলক দ্বারা করা অপ্টিমাইজেশনের সুবিধা নিতে চান
আপনি যদি সি ভাষায় অনুবাদ করেন তবে উত্পন্ন সি কোডের পুরো এএসটি প্রথমে মেমোরিতে তৈরি করতে ভুলবেন না (এটি প্রথমে সমস্ত ঘোষণা, তারপরে সমস্ত সংজ্ঞা এবং ফাংশন কোডও জেনারেট করে তোলে)। আপনি এইভাবে কিছু অপ্টিমাইজেশন / নরমালাইজেশন করতে সক্ষম হবেন। এছাড়াও, আপনি বেশ কয়েকটি জিসিসি এক্সটেনশনে আগ্রহী হতে পারেন (উদাহরণস্বরূপ গণিত গোটো)। আপনি সম্ভবত বিশাল সি ফাংশন উত্পাদন করা এড়াতে চাইবেন - যেমন উত্পাদিত সি'র এক লক্ষ হাজার লাইন - (আপনি তাদেরকে আরও ছোট টুকরো টুকরো টুকরো করে ভাগ করুন) যেহেতু সি সংকলকগুলি খুব বড় সি ফাংশনগুলির সাথে অত্যন্ত অসন্তুষ্ট (বাস্তবে এবং পরীক্ষামূলকভাবে,gcc -O
বৃহত ফাংশনগুলির সংকলনের সময়টি ফাংশন কোড আকারের বর্গক্ষেত্রের সমানুপাতিক)। সুতরাং আপনার উত্পন্ন সি ফাংশনের আকারকে কয়েক হাজার লাইনে সীমাবদ্ধ করুন।
লক্ষ করুন যে ক্ল্যাং (থ্রু এলএলভিএম ) এবং জিসিসি ( থ্রো লিবিজিসিজিট ) সি এবং সি ++ সংকলকগুলি এই সংকলকগুলির জন্য উপযুক্ত কিছু অভ্যন্তরীণ উপস্থাপনা নির্গত করার জন্য কিছু উপায় সরবরাহ করে তবে এটি করা সি (বা সি ++) কোডের চেয়ে শক্ততর (বা না) হতে পারে, এবং প্রতিটি সংকলক নির্দিষ্ট।
যদি সি ভাষায় অনুবাদ করার জন্য কোনও ভাষা নকশা তৈরি করে থাকেন তবে আপনার ভাষার সাথে সি এর মিশ্রণ তৈরি করতে আপনি সম্ভবত কয়েকটি কৌশল (বা নির্মাণ) করতে চান। আমার ডিএসএল ২০১১১ এর কাগজ মেল্ট: জিসিসি সংকলকটিতে এম্বেড করা একটি অনুবাদকৃত ডোমেন নির্দিষ্ট ভাষা আপনাকে কার্যকর ইঙ্গিত দেবে।