Clojure বনাম অন্যান্য লিসপ [বন্ধ]


94

আমার প্রশ্নের উদ্দেশ্য হ'ল শিখা যুদ্ধ শুরু করা নয় , বরং প্রতিটি পরিস্থিতিতে কোন পরিস্থিতিতে "কাজের সেরা হাতিয়ার" তা নির্ধারণ করা।

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

আমি না (ক নবাগত আরো) একটি পাতার মর্মর বিশেষজ্ঞ কিন্তু প্রত্যেক এই পরিবার আমাকে মুগ্ধ, যেমন সাধারণভাবে কার্যকরী প্রোগ্রামিং করে।

ক্লোজারের সুবিধা (এবং "অন্যদের" এর অসুবিধাগুলি):

  • জেভিএম চালায়।

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

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

    • স্ট্যান্ডার্ড, সরল, মাল্টিথ্রেডিং মডেল। কমন লিস্পের স্ট্যান্ডার্ড মাল্টিথ্রেডিং প্যাকেজ রয়েছে?

    • যাদের সব বন্ধনীর গতানুগতিকতা ভেঙে [], {}আর #{}, যদিও প্রচলিত পাতার মর্মর বিশেষজ্ঞদের সম্ভবত আমাকে বলবে যে পাঠক ম্যাক্রো সঙ্গে, আপনি সাফ প্রতীক সেই যোগ করতে পারেন।

ক্লোজারের অসুবিধা :

  • জেভিএম চালায়।
    • কোনও লেজ পুনরাবৃত্তি বা ধারাবাহিকতা নেই। কমন লিস্প কি ধারাবাহিকতা সমর্থন করে? আমার বিশ্বাস, স্কিম উভয়ের জন্য সমর্থন প্রয়োজন support

অন্যের উপকারিতা (বিশেষত প্রচলিত লিস্প) (এবং ক্লোজারের অসুবিধা):

  • ব্যবহারকারী-নির্দিষ্ট পাঠক ম্যাক্রোগুলি।

  • অন্যান্য সুবিধা?

ভাবনা? অন্যান্য পার্থক্য?


15
ব্যক্তিগতভাবে আমি এক ধরণের বন্ধনী পছন্দ করি;) "ক্লিনার" কোডটির মতো দেখায়
Moe

4
আপনার সুবিধাগুলির তালিকায় আমি যা পড়েছি তা থেকে আমি অনুমান করি যে আপনি সম্ভবত এরলং www.erlang.org
পিয়ার স্ট্রিটজিংগার

4
Clojure "recur" বিশেষ ফর্মের মাধ্যমে সুস্পষ্ট লেজ পুনরাবৃত্তি সমর্থন করে। এটি আপনাকে পুচ্ছ পুনরাবৃত্তির সমস্ত সুবিধা পেতে সক্ষম করে তবে আপনি স্পষ্টভাবে এটির জন্য জিজ্ঞাসা করেন (একমাত্র ব্যতিক্রমটি হ'ল এটি বর্তমানে একাধিক ফাংশনের মধ্যে পারস্পরিক লেজ পুনরাবৃত্তি সমর্থন করে না)।
মাইকেরা

4
অন্তত "ধারাবাহিকতা পাসিং স্টাইল" অর্থে ক্লোজওর ধারাবাহিকতা সমর্থন করে। আপনি সঠিক যে এটির প্রথম শ্রেণির ধারাবাহিকতা নেই। দেখতে stackoverflow.com/questions/1173133/continuations-in-clojure
mikera

@ মিমেকেরা: একটি অনুষ্ঠানে পুচ্ছ-পুনরাবৃত্তি। একে অপরকে ডেকে দুটি ফাংশন "ট্রাম্পোলাইনিং" দিয়ে সম্পন্ন করতে হবে যা ধরণের কলডজি (তবে নিজের উপায়ে মার্জিত :-))।
রাল্ফ

উত্তর:


52

অন্যান্য লিস্পের কাছে ক্লোজারকে প্রাধান্য দেওয়ার জন্য আমার ব্যক্তিগত তালিকাগুলি (PS আমি এখনও মনে করি সমস্ত লিপ্স দুর্দান্ত!):

  • জেভিএম চালায় - অতএব জেভিএম নিজেই চমত্কার প্রকৌশলটিতে স্বয়ংক্রিয় অ্যাক্সেস পায় (উন্নত আবর্জনা সংগ্রহের অ্যালগরিদম, হটস্পট জেআইটি অপ্টিমাইজেশন ইত্যাদি))

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

  • ভেক্টর [1 2 3], মানচিত্র {:bob 10, :jane 15}এবং সেটগুলির জন্য দুর্দান্ত বাক্য গঠন #{"a" "b" "c"}- আমি আধুনিক প্রোগ্রামিংয়ের জন্য এই অবশ্যই প্রয়োজনীয় সরঞ্জামগুলি বিবেচনা করি (অবশ্যই তালিকাগুলির তালিকা ছাড়াও!)

  • বাঁধার ফর্মগুলির জন্য আমি ব্যক্তিগতভাবে স্কোয়ার বন্ধনী ব্যবহার পছন্দ (defn foo [a b] (+ a b))করি : উদাহরণস্বরূপ - আমি মনে করি এটি পড়ার জন্য কোডটিকে কিছুটা পরিষ্কার করে।

  • অবিরাম, অবিচ্ছেদ্য ডেটা স্ট্রাকচার সহ অলস, কার্যকরী প্রোগ্রামিংয়ের উপর জোর দেওয়া - বিশেষত সমস্ত মূল ক্লোজার লাইব্রেরি এটি ডিফল্টরূপে সমর্থন করার জন্য ডিজাইন করা হয়েছে

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

  • এটি একটি লিস্প -১ (স্কিমের মতো), যা আমি ব্যক্তিগতভাবে পছন্দ করি (আমি কার্যকরী ভাষায় মনে করি এটি একই নামস্থানে ফাংশন এবং ডেটা রাখার অর্থ বোধ করে)


4
এসটিএমের জন্য +1। এটি স্বয়ংক্রিয়ভাবে ক্লোজিউর ব্যবহার করে ন্যায়সঙ্গত করার পক্ষে যথেষ্ট।
আন্দ্রে ক্যারন

4
আপনি এখনও সিএল-এসটিএম লাইব্রেরি ব্যবহার করে এসটিএম পেতে পারেন।
মাইক ম্যানিলোন

4
@ অ্যান্ড্রে কারন কেবল যদি আপনার প্রয়োজন হয়
রাইটফোল্ড

আপনি যদি কোনও সাধারণ ওয়েবআপ লিখতে এবং এটি হোস্ট করতে চান, বলুন, একটি সস্তা $ 5 / মাসের হোস্ট, এটি সম্ভবত জেভিএমের কারণে ক্লোজারের সাথে সম্ভব নয়, সঠিক?
হেক্সাটোনিক

@ হেক্সাটোনিক আমি খুব অভিজ্ঞ নই তবে এই মুহুর্তে কোনও মেশিনের ব্যবহার কোনও জেভিএম না থাকা বিশ্বাস করা শক্ত।
মাস্টারমেস্টিক

25

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

সাধারণত:

  • কমন লিস্পের একটি সংস্করণ জেভিএম: এবিসিএল-এ চলে

  • অন্যান্য কমন লিস্প বাস্তবায়ন হয় না

  • বেশিরভাগ সিএল বাস্তবায়নে মাল্টিটাস্কিং ক্ষমতা রয়েছে, একটি লাইব্রেরি একটি সাধারণ ইন্টারফেস সরবরাহ করে

  • কমন লিস্পের অ্যারেগুলির জন্য বাক্য গঠন রয়েছে। অন্যান্য ডেটা ধরণের সিনট্যাক্স ব্যবহারকারীর দ্বারা লিখিত হতে পারে এবং বিভিন্ন গ্রন্থাগার দ্বারা সরবরাহ করা হয়।

  • কমন লিস্প কোনও লেজ কল অপ্টিমাইজেশন বা ধারাবাহিকতা সমর্থন করে না। বাস্তবায়নগুলি টিসিও সরবরাহ করে এবং লাইব্রেরিগুলি ধারাবাহিকতার কিছু ফর্ম সরবরাহ করে।


24

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

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

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


4
@ চার্লি ফুল: আমি বিশ্বাস করি যে কমন লিস্পে একটি "বিশুদ্ধভাবে কার্যকরী" স্টাইলে (অবিচ্ছিন্ন ডাটা স্ট্রাকচার সমর্থন ইত্যাদি) প্রোগ্রাম করা সম্ভব তবে শৃঙ্খলার প্রয়োজন। সঠিক?
র‌্যাল্ফ

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

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

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

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

10

এখানে স্কিম (র‌্যাকেট বেশিরভাগ) এবং ক্লোজারের তুলনা সহ একটি ভাল ভিডিও ।

ন্যায়সঙ্গত হওয়ার জন্য, র্যাকেটের কাছে ডেটা প্রকারের জন্য সিনট্যাক্স চিনি (অতিরিক্ত পাঠক স্টাফ) রয়েছে (# হ্যাশ, #, স্কোয়ার বন্ধনী ইত্যাদি)

এছাড়াও, ক্লুজুর সঠিক টেল কল করার একমাত্র উপায় হ'ল recurএটি জেভিএম-এ সংকলনের খারাপ দিক।

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


আমার মনে হয় লিঙ্কটি মারা গেছে।
নওফাল

4
@ নওফাল আমার মনে হয় আমি এটি ঠিক করেছি
ড্যানিল

6
লিঙ্কটি মারা গেছে (আবার?)
অ্যাকাউন্ট নিক্ষেপ করুন

4
দেখে মনে হচ্ছে যে লিঙ্কটিতে ভিডিওটি এখানে পাওয়া যাবে: vimeo.com/22675078
জিডিপি 2

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