বাস্তব বিশ্বে একটি "শক্তিশালী" টাইপ সিস্টেম ব্যবহার করে বলুন, বড় আকারের ওয়েব-অ্যাপসের জন্য?


29

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

প্রশ্নের সামগ্রিক প্রসঙ্গ

আমরা রুবেলে খুব বড় আকারের একটি ওয়েব-অ্যাপ তৈরি করছি এবং আমরা আমাদের স্ট্যাকটি সম্পর্কে সাধারণত খুশি হয়েছি happy যখন আমরা চাই, আমরা জিনিসগুলি দ্রুত দ্রুত চালনা করতে পারি - 10% প্রান্তের ক্ষেত্রে খুব বেশি চিন্তা না করে এমন কিছু যা "ব্যবসায়" কেস 90% এর জন্য কাজ করে। অন্যদিকে, কোড-পর্যালোচনা এবং পরীক্ষা-কভারেজের সহায়তায় আমরা ধীর এবং ইচ্ছাকৃত হতে পারি এবং নিশ্চিত করতে পারি যে আমরা সমস্ত ঘাঁটিগুলি আবরণ করেছি - কেবলমাত্র এমন পরিস্থিতিতে কেবল এইরকম নিবিড় পরীক্ষা-নিরীক্ষা ও সুরক্ষার যোগ্যতা রয়েছে।

তবে, দলটি বাড়ার সাথে সাথে আমরা আমাদের স্ট্যাকের ডানদিকে "সেফটি নেট" বেকড না পেয়ে অস্বস্তি বোধ করতে শুরু করেছি।

আমরা সম্প্রতি জাভাতে কিছু নেটিভ অ্যান্ড্রয়েড বিকাশ করা শুরু করেছি। এবং আমি (আনন্দদায়ক) একটি সংকলিত / স্থির / দৃ strongly়-টাইপিত ভাষার দ্বারা সরবরাহিত সুরক্ষার কথা মনে করিয়ে দিয়েছিলাম।

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

এখন, এই সুরক্ষা বৈশিষ্ট্যগুলির সুবিধাগুলি থাকা অবস্থায়, আমি তাদের অসুবিধাগুলি সম্পর্কেও ভালভাবে জানি। আরও তাই, "বয়লারপ্লেট ভারী" জাভাতে। সুতরাং, জাভা পরিবর্তে, আমি আধুনিক, "দৃ strongly়ভাবে টাইপ করা" ভাষাগুলির দিকে নজর দিতে শুরু করেছি যেগুলি এই দিনগুলিতে লোকেরা কাজ শুরু করেছে। উদাহরণস্বরূপ: স্কেলা, মরিচা, হাস্কেল ইত্যাদি me যা আমার জন্য সবচেয়ে বেশি আগ্রহী তা হ'ল তাদের টাইপ সিস্টেম এবং স্ট্যাটিক / কম্পাইল-টাইম চেকগুলির শক্তি।

এখন, প্রশ্ন

বৃহত্তর অ্যাপ্লিকেশনগুলিতে আমি কীভাবে এই শক্তিশালী টাইপ সিস্টেমগুলি এবং স্থির / সংকলন-সময় বৈশিষ্ট্যগুলি ব্যবহার করব?

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


12
এটি আসল বিষয় না কারণ সত্যিকারের কোনও উত্তর নেই। প্রশ্নটি মতামতপূর্ণ আলোচনাকে উত্সাহিত করার উদ্দেশ্যে তৈরি করা হয়েছে ("আমি স্থির ধরণের পছন্দগুলি পছন্দ করি / পছন্দ করি কারণ ..."), বাস্তব ব্যাখ্যা নয় । আমার পরামর্শটি হ'ল আপনার প্রশ্নের আরও সুনির্দিষ্ট একটি অংশ বাছাই করা যেমন "আপনার সিস্টেম দুর্বলভাবে টাইপ করা বাইরের বিশ্বের সাথে যোগাযোগ করলে এই ধরণের সিস্টেমগুলির দ্বারা প্রদত্ত সুরক্ষা জলের কী হবে?" এবং এটি সম্পর্কে প্রশ্নটি আবার লিখুন । আপনি সুনির্দিষ্ট উত্তর পাবেন যা ভবিষ্যতের পাঠকদের পক্ষে সেভাবে কার্যকর হবে।
বেনিয়ামিন হজসন

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

4
একটি টাইপ সিস্টেম একটি সরঞ্জাম এবং অন্য যে কোনও সরঞ্জামের মতো এটির কার্যকারিতাও মূলত সেই সরঞ্জামের উপর নির্ভর করে না তবে উইল্ডারের উপর নির্ভর করে। আপনি হাস্কেলের মতো ভাষার প্রকারের সিস্টেমটি আপনার ব্যবসায়ের যুক্তি সম্পর্কে টাইপ স্তরে এনকোড করতে পারেন এবং সংযোজক সময়ে কোনও যন্ত্র (সংকলক) দ্বারা পরীক্ষিত inv আক্রমণকারীদের পরীক্ষা করতে পারেন তবে এটি করার জন্য আপনাকে শব্দার্থবিজ্ঞানের একটি বোঝার প্রয়োজন টাইপ সিস্টেম এবং টাইপ চেকিং। সঠিক প্রশ্নটি নয় "এটি কি ওয়েব স্টাফগুলির জন্য একটি ভাল সরঞ্জাম", এটি "এখানে আমার মুখোমুখি কিছু নির্দিষ্ট সমস্যা রয়েছে; কীভাবে একটি শক্তিশালী টাইপ সিস্টেম ব্যবহার করা যেতে পারে?"
ব্যবহারকারী2407038

5
আপনার বর্ণিত বেশিরভাগ জিনিসের টাইপ সিস্টেমের সাথে কোনও সম্পর্ক নেই। এগুলি বিশুদ্ধরূপে আইডিই বৈশিষ্ট্য। চেক করা ব্যতিক্রম ব্যতীত (কোনও পাং উদ্দেশ্যপ্রণোদিত) ব্যতীত, আপনি যে বৈশিষ্ট্যগুলি উল্লেখ করেছেন সেগুলি স্থিরভাবে টাইপ করা ভাষার জন্য আইডিইতে উপস্থিত হওয়ার অনেক আগেই স্মার্টটাক আইডিইতে উপস্থিত ছিল। প্রকৃতপক্ষে, সর্বাধিক ব্যবহৃত জাভা আইডিইগুলির মধ্যে একটি আসলে পরিবর্তিত স্মার্টটাক আইডিই (আইবিএম ভিজুয়ালএজ স্মলটালক) হিসাবে শুরু হয়েছিল, যা জাভা কোডটি বোঝার জন্য পরিবর্তন করা হয়েছিল তবে এখনও ছোট্টালকে লেখা হয়েছিল এবং ভিজুয়ালএজ জাভা হিসাবে প্রকাশিত হয়েছিল, যা পরে জাভাতে পোর্ট করা হয়েছিল was এবং হিসাবে প্রকাশিত হয়েছে ...
Jörg W Mittag

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

উত্তর:


34

এই মুহুর্তে আমার অভাবের কারণে আমি একটি সংক্ষিপ্ত উত্তর দেব, তবে আমি বর্তমানে দুটি বড় প্রকল্পে (> 100.000 হাসকেলে এলওসি) কাজ করছি - ফ্লোবক্স.আইও এবং লুনা -আলং। আমরা আমাদের প্রোগ্রামিং ভাষার ব্যাকএন্ড, সংকলক এমনকি ওয়েবজিএল ভিত্তিক জিইউআই সহ সমস্ত অংশের জন্য হাস্কেল ব্যবহার করি। আমাকে স্বীকার করতে হবে যে শক্তিশালী টাইপ সিস্টেম এবং "নির্ভরশীল টাইপ" -র মতো যন্ত্রপাতি আপনাকে গাইড করতে পারে এবং অন্যান্য ভাষা থেকে জানা বোঝা এবং ঝামেলা থেকে আপনাকে বাঁচাতে পারে। আমরা প্রকারগুলি খুব বিস্তৃতভাবে ব্যবহার করি এবং সংকলনের সময় যা যা পরীক্ষা করা যায় সেগুলি সম্পন্ন হয়। প্রকৃতপক্ষে, গত 3 বছরের বিকাশের সময় আমরা কখনই কোনও রানটাইম ত্রুটি বা স্ট্যাক ওভারফ্লোয়ের মুখোমুখি হইনি (এবং এটি সত্যিই অবিশ্বাস্য কিছু)। একমাত্র ত্রুটি হ'ল প্রোগ্রামারদের দ্বারা তৈরি সুস্পষ্ট যুক্তিযুক্ত ত্রুটি। প্রচুর লোকেরা বলে, হাসকেলের মধ্যে যদি কিছু সংকলিত হয় তবে এটি ঠিক কাজ করে এবং আপনার নিশ্চিত হওয়া উচিত যে এটি কোনও দিন আপনার মুখে ফুঁকবে না।

প্রশ্নের প্রথম অংশের উত্তর: আপনি এই দুর্দান্ত টাইপ সিস্টেম বৈশিষ্ট্যগুলি সম্পর্কে কয়েকটি দুর্দান্ত ব্লগ পড়ার বিষয়ে জানতে পারেন, যেমন:

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


4
"অনেক লোক বলে, হাসকেলের মধ্যে যদি কিছু সংকলন করা হয় তবে এটি ঠিক কাজ করে এবং আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে এটি কোনও দিন আপনার মুখে ফুঁকবে না।": আমি কেবল ছোট (তুচ্ছ-না হলেও) প্রকল্পের জন্য হাস্কেলকে ব্যবহার করেছি , তবে আমি এটি নিশ্চিত করতে পারি: হাস্কেল সংকলক সন্তুষ্ট হয়ে গেলে আমি খুব কমই কোনও বাগ খুঁজে পাই।
জর্জিও

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

গ্যাব্রিয়েল গনজালেসের ব্লগ শুরু করা সবচেয়ে ভাল।
সাম বুসালিস

@ danilo2 আপনার সংস্থার ওয়েবসাইটে যোগাযোগ @ ঠিকানায় একটি ইমেল প্রেরণ করেছে। সাড়া দেওয়ার জন্য অনুরোধ। ধন্যবাদ!
সৌরভ নন্দ

@ সৌরভনন্দ: আমি আমাদের ইনবক্সটি ডাবল চেক করেছি এবং আপনার কাছ থেকে কোনও বার্তা দেখতে পাচ্ছি না। আপনি কি এটি <at> luna-lang.org এ যোগাযোগ করতে প্রেরণ করেছেন? দয়া করে সরাসরি আমার ওয়াজসিচ <ডট> ড্যানিলো <ডাটেল> জিমেইল <ডট> কমকে লিখে আমার সাথে যোগাযোগ করুন এবং আমরা এই সমস্যার কারণ কী তা তদন্ত করব :)
ড্যানিলো 2

17

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

সুতরাং আমি সংজ্ঞাটি পছন্দ করি:

  • দুর্বলভাবে টাইপ করা সিস্টেমগুলি আপনাকে নির্দিষ্ট কিছু কাজ থেকে বিরত রাখতে প্রকারগুলি ব্যবহার করে (যেমন ভুল)
  • দৃ typ়ভাবে টাইপ করা সিস্টেমগুলি আপনার জন্য জিনিসগুলি করার জন্য প্রকারগুলি ব্যবহার করে

আপনার জন্য জিনিসগুলি বলতে আমি কী বোঝাতে চাইছি? ঠিক আছে, সার্ভেন্ট ফ্রেমওয়ার্কে একটি চিত্র রূপান্তর এপিআই রচনা পরীক্ষা করা যাক (হাস্কেলের মধ্যে, তবে আপনাকে অনুসরণ করার জন্য এটি সত্যই জানা দরকার নেই, আপনি দেখতে পাবেন ...)

{-# LANGUAGE
    TypeOperators,
    DataKinds
    #-}

import Codec.Picture
import Data.Proxy
import Network.Wai.Handler.Warp (run)
import Servant
import Servant.JuicyPixels

main :: IO ()
main = run 8001 conversion

এটি বলছে যে আমরা সার্ভেন্টকে সার্ভেন্ট প্যাকেজ এবং জুসিপিক্সেলস প্লাগইন সহ কিছু মডিউল চাই এবং প্রোগ্রামটির মূল প্রবেশপথটি ওয়ার্প ব্যাকএন্ড ব্যবহার করে সার্ভার হিসাবে 8001 পোর্টে 'রূপান্তর' ফাংশনটি চালানো। ভাষাটি কিছুটা উপেক্ষা করুন।

conversion :: Application
conversion = serve (Proxy :: Proxy ConversionApi) handler

এটি বলছে যে রূপান্তর ফাংশনটি এমন একটি সার্ভার যেখানে API অবশ্যই 'রূপান্তরএপি' টাইপের সাথে মেলে এবং অনুরোধগুলি ফাংশন দ্বারা পরিচালিত হয় handler

type ConversionApi
     = ReqBody '[BMP, GIF, JPEG 50, PNG, TIFF, RADIANCE] DynamicImage
    :> Post '[BMP, GIF, JPEG 50, PNG, TIFF, RADIANCE] DynamicImage

এটি ConvesionApiপ্রকারটি নির্দিষ্ট করে দিচ্ছে । এটি বলেছে যে আমাদের তালিকাভুক্ত '[বিএমপি, জিআইএফ, জেপিজি 50, পিএনজি, টিআইএফএফ, রেডিয়েন্স] দ্বারা নির্দিষ্ট হওয়া আগত সামগ্রীর প্রকারগুলি গ্রহণ করা উচিত এবং তাদের ডায়নামিকামেজ হিসাবে পরিচালনা করতে হবে এবং আমাদের একই ধরণের সামগ্রীতে রূপান্তরিত একটি ডায়নামিকামেজ ফিরিয়ে দেওয়া উচিত that ধরনের। কী:> এর অর্থ ঠিক তা নিয়ে চিন্তা করবেন না, আপাতত এটিকে খুশির যাদু হিসাবে ভাবেন।

সুতরাং, আমার পছন্দসই সংজ্ঞা দেওয়া, একটি দুর্বল টাইপ করা সিস্টেম এখন এই জাতীয় জিনিসগুলি নিশ্চিত করতে পারে:

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

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

handler = return

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

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

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

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

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

সর্বোপরি আমি যেভাবে অফার করতে পারি, প্রকারগুলি এর মতো স্তরযুক্ত করা যায়:

  • খুব দুর্বলভাবে টাইপ করা হয়েছে, জাভাস্ক্রিপ্টের মতো জিনিস যেখানে [] + {defined সংজ্ঞায়িত করা হয়েছে
  • পাইথনের মতো দুর্বলভাবে টাইপ করা হয়েছে যেখানে আপনি [] + {} করতে পারবেন না, তবে চেষ্টা না করা পর্যন্ত এটি পরীক্ষা করা হয় না
  • সি বা জাবার মতো দুর্বলভাবে টাইপ করা হয়েছে, যেখানে আপনি পারবেন না [] + {}, তবে এটি সংকলনের সময় পরীক্ষা করা হয়েছে, তবে আপনার কাছে আরও উন্নত প্রকারের বৈশিষ্ট্য নেই
  • দুর্বল এবং দৃ strongly়ভাবে টাইপ করা, যেমন সি ++ টেম্পলেট মেটাপোগ্র্যামিং এবং সরল হাস্কেল কোডের মধ্যে সীমানা বিস্তৃত করা যেখানে প্রকারভেদ কেবলমাত্র বৈশিষ্ট্য প্রয়োগ করে।
  • উপরের চিত্রের মতো সম্পূর্ণ জটিল হ্যাস্কেল প্রোগ্রামের মতো যেখানে টাইপগুলি কাজ করে, সম্পূর্ণরূপে সম্পূর্ণ টাইপ করুন
  • খুব দৃ strongly়ভাবে টাইপ করা হয়েছে, যেমন আগদা বা ইদ্রিস, যেখানে প্রকার এবং মানগুলি একে অপরকে সীমাবদ্ধ করতে পারে। এটি টাইপ সিস্টেমগুলি পাওয়ার মতোই শক্তিশালী এবং সেগুলিতে প্রোগ্রামিং আপনার প্রোগ্রামটি যা করে তা গাণিতিক প্রমাণ লেখার সমান। দ্রষ্টব্য: আগদায় কোডিং এটি আক্ষরিকভাবে গাণিতিক প্রমাণগুলি লিখছে না , প্রকারগুলি গাণিতিক তত্ত্ব এবং এই ধরণের বৈশিষ্ট্যগুলি সেই তত্ত্বগুলি প্রমাণকারী গঠনমূলক উদাহরণ।

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


নোট করুন যে তালিকার উপাদানগুলির চেয়ে আরও বেশি কিছু থাকলে আপনাকে প্রেরিতের সাথে টাইপ-লেভেল তালিকার উপসর্গের প্রয়োজন হবে না। অ্যাস্টোস্ট্রোফ কেবল 0- বা 1-উপাদান টাইপ-স্তরের তালিকার জন্য প্রয়োজনীয় কারণ তারা অস্পষ্ট (তারা সাধারণ তালিকার ধরণের নির্মাতাকে উল্লেখ করতে পারে)
গ্যাব্রিয়েল গঞ্জালেজ

1
আমি সচেতন, তবে আমি ছাপের মধ্যে ছিলাম সাধারণভাবে প্রচারিত ডেটা ধরণের জন্য অ্যাস্টোস্ট্রোফ কেবল ভাল ফর্ম ছিল। EG যে Proxy :: Proxy Trueকাজ করে, তবে এটি হিসাবে এটি লেখাই ভাল Proxy :: Proxy 'True
স্টিভেন আর্মস্ট্রং

1
কোন ধরণের সিস্টেমগুলিকে শ্রেণিবদ্ধ করা যেতে পারে সেই অনুযায়ী বিভিন্ন অক্ষকে ভেঙে না ফেলা ভাল বলে মনে হয়। বেরেনড্রেগেটের ল্যাম্বডা কিউবটিতে ইতিমধ্যে তিনটি রয়েছে এবং অতিরিক্ত একক দুর্বল-শক্ত অক্ষের সাথে আপনি স্থির বনাম গতিশীল এবং প্যারাম্যাট্রিক বনাম অ্যাডহক পলিমারফিজমও অন্তর্ভুক্ত করছেন (যেটি তৈরির জন্য বান্দার কৌশলটি 'কাজটি বেশিরভাগ ক্ষেত্রে করতে দেয় being ')।
ব্যবহারকারী 2141650

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

আপনি সংক্ষেপে সংক্ষেপে ব্যাখ্যা করতে পারেন '[xs]? এটি পরিষ্কারভাবে একটি নয় Char, তবে বিকল্প সিনট্যাক্সটি কীভাবে কার্যকর TypeOperatorsবা DataKindsসক্ষম করে তা আমি দেখতে পাচ্ছি না । এটি কি কোয়ারকোটিটিং কিছু ধরণের?
wchargin

10

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

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

অবশ্যই, সমস্ত নকশার নীতিগুলি কোনও টাইপ সিস্টেমে প্রয়োগ করা যায় না, তবে আপনার টাইপ সিস্টেমটি যত শক্তিশালী হয়, তত বেশি নকশার নীতিগুলি আপনি সংকলকটিতে প্রয়োগ করতে পারেন।

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

শক্তিশালী টাইপিং অচিরাচরিত ও স্যানিটাইজড ইনপুটের মতো জিনিসের মধ্যে পার্থক্য তৈরি করতে সহায়তা করে যা সুরক্ষায় সহায়তা করতে পারে।

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

মূল অসুবিধাটি ভাষা এবং ভাষার দৃষ্টান্তের সাথে অপরিচিততা এবং এটি সময়ের সাথে সংশোধনযোগ্য। অন্য যে, আমরা এটি চেষ্টা করার মতো ভাল পেয়েছি।


8

সরাসরি উত্তর না থাকায় (যেহেতু আমি এখনও হ্যাশেলের +30.000 এলওসি কোড বেসগুলিতে কাজ করি নি :( ..), আমি আপনাকে https://www.fpcomplete.com/business/resources/case-studies পরীক্ষা করার জন্য অনুরোধ করছি / যা প্রকৃত শিল্প সেটিংসে হ্যাশেল সম্পর্কিত অনেকগুলি কেস স্টাডি বৈশিষ্ট্যযুক্ত।

- আরেকটি ভাল নিবন্ধ আইএমভিইউ, যে তাদের অভিজ্ঞতা Haskell পরিবর্তন বর্ণনা হয় http://engineering.imvu.com/2014/03/24/what-its-like-to-use-haskell/

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

আমি প্রস্তাবিত সংস্থাগুলির কয়েকটি লিঙ্ক ফেলে দেব, যেহেতু আপনি একবারে বেশ কয়েকটি প্রশ্ন জিজ্ঞাসা করছেন:

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


1
উত্তরের জন্য ধন্যবাদ, তবে, fpcomplete.com / ব্যবসায় / রেসোর্সেস / কেস স্টুডিজের কেস স্টাডি আর উপলব্ধ নেই।
সৌরভ নন্দ


3

আমি যা দেখেছি:

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

আমি কি বিশ্বাস করি

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

প্রশ্ন উত্সাহ

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

বিভাগ তত্ত্ব

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

প্রকারভেদে আরও

আপনি প্রকারের সাথে প্রোগ্রামিং এবং এর কৌশলগুলি সম্পর্কে আরও শিখতে (যা তার মজাদার কারণে খুব দ্রুত ঘটে) আপনি টাইপ সিস্টেমের সাথে আরও প্রকাশ করতে চান। সেক্ষেত্রে আমি নিম্নলিখিত কয়েকটি সংস্থান ঘুরে দেখব এবং সরঞ্জাম বিক্রেতাদের সচেতন করে তুলতে আমার সাথে যোগ দেবো যে আমরা এই বৈশিষ্ট্যগুলি সহ শিল্প মানের মানের সরঞ্জামগুলি কেবল এমন কিছুতে প্যাকেজড করতে চাই যা ইন্টারফেসের (যেমন চুক্তি রুবি) সহজেই প্রকাশ করতে পারে:


2

প্রথমত, আমি অনুভব করি যে দুর্বলভাবে টাইপ করা বনাম দৃ typ়ভাবে টাইপ করা, এবং স্থির বনাম গতিশীল টাইপের মধ্যে উত্তরগুলির মধ্যে একটি বিভ্রান্তি রয়েছে। প্রদত্ত ওপিটিকে স্পষ্টভাবে পার্থক্য তৈরি করে:

একটি শক্তিশালী টাইপ সিস্টেম এমন একটি টাইপ সিস্টেম যার মধ্যে একটি সংকলন-সময় সীমাবদ্ধতা বা রান-টাইম বৈশিষ্ট্য থাকে যা আপনাকে আকর্ষণীয় মনে হয়।

একটি দুর্বল টাইপ সিস্টেম হ'ল একটি টাইপ সিস্টেম যাতে এই সীমাবদ্ধতা বা বৈশিষ্ট্যটির অভাব রয়েছে।

উদাহরণস্বরূপ, সি, সি ++ এবং জাভা স্থিরভাবে টাইপ করা হয় যেহেতু সংকলন সময়ে ভেরিয়েবল টাইপ করা হয়। তবুও, সি এবং সি ++ দুর্বলভাবে টাইপ করা বিবেচনা করা যেতে পারে কারণ ভাষা void *পয়েন্টার এবং ক্যাসেট ব্যবহার করে বিধিনিষেধকে বাইপাস করতে দেয়। এই বিষয়ে আরও।

এই পার্থক্যটির ভিত্তিতে, শক্তিশালী টাইপিং আরও ভাল হতে পারে। আগের ব্যর্থতা তত ভাল।

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

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


-1

বৃহত্তর অ্যাপ্লিকেশনগুলিতে এই শক্তিশালী টাইপ সিস্টেমগুলি এবং স্ট্যাটিক / কম্পাইল-টাইম বৈশিষ্ট্যগুলি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে কেউ কোথায় পড়তে পারে?

পূর্ববর্তী উত্তর থেকে https://www.fpcomplete.com/business/resources/case-studies/

এই শক্তিশালী বৈশিষ্ট্যগুলির মধ্যে কীভাবে একজন স্ট্যান্ডার্ড "হ্যালো ওয়ার্ল্ড" ধরণের পরিচিতি ছাড়িয়ে যায়?

এটি সত্যিই শক্তি তৈরির জন্য অন্য যে কোনও ভাষার মতো

কেউ কীভাবে একটি ব্যবসায়-ডোমেন সমস্যার মডেল করতে সমৃদ্ধ ধরণের সিস্টেম ব্যবহার করতে পারে?

বিমূর্ত ডেটা প্রকার বা আরও সাধারণভাবে বহুবচন ব্যবহার করে

আপনি 30,000 এলওসি + জোনে থাকাকালীন কি সিস্টেমটি সাহায্য করে বা বাধা দেয়?

এটি সমস্ত উপায়ে সহায়তা করে। টাইপ সিস্টেমটি আপনাকে কোডটি লিখতে সহায়তা করে কারণ এটি আপনাকে যে ফলাফলটি পেতে চায় তা আকৃতিটি বলে। আসলে আগদা আপনার জন্য কোড লিখুন।

পিএস: কোনও টাইপ সিস্টেম থাকার এবং টাইপগুলি নিজে লিখতে ভুল করবেন না, যা বোকামি: কম্পিউটার এটি আপনার জন্য করতে পারে।

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

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

আপনি যদি প্রকৃতপক্ষে প্রকারভেদ এবং বিমূর্ততা সম্পর্কে জানতে চান তবে সর্বোত্তম ভূমিকা হ'ল বোঝার ধরণ, ডেটা বিমূর্তি এবং পলিমারফিজম

এটি একটি কাগজ, সুন্দর ছবিগুলির সাথে কেস স্টাডি নয়, তবে এটি আলোকিত করে ing


-2

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

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

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

আপনি যদি একটি খুব ছোট প্রোগ্রাম লিখতে চান, সম্ভবত একটি বৃহত্তর অ্যাপ্লিকেশন নিয়ে কাজ করার জন্য কয়েকটি লাইনে একটি ফাংশন সংজ্ঞায়িত করছেন, তবে আপনার কেবল ক্লাস ঘোষণা করার জায়গা নেই। নিশ্চয় এটি জাসদের মতো কুলুঙ্গি টাইপ করা ভাষা?


আপনি কি টাইপড / টাইপড বা স্ট্যাটিকালি টাইপড / ডায়নামিকালি টাইপ করেছেন? জাভাস্ক্রিপ্টটি টাইপ করা হয়নি তবে গতিশীলভাবে টাইপ করা হয়েছে।
জর্জিও

2
আপনি প্রকারগুলি সংজ্ঞায়িত করতে হবে না। Haskell, ocaml, SML, এফ # ...: কোন ভদ্র ভাষা আপনার জন্য ধরনের অনুমান হবে
নিকোলাস

1
যখন আপনি দৃ strongly়ভাবে টাইপ করা ভাষায় অন্য সমস্ত কিছু টাইপযুক্ত না থেকে ব্যবহৃত হয়, যখন আমি বলি যে আমি 'ক্লাসগুলি তৈরি কর' তার অর্থগুলি নির্ধারণ করুন তবে নিশ্চিত হন যে আপনি ভের বা যে কোনও কিছু ব্যবহার করতে পারবেন, তবে এটি কেবল একটি সংকলক কৌশল
এওয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.