آموزش کلوژر ۲ - یه مقدار تئوری

clojure
learning_clojure
clojurescript
tutorial

#62

جفتش اهمیت دارن مخصوصا باطن. شما تو جاوا با کپی کردن داری مموری رو به همون اندازه افزاریش می دی اما تو clojure شما ۱۰۰ تا کپی از یه binding درست کن هیچ کدوم مموری بیشتری استفاده نمی کنن چون عملا همه به یه مقدار اشاره می کنن.

کاملا درسته برای هر برنامه ای شما نیاز به parallel processing و اینا نداری و باید بنا به نیازت ابزار رو استفاده کنی.

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

ببین دوست عزیزم به این سوال من جواب بده. :slight_smile:

با چه زبان های فانکشنالی و تا چه حد کار کردی ؟


#63

rust
lisp کمی

با پایتون بیشتر از همشون … مفاهیم فانکشنال
(,Collections (Immutablity
, Pure Functions ,
first class functions
parallel computing,
lambda,
map,
reduce.
filter) …

بشرطی ک تعریف از حقیقت درست باشه … FP , OOP جفتشون انتزاع هستن … و اگر کسی بگه FP better than OOP صرفا نظرشو گفته … و اگر بگه این حقیقته … به سلامت عقلش شک میکنم …

FP آموزنده هست … مفاهیمشو ک بالاتر اسم بردم ک توی پایتون استفاده کردم …یه درک خوبی بوده …ک توی هر زبان های دیگه هم میشه(با کم و کاستی یا به همون اندازه) استفاده کرد … اما انگار بحث و تعصب اینجا سر خود function و زبان functional هست و دشمنی با class و زبان OOP… نه پارادایم …


#64

Rust زبان فانکشنال نیست البته امکاناتی برای fp داره، فکر میکنم منظور سمیر زبانهایی مثل هسکل یا دایلکت های فانکشنال لیسپ مثل کلوژر که فرمودین بود.
من ندیدم کسی از روی تعصب یا دشمنی oop رو زیر سوال برده باشه اینجا، میشه مثال بزنید؟

بعضی از مواردی هم که فرمودین فقط مختص fp نیستند


#65

اول این بحث زیر پست رادیو بوت سر پایتون شروع شد … ک اقا سمیر استارت زدن … من ایراد گرفتم به حرفشون تو پادکست ک اطلاعات قدیمی هست درباره پایتون . …
و بعد بحثی ک کشیده شد وسط FP , OOP بود…درحالی ک پایتون یه زبان آزاد هست … نه تحمیل به FP داره نه تحمیل به OOP … و اینجا هم بحث به Core Concept کشیده شد ک . final جاوا اومد وسط .

و چیزی ک بد هست اینه ک … اقای سام فک میکنن اگر من ۱ماه تموم با FPفقط کد بزنم … هم عقیده ایشون میشم و از OOPمتنفر …

و یکی هم همین … یا به خود زبان ایراد گرفته میشه ک FP خالص نیست … یا توی FP یک سری تفاسیر وسط میان … و وقتی صحبتی دربارش میشه گفته میشه شما FPکار نکردی یا درکی نداری ازش… .Monad در هرصورت استیته!!! توی FP مجبورا RY هست …یا اگر نباشه این بصورت کتابخونه فانکشنال در اومده مثل lens هاسکل … یا اگر نباشن زبان کامل FPخالص نیست(با تفاسیر شما)!!


#66

من چه ایرادی از rust گرفتم؟ اگر توضیح بدین ممنون میشم, شاید با توضیح شما یه سری موارد روشن بشند


#67

ایراد نه . گفتم این ایراد گرفته میشه ک FPخالص نیست


#68


پست جالبیه … اما ربطشو به OOP و FP درک نمیکنم…
اون آشی ک اون بالا نوشته شده OOPنیست … فقط همینو میدونم … ک یه قیاس ناموزون با فانکشن و فانکشنال شده …

مگر فانکشن رو از OOP گرفتن ؟؟
مگه نمیشه کلاس ترکیب کرد ؟؟
تازه مگر توی FP شما لوپ ندارید؟؟؟؟؟؟ حتما میدونید ک map , reduce بصورت بازگشتی هستن … و توی تکرار زیاد … خیلی کندتر از loop میشن …

اگر هم بحث سر بازم مالتی تردینگ و ترد سیفتی هست … حرف بخصوصی ندارم … چون قبلن گفتم و یکی از مزیت های fp توی همین هست


#69

خب rust یک زبان سیستمی هست و قرار نیست اصلا کاملا fp باشه، اصلا قرار نیست fp باشه اما باید به خوبی از fp پشتیبانی کنه وگرنه از اهداف مهمش دور میشه، اما من ندیدم کسی از راست ایرادی بگیره در این مورد.
فکر میکنم گاهی سوتفاهم پیش میاد، این پست کلا مربوط به زبان clojure هست که یک زبان فانکشناله، من فکر میکنم بیشتر منظور دوستان به چالش کشیدن نقص های زبان ها نسبت به همدیگست. OOP پارادایم پر از اشکالی هست و طبیعیه که بتونیم راحت ببریمش زیر سوال، اما این معنیش این نیست که کلا بده. کلا صنعت در هر زمینه ای ناقصه و هر روز روش و ابزاربهتری بوجود میاد، من حدس میزنم کلا کسی از جمله شما تعصب خاصی به پایتون یا کلوژر نداشته باشه.

مشکل اصلی اینه که چه ابزاری برای ساختن یک سیستم امن، قابل اعتماد و صعود پذیر به ما کمک بیشتری میکنه.


#70

دوست غزیزم. پایتون فانکشنال نیست. می شه از مفاهیم فانکشنال استفاده کنی. اما زبان فانکشنال نیست و خیلی از ملزومات یه زبان فانکشنال رو نداره.

در مورد Rust هم وقتی می گن فانکشنال نیست توهین حساب نمی شه. کما اینکه Clojure هم فانکشنال pure نیست. ناراحتی نداره که :slight_smile:

کدوم Lisp رو استفاده کردید ؟؟

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


#71

مگه من ناراحت شدم :no_mouth: مگر یک زبانی pure نباشه … اما مفاهیم FPدر اون استفاده بشه … استفاده کننده از دانش FP تهی هست ؟؟ . این Pure نبودن . (چیزی ک شما سعی کردید بگید -> شما FPکار نکردی )… و توصیه بر اینکه هسکل و لیسپ کار کنید و از این قبیل زبان ها…

من مشکلی با pure نبودن ندارم…

گمونم Hylang از Common Lisp …الگو گرفته.

بله اشتباه از من بود ک صرفا final رو گفتم… اما بعد گفتم ک توی مثالتون private و همه متغییرای داخلی رو final کنید…


پرایویت + فاینال . ترد سیف هستن …

درباره کپی کردن . به نتیجه مشترک نرسیدیم .

اینو از javamex دیدم

You might think this is inefficient. And it is, just ever so slightly. But on a modern VM it’s really not so bad either: the overhead is probably a few machine instructions more than passing by value in C/C++ (where in any case, the whole object would be copied on to the stack).

توی یه مثال دقیقا به همین شیوه ک جلو رفتیم پیش رفته و سعی کرده const cpp رو پیاده کنه… و برای پاس دادن از New استفاده کرده.

بله هدف اصلیش reference immutablity هست …


#72

شما از این ناراحت شدی که گفتیم Rust فانکشنال نیست. و بله شما FP کار نکردید. زبان های که به اسم FP کار کردید functional نیستن. C، پایتون، جاوا، Common Lisp و Rust ی که فرمودید.

فانکشنال نیست . کما این که می شه تا حدودی باهاش functional کار کرد.

دوست عزیزم final != immutable. پرایوت هم کنین ( که فاینال و پرایوت != فاینال‌ ) بازم یه قسمت داستان رو پوشش دادین و قسمت بعدی persisted بودن دیتا یعنی به اشتراک گذاشتن دیتا رو پوشش ندادید. شما هنوز مجبورید از رو اون ابجکت کپی مجزا بسازید.

الان بحث در مورد ترد سیف نبود شما کشوندیش اینجا .

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

یه کتاب قبلا در باره concurrency تو جاوا لینک دادم. اون رو بخونین خواهشن. تو جاوا می شه ترد سیف کار کرد. تو همه زبان ها می شه اما کلی مسائل رو باید بهش توجه داشت و کلی چیزا رو باید فدا کرد ( مثل پرفرمنسی که به خاطر لاک داشتن باید هدر داد) . شما با این قضیه مشکل ندارید خوب اوکی هست همه اینها رو می تونین بنویسین و غیره. ولی زبان های فانکشنال و مدرن همه این امکانات رو از اول در اختیار کاربر می ذارن.

تو جاوا و پایتون و روبی و زبان هایی از این دست دیتا immutable وجود نداره. جزئی از زبان نیست. شما می تونی وقت بزاری و تایپ های immutable بسازی. حتی می تونی وقت بزاری و Persisted هم بسازیشون اما در نهایت می شه همونی که یه زبان مثل Clojure بهت می ده که تازه تست شده هست و کلی امکانات دیگه بر اون اساس بهت می ده. اما مجبوری درست کنی چون جزئی از زبانت نیست.

من نمی دونم شما منظورت از کپی چیه. اما منظور من خیلی سادست. شما همون کلاس immutable خودت رو در نظر بگیر. برای اینکه دیتا رو عوض کنی باید یه آبجکت جدید از روی اون کلاس بسازی. یعنی اگه شما ۱۰ باز بخواین مقدار رو عوض کنین ۱۰ تا آبجکت جدید نیاز دارید. ممکنه که این مساله برای یه int عادی بنظر بیاد ولی واسه یه هش مپ ۱۰ تا کپی جدا گونه که یه سری کلید تو هر کدوم فرق می کنه یعنی ۱۰ کپی از یه سری از کلید ها و ارزش های مشترک. تو زبانی مثل clojure این جوری نیست. و این کپی اتفاق نمی افته و مموری کمتری مصرف می شه.


#73

خب چ مفاهیمی توی هسکل و scala هست ک توی اینها نیست ؟؟

مگه من این رو انکار کردم؟؟؟ :neutral_face: اینم هم جزو Concept های FP ک مستقیم باهاش درگیر هستید ؟؟؟ درباره efficiency من صحبتی کردم مگه ؟؟ کل قضیه درباره immutablity بود ک به معنی تغییر ناپذیری هست … کلاس فاینال/متغییر فاینال / پرایویت . راه تغییر رو میبیندن حتی از داخل . شما یه ابجکت فاینال از یه کلاس و متغییر پابلیک تعریف کردید و انتظار داشتید نتیجه ای ک توی clojure میگیرید رو بگیرید …


#74

من دیگه حرفی ندارم.

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


#75

درود خدمت شما دوست عزیز @salvador .

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

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


#76

کاملا درسته … کلا دید من به برنامه نویسی تغییر کرده … من که فقط میدونستم برنامه نویسی فقط یه وبسایت ساختن که اخرش فروشگاه باشه اونم با ووکامرس وردپرس و یا یک برنامه کتاب اندروید ولی حالا این کلمات رو که میشنوم میخوام برم تحقیق کنم ببینم چی هستن … مخصوصا این جملتون خیلی عالیه باید خیلی زحمت کشید تا به این سطح رسید


#77

کسی همچین حرفی نزده
شما گفتی immutability افتخار نیست میخاستن concurrecy داشته باشن تمامه زبان immutable کردن
بنده و @toomaj و @lxsameer

گفتیم immutability فقط این فایده رو نداره و دلیل اصلیش این نیست و این تغییر کوچک خیلی فایده داره که حتی زبان های غیر functional هم داران تشویقش میکنن جاواسکریپت سویفت …
شما گفتی فینال private OOP همین طوره نشون داده شد که درست نیست
شما گفتی FP از OOP کلی چیز ورداشته من گفتم این اصلا از نظر تاریخی نادرسته
شما گفتی کده OOP dry هستش نسبت به FP که هرکسی کده FP به صورته حرفه ای زده باشه میدونه کاملا بر عکسه و اگه خواستی
با کد اینو نشون میدم

شما میتونی نظر داشته باشی که FP به خوبی OOP نیست و هزار چیز دیگه اما وقتی شما مواردی میگی که حقیقت نداره و نشان گر اینکه FP کار نکردی اینجاست که من به اجبار باید نادرستی سخن شما رو گوش زد کنم

FP هم مشکل داره هیچ پارادایم بدون trade off نیست من حرفم اینکه بیایم بصورت فنی و پایبند به مدرک و حقیقت حرف بزنیم
مثلا اگه شما بگی کار با IO سخت تره در FP این حرف درستی و قبول دارم

راجبه مثال ترکیب هم اون کد imperative ولی وجود OOP خیلی فرقی به حالش از نظره ترکیب پذیری نداره و من یک مثاله OOP اونجا منویسم

اگر شما زبان FP کار کردی و مشکل داشتی با کمال میل کمک میکنم در غیر این صورت این thread فکر نمیکنم به جای سازنده ی ختم بشه


#78

من سرگذشت زبان ها و سازنده هاشون رو همیشه با علاقه میخونم ، این قسمت نه تنها به قول شما درست نیست بلکه برعکس هست ، oop خیلی جاها از fp چیز کش رفته و تو اکثر مطالبی که خوندم اشاره کردند که fp چیز تازه ای نیست بلکه تازه داره به ارزش و محبوبیت واقعی خودش میرسه !


#79

عزیز انتخاب متن تو گوشی مشکل داره و وقتی میخوایی متنی رو select کنی تا انتهای صفحه کل متن رو select میکنه لطفا وقت کردی درستش کن پدرم دراومد تونستم یه متن رو نقل قول کنم


#80

اگر زحمتی نیست یه پست جدید واسه این موضوع ایجاد کن. ممنون