مشکلات زبان های برنامه نویسی


#1

سلام دوستان . امیدوارم حالتون خوب باشه .
میخواستم بپرسم که تو انجمن خیلی زیاد شنیدیم که مثلا جاوااسکریپت مشکل داره یا گفته سام عزیز @samdvr

روبی هزاران عیب داره ولی پیچیده بودن را نمیشه به روبی نسبت داد

و همچنین تو تاپیک های مختلف که درباره مشکل داشتن زبان های مختلف بحث شده .
حالا میخوام بپرسم که این مشکلات چرا حل نمیشند؟ یا این اپدیت ها که واسه زبان ها میاد اون مشکلارو اگه حل میکنه ، پس چرا انقدر طول میکشه ؟
یا سوال دیگه چرا بهترینا جمع نمیشن و یک زبان بدون نقص ایجاد کنند؟:thinking:
همینطور این سوالا به ذهنم اومد … خوشحال میشم جواب بدید .:rose::pray:


#2

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


#3

پایتون۲ یه سری مشکلات داشت مثلا این کد:

range(1000000000)

اجرای این خط فکر کنم ۲دقیقه زمان گرفت و ۳۰گیگ رم. (از ksysguard اسکرین‌شات گرفتم. اگه بخواید میتونم آپلود کنم)

در حالی که توی پایتون۳ با Lazy evaluation این مشکل حل شده شاید در کمتر از چند میلی‌ثانیه این کد اجرا بشه.

و یه سری چیزها بی منطق بود. مثلا این:

print "hello"

خوب الآن اینجا print چیه؟ تابعه؟ پس چرا پرانتز نداره؟

این مشکلات حل شدن و پایتون۳ ساخته شد و الآن برنامه نویسها بدبخت شدن!
کد پایتون۲ توی پایتون۳ اجرا نمیشه، لایبرری که برای پایتون۳ نوشته شده توی نرم افزاری که با پایتون۲ داریم مینویسیم کار نمیکنه و…

انگار دوتا زبان برنامه نویسی مختلف داریم با یه اسم!

به نظر میاد یکی از مهمترین مشکلاتی که هست جلوی راه سازنده‌های زبان همین باشه.

طول کشیدنش هم شاید به خاطر اینه به فکر حل کردن این مسائل نیستن.
سازنده‌ی js احتمالا این چیزا رو آپشن میدونه:


یه meme باحال دیدم درمورد لایبرریهای JS. الآن پیداش نمیکنم.
به این صورت بود که ۲۰تا لایبرری برای انجام یه کار وجود داشت و هیچکدوم عالی و کامل نبودن. بعد یه نفر اومد یه لایبرری بسازه که کار همشونو انجام بده و از همشون بهتر باشه.
نتیجه این شد که برای انجام اون کار ۲۱عدد لایبرری وجود داشت.

ما همین الآنش بیشتر از ۸۰۰تا زبان برنامه نویسی داریم که همشونو کنار هم بذاریم یه چیز درست حسابی ازش در نمیاد :grin:
شاید مساله این باشه که مشکلاتی که میخوایم حل کنیم خیلی زیاد و وسیع هستن.


#4

بعضی از موارد اون عکس ربطی به JS نداره مثل مشکل BigDecimal

Ruby :hearts::hearts::hearts:

$irb

2.5.1 :008 > 0.01 + 2.01 == 2.02
 => false

require 'bigdecimal'
BigDecimal('0.01') + 2.01 == BigDecimal('2.02')
 => true

Elixir :triangular_ruler::triangular_ruler::triangular_ruler:

$iex -S mix

alias Decimal, as: D

iex(2)> 0.01 + 2.01 == 2.02
false

D.add(D.new(0.01), D.new(2.01)) == D.new(2.02)
true

Rust :alien::alien::alien:

fn main() {
  println!("{:?}", (0.01 + 2.01) == 2.02);
}

false

کلا این مورد هیچ ربطی به زبان های برنامه نویسی نداره


#5

شاید اصلاً ساختن یه زبان بی نقص از لحاظ منطقی غیرممکن باشه. اگه فرض کنیم کلمۀ نقص یه تعریف کاملاً دقیق داشته باشه و سلیقه هم تو تعریف کلمۀ “نقص” کوچکترین دخالتی نداشته باشه، شاید اصلاً یه روزی یکی بیاد یه قضیه ای به اسم “عدم وجود زبان بی نقص” رو تو ریاضی ثابت کنه. یا شایدم تا الان ثابت کردن و من خبر ندارم. یه چیزی شبیه اتفاقی که برای پروژۀ (یا سیستم) داوید هیلبرت افتاد.


#6

سلام . بله شایدم اینطور باشه . آخه میدونین واس چی این تاپیکو باز کردم ؟

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


#7

0622-500x500


#8

عاقاااااااااااا :joy::joy::joy::joy::joy::joy:


#9

08b20a4502a6f1fca3e29fd69235595c--animal-faces-pandas


#10

بزرگ ترین دلیل که این مشکل ها حل نمیشن برای اینکه میخواهند کد های نسخه های قبل خراب نشه و تغییرات تا حد ممکن backward compatibility داشته باشه
مثلا مشکل concurrency وGIL میشه حل کرد کما اینکه rubinius و jruby درvm خودشون حل کردند ولی اگر روبی این کارو بدون توجه به نسخه های قبل انجام بده همه کد ها خراب می‌شوند
سازنده های زبان ها هم اغلب به فکر رفع این مشکل ها هستند اما تغییر زبان برنامه نویسی بسیار سخت تر از اون چیزیه که به نظر میاد


#11

با این حساب، یعنی زبان‌هایی که نوظهور هستن و موفقن باید مشکلات کمتری داشته باشن!


#12

کلا میشه گفت کدوم زبان کمترین مشکل رو داره؟
احتمالا زبانی که روی لبه تکنولوژی هست باید مشکلات کمی داشته باشه ولی خب این معیار خیلی پیش‌پاافتاده‌ست!


#13

خب یک سری از مشکل ها رو زبان های جدیدتر اصلا ندارن و از اول سعی کردن حل کنند و برای نیاز های امروزی ساخته شدند
مثلا وقتی روبی درست شد برنامه concurrent ساختن زیاد مهم نبود اما امروز خیلی مهمه و زبان های مدرن تر از روز اول این مشکل را حل کردند
ولی من منظورم نیست که هر زبان مدرنی لزوما بهتره زبان های مدرن به دلیل اینکه از تجربه های c … java بهره میبرند شانس بهتری دارند
هیچ زبانی هم بی نقص نیست و یک چیزایی به سلایق برمیگرده مثلا به نظر من روبی برای برنامه های بسیار پیچیده انتخاب درستی نیست ولی شما میتونی حرف منو قبول نداشته باشی


#15

پس از نظر شما چه زبانی برای برنامه های پیچیده (حجمی یا تکنولوژیکی؟) ، بهتره و چرا؟ :thinking:


#16

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


#17

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


#18

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