প্রোগ্রামিং ভাষার নকশায় কিআইএসএস নীতি প্রয়োগ করা হয়?


14

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

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

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

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

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

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


4
আপনি কি ভাষাগুলির বেসিক পরিবারটি অনুসন্ধান করেছেন (বা অন্তত তাদের পিছনে মূল উদ্দেশ্য)?

4
বেসিক এবং পাস্কাল ... উভয়ই নির্দেশমূলক ভাষা হিসাবে ডিজাইন করা হয়েছে।
মাইকেল ব্রাউন

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

7
স্কিম (র) বছরের কয়েক বছর ধরে (দশক?) একটি শিক্ষণ ভাষা হিসাবে ব্যবহৃত হত এবং এলআইএসপি এবং আলগোলকে সহজ করে (এবং আরও বেশি হতে পারে) দ্বারা এটি বিকশিত হয়েছিল। এসআইসিপি বইটি নিজেই ভাষা শেখাতে খুব কম সময় নেয়। এছাড়াও, ডিএসএলগুলি মনে আসে।
vpit3833

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

উত্তর:


15

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

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

এখানে সিনট্যাক্সের কয়েকটি সাধারণ উদাহরণ রয়েছে:

শুধুমাত্র একটি লুপিং নির্মাণ

একটি লুপ নিম্নলিখিতগুলির মতো দেখতে পারে:

অগণিত চক্র

for {
}

লুপ করার সময়

for <conditional> {
}

লুপ জন্য Traতিহ্যগত

for i := 0; i < 10; i++ {
}

ফরচ লুপ

// works for maps or arrays
for k, v := range arr {
}

একাধিক উদ্দেশ্য স্যুইচ

switch {
    // cases must be evaluate to a boolean
}

switch <value> {
}

switch t := <value>; t {
    // can use t inside
}

একাধিক রিটার্ন

return val1, val2, ...
  • নিক্ষেপের প্রয়োজনীয়তা সরিয়ে দেয় (ত্রুটিটি শেষ ফেরতের মান হিসাবে পাস করুন)
  • পরামিতিগুলির প্রয়োজন সরিয়ে দেয়
  • টিপলসের প্রয়োজনীয়তা সরিয়ে দেয়

ইন্টারফেস

type X interface {
    DoSomething()
    String() string
}
  • জেনেরিক হিসাবে একই সমস্যা সমাধান করে
  • বিমূর্ততা অনুমতি দেয়

এমবেডিং

type A struct {
    Thing string
}

type B struct {
    A // embeds A in B, so B.Thing refers to A.Thing
}
  • উত্তরাধিকার হিসাবে একই সমস্যা সমাধান করে
  • ক্লাসের জন্য প্রয়োজন বিলোপ

চ্যানেল

Semaphores প্রয়োগ করতে ব্যবহার করা যেতে পারে

var c = make(chan bool, 1)
c<-true // semaphore lock
<-c // semaphore free

থ্রেডের মধ্যে বার্তা প্রেরণের জন্য ব্যবহৃত হয়

func produce(c chan<- bool) {
    for {
        c <- true
    }
}
func consume(c <-chan bool) {
    for {
        <-c
    }
}

var c = make(chan bool)
go produce(c)
go consume(c)

অ্যাসিক্রোনাস ইভেন্টগুলি পরিচালনা করতে ব্যবহার করা যেতে পারে

func async() chan bool {
    var c = make(chan bool)
    go doSomethingAsync(c)
    return c
}

// wait for long async process to finish
c := async()
select {
    case _ = <-c:
}

উপসংহার

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

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

KISS ভাষার সুবিধা হ'ল idiomatic কোড লেখা সম্ভব, কারণ কোড শৈলী ভাষা দ্বারা সীমাবদ্ধ। উদাহরণস্বরূপ, গো-তে আপনি এই জাতীয় কিছু লিখতে পারবেন না:

if <condition>
    statement;

আপনার কোঁকড়ানো-ধনুর্বন্ধনী ব্যবহার করতে হবে:

if <condition> {
    statement;
}

বাক্য গঠনতে এর আরও অনেক উদাহরণ রয়েছে, যা অন্যান্য লোকের কোড পড়া সহজ করে তোলে।

বৈশিষ্ট্যযুক্ত ভাষার চেয়ে KISS ভাষার সুবিধা:

  • অন্যের কোড বোঝা সহজ
  • পুরো ভাষাটি ছাঁটাই করা সহজ (সি ++ বোঝা শক্ত হওয়ার জন্য কুখ্যাত)
  • বাক্য বিন্যাস নয়, অ্যালগরিদমে ফোকাস করুন

5
আমার বিনীত মতে, লুপের জন্য প্রচলিত সিনট্যাক্সটি কেআইএসএস নয়। অবশ্যই এটি প্রতিটি সি-এর মতো প্রোগ্রামারের সাথে পরিচিত, তবে আমি এটি প্রথমবারের মতো শিখেছি: আমি খুব বিভ্রান্ত হয়েছিলাম। বেসিক আরও KISS for i=1 to 10for item in group
:,

3
@ মউভিচিয়েল - লুপের জন্য আমি খুব কমই গতানুগতিক ব্যবহার করি না। সমস্যাটি কখনই 10 হবে for i = 1 to 10কিনা তা হ'ল iএটি ভাষা নির্ভর হতে পারে (ব্যাশে 10 টি অন্তর্ভুক্ত রয়েছে, পাইথন নেই)। লুপের জন্য প্রচলিত সর্বজনীন।
বিটগ্যামিট

+1, বিশেষত সংক্ষিপ্তকরণের সুবিধা সম্পর্কে সংক্ষিপ্তসার জন্য।
জর্জিও

1
কেস স্টাডি আকর্ষণীয় হিসাবে যান কারণ এটির প্রতিরোধকারীরা এটি KISS ভাষা হিসাবে বিবেচনা করে না। আসলে, যুক্তিটি এরকম হয়: একটি "সাধারণ" ভাষা "সরল" কোড বা সহজ বোঝার দিকে পরিচালিত করে না। কোডটি বোঝা সহজ হওয়ার জন্য কখনও কখনও আরও জটিলতা থাকতে হবে (বলুন, ভাল জেনেরিক সমর্থন)।
আন্দ্রেস এফ।

14

আমি মনে করি পাইথনের জেনটি জানায় যে পাইথন একটি সাধারণ ভাষা আমার চেয়ে আরও ভাল কেন:

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

@ জর্জিওর প্রতিক্রিয়াতে সম্পাদনা করুন

আপনার প্রশ্ন হিসাবে বলা হয়েছে,

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

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

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

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


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

@ জর্জিও - এটি প্রায় আশেপাশের অনেক বিকাশকারীর অভিজ্ঞতা যে পাইথন আসলে একটি সরল ভাষা। শেখার জন্য সহজ, লেখার পক্ষে সহজ এবং পড়ার পক্ষে সহজ। উদ্ধৃতি সম্পর্কে, পাইথনটি যেমন "ব্যাটারি অন্তর্ভুক্ত" হয়, আপনি import thisকমান্ডের সাহায্যে ভাষা থেকে সরাসরি এটি পেতে পারেন ।
mouviciel

1
টিসিএলও এর জন্য একটি ভাল উত্তর এবং আইআইআরসিও ছিল পিইআরএল জটিলতার প্রতিক্রিয়া।
জে কে।

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

1
পাইথন যতক্ষণ না বেশিরভাগ মানুষ __magic_function __ () এবং @ সেক্টর থেকে দূরে থাকেন Py
weberc2

3

"সরলতা" বজায় রাখার একটি প্রধান চাবিকাঠি হ'ল জটিলতা কখন প্রয়োজনীয় হবে তা চিহ্নিত করা এবং সিস্টেমের এমন অংশগুলি থাকতে পারে যা এটির সাথে সর্বোত্তমভাবে মোকাবেলা করতে পারে, তাই করুন। একক ধরণের অবজেক্ট রেফারেন্স থাকা যা অপরিবর্তনীয় মান, পরিবর্তনীয় মান এবং সত্তার মধ্যে কোনও পার্থক্য তৈরি করে না, জাভাটিকে "সরল" করে তোলে, মান এবং সত্তার মধ্যে পার্থক্য করার প্রয়োজনকে দূর করে না; এটি প্রোগ্রামারদের এটি করতে সহায়তা করার জন্য কেবল সরঞ্জাম থেকে বঞ্চিত করে।

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

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

  • যে কোনও আকারের কোনও নন-রিং ইন্টিজার কোনও আকারের একটি রিংকে দেওয়া যেতে পারে; একটি রিং কেবল সমান বা ছোট আকারের একটি রিংকে বরাদ্দ করা যেতে পারে ।

  • একটি রিং-র পূর্ণসংখ্যা এবং একটি রিং জড়িত রিলেশনাল অপারেটরগুলি ব্যতীত অপারেশনগুলি পুরোপুরি সংক্ষিপ্তভাবে রিং ধরণের রূপান্তর করবে।

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

  • উপরে উল্লিখিত ব্যতীত রিংগুলি একই আকার বা এর চেয়ে কম বেশি রিংয়ের সাথে সীমাবদ্ধ।

  • বিভিন্ন ধরণের নন-রিং ইন্টিজারে অপারেশনগুলি এমন একটি সংখ্যার উপরে আপকাস্ট করা উচিত যা অপারেণ্ডের সমস্ত মানকে সামঞ্জস্য করতে পারে, বা কোনও উপযুক্ত প্রকারের উপস্থিতি না থাকলে সংকলক দ্বারা প্রত্যাখ্যান করা উচিত

রিং প্রকারের সংজ্ঞাটি সংখ্যার পূর্ণসংখ্যার প্রকারের দ্বিগুণ বলে মনে হয়, তবে পোর্টেবল কোডের লেখাকে ব্যাপকভাবে সরল করে তোলে। সংখ্যা এবং রিংয়ের জন্য একই স্বাক্ষরবিহীন প্রকারগুলি ব্যবহার করে ধরণের সংখ্যা হ্রাস পায় তবে জটিল নিয়ম বাড়ে যা কার্যকর পোর্টেবল কোড লিখতে প্রায় অসম্ভব করে তোলে।


+1 সম্পূর্ণরূপে সম্মত। একটি "সাধারণ" ভাষা (একটি ছোট অনুমানের অর্থে সহজ) প্রোগ্রামারটির পক্ষে সহজ কোড বা যুক্তি স্বাচ্ছন্দ্যে পৌঁছায় না।
আন্দ্রেস এফ।

দুর্দান্ত মন্তব্য। জটিলতা যুক্ত করার জন্য ব্যয় এবং সুবিধার দিক বিবেচনা করা উচিত।
ব্যবহারকারী 1071847

2

তর্কসাপেক্ষভাবে, এই লাইনের সাথে টিসিএল তৈরি করা হয়েছিল। একক ম্যান পৃষ্ঠায় পুরো ভাষাটি কেবল 12 নিয়মে বর্ণিত হতে পারে । এটি উল্লেখযোগ্যভাবে সহজ এবং সামঞ্জস্যপূর্ণ।

টিসিএল এর স্রষ্টা নিম্নলিখিতগুলি মূল লক্ষ্য হিসাবে দাবি করেছেন:

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

" টিসিএলের ইতিহাস " থেকে - http://www.tcl.tk/about/history.html


2

KISS এর কারণে যদি কোনও ভাষা তার নকশায় স্থির থাকে তবে তা বাড়তে পারে না। যে ভাষা বাড়তে পারে না সে মারা যায়।

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

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

এটি এক ঘন্টা দীর্ঘ ভিডিও তবে দেখার মতো। ভাষা নকশা সম্পর্কে কথা বলার সময় যদি আপনি না জানেন যে গাই স্টিল কে আসলে আপনার উচিত।

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

যেহেতু আপনি এখানে ভাষা নকশা সম্পর্কে জানতে এসেছিলেন এবং আমি আপনাকে কেআইএসএস ব্যবহার না করার কারণ দিয়েছিলাম তা কেবল ন্যায্য যে আমি এমন কিছু বিষয় উল্লেখ করেছি যা আমি ভাষা নকশায় সহায়তা পাই। স্বীকৃতিগুলির জ্ঞানীয় মাত্রা

সম্পাদনা

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

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


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

3
@ অ্যান্ড্রেসচেইনার্ট গাইডের উত্তর দেওয়ার কীভাবে তা স্পষ্ট করে দেয় যে লিঙ্কগুলি সর্বদা সংক্ষিপ্তসার এবং / অথবা প্রাসঙ্গিক উদ্ধৃতি সহ থাকতে হবে।
টমাসের মালিক

3
আমি নিশ্চিত নই যে আমি আপনার মূল্যায়নের সাথে একমত হতে পারি। উদাহরণস্বরূপ, টিসিএল উল্লেখযোগ্যভাবে সহজ। এটি কেবল 11 টি নিয়ম ব্যবহার করে এটি দীর্ঘকাল ধরে চলে। তবুও, এটি যতটা সহজ, এটি তার অস্তিত্বের 20+ বছরে যথেষ্ট বৃদ্ধি পেয়েছে। এটির এখন 12 টি নিয়ম রয়েছে, যা প্রমাণ করে যে এটির পাঠাগারটি কেবল বেড়ে ওঠেনি, তবে এর মূল প্রকৃতিটি তার সরলতা বজায় রেখেও বৃদ্ধি পেতে দেওয়া হয়েছে।
ব্রায়ান ওকলে

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

3
@ গুয় কোডার: অন্যদিকে, আপনি একটি লিঙ্ক পোস্ট করেছেন এমন ভিডিওর মনে হয়েছে যা আপনার উত্তরের শুরুতে আপনি যা বলেছিলেন তা কিছু আলাদা বলেছিল, অর্থাত্ কোনও ভাষার কিছু নির্দিষ্ট বৈশিষ্ট্য দেওয়া উচিত যা এর ব্যবহারকারীদের (প্রোগ্রামারদের) মঞ্জুরি দেয় ভাষা প্রসারিত করুন (নতুন গ্রন্থাগার যুক্ত করুন)। এটি বলে না যে মূল ভাষাটি অনির্দিষ্টকালের জন্য বৃদ্ধি পেতে হবে।
জর্জিও

1

এখান থেকে একটি বড় উদ্ধৃতি ব্রুস ম্যাককিনি এর হার্ডকোর ভিসুয়াল বেসিক , যা বেসিক, এর ডিজাইনারদের মুখ রাখে শব্দ চালু হার্ড এবং Kurtz যার । আমার জোর।

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

জিনিসগুলি যতটা সম্ভব সহজ করুন Make তবে সহজ নয়।

সেই উক্তিটি বেসিকের মূল ডিজাইনার, জন কেমেনি এবং থমাস কুর্তজ দ্বারা রচনা করা থাকলে এটি আরও সরল করা হত:

জিনিসগুলি যতটা সম্ভব সহজ করুন।

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


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

... এর অর্থ হ'ল সি এর নিয়মগুলি এটিকে কখনও কখনও সংখ্যা হিসাবে এবং কখনও কখনও রিংয়ের সদস্য হিসাবে বিবেচনা করতে হয়, এটি পরিষ্কার, পোর্টেবল কোড লিখতে প্রায় অসম্ভব করে তোলে।
সুপারক্যাট 13'14

1

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

আপনি "সরল" বলতে কী বোঝাতে চেয়েছেন তা পরিষ্কার করে দেওয়া একটি ভাল বিষয়, কারণ আমার মতে একটি সাধারণ প্রোগ্রামিং ভাষা হ'ল ন্যূনতম সিনট্যাক্স এবং কয়েকটি বৈশিষ্ট্য (স্কিম, ফোরথ, এমএল), যা আপনার সংজ্ঞায় সরাসরি অনুবাদ করে না। আমি মনে করি আপনি সত্যিই র‌্যাড (দ্রুত প্রয়োগের বিকাশ) মাথায় রেখে ভাষা নকশাগুলি সন্ধান করছেন এবং এর মধ্যে বেশ কয়েকটি রয়েছে। উদাহরণস্বরূপ, এই স্ট্যাকওভারফ্লো থ্রেডটি দেখুন: /programming/66227/ কি-is-the-best-mult-platform-rad-language


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

1

আমি অবাক হই যে এখনও কেউ সি এর উল্লেখ করেনি, যদিও এটি সরলতাটিকে বেশ কয়েকটি গুরুত্বপূর্ণ উপায়ে প্রথমে রাখে, প্রায়শই এমন মৌলিক উপায়ে প্রোগ্রামাররা সরলতার প্রশংসা করতে ব্যর্থ হন:

  • কোনও লুকানো যাদু নেই। আপনি যদি a + bসি তে লিখেন তবে আপনার গ্যারান্টি রয়েছে যে এটি সর্বাধিক একক সমাবেশের নির্দেশকে সংকলন করবে।

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

  • আপনি মেমরির মধ্যে যে সমস্ত আকর্ষণীয় ডেটা স্ট্রাকচার তৈরি করতে চাইতে পারেন তার বিবরণ দেওয়ার সময় তথ্যের ধরণেরগুলি যেমন সহজ হতে পারে: কেবলমাত্র সিপিইউ + সমষ্টি ( struct) + পুনরাবৃত্তি (অ্যারে) + রেফারেন্স (পয়েন্টার) পরিচালনা করতে পারে এমন একমাত্র মৌলিক প্রকার রয়েছে )।

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

  • বৈশিষ্ট্যগুলির অরথোগোনালিটি: আপনি নিখরচায় বৈশিষ্ট্যগুলি একত্রিত করতে পারেন এবং তারা প্রত্যাশার সাথে একসাথে কাজ করবে। অনেকগুলি ভাষা নির্দিষ্ট সংস্থাগুলিকে কেবল সংজ্ঞায়িত প্রসঙ্গে উপস্থিত হওয়ার অনুমতি দিয়ে এটি ব্যর্থ করে।

    উদাহরণস্বরূপ C এবং C ++ এ চলক দৈর্ঘ্যের অ্যারেগুলি ধরুন: সি সর্বকালের রানটাইম দৈর্ঘ্যের অনুমতি দেয় যখন সর্বাধিক উদার অনুরোধগুলি সি ++ স্ট্যান্ডার্ডকে প্রসারিত করার জন্য কেবলমাত্র স্বয়ংক্রিয় অ্যারেগুলির মতো নির্দিষ্ট প্রেক্ষাপটে এবং এমনকি কেবলমাত্র প্রথম মাত্রায় অনুমতি দেয়। এটি সি রানু টাইমে পরিচিত মাপের সাথে সত্য বহুমাত্রিক অ্যারে পরিচালনা করতে দেয়, যেখানে সি ++ প্রোগ্রামাররা data[k + (j + i*lineLength)*lineCount]বারবার লিখতে হ্রাস পায় ।

    এর আর একটি উদাহরণ পয়েন্টার: সিতে ডেটা পয়েন্টার এটি অন্য কিছু ভেরিয়েবলের একটি মেমরি ঠিকানা ধারণ করে কেবল একটি ভেরিয়েবলের চেয়ে বেশি বা কম কিছুই নয়। যেহেতু পয়েন্টারটি নিজেই একটি পরিবর্তনশীল, তাই ডাবল পয়েন্টারটি একটি ভাল-সংজ্ঞায়িত জিনিস। অর্থাত কী intএবং কী দেওয়া হয়েছে int*, এটি কী হবে তা স্পষ্ট int**। এটি সি ++ রেফারেন্সের সাথে তুলনা করুন যেখানে আপনার একেবারে কোনও ক্লু নেই যা int&&কী বোঝায় intএবং int&!)

এটি সত্য যে এটি স্পষ্টতই এই সরলতা যা সি এত ঘৃণা অর্জন করেছে: ভাষার সরলতা প্রোগ্রামারদের পক্ষে তাদের চেয়ে ভাল তার চেয়ে বেশি স্বাধীনতার মঞ্জুরি দেয়, যার ফলে অপরিবর্তিত আচরণ এবং ভুলভাবে চিহ্নিত পয়েন্টারগুলির সাথে অনেক সমস্যা দেখা দেয়। বিশেষত অরথোগোনালটির সরলতা যা একজন প্রোগ্রামারকে একটি পরিবর্তনশীল হিসাবে সংজ্ঞা int (*array[m])(struct foo* (*arg)[n])দিতে দেয় যা পাঠকদের মাথা ব্যাথার প্রবণতা দেয় কারণ কয়েকটি জটিল বৈশিষ্ট্যগুলির উদার সংমিশ্রণে জটিল জটিল জিনিসগুলি খুব সংক্ষিপ্ত আকারে প্রকাশ করা যেতে পারে । এটি সরলতার ধরণ যা সি সি ছাড়িয়ে যায় এবং যা এটি ব্যবহারের জন্য কঠোর ভাষা হওয়ার খ্যাতি দেয়।

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


ডাউনওয়োটার কি তাদের ভোটের কারণ ব্যাখ্যা করে কোনও বার্তা রেখে যেতে পারে?
জর্জিও

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

@ সিমোনবি আমার পোস্টটি কী তা আপনি স্পষ্টভাবে বুঝতে পারেন নি। পূর্ণসংখ্যার প্রকারের সম্পর্কে সরলতা হ'ল: একটি পূর্ণসংখ্যার ধরণের একটি আকার থাকে (বাইট এবং বিটগুলিতে), এবং স্বাক্ষরিত বা স্বাক্ষরযুক্ত হতে পারে। আপনি এই দুটি orthogonal বৈশিষ্ট্যগুলির যে কোনও সমন্বয় ব্যবহার করতে পারেন। এই অরথোগোনালিটি নিয়েই আমি কথা বলছি। সিতে সমস্ত বৈশিষ্ট্য রয়েছে যা সম্পূর্ণরূপে বাস্তব হার্ডওয়্যার শোষণের জন্য প্রয়োজন এবং এটি একটি নির্দিষ্ট জটিলতা জোগায়। যাইহোক, সি এই জটিলতার সাথে যেভাবে আচরণ করে তা হল প্রোগ্রামারকে জটিল স্টাফ করতে দেওয়ার জন্য অर्थোগোনাল ফ্যাশনে সাধারণ ধারণাগুলির সংমিশ্রণ করা ।
মাস্টার - মোনিকা

0

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

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

আমি বিশ্বাস করি সি # ভাষার সরলীকরণের সেই বিভাগে পড়ে।


আপনি কি বলতে চাইছেন যে সি # প্রথমদিকে সি ++ এর সরলকরণ হিসাবে ডিজাইন করা হয়েছিল?
জর্জিও

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

ক্রস-প্ল্যাটফর্ম বিকাশকে সহজ করার দক্ষতার অর্থ এই নয় যে ভাষা নিজেই সহজ। কিছু ক্রস প্ল্যাটফর্ম হতে পারে তবুও এবং নিজের মধ্যে এখনও সহজ নয়।
ব্রায়ান ওকলে

@ ব্রায়ান সম্মত - জাভা ডিজাইনটি বিবেচনায় নিয়েছিল যে ক্রস প্ল্যাটফর্ম প্রোগ্রামগুলি (সেই সময়ে) সহজ ছিল না এবং সহজ প্রোগ্রামগুলি তৈরি করতে আপনার একটি সহজ ভাষা প্রয়োজন এবং প্রোগ্রামে প্ল্যাটফর্মের নির্দিষ্ট কোড হ্যান্ডলিংয়ের জটিলতা অপসারণ করার প্রয়োজন ছিল।
mattnz

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

-2

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

  1. কোডের "পঠনযোগ্যতা" - ভাষা কতটা ভালভাবে অবজেক্টস, পদ্ধতিগুলি ইত্যাদির সাথে সংযোজন করে
  2. ভাষার এপিআই এবং ইন্টারফেসের ধারাবাহিকতা।

এমন অনেকগুলি ভাষা রয়েছে যা এই জিনিসগুলি ভাল করে - তবে আমার মাথায় যা popুকে যায় তা এমন একটি ভাষা যা 'প্রোগ্রামিং ভাষা হিসাবে' জিনিসগুলি ভাল করে না : পিএইচপি।

[অস্বীকৃতি - আমি পিএইচপি লিখেছি এবং পিএইচপি এখনও সাধারণ ওয়েব প্রকল্পগুলির জন্য আমার 'ভাষাতে যান'। এটি প্রেমের সমালোচনা ...]

প্রথমত, পিএইচপি পরিবেশের পক্ষে ভাল কাজ করে যা এটি সাধারণতঃ ওয়েব সার্ভারগুলিতে চলে। এটি সেট আপ করা সহজ, বজায় রাখা সহজ, ইত্যাদি

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

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

2) "বিল্ট-ইন" ফাংশন - যার আছে অনেক । আমি হয় অন্য কোনও গ্রন্থাগার সন্ধান করার বা কিছুটা কার্যকারিতা বাস্তবায়নের কিছু খরগোশের গর্ত পেরিয়েছি যেহেতু পরে কোনওভাবে হোঁচট খেয়ে যায়impossiblyfound_basefunction()

আমার মতে সরলতা ধারাবাহিকতা।


-3

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

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

প্রোগ্রামিংয়ের জন্য, 2 বেশ কয়েকটি বিখ্যাত বিমূর্ত মডেল উপস্থিত রয়েছে:

  • একটি হ'ল টিউরিং মেশিন যা একটি মেশিন এবং একটি সাধারণ শিক্ষামূলক মডেল সংজ্ঞা দেয় যা কম্পিউটার যা করতে পারে তার সমস্ত কিছু গণনা করতে সক্ষম comp
  • অন্যটি হ'ল চার্চ এট-এর ল্যাম্বদা-ক্যালকুলাস। অল। এটি ক্ষমতার সমতুল্য

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

লিস্প এবং স্কিমটি হ'ল সহজ, কমপক্ষে সিনট্যাক্স অনুযায়ী। প্রোগ্রামিং ল্যাঙ্গুয়েজে সিনট্যাক্স একটি বড় সমস্যা (এ কারণেই সম্ভবত তারা সর্বদা পুনরায় নতুন করে তৈরি করা হয়)। সি ++ এর ক্ষেত্রে মানব মস্তিষ্কের জন্য ভবিষ্যদ্বাণী করা প্রায় সোর্স নয় যে সংকলক দ্বারা কিছু উত্সের রেখা কীভাবে ব্যাখ্যা করা হয়।)

লিপস কমান্ডের জন্য একটি সাধারণ ফর্ম প্রবর্তন করে সিনট্যাকটিকাল জটিলতা পুরোপুরি হ্রাস করছে:

(command param1 param2 ...)

এটি কোনও মেথড কল হতে পারে, যেমন

(max 1 2 3 4)

পাশাপাশি একটি if শাখা, লুপ ইত্যাদি

(if (< 1 2) 
    (write 4)
    (write 5))

(এখানে সমস্ত কোড সিউডো-লিস্প / ডায়ালেক্ট অগ্নোস্টিক)

ফর্ম

(command param1 param2 ...)

একটি তালিকা হিসাবে ব্যাখ্যা করা যেতে পারে

(item1 item2 item3)

এবং এটি লিস্পস সরলতা এবং সৌন্দর্যের ভিত্তি। কারণ নেস্টেড তালিকাগুলি ( ifবিবৃতি উদাহরণের মতো) গাছ গঠন করে এবং এগুলি মেশিনের মাধ্যমে এবং মেশিনের সামনের মানুষ উভয়ই সহজেই বুঝতে পারে।

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

আমি মনে করি প্রোগ্রামিংয়ের জন্য লিস্পের একটি KISS রয়েছে। ম্যাক্রো ব্যবহার করে আপনি সিনট্যাক্সটি হেরফের করতে পারেন এমন একটি ঘটনা ঘটেছে যা লিস্প বেশ গতিশীলভাবে বিবর্তিত হয়েছে। একটি নতুন ভাষার বৈশিষ্ট্য যেমন - অবজেক্ট ওরিয়েন্টেশন বলা যাক - কেবল ম্যাক্রো সহ একটি ওওপি সিস্টেম লিখুন!

যদিও ওওপি বৈশিষ্ট্যগুলি (সি ++, ওবজ। সি) লিস্পকে 2 বার চতুর্দিকে আউট করা হয়েছিল, লিস্প একাধিকবার বাড়ানো হয়েছিল, শেষ পর্যন্ত সেখানে বিজয়ী ছিল।

এটি লিস্প সম্পর্কে আরও গৌরব, এটি বিকশিত হয় (লিস্পের আকর্ষণীয় নতুন মিউটেশনের জন্য ক্লোজার এবং ক্লোজারস স্ক্রিপ্ট দেখুন)।

KISS এর বৈশিষ্ট্যগুলির জন্য লিস্পসকে কিছু লোক ভাষা শেখানোর পক্ষে পছন্দ করে। ফোগাস তার শিক্ষাগত ভাষার ব্লুপ্রিন্টে রূপরেখার মতো ( http://blog.fogus.me/2013/01/21/enfield-a-programming-language-disedigned- for-pedagogy/ )

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

2
এই প্রশ্নের প্রসঙ্গের জন্য ওপি কিআইএসএসকে অত্যন্ত স্পষ্টভাবে সংজ্ঞায়িত করেছে, "গড় কর্মক্ষম অবস্থার অধীনে একজন গড় প্রোগ্রামারকে ন্যূনতম জ্ঞানীয় প্রচেষ্টা দিয়ে যতটা সম্ভব কোড লিখতে এবং বজায় রাখার অনুমতি দিন" । ওপিতে " নির্দিষ্ট প্রোগ্রামিংয়ের ভাষা সম্পর্কে আপনার ব্যক্তিগত মতামতের চেয়ে ডিজাইনারদের (দলিলযুক্ত) উদ্দেশ্যগুলি সম্পর্কে জানতে আগ্রহী "
gnat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.