একই ভাষা যুক্ত করে দুটি ভাষায় লিখিত কোডবেস বজায় রাখার কিছু উপায় কী?


10

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

এছাড়াও, আমি নিশ্চিত করতে চাই যে এই কোডটি যখন হাত পরিবর্তন করে, শেষ পর্যন্ত, এটি অবশ্যই নতুন প্রোগ্রামারগুলিকে অভিভূত করবে না।

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

এফওয়াইআই দুটি ভাষা হ'ল সি ++ এবং জাভা। উইন্ডোজ / লিনাক্সের জন্য সি ++ এবং অ্যান্ড্রয়েড সহ "সমস্ত কিছু" এর জন্য জাভা।


3
আপনার কি সত্যিই আবার অন্য ভাষায় এটি প্রয়োগ করতে হবে? শুধু জাভা ব্যবহার করবেন না কেন?
ওলেক্সি

@ ওলেকসি কোডটি যখন জন্মগতভাবে চালিত হয় তখন সর্বোত্তম তাই জাভা ছিল কেবল একটি সমঝোতা যেখানে সি ++ ব্যবহার করা যায় না।
ভিন

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

9
@ অলেকসী যেমন বলেছিলেন - এটি যদি কোনও ড্রোডে জাভাতে গ্রহণযোগ্যভাবে চালিত হয়, তবে আমি কল্পনা করতে পারি না যে পিসির প্রয়োজন হিসাবে (সম্ভবত প্রান্তিক) উন্নতি সি ++ দেবে। আপনি যেমনটি বলেননি যে আপনি পারফরম্যান্স টেস্ট করেছেন, আমি ধরে নিই না, এই ক্ষেত্রে অকাল অপটিমাইজেশনের দুর্গন্ধ ঘটে। জাভাতে লিখুন, পারফরম্যান্স পরীক্ষা চালান, জাভাটিকে অনুকূলিত করুন। কেবলমাত্র তখনই একটি সি ++ পুনর্লিখন বিবেচনা করুন - একটি কোড বেস রক্ষণাবেক্ষণের সময়টি সংরক্ষণ করা, পরিবর্তে অনুকূলকরণে রাখা, অবশ্যই অবশ্যই দুটি কোড বেসগুলি, প্রতিটি কিছুর দুটি সেট (প্রয়োজনীয়তা ব্যতীত) রক্ষণাবেক্ষণ সম্পাদন করবে।
mattnz

@ প্রাইভেটপ্রজেক্ট সংজ্ঞায়িত সেরা রান , উভয় ক্ষেত্রেই (সি ++ বা জাভা) ভাল লিখিত কোড পোর্টেবল হতে হবে

উত্তর:


16

সংক্ষিপ্ত উত্তর: সম্পূর্ণ বাধ্য না হলে এটি করবেন না।

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

আপনি যদি একেবারে এটি না করতে পারেন এবং দুটি কোড বেস থাকতে হবে তবে এখানে তিনটি পরামর্শ দেওয়া হল:

1) ইউনিটি পোর্টেবল সফ্টওয়্যারটির দিকে এগিয়ে যাওয়ার মতো সরঞ্জামের সন্ধান করুন ।

2) কোডের জটিল বিটগুলি ডেটাতে বা কিছু স্ক্রিপ্টিং ভাষায় টানতে চেষ্টা করুন। আপনি যদি স্ক্রিপ্টিং ভাষার সাথে মোকাবিলা করার জন্য মোটামুটি জেনেরিক কোডটি লিখতে পারেন তবে পরীক্ষা করে ডান করে ডান হয়ে নেওয়া আরও সহজ। (বিশেষত যদি এটি অন্য কারও দ্বারা নির্মিত মানক ভাষা হয়)) তারপরে জটিল বিটের জন্য আপনার একটি কোডবেস থাকতে পারে। (আপনি সম্ভবত লুয়া চেষ্টা করতে পারেন যা এম্বেডডাবিলিটির দিকে এগিয়ে রয়েছে))

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

(2) এবং (3) একসাথে ব্যবহার করা যেতে পারে।


4
ভাল দিক. আরেকটি বিষয় ভাবার কথা হ'ল এক সেট রিগ্রেশন টেস্ট লিখতে এবং এর সাথে উভয় বাস্তবায়ন পরীক্ষা করা (যেমন এসডাব্লুআইজি এর মাধ্যমে)।
জেমস ইয়ংম্যান

15

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


4

আপনি এমন একটি ভাষা ব্যবহার করতে পারেন যা মেশিন কোড এবং জাভা বাইট কোডে প্রথমে জাভা এবং সি ++ বা সরাসরি রূপান্তর করে সংকলন করতে পারে। সর্বশেষে আমি পরীক্ষা করেছিলাম যে এলএলভিএম উভয়ের জন্যই ব্যাক-এন্ড রয়েছে

সম্পাদনা করুন: কিছুটা উইকি সার্ফিং আমাকে জিসিজেতে পেয়েছে যা জাভাটিকে মেশিন কোডে সংকলন করতে পারে


4

আমার মতে, একজন প্রোগ্রামারের পক্ষে সবচেয়ে গুরুত্বপূর্ণ নিয়মটি হল, "নিজেকে পুনরাবৃত্তি করবেন না"। আপনি যা পরামর্শ দেন তা এই নিয়মের একটি সুস্পষ্ট লঙ্ঘন।

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

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

  • সি ++ তে সব লিখুন। সি ++ কার্যত যে কোনও প্ল্যাটফর্মে সংকলন করা যায়। যদি কিছু প্ল্যাটফর্মে আপনার জাভাতে মূল অ্যাপ্লিকেশনটির প্রয়োজন হয় তবে আমি অনুমান করব যে কোনও নেটিভ লাইব্রেরি কল করা সম্ভব (জাভাতে আমি খুব বেশি জ্ঞানবান নই, তবে আমি ধরে নিতে পারি যে এটি করা সম্ভব)।

দুটি ভিন্ন প্ল্যাটফর্মে একই অ্যালগরিদম বজায় রাখলে কেবল ব্যথা এবং ত্রুটি হতে পারে।


আমি মনে করি আপনার মতামত অনুসারে অফিসের উত্পাদনশীলতার মামলাতে একটি ভিডিও অপারেটিং সিস্টেম থাকা উচিত, একটি ভিডিও প্লেয়ার সফ্টওয়্যার প্যাকেজ ........
ম্যাটনজ ২

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

2

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

এলপির traditionalতিহ্যবাহী ব্যবহার হ'ল কোডের সাথে ডকুমেন্টেশনগুলিকে এমন পদ্ধতিতে ইন্টারলিভ করার অনুমতি দেয় যা আপনাকে ডকুমেন্টেশনগুলিকে সোর্স কোডের খুব কাছে রাখতে দেয় । একটি একক নয়েব ফাইল (উদাহরণস্বরূপ) একটি ডকুমেন্টেশন ফাইল তৈরি করতে ব্যবহার করা যেতে পারে যা ল্যাটেক্স ব্যবহার করে বৃহত্তর ডকুমেন্টে সংকলিত হতে পারে এবং আপনার অ্যাপ্লিকেশনটিতে সংকলিত হতে পারে এমন একটি .cppএবং .hফাইল তৈরি করতে পারে।

আপনার ক্ষেত্রে এটি আপনাকে কোড ভিত্তি এবং ডকুমেন্টেশন উভয়ই একত্রে রাখার অনুমতি দিতে পারে, একটি .javaফাইলও তৈরি করে।

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


2

পরীক্ষাগুলি কোথায় সহায়ক হতে পারে তার এটি একটি উত্তম উদাহরণ।

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

(এবং, ভাল পরীক্ষা কভারেজ আছে!)


1

সি ++ এবং জাভা অন্য কোনও ভাষা থেকে কোড উত্পন্ন করার বিষয়টি বিবেচনা করুন


0

দাবি পরিত্যাগী

পূর্ববর্তী হিসাবে উল্লিখিত, পোস্টগুলি, যদি আপনার সত্যিই অন্য পছন্দ না থাকে তবে।

উত্তর

একক উত্তরের পরিবর্তে বেশ কয়েকটি ব্যবহারিক পরামর্শ:

(1) সাধারণ স্ট্রাকচারগুলি ব্যবহার করুন, এমনকি যদি একই জিনিসগুলি ভিন্নভাবে করা যায়।

উদাহরণ: আমার "অবজেক্ট পাস্কল" এবং "সি ++" তে একই কোড থাকতে হয়েছিল, যেখানে উভয়টিতে "যদি" বাক্য বিদ্যমান থাকে তবে "সি ++" তে প্রথম বন্ধনী প্রয়োজন, তবে "অবজেক্ট পাস্কাল" তে নয়।

// Object Pascal
...
if MyBollExpression
begin
  ...
end;
...

// C++
...
if (MyBollExpression)
{
  ...
}
...

পরিবর্তন:

// Object Pascal
...
if (MyBollExpression)
begin
  ...
end;
...

// C++
...
if (MyBollExpression)
{
  ...
}
...

উভয় ভাষায় বন্ধনী যুক্ত করা হয়েছে। অন্য কেসটি হ'ল nameচ্ছিক নেমস্পেসগুলি বনাম প্রয়োজনীয় নেমস্পেস ("প্যাকেজগুলি")।

(3) শনাক্তকারীদের নাম, কেস সংবেদনশীলতা, বিশেষ ধরণের, অনুরূপ, উপকরণ ব্যবহার, সাবক্লাসিং, মোড়ানো রাখুন:

// Java
// 
import java.io.*;

...
System.out("Hello World\n");
...

// C++
// 
include <iostream>

...
cout << "Hello World\n";
...

মধ্যে:

// Java
// 
import java.io.*;

static class ConsoleOut
{
   void Out(string Msg)
   {
     System.out("Hello World\n");
   }
}

...
ConsoleOut MyConsole = new ConsoleOut();
...
MyConsole.out("Hello World\n");
...

// C++
// 
include <iostream>

public class ConsoleOut
{
   void Out(string Msg)
   {
     cout << "Hello World\n";
   }
}

...
ConsoleOut MyConsole = new ConsoleOut();
...
MyConsole.out("Hello World\n");

...

সারসংক্ষেপ

আমার সাধারণত বেশ কয়েকটি প্রোগ্রামিং ভাষা নিয়ে কাজ করতে হয় এবং কিছু কাস্টম "কোর" লাইব্রেরি রয়েছে, যা আমি বেশ কয়েকটি প্রোগ্রামিং ভাষায় রাখি।

শুভকামনা

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