বাইট কোড বুনন বনাম লিস্প ম্যাক্রো


11

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

আমি যে লাইব্রেরিগুলির সন্ধান করছিলাম তার উদাহরণগুলি অ্যাসপেক্টজে, পোস্টশার্প এবং সিসিল হবে।

এমন কিছু আছে যা একজনের সাথে করা যায় এবং অন্যটির সাথে করা যায় না? তারা কি আসলে একই সমস্যাগুলি সমাধান করে বা আমি আপেল এবং কমলা তুলনা করছি?


2
বাইট কোড বুনন একটি কাজের আশেপাশে যখন আপনার একটি গতিশীল ভাষার প্রয়োজন হয় তবে স্ট্যাটিকালি টাইপ করা ভাষার সাথে আটকে থাকেন
কেভিন ক্লাইনে

2
@ কেভিঙ্কলাইন আপনি কি এই পুরানো লড়াই শুরু করার জন্য গুরুত্ব সহকারে চেষ্টা করছেন?
জোনাথন হেনসন

উত্তর:


10

বাইট কোড বুনন এবং ম্যাক্রো দুটি ভিন্ন জিনিস।

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

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


এটি এওপি বাস্তবায়নের একটি মূল উপায় এটি উল্লেখ করার জন্য +1।
জনাথন হেনসন

এবং লেনদেন ... আমাদের লেনদেন ভুলবেন না।
জোনাথন হেনসন

3
এলআইএসপি ম্যাক্রো 'কী-স্ট্রোক রেকর্ড করার উপায়' এর মতো কিছুই নয়।
কেভিন কেল

1
আইএমও উত্তরটির জন্য কিছু মৌলিক ধারণা অনুপস্থিত রয়েছে, সেগুলি হতে পারে: এএসটি, প্রতিবিম্ব, মেটাচক্রিয়ারিটি।
AndreasSchainert

2
@ আন্ড্রেয়াসচেইনার্ট: ওপি এই সমস্ত বিষয়ে কোনও জিজ্ঞাসা করেনি। এটি কোনও প্রবন্ধ নয়; এটি ওপি-র প্রশ্নের উত্তর মাত্র।
রবার্ট হার্ভে

5

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

জাভা বাইট-কোড বুনন প্লাগইনগুলি JVM স্তরে কাজ করে। যদিও অনেক জাভা প্রোগ্রামাররা অন্যের লিখিত বাইট-কোড বুনন প্লাগইন ব্যবহার করতে পারেন, খুব কম জাভা প্রোগ্রামাররা তাদের নিজস্ব বাইট-কোড বুনন প্লাগইন লিখেন।

জাভা সংকলক প্লাগইনগুলির কিছু কাজ খুব সহজেই গতিশীল ভাষায় সম্পন্ন হয়। ফাংশন-কল ইন্টারসেপশন বিশেষত সহজ।


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

@ মুর্তালাপম্যান: বাইট-কোড পরিবর্তনের মাধ্যমে জাভা এবং সি # তে সম্ভব হেরফেরগুলি সরাসরি লিস্প, রুবি, পাইথন, লুয়া, জাভাস্ক্রিপ্টের মতো ভাষায় করা যেতে পারে ... সম্ভবত এলআইএসপি ম্যাক্রো বাইটের সাহায্যে যা কিছু করতে পারে তা সম্ভব হয় -কোড ম্যানিপুলেশন, কিন্তু বাস্তবে এটি ঘটে না।
কেভিন কেইন

4

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

আপনি যদি ফাংশন কলগুলি সংশোধন করতে চান তবে লিস্প সাধারণত দুটি প্রক্রিয়া ব্যবহার করে:

  • দেরী বাঁধাই প্রতীক। আপনি প্রতীকে আবদ্ধ ফাংশনটি পরিবর্তন করতে পারেন। প্রতিটি ফাংশন কলিং যা প্রতীকের মধ্য দিয়ে যায়, তারপরে নতুন ফাংশনটি ব্যবহার করে।

  • লিস্প বাস্তবায়ন কখনও কখনও 'পরামর্শ' নামে একটি বৈশিষ্ট্য সরবরাহ করে। এটি কলগুলির আগে, এর আগে বা তার কাছাকাছি সময়ে কোড সম্পাদন করতে দেয়। উদাহরণস্বরূপ লিস্প ওয়ার্কসে: পরামর্শ

সুতরাং আপনি নিম্ন স্তরের কোড কারসাজি ছাড়াই কলগুলি বিরতি দিতে পারেন।

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