سوال: آیا کلوژر با کامپایلر سی ++ می تونست جایگزینی خوبی برای راست باشه؟

راست با ویژگی های خاص خودش مثل ownership اومده تا مشکلات سی و سی پلاس پلاس رو حل کنه. حالا فرض کنید کلوژر قدرت استفاده از کامپایلر و کتابخونه های سی و سی پلاس پلاس رو داشت.به نظرتون در این شرایط می تونست رقیبی برای راست باشه . چه مزیت و معایب خاصی پیش می اومد.
راست که خودتون می دونید زبان خیلی قدرتمندی هست و مولتی پارادایم.ولی دوره یادگیری سختتری داره و کامپایل برنامه هاش خیلی طول می کشه. به علاوه هنوز هم در بعضی جاها نیازمند سی هست.

هممم در مورد کتابخونه ها باید بگم که همونطور که ++c کتابخونه های زیادی داره جاوا هم کتابخونه های خیلی زیادی داره و از این لحاظ خیلی بهم شبیح هستند. واسه همین کلوژر هم می تونه از همه اون لایبرری ها استفاده کنه. اگرم دیگه کتابخونه خیلی حاصی باشه که تو جاوا نباشه و نخواین خودتون بنویسین می تونین دقیقا همون کتابخونه رو با JNI استفاده کنین.

به نظر من کلوژر و rust دو هدف متفاوت و دو کاربرد متفاوت دارن.

1 Like

شاید سوالم رو درست نپرسیدم. منظورم استفاده به عنوان یک زبان سیستمی بود.فرضا اگر کلوژر چنین قابلیتی داشت آیا می تونست با مزیت های خوب راست در این مورد رقابت کنه و در کنار استفاده از قدرت سی پلاس پلاس معایب اون رو هم حذف کنه؟

اگه منظور شما اینه که به جای jvm روی پلتفرم C++ میبود زیاد موافق نیستم. به نظرم جاوا پلتفرم قویتر و بزرگتری داره و در کل کراس پلتفرم‌تر هست. (یه بار کامپایل میکنیم همه‌جا اجرا میشه)
اگه منظورتون اینه که پلتفرم خودشو داشت و از اول براش پلتفرم میساختن، با این به شدت مخالفم. وقتی یه زبان میسازیم که ۵درصد یا حتی ۵۰٪ بهتر از چیزهاییه که الآن وجود دارن (با توجه به اینکه شاید هر ماه یه زبان جدید داره ساخته میشه) اصلا فکر خوبی نیست که از صفر شروع کنیم. به جاش میتونیم از پلتفرم قدیمی و قوی که وجود داره استفاده کنیم. اینطوری خیلی زودتر رشد میکنه و پیشرفت میکنه.

فکر میکنم مجبور میشد خیلی چیزها رو عوض کنه. مثلا همین static type نبودن باعث میشه برای یک زبان سیستمی که مثلا قراره باهاش یه سیستم‌عامل ساخته بشه و مستقیم روی سخت‌افزار اجرا بشه اصلا خوب نیست.
فکر میکنم امکانات زیادی رو باید فدا میکرد برای تبدیل شدن به یه زبان سیستمی. مطمئن نیستم ولی احتمالا نمیتونست مکرو‌های قدرتمند داشته باشه و متاپروگرامینگ توی کلوژر، به این قدرت نبود.

فکر میکنم یادگیری کلوژر سختتر باشه. البته زیاد با rust کار نکردم.

همم چیزی به اسم زبان سیستمی نداریم. این یه باور هست که ما واسه خودمون ساختیم.

اما منظورتون رو متوجه می شم. کامپایل شدن به کد native به تنهایی باعث برتری یه زبان نیست. کلوژر رو هم می تونین به زبان ماشی کامپایل کنین توسط graalVM ( البته ساختارش یه مقدار متفاوت هست ).

من زیاد راست نمی دونم که بخوام از قابلیت های خوبش رو بدونم تا بتونم با کلوژر مقایسه انجام بدم. اگر مثال دارین یا مورد خاصی دارین بفرمائید که در موردش صحبت کنیم.

موافق این موضوع نیستم. کلوژر یکی از ساده ترین زبان هایی هست که در سطح عمومی وجود داره. تا الان به چندین نفر در سطوح مختلف آموزش دادم و همشون به این مورد اشاره کردند که کلوژر خیلی سادست. نکته مهم اینه که چجوری یاد بگیریم. متاسفانه بعضی از کتاب هایی که هست تو بازار خیلی بد نوشته شدن.

2 Likes

به عنوان کسی که از پایتون اومده و الآن حالش از پایتون به هم میخوره (شوخی!) صددرصد موافقم و منظور من دقیقا مشکل در عوض کردن mindset هست که نسبت به rust سختتره.

Anyone could learn Lisp in one day, except that if they already knew Fortran, it would take three days.
Marvin Minsky

یکی از قابلیتهاش سیستم ownership هست که مخصوص خودشه.
به این شکل که وقتی یه تابع رو صدا میزنیم و یه متغیر بهش میفرستیم، اون تابع صاحب اون متغیر میشه تا زمانی که اونو return کنه. اگه ریترن نکنه، دیگه توی تابع اول اون متغیر رو نداریم.
این باعث میشه که فقط یک رفرنس به اون متغیر داشته باشیم و کلا نیازی به GC نداشته باشیم. سیستم rust به این شکله که هرچی هر زمان که از scope خودش خارج شد، از رم خارج بشه.
یه ویژگی دیگه هم داره که کلا Null نداره و خیالمون راحته از این بابت.

ویژگی دیگه‌ای ندیدم واقعا. بقیه‌ی چیزاش هرچی که هست بهتر از کلوژر نیست.
البته به طور دیفالت Hygienic macro داره که خب کلوژر هم gensym داره و میشه مکروهای hygiene نوشت.