কীভাবে JVM প্রোগ্রামিং ল্যাঙ্গুয়েজ তৈরি করতে যোগাযোগ করবেন?


94

আমি গতিশীল টাইপড প্রোগ্রামিং ভাষার জন্য সি (লেক্স এবং বাইসন ব্যবহার করে) এর জন্য একটি সংকলক তৈরি করেছি যা লুপগুলিকে সমর্থন করে, ফাংশনগুলির অভ্যন্তরে ডিক্লারেশনগুলি, পুনরাবৃত্ত কলগুলি etc. ইত্যাদি I

আমি এটি আমার নিজের মধ্যবর্তী কোডের পরিবর্তে জাভা বাইটকোডে সংকলনের বিষয়ে ভাবছিলাম।

আমি দেখেছি একটি জেভিএম ভাষা তৈরি সম্পর্কে প্রশ্ন ইতিমধ্যে জিজ্ঞাসা করা হয়েছে , তবে উত্তরটি খুব তথ্যপূর্ণ খুঁজে পাচ্ছি না।

সুতরাং এখানে আমার প্রশ্নগুলি:

  1. আমার ধারণা, জেভিএমের জন্য একটি ভাষা তৈরি করা অবশ্যই জেভিএম স্পেসিফিকেশন বইটি পড়তে হবে, আপনি অন্য কোন বইয়ের পরামর্শ দিতে পারেন (অবশ্যই ড্রাগন বুক ব্যতীত)? আমি সাধারণত জেভিএম ভাষা কীভাবে তৈরি করতে পারি সে সম্পর্কে বই বা টিউটোরিয়াল সম্পর্কে উদ্বিগ্ন, সাধারণভাবে সংকলক নয়।
  2. Jclasslib , bcel , gnu bytecode ইত্যাদির .classমতো ফাইলগুলি পড়তে, লিখতে এবং পরিবর্তন করতে অনেক জাভা গ্রন্থাগার রয়েছে তবে আপনি কোনটি প্রস্তাব করবেন? এছাড়াও, আপনি কি সি লাইব্রেরি সম্পর্কে একই সচেতন সচেতন?
  3. আমি হয়ত অন্য একটি ভাষা দেখার জন্য ভাবছিলাম যা ক্লোজিউর, জাইথন ​​বা জেউবির মতো জেভিএমকে লক্ষ্য করে। তবে এই সমস্ত ভাষা খুব উচ্চ স্তরের এবং জটিল (তাদের জন্য একটি সংকলক তৈরি করতে)। আমি একটি সহজ সরল সন্ধান করছিলাম (এটি অজানা বা অব্যবহৃত থাকলে আমার আপত্তি নেই) প্রোগ্রামিং ভাষা যা জেভিএমকে লক্ষ্য করে এবং এর সংকলকটি মুক্ত উত্স। কোন ধারনা?

উত্তর:


64

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

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

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

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


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

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

উপরে আমার সম্পাদনাটি একবার দেখুন, আপনার যদি কোনও প্রশ্ন থাকে তবে আমি সাহায্য করে খুশি হব।
থিওমেগা

"উত্স-কোড নিজেই" এর লিঙ্কটি নষ্ট হয়ে গেছে। যদিও আমার ধারণা 8 বছর পরে এটি প্রত্যাশিত।
ল্লে ভ্যালিস

@ লেলেভ্যালিস, যদি আমি সমস্ত তথ্য সঠিকভাবে ব্যাখ্যা করি তবে কোডটি এখানে উপস্থিত বলে মনে হচ্ছে: github.com/replimoc/compiler
U880D

15

সর্বশেষ সেমিস্টার আমি একটি "সংকলক নির্মাণ" কোর্সে অংশ নিয়েছি। আমাদের প্রকল্পটি ঠিক আপনি যা করতে চান তা ছিল।

আমি যে ভাষাটি আমার ভাষা লেখার জন্য ব্যবহার করেছি তা হ'ল স্কেলা । এটি একটি জেভিএম-তে চালিত হয় তবে জাভা নয় এমন অনেকগুলি উন্নত বৈশিষ্ট্য সমর্থন করে (এখনও একটি খাঁটি জাভা জেভিএমের সাথে সম্পূর্ণ সুসংগত)।

জাভা বাইটকোড আউটপুট দিতে আমি স্কাল ক্যাফে লাইব্রেরি ব্যবহার করেছি । ভাল নথিভুক্ত এবং আপনাকে কী করতে হবে তা বোঝার জন্য আপনাকে জাভা ক্লাসের গভীরে যেতে হবে না।

বইয়ের পাশে, আমি মনে করি যে কোর্স চলাকালীন আমরা যে ল্যাবগুলি করেছি তার জন্য আপনি প্রচুর ইনফোগুলি খুঁজে পেতে পারেন ।


একটি দুর্দান্ত কোর্সের মত এই শব্দ। আপনি আপনার নোট বা কোড ভাগ করতে আপত্তি করবেন?
পেড্রো

4
কোনও সমস্যা নেই, আমি আমার ব্যাকআপগুলি কোথায় তা যাচাই করব এবং একটি লিঙ্ক এখানে পোস্ট করব যাতে আপনি এটিকে তত্পরতায় ডাউনলোড করতে পারেন।
কামি

4
ঝরঝরে, আমি একটি হ্যান্ডস অন সংকলক কোর্স সন্ধান করছি যা স্ব-অধ্যয়নের জন্য অনলাইনে সমস্ত উপাদান দিয়ে জেভিএমকে লক্ষ্য করে।
নামিন


4

আমি ভাবছিলাম যে অন্য কোনও ভাষা যা জেভিএমকে ক্লোজুর, জাইথন ​​বা জেউবির মতো লক্ষ্য করে। তবে এই সমস্ত ভাষা খুব উচ্চ স্তরের এবং জটিল (তাদের জন্য একটি সংকলক তৈরি করতে)।

পরামর্শ: লুয়া প্রোগ্রামিং ল্যাঙ্গুয়েজে আপনার নজর থাকতে পারে , লুয়াজের মতো এটির জেভিএম বাস্তবায়ন রয়েছে ।

প্রাথমিক, স্ট্রিং, টেবিল, প্যাকেজ, গণিত, আইও, ওএস, ডিবাগ এবং করাউটিন প্যাকেজ, একটি সংকলক , লুজাভা বাইন্ডিংস এবং জেএসআর -233 প্লাগেবল স্ক্রিপ্টিং ইঞ্জিনের জন্য লাইব্রেরি সহ জে 2 এমই এবং জে 2 এস, এর জন্য লেখা হালকা ওজনের , দ্রুত, জাভা কেন্দ্রিক লুয়া দোভাষী বাঁধাই

(লুয়াভাভা যে জেএনআই পদ্ধতির সাথে নেটিভ লিব ব্যবহার করে তা নিয়ে বিভ্রান্ত হওয়ার দরকার নেই))


ধন্যবাদ. আমি দেখব

4

গত সপ্তাহান্তে, আমি আমার খেলনা ভাষাটি JVM- তে পোর্ট করার জন্য নিজেকে একই প্রশ্নটি জিজ্ঞাসা করছিলাম।

আমি তথ্য অনুসন্ধানে কেবল কয়েক ঘন্টা ব্যয় করি, তাই এই রেফারেন্সগুলিকে লবণের দানা দিয়ে নিয়ে যাই।

  • ভাষা বাস্তবায়ন প্যাটার্নস । আমি অ্যান্টলারকে ঘৃণা করি তবে এই বইটি খুব ভাল দেখাচ্ছে। আপনি যদি এন্ট্রলকেও পছন্দ করেন না, তবে "পার্সিং টেকনিক্স P একটি প্রাকটিক্যাল গাইড" ars

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

    অধ্যায় 10 এই পৃষ্ঠাগুলি (দ্রুত আইএমওতে) 30 পৃষ্ঠাগুলিতে কভার করে। তবে অন্যান্য অধ্যায় রয়েছে যা সম্ভবত আপনি আগ্রহী হবেন।

    • 10 বিল্ডিং বাইটকোড দোভাষী
      • 10.1 প্রোগ্রামিং বাইটকোড দোভাষী। ।
      • 10.2 একটি অ্যাসেম্বলি ভাষার সিনট্যাক্স সংজ্ঞায়িত করা
      • 10.3 বাইটকোড মেশিন আর্কিটেকচার। । । । ।
      • 10.4 এখান থেকে কোথায় যাবেন। । । । । । । । । ।
      • P.26। বাইটকোড এসেম্ব্লার । । । । । । । । । ।
      • P.27। স্ট্যাক-ভিত্তিক বাইটকোড ইন্টারপ্রেটার। । ।
      • P.28। নিবন্ধভিত্তিক বাইটকোড ইন্টারপ্রেটার
      http://pragprog.com/titles/tpdsl/language-implementation-patterns
    • লুয়া 5.0 এর বাস্তবায়ন এটি নিবন্ধভিত্তিক বাইকোড মেশিনগুলির সম্পর্কে একটি দুর্দান্ত কাগজ। এমনকি এটির জন্য এটি পড়ুন।

    • ছোট টুকরো টুকরো টুকরো। এই বইটি শিখায় যে কীভাবে 2 টি স্কমি সংকলক সিটিতে সংকলন করা যায় তাই এই বইটি থেকে অনেকগুলি শিক্ষা নেওয়া যায়। আমার কাছে এই বইয়ের একটি অনুলিপি রয়েছে এবং এটি আকর্ষণীয় যে কারও পক্ষে ভাল, লিস্প, তবে আপনার চায়ের কাপটি নাও হতে পারে।

      এটি শব্দার্থবিজ্ঞানের একটি বিস্তৃত বিবরণ এবং লিস্প, স্কিম এবং সম্পর্কিত উপভাষাগুলির সম্পূর্ণ লিস্প পরিবারের ভাষা বাস্তবায়নের জন্য। এটি 11 দোভাষী এবং 2 সংকলক বর্ণনা করে ...

    http://www.amazon.com/Lisp-Small-Pieces-Christian-Queinnec/dp/0521562473

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

বিষয় সম্পর্কে একটি মেইলিং তালিকা রয়েছে, জেভিএম-ভাষা।

আপনি কি কোথাও কোড আপলোড করার পরিকল্পনা করছেন? আমি একবার দেখতে চাই


Are you planning to upload the code to anyplace?আমি যে কোড গর্বিত নই :( ... আমি হয়তো পুরো জিনিস পুনর্লিখন হবে যাই হোক যদি আমি না আমি আপনাকে তা জানাবে আপনার পরামর্শের জন্য আপনাকে অনেক ধন্যবাদ।।।

2

আমি আপনাকে সুপারিশ করব যে আপনি প্রথমে জেভিএম সমাবেশ কীভাবে কাজ করে তা শিখুন, যদি আপনি ইতিমধ্যে এটি জানেন না।

অনেক নির্দেশাবলীর ফর্ম রয়েছে ?name, যদি নির্দেশটি একটি পূর্ণসংখ্যার ধরণের সাথে কাজ করে এবং যদি এটি কোনও রেফারেন্স টাইপের সাথে কাজ করে তবে ?isia

মূলত, জেভিএম কোনও স্ট্যাক মেশিন যার কোনও নিবন্ধ নেই, সুতরাং সমস্ত নির্দেশাবলী সরাসরি স্ট্যাকের ডেটা দিয়ে কাজ করে। আপনি ?push/?popস্থানীয় ভেরিয়েবলগুলি (অফসেট দ্বারা চিহ্নিত স্ট্যাক অবস্থানগুলি) এবং ব্যবহার করে স্ট্যাকের শীর্ষগুলির মধ্যে ডেটা পুশ / পপ ডেটা এবং সরাতে পারেন ?store/?load। আরও কিছু গুরুত্বপূর্ণ নির্দেশাবলী হ'ল invoke???এবং if_???

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

এখানে জেভিএম এর পুরানো সংস্করণটির জন্য একটি নির্দেশিকা রেফারেন্স দেওয়া আছে , এতে কোনও নতুনের চেয়ে কম নির্দেশ থাকতে পারে।


0

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

আপনি একই কৌশলটি ব্যবহার করতে পারেন (যেমন, সি # তে সংকলন) সি এল এল বাইট কোড উত্পন্ন করতে, বা পি-কোড উত্পন্ন করার জন্য প্যাস্কেল সংকলন ইত্যাদি could

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


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

0

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

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