হ্যাঁ, সত্যিই আছে। প্রকার, রকম.
নিউজপিয়াকের কোনও স্থির রাষ্ট্র নেই এবং বিশ্বব্যাপী কোনও রাষ্ট্র নেই। এর অর্থ হ'ল নির্ভরতার অ্যাক্সেস পাওয়ার একমাত্র সম্ভাব্য উপায় হ'ল এটি স্পষ্টভাবে ইনজেকশন করা। একথাও ঠিক যে, এর অর্থ এই যে ভাষা, বা Newspeak ক্ষেত্রে আরো সঠিকভাবে আইডিই চাহিদা নির্ভরতা ইনজেকশন সহজ করতে, অন্যথায় ভাষা অব্যবহারযোগ্য হবে।
সুতরাং, ভাষাটি ডিআই-এর জন্য ডিজাইন করা হয়নি, বরং ডিআইয়ের প্রয়োজনীয়তা ভাষা নকশার ফলাফল।
যদি কোনও স্থিতিশীল রাষ্ট্র না থাকে এবং কোনও বৈশ্বিক রাষ্ট্র না থাকে, তবে আপনি কেবল ইথারে "পৌঁছাতে" এবং কোনও জিনিস টেনে আনতে পারবেন না। উদাহরণস্বরূপ, জাভাতে, প্যাকেজ কাঠামো স্থিতিশীল অবস্থা। আমি কেবল বলতে পারি java.lang.Stringএবং আমার নিজের Stringক্লাস আছে। সংবাদপত্রে তা সম্ভব নয়। আপনার সাথে কাজ করা সমস্ত কিছু আপনাকে স্পষ্টভাবে সরবরাহ করতে হবে, অন্যথায় আপনি এটি পেতে পারেন না। সুতরাং, সমস্ত কিছু নির্ভরতা এবং প্রতিটি নির্ভরতা সুস্পষ্ট।
আপনি একটি স্ট্রিং চান? ঠিক আছে, আপনাকে প্রথমে stdlibআপনাকে Stringক্লাসটি হস্তান্তর করতে অবজেক্টটি জিজ্ঞাসা করতে হবে । ওহ, তবে আপনি কীভাবে অ্যাক্সেস পাবেন stdlib? ঠিক আছে, আপনাকে প্রথমে platformআপনাকে stdlibঅবজেক্টটি হস্তান্তর করতে বলতে হবে । ওহ, তবে আপনি কীভাবে অ্যাক্সেস পাবেন platform? ঠিক আছে, আপনাকে প্রথমে অন্য কাউকে platformঅবজেক্টটি হস্তান্তর করতে বলতে হবে । ওহ, তবে কীভাবে আপনি এই ব্যক্তির ইজারা পেয়েছেন? ঠিক আছে, আপনাকে প্রথমে অন্য কাউকে জিজ্ঞাসা করতে হবে অবজেক্টটি হস্তান্তর করার জন্য।
খরগোশের গর্তটি কতটা নিচে যায়? পুনরাবৃত্তি কোথায় থামবে? আসলে পুরোপুরি। এটা থামছে না। তারপরে, আপনি কীভাবে নিউজসিয়কে একটি প্রোগ্রাম লিখতে পারেন? ভাল, কঠোরভাবে বলতে, আপনি পারবেন না!
আপনার কিছু বাহ্যিক সত্তা দরকার যা এটি সমস্তকে একত্র করে। নিউজপিয়াক-এ, সেই সত্তাটি আইডিই। আইডিই পুরো প্রোগ্রামটি দেখে। এটি একসাথে পৃথক টুকরা তারের করতে পারেন। নিউজপিয়াকের স্ট্যান্ডার্ড প্যাটার্নটি হ'ল আপনার আবেদনের কেন্দ্রীয় শ্রেণীর কাছে একজন অ্যাক্সেসর নামে পরিচিত platformএবং নিউজপ্যাক আইডিই সেই অ্যাক্সেসরে এমন একটি বস্তুকে সংক্রামিত করে যে পদ্ধতিতে প্রোগ্রামিংয়ের কিছু প্রাথমিক প্রয়োজনীয়তা ফিরে আসে: একটি Stringশ্রেণি, একটি Numberশ্রেণি, একটি Arrayশ্রেণি, ইত্যাদি।
আপনি যদি নিজের অ্যাপ্লিকেশনটি পরীক্ষা করতে চান তবে আপনি এমন কোনও platformবস্তুর ইনজেকশন করতে পারেন যার Fileপদ্ধতিটি ডামি পদ্ধতিতে ক্লাস দেয়। আপনি যদি ক্লাউডটিতে আপনার অ্যাপ্লিকেশন স্থাপন করতে চান, আপনি এমন একটি প্ল্যাটফর্ম ইনজেক্ট করুন যার Fileক্লাসটি আসলে অ্যামাজন এস 3 সমর্থন করে। ক্রস-প্ল্যাটফর্ম জিইউআই বিভিন্ন ওএসের জন্য বিভিন্ন জিইউআই ফ্রেমওয়ার্কগুলি ইনজেকশন দিয়ে কাজ করে। নিউজপিয়াক এমনকি একটি পরীক্ষামূলক নিউজিয়াক-টু-ইসিএমএস স্ক্রিপ্ট সংকলক এবং এইচটিএমএল-ব্যাকড জিইউআই ফ্রেমওয়ার্ক রয়েছে যা আপনাকে কোনও ভিন্ন পরিবর্তন ছাড়া ব্রাউজারে নেটিভ ডেস্কটপ থেকে সম্পূর্ণ বৈশিষ্ট্যযুক্ত জিইউআই অ্যাপ্লিকেশনটি পোর্ট করতে দেয়, কেবলমাত্র বিভিন্ন জিইআইআই উপাদান ইনজেকশন দিয়ে।
আপনি যদি নিজের অ্যাপ্লিকেশন স্থাপন করতে চান, আইডিই অ্যাপ্লিকেশনটিকে একটি ডিস্ক অবজেক্টে সিরিয়ালাইজ করতে পারে। (তার পূর্বপুরুষ, স্মলটক মতো Newspeak একটি আউট-অফ-ইমেজ বস্তুর ধারাবাহিকতাতে বিন্যাস আপনাকে অবিকল আপনার সাথে সম্পূর্ণ ইমেজ নিতে, না কারণ সব নির্ভরতা ইনজেকশনের হয়। আইডিই জানে ঠিক যা সিস্টেমের আপনার আবেদনের অংশের ব্যবহার করে এবং যা এটি ব্যবহার করে না So সুতরাং, এটি আপনার অ্যাপ্লিকেশনকে অন্তর্ভূক্ত অবজেক্ট স্পেসের সাথে সংযুক্ত সাবগ্রাফাকে সিরিয়ালাইজ করে, আরও কিছু না))
এই সমস্তগুলি কেবলমাত্র চূড়ান্তভাবে অবজেক্ট-ওরিয়েন্টেশন নিয়ে কাজ করে: সবকিছুই ভার্চুয়াল মেথড কল (স্মার্টটাক পরিভাষায় "বার্তা প্রেরণ", যার মধ্যে নিউজপেয়াক বংশধর)। এমনকি সুপারক্লাস লুকআপ একটি ভার্চুয়াল পদ্ধতি কল! এমন কিছু নিন
class Foo extends Bar // using Java syntax for familiarity
বা, নিউজএইকে:
class Foo = Bar () () : ()
জাভাতে, Fooএটি স্ট্যাটিক গ্লোবাল নেমস্পেসে একটি নাম তৈরি করবে এবং স্ট্যাটিক গ্লোবাল নেমস্পেসে সন্ধান করবে Barএবং Bar Fooএর সুপারক্লাস তৈরি করবে। এমনকি রুবিতেও, যা অনেক বেশি গতিশীল, এটি এখনও বিশ্বব্যাপী নেমস্পেসে একটি স্থির ধ্রুবক তৈরি করবে।
নিউজপিয়াক-এ, সমতুল্য ঘোষণার অর্থ: নামকরণের জন্য একটি গেটর পদ্ধতি তৈরি করুন Fooএবং নামকরণ পদ্ধতিতে কল করে এটি একটি ক্লাস ফিরিয়ে আনুন যা তার সুপারক্লাসটি দেখায় Bar। দ্রষ্টব্য: এটি রুবির মতো নয়, যেখানে আপনি কোনও এক্সিকিউটেবল রুবি কোডকে সুপার ক্লাসের ঘোষণা হিসাবে রাখতে পারেন তবে ক্লাসটি তৈরি হওয়ার পরে কোডটি একবার কার্যকর করা হবে এবং সেই কোডটির ফেরতের মান স্থির সুপারক্লাস হয়ে যাবে। না। পদ্ধতিটি প্রতিটি একক পদ্ধতি দেখার Barজন্য বলা হয় !
এর কিছু গভীর প্রভাব রয়েছে:
- যেহেতু মিক্সিন মূলত এমন একটি শ্রেণি যা এটির সুপারক্লাসটি এখনও জানে না এবং নিউজপিয়াক-তে সুপারক্লাসটি একটি গতিশীল ভার্চুয়াল পদ্ধতি কল, এবং এইভাবে অজানা, প্রতিটি শ্রেণি স্বয়ংক্রিয়ভাবে একটি মিশ্রণও হয়। আপনি বিনামূল্যে মিশ্রণ পাবেন।
যেহেতু একটি অভ্যন্তর শ্রেণি কেবল একটি মেথড কল যা কোনও ক্লাস প্রদান করে, আপনি বাইরের শ্রেণীর একটি সাবক্লাসে সেই পদ্ধতিটি ওভাররাইড করতে পারেন, তাই প্রতিটি শ্রেণি ভার্চুয়াল। আপনি বিনামূল্যে ভার্চুয়াল ক্লাসগুলি পান:
class Outer {
class Inner { /* … */ }
}
class Sub extends Outer {
override class Inner { /* … */ }
}
Newspeak:
class Outer = () (
class Inner = () () : ()
) : ()
class Sub = Outer () (
class Inner = () () : ()
) : ()
যেহেতু সুপারক্লাসটি কেবল একটি ক্লাসকে ফেরত দেয় এমন একটি কল কল, আপনি বাইরের শ্রেণীর একটি সাবক্লাসে সেই পদ্ধতিটি ওভাররাইড করতে পারেন, সুপারক্লাসে সংজ্ঞায়িত অভ্যন্তরীণ ক্লাসগুলির সাবক্লাসে একটি আলাদা সুপারক্লাস থাকতে পারে। আপনি ক্লাস শ্রেণিবদ্ধ উত্তরাধিকার বিনামূল্যে পান:
class Outer {
class MyCoolArray extends Array { /* … */ }
}
class Sub extends Outer {
override class Array { /* … */ }
// Now, for instances of `Sub`, `MyCoolArray` has a different superclass
// than for instances of `Outer`!!!
}
Newspeak:
class Outer = () (
class MyCoolArray = Array () () : ()
) : ()
class Sub = Outer () (
class Array = () () : ()
) : ()
এবং সর্বশেষে, এই আলোচনার জন্য সবচেয়ে গুরুত্বপূর্ণ: যেহেতু (আপনি আপনার ক্লাসে সংজ্ঞায়িত এগুলি বাদ দিয়ে স্পষ্টতই) আপনি কেবলমাত্র আপনার লেক্সিক্যালি এনক্লোজিং ক্লাস (এসএস) এবং আপনার সুপারক্লাস (এস), একটি শীর্ষ স্তরের বহিরাগত শ্রেণীর পদ্ধতিতে কল করতে পারেন কোনো পদ্ধতি কল করতে পারবেন না এ সব বেশী যে স্পষ্টভাবে ইনজেকশনের হয় ব্যতীত কারণ সুপারক্লাস ঘোষণা একটি একটি টপ লেভেল বর্গ একটি এনক্লোজিং ক্লাস যার পদ্ধতি সেটিতে কল পারে না, এবং এটি ডিফল্ট এক ছাড়া অন্য কোনো সুপারক্লাস থাকতে পারে না, পদ্ধতি কল, এবং এটি স্পষ্টত না সুপারক্লাস ফিরে যেতে পারেন (এটা হলসুপারক্লাস) এবং এটি লেক্সিক্যালি এনক্লোজিং ক্লাসেও যেতে পারে না, কারণ কোনও কিছুই নেই। এর অর্থ কী শীর্ষ স্তরের ক্লাসগুলি সম্পূর্ণরূপে এনক্যাপসুলেটেড, তারা কেবল স্পষ্টভাবে ইনজেকশনের মাধ্যমে তা অ্যাক্সেস করতে পারে এবং তারা কেবল স্পষ্টভাবে যা বলে তা ইনজেকশন দেয়। অন্য কথায়: শীর্ষ স্তরের ক্লাসগুলি মডিউল। আপনি বিনামূল্যে একটি সম্পূর্ণ মডিউল সিস্টেম পান। আসলে, আরও সুনির্দিষ্টভাবে বলতে গেলে: শীর্ষ স্তরের ক্লাসগুলি মডিউল ঘোষণা, এর উদাহরণগুলি মডিউল। সুতরাং, আপনি নিখরচায় প্যারাম্যাট্রিক মডিউল ঘোষণা এবং প্রথম শ্রেণির মডিউল সহ একটি মডিউল সিস্টেম পাবেন যা এমন কি, যা এমনকি খুব পরিশীলিত, মডিউল সিস্টেমগুলি করতে পারে না।
এই সমস্ত ইনজেকশনকে বেদনাবিহীন করার জন্য শ্রেণি ঘোষণার একটি অস্বাভাবিক কাঠামো রয়েছে: এগুলি দুটি ঘোষণার সমন্বয়ে গঠিত। এক বর্গ কন্সট্রাকটর, যা হয় না কন্সট্রাকটর যা নির্মান দৃষ্টান্ত ক্লাসের, বরং কন্সট্রাকটর পরিবেশ যা বর্গ শরীর রান নির্মান। জাভা-এর মতো সিনট্যাক্সে এটি দেখতে এরকম কিছু লাগবে:
class Foo(platform) extends Bar {
Array = platform.collections.Array
String = platform.lang.String
File = platform.io.File
| // separator between class constructor and class body
class MyArray extends Array { /* … */ }
// Array refers to the method defined above which in turn gets it from the
// platform object that was passed into the class "somehow"
}
Newspeak:
class Foo using: platform = Bar (
Array = platform collections Array
String = platform streams String
File = platform files ExternalReadWriteStream
) (
class MyArray = Array () () : ()
) : ()
নোট করুন যে কোনও নিউজপ্যাক প্রোগ্রামার আসলে ক্লাস (এস) দেখতে যাচ্ছেন তা এই রকম:
যদিও আমি এটি ন্যায়বিচার করাও শুরু করতে পারি না। আপনাকে এটি নিয়ে নিজেই খেলতে হবে। গিলাড ব্রাচা মড্যুয়ালিটি সহ সিস্টেমের বিভিন্ন দিক নিয়ে একাধিক আলোচনা করেছেন। তিনি একটি সত্যই দীর্ঘ (২ ঘন্টা ) বক্তৃতা দিয়েছিলেন , যার প্রথম ঘন্টাটি মডারুলিটির গল্প সহ ভাষার একটি গভীর পরিচয়। নিউজপেয়াক প্রোগ্রামিং প্ল্যাটফর্মের ২ য় অধ্যায়টি পরিমিতিটি জুড়েছে। যদি আপনি স্কেয়াক-এ নিউজপেয়াককে বাদ দেন - দ্য রিপোর্ট্পলেক্সডের জন্য একটি গাইড (ওরফে নিউজপ্যাক -১১১১) , আপনি সিস্টেমটির জন্য অনুভূতি পাবেন। উদাহরণ অনুসারে নিউজপেক একটি লাইভ ডকুমেন্ট (যেমন এটি নিউজিক-অন-ইসিএমএএসক্রিপট বন্দরের অভ্যন্তরে চলছে, কোডের প্রতিটি লাইন সম্পাদনযোগ্য, প্রতিটি ফলাফল পরিদর্শনযোগ্য) বুনিয়াদি বাক্য গঠনটি প্রদর্শন করে।
তবে সত্যিই, আপনি এটি সঙ্গে প্রায় খেলতে হবে। এটি সমস্ত মূলধারার এবং এমনকি সর্বাধিক মূল-মূলধারার ভাষা থেকে এতটাই আলাদা যে এটি ব্যাখ্যা করা শক্ত, এটি অভিজ্ঞতা অর্জন করতে হবে experienced