দুটি ভিন্ন ভাষার সাথে দুটি পৃথক প্রোগ্রামিং কীভাবে থাকবে?


26

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

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

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

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

কোন উত্তরের জন্য আপনাকে ধন্যবাদ।


আমি জানি সুইগ আছে , এটি আপনি যা করতে চান তা মনে হয় তবে আমি এটি ব্যবহার করি নি। সুতরাং আপনি এটি চেষ্টা করুন এবং দেখুন :)।
ব্যবহারকারী 712092

1
দয়া করে নোট করুন আপনার প্রশ্নে দুটি সম্পূর্ণ অপ্রাসঙ্গিক বিষয় রয়েছে, একটি সাধারণ হোস্টে 2 টি প্রক্রিয়া / অ্যাপ্লিকেশনগুলির মধ্যে সাধারণভাবে যোগাযোগ করা হয়, অন্যটি সাধারণ ওয়েব সার্ভার / ক্লায়েন্ট আর্কিটেকচার, ক্লায়েন্টের জেএস এবং সার্ভারে পাইথন ব্যবহার করে।
জোও পিন্টো

আপনি কি এলএএমপি ধারণাটি পর্যালোচনা করেছেন? আপনি ডাটাবেসের মাধ্যমে অনেকগুলি যোগাযোগ করতে পারেন।
এসডসোলার

উত্তর:


28

বিভিন্ন ভাষায় লিখিত কোড বিভিন্ন উপায়ে ইন্টারঅ্যাক্ট করতে পারে।

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

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

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

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


দুর্দান্ত উত্তর। গেম বিকাশের জন্য সাধারণত সি ++ এবং লুয়া বলার মধ্যে করা প্রাথমিক প্রোগ্রামটিতে একজন দোভাষীকে এম্বেড করার জন্য আরেকটি সম্ভাবনা থাকে। বা, গ্রেনস্পানের দশম নিয়মটি দেখুন: en.wikedia.org/wiki/Greenspun%27s_nth_rule
অ্যান্ড্রু

11

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

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

অন্য প্রোগ্রামটি কল করার জন্য যদি আপনাকে একটি প্রোগ্রামের জন্য একটি এপিআই সেটআপ করতে হয় তবে আপনি আরপিসি, (রিমোট প্রসেসি কলস) দেখতে পারেন যা সাধারণত ওএস স্তরে সমর্থিত হয়।

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

মূলত, কোন পদ্ধতিটি আপনার ব্যবহার করা উচিত তা আপনি কী করার চেষ্টা করছেন তার নির্দিষ্টতার উপর নির্ভর করে। আন্তঃ-প্রক্রিয়া যোগাযোগ এবং নেটওয়ার্ক বার্তাপ্রেরণের বিভিন্ন ধরণের বিষয়ে কিছু গবেষণা করুন এবং আপনার প্রয়োজনীয়তার জন্য উপযুক্ত কি হবে তা নির্ধারণ করতে আপনার সক্ষম হওয়া উচিত।


2

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

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


0

বেশিরভাগ সফ্টওয়্যার উপাদানগুলি নির্দেশের শর্তে যোগাযোগ করা উচিত নয় তবে ডেটা প্রেরণ ও গ্রহণ করতে পারে: একটি ডাটাবেসের সাথে যোগাযোগ করুন, জেএসএন / এক্সএমএল অনুরোধগুলি প্রেরণ / গ্রহণ করুন ইত্যাদি etc.


0

আপনার ধরণের সমস্যার উপর নির্ভর করে পাইপগুলির স্ট্যান্ডার্ড শেল ব্যবহার যথেষ্ট হতে পারে (আপনার শেলটিতে টাইপ করুন):

program1 | program2

এইভাবে প্রোগ্রাম 1 এর আউটপুট সরাসরি প্রোগ্রাম 2 এর ইনপুট যায়। অবশ্যই এটি প্রতিটি সমস্যার জন্য কাজ করে না, তবে প্রচুর (অ-ইন্টারেক্টিভ) সমস্যাগুলি এই পদ্ধতির সাহায্যে সমাধান করা যেতে পারে।

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