আমার আন্ডারগ্রাড ডিগ্রি ছিল কগনিটিভ সায়েন্স এবং আর্টিফিশিয়াল ইন্টেলিজেন্সে। সে থেকে আমার লিস্পের কাছে একটি কোর্সের পরিচয় ছিল। আমি ভেবেছিলাম ভাষাটি আকর্ষণীয় ("মার্জিত" হিসাবে) তবে আমি গ্রেনস্পানের দশম বিধি পেরিয়ে আসার আগ পর্যন্ত সত্যিকার অর্থে এর বেশি কিছু ভাবেনি:
যে কোনও পর্যাপ্ত জটিল সি বা ফোর্টরান প্রোগ্রামে একটি অ্যাডহক রয়েছে, অনানুষ্ঠানিকভাবে নির্দিষ্ট, বাগ-চালিত, কমন লিসপের অর্ধেকের ধীর প্রয়োগ।
গ্রিনস্পানের বক্তব্যটি ছিল (কিছু অংশে) যে অনেক জটিল প্রোগ্রাম অন্তর্নির্মিত অন্তর্নিহিত করেছেন। কোনও ভাষায় দোভাষী তৈরির পরিবর্তে তিনি পরামর্শ দিয়েছিলেন যে লিস্পের মতো ভাষা ইতিমধ্যে অন্তর্নির্মিত (বা সংকলক) অন্তর্ভুক্ত রয়েছে এমন ভাষা ব্যবহার করা আরও বোধ করতে পারে।
সেই সময়ে আমি একটি বরং একটি বড় অ্যাপ্লিকেশনটিতে কাজ করছিলাম যা কাস্টম ভাষার জন্য একটি কাস্টম দোভাষী ব্যবহার করে ব্যবহারকারী-সংজ্ঞায়িত গণনা সম্পাদন করে। আমি লিস্পে এর মূলটি একটি বৃহত আকারের পরীক্ষা হিসাবে পুনরায় লেখার চেষ্টা করব।
এটি প্রায় ছয় সপ্তাহ সময় নিয়েছে। মূল কোডটি ছিল দেলফির of 100,000 লাইনের (একটি পাস্কাল বৈকল্পিক)। লিস্পে এটি 10,000 ডলার লাইনে হ্রাস পেয়েছিল। আরও আশ্চর্যজনক হলেও, লিস্প ইঞ্জিনটি 3-6 গুণ বেশি গতিযুক্ত ছিল। এবং মনে রাখবেন যে এটি ছিল লিস্প নিওফাইটের কাজ! পুরো অভিজ্ঞতাটি আমার পক্ষে বেশ চক্ষু খোলার ছিল; প্রথমবারের মতো আমি একক ভাষায় পারফরম্যান্স এবং ভাব প্রকাশের সংমিশ্রণের সম্ভাবনা দেখেছি।
কিছু সময় পরে যখন আমি একটি ওয়েব-ভিত্তিক প্রকল্পে কাজ শুরু করি তখন আমি বেশ কয়েকটি ভাষার অডিশন দিয়েছিলাম। আমি মিশ্রণে লিস্প এবং স্কিম অন্তর্ভুক্ত করেছি। শেষ পর্যন্ত আমি একটি প্রকল্প বাস্তবায়ন - চেজ স্কিম নির্বাচন করেছি । আমি ফলাফল নিয়ে খুব খুশি হয়েছি।
ওয়েব-ভিত্তিক প্রকল্পটি একটি উচ্চ-পারফরম্যান্স "নির্বাচন ইঞ্জিন" । ডেটা প্রক্রিয়াকরণ থেকে শুরু করে পৃষ্ঠা উত্পন্নকরণের জন্য কোয়েরি করা তথ্য পর্যন্ত আমরা বিভিন্নভাবে স্কিম ব্যবহার করি। অনেকগুলি দাগে আমরা আসলে আলাদা ভাষা দিয়ে শুরু করেছিলাম তবে নীচে সংক্ষেপে বর্ণনা করব সেই কারণে স্কিমে স্থানান্তরিত শেষ হয়েছিল।
এখন আমি আপনার প্রশ্নের উত্তর দিতে পারি (কমপক্ষে অংশে)।
অডিশনের সময় আমরা বিভিন্ন ধরণের লিস্প এবং স্কিম বাস্তবায়নের দিকে নজর রেখেছিলাম। লিস্পের দিকে আমরা তাকালাম (আমি বিশ্বাস করি) অ্যালেগ্রো সিএল, সিএমইউসিএল, এসবিসিএল এবং লিস্প ওয়ার্কস। স্কীমের দিকে আমরা তাকিয়েছি (আমি বিশ্বাস করি) বিগলু, চিকেন, চেজ, গাম্বিত। (ভাষা নির্বাচনটি অনেক দিন আগে ছিল; সে কারণেই আমি কিছুটা দুর্বোধ্য important এটি গুরুত্বপূর্ণ হলে আমি কিছু নোট খনন করতে পারি))
আমরা যে ব্যাটটি সন্ধান করছিলাম তা বন্ধ) ক) দেশীয় থ্রেড এবং খ) লিনাক্স, ম্যাক এবং উইন্ডোজ সমর্থন। এই দুটি শর্ত সম্মিলিতভাবে সবাইকে ছিটকে গেল (কিন্তু আমি মনে করি) অ্যালেগ্রো এবং চেজ আউট - সুতরাং মূল্যায়ন চালিয়ে যাওয়ার জন্য আমাদের বহু-থ্রেডিংয়ের প্রয়োজনটি আলগা করতে হয়েছিল।
আমরা ছোট ছোট প্রোগ্রামগুলির একটি স্যুট একসাথে রেখেছি এবং সেগুলি মূল্যায়ন এবং পরীক্ষার জন্য ব্যবহার করি। এটি বেশ কয়েকটি ইস্যু প্রকাশ করেছিল। উদাহরণস্বরূপ: কিছু বাস্তবায়নে ত্রুটি ছিল যা কিছু পরীক্ষা চালানো থেকে শেষ করতে বাধা দেয়; কিছু বাস্তবায়ন রান-টাইমে কোড সংকলন করতে পারে না; কিছু বাস্তবায়ন প্রাক-সংকলিত কোড সহ রান-টাইম সংকলিত কোড সহজেই সংহত করতে পারে না; কিছু বাস্তবায়নে আবর্জনা সংগ্রহকারী ছিল যা অন্যদের তুলনায় পরিষ্কার (বা স্পষ্টত খারাপ) ছিল; প্রভৃতি
আমাদের প্রয়োজনের জন্য কেবলমাত্র তিনটি বাণিজ্যিক বাস্তবায়ন - অ্যালেগ্রো, চেজ এবং লিসপার্কস - আমাদের প্রাথমিক পরীক্ষায় পাস করেছে। তিনজনের মধ্যে কেবল চেজ উড়ন্ত রঙের সাথে সমস্ত পরীক্ষায় উত্তীর্ণ হয়েছিল। আমি যখন মনে করি যে কোনও প্ল্যাটফর্মে লিসপার্কসগুলির নেটিভ থ্রেড ছিল না (আমার মনে হয় তারা এখন তা করে) এবং আমার কাছে মনে হয় অ্যালিগ্রোর কিছু প্ল্যাটফর্মে কেবল নেটিভ থ্রেড ছিল। তদ্ব্যতীত, অ্যালেগ্রোতে একটি "কল কল" রান-টাইম লাইসেন্স ফি ছিল যা আমি খুব বেশি পছন্দ করি না। আমি বিশ্বাস করি যে লিসপার্কসের কোনও রান-টাইম ফি ছিল না এবং চেজের একটি সরল (এবং খুব যুক্তিসঙ্গত) ব্যবস্থা ছিল (এবং এটি কেবল লাথি মেরেছিল যদি আপনি রান-টাইমে সংকলকটি ব্যবহার করেন)।
এখানে লিস্প এবং স্কিম উভয় ক্ষেত্রে কিছুটা উল্লেখযোগ্য সংখ্যক কোড তৈরি করা কিছু তুলনা এবং বিপরীতে পয়েন্ট:
লিস্পের পরিবেশগুলি আরও বেশি পরিপক্ক। আপনি বক জন্য আরও অনেক ধাঁধা পেতে। (এটি বলার পরে, আরও কোড আরও বেশি বাগের সমতুল্য হয়))
লিস্পের পরিবেশগুলি শেখা আরও অনেক কঠিন। দক্ষ হয়ে উঠতে আপনার আরও অনেক সময় প্রয়োজন; কমন লিস্প একটি বিশাল ভাষা - এবং এটির আগে আপনি বাণিজ্যিক লাইব্রেরিগুলির উপরে যে লাইব্রেরিগুলি যুক্ত করে থাকে সেগুলি পাওয়া যায়। (এই কথাটি বলে, স্কিমের সিনট্যাক্স-কেস লিস্পের যে কোনও একটি জিনিসের চেয়ে অনেক বেশি সূক্ষ্ম এবং জটিল)
লিস্পের পরিবেশগুলি বাইনারিগুলি উত্পাদন করা আরও কিছুটা কঠিন হতে পারে un আপনার বিন্যাসবিহীন বিটগুলি অপসারণ করতে আপনার চিত্রটি "ঝাঁকুনি" করতে হবে এবং যদি আপনি এই প্রক্রিয়াটির সময় আপনার প্রোগ্রামটি সঠিকভাবে অনুশীলন না করেন তবে আপনি রান-টাইমের ত্রুটিগুলি পরে শেষ করতে পারেন later । বিপরীতে, চেজের সাথে আমরা একটি শীর্ষ-স্তরের ফাইলটি সংকলন করি যা এতে প্রয়োজনীয় অন্যান্য ফাইলগুলির সমস্ত অন্তর্ভুক্ত করে এবং আমরা সম্পন্ন করেছি।
আমি বলেছিলাম যে এর আগে আমরা স্কিমটি ব্যবহার করে অনেকগুলি জায়গায় শেষ করেছি যা আমরা মূলত লক্ষ্য করি নি। কেন? আমি মাথার উপরের দিক থেকে তিনটি কারণ ভাবতে পারি।
প্রথমত, আমরা চেজকে (এবং এর বিকাশকারী, ক্যাডেন্স) বিশ্বাস করতে শিখেছি। আমরা সরঞ্জামটি থেকে অনেক কিছু জিজ্ঞাসা করেছি এবং এটি ধারাবাহিকভাবে বিতরণ করা হয়েছিল। উদাহরণস্বরূপ, চেজ historতিহাসিকভাবে একটি তুচ্ছ স্বল্প সংখ্যক ত্রুটিযুক্ত ছিল এবং এর মেমরি ম্যানেজারটি খুব, খুব ভাল ছিল।
দ্বিতীয়ত, আমরা চেজের কাছ থেকে প্রাপ্ত পারফরম্যান্সকে ভালবাসতে শিখেছি। আমরা এমন কিছু ব্যবহার করছিলাম যা একটি স্ক্রিপ্টিং ভাষার মতো মনে হয়েছিল - এবং আমরা এটি থেকে নেটিভ-কোড গতি পাচ্ছি। কিছু বিষয়গুলির জন্য যা গুরুত্বপূর্ণ নয় - তবে এটি কখনও আঘাত করে না এবং কখনও কখনও এটি একটি ভয়াবহকে অনেক সহায়তা করে।
তৃতীয়ত, আমরা বিমূর্ততা স্কিমটি সরবরাহ করতে পারে তা পছন্দ করতে শিখেছি। আমি কেবল ম্যাক্রো বলতে চাই না, উপায় দ্বারা; ক্লোজার, ল্যাম্বডাস, টেল-কল ইত্যাদির মতো জিনিসগুলির অর্থ আমি যখন একবার এই শব্দগুলিতে ভাবতে শুরু করি তখন অন্যান্য ভাষাগুলি তুলনা করে বরং সীমাবদ্ধ বলে মনে হয়।
স্কিম কি সঠিক? না; এটি একটি বাণিজ্য বন্ধ। প্রথমত, এটি পৃথক বিকাশকারীদের আরও কার্যকর হতে দেয় - তবে বিকাশকারীদের একে অপরের কোড তৈরি করা আরও বেশি কঠিন কারণ বেশিরভাগ ভাষার যে সাইনপোস্টগুলি রয়েছে (উদাহরণস্বরূপ, লুপগুলির জন্য) স্কিমে অনুপস্থিত (যেমন, লক্ষ লক্ষ করার উপায় রয়েছে) লুপ জন্য)। দ্বিতীয়ত, বিকাশকারীদের সাথে কথা বলার জন্য, ভাড়া নেওয়া, কাছ থেকে ,ণ গ্রহণ, ইত্যাদির জন্য আরও অনেক ছোট পুল রয়েছে
এটির সংক্ষেপে, আমি মনে করি আমি বলব: লিস্প এবং স্কিম এমন কিছু ক্ষমতা সরবরাহ করে যা অন্য কোথাও বহুলভাবে পাওয়া যায় না। এই ক্ষমতাটি একটি বাণিজ্য-বন্ধ, তাই এটি আপনার বিশেষ ক্ষেত্রে বোধগম্য হওয়া আরও ভাল had আমাদের ক্ষেত্রে লিস্প বা স্কিমের সাথে যেতে হবে কিনা তা নির্ধারণের কারণগুলির ভাষা বা গ্রন্থাগারের বৈশিষ্ট্যগুলির তুলনায় তারা খুব মৌলিক বৈশিষ্ট্যগুলি (প্ল্যাটফর্ম সমর্থন, প্ল্যাটফর্মের থ্রেডস, রান-টাইম সংকলন, রান-টাইম লাইসেন্সিং) এর সাথে আরও অনেক কিছু করতে পারেন। আবার, আমাদের ক্ষেত্রে এটিও একটি বাণিজ্য বন্ধ ছিল: চেজের সাথে আমরা যে মূল বৈশিষ্ট্যগুলি চেয়েছিলাম তা পেয়েছিলাম তবে আমরা বাণিজ্যিক লিপ্প পরিবেশের যে সমস্ত বৃহত্তর গ্রন্থাগার হারিয়েছি তা হারিয়েছি।
এছাড়াও, কেবল পুনরাবৃত্তি করার জন্য: আমরা বহুদিন আগে বিভিন্ন লিপস এবং স্কিমগুলি দেখেছিলাম; তার পর থেকে তারা সব বিবর্তিত হয়েছে এবং উন্নত হয়েছে।