আমি সবেমাত্র ড্যানিয়েল স্পিয়াকের এই আলোচনাটি দেখেছি যেখানে তিনি স্কালার উত্তর জাভার নামমাত্র টাইপিংয়ের তুলনায় কাঠামোগত টাইপিংয়ের সুবিধার কথা বলেছেন । এই পার্থক্যের জন্য একটি উদাহরণ নিম্নলিখিত জাভা কোড হবে
public interface Foo {
public int length();
}
public interface Bar {
public int length();
}
Foo f = ...;
Bar b = f;
কোনটি অবশ্যই সংকলন করবে না কারণ প্রকারের মধ্যে সামঞ্জস্যতা Foo
এবং Bar
নাম দ্বারা নির্ধারিত হয়।
অন্যদিকে স্ট্রাকচারাল টাইপ সিস্টেম উভয় প্রকারকে সমান বা সামঞ্জস্যপূর্ণ বলে ঘোষণা করতে পারে এবং এইভাবে, অন্যান্য জিনিসের মধ্যে, পরীক্ষিত হাঁসের টাইপিংয়ের অনুমতি দেয়।
এখন আমি মনে করি স্ট্রাকচারাল টাইপ সিস্টেমের বেশিরভাগ সুবিধা আমি বুঝতে পারি তবে আমি অবাক হয়েছি যে এটি নীচের মতো উদাহরণ থেকে সুরক্ষাটিকে অকার্যকর করবে না কিনা?
class Foo {
class Bar { /* ... */ }
def takeBar(b: Bar) = { /* ... */ }
def getBar: Bar = new Bar
}
val foo1 = new Foo
val foo2 = new Foo
foo1.takeBar(foo1.getBar) // should compile
foo1.takeBar(foo2.getBar) // should not compile
আমার বোধগম্যটি কি সঠিক যে কাঠামোগত টাইপ সিস্টেমে শেষ লাইনটিও সংকলিত হবে এবং যদি তাই হয় তবে সুরক্ষার প্রকারের ক্ষেত্রে এটি কোনও অসুবিধা হবে না?