سوال: برای توسعه دهنده بک‌اند نرم‌افزار‌های تحت وب زبان مفسری بهتره یا زبان کامپایلری؟ تعیین نوع ایستا بهتره یا پویا؟

این سوالی هست که برای خودم پیش اومده. به عنوان مثال زبان کامپایلری راست رو با تعیین نوع ایستا و زبان مفسری پایتون با تعیین نوع پویا رو در نظر میگیریم. برای هر دو زبان فریم‌ورک های خوبی برای برنامه‌نویسی تحت وب وجود داره. اگر سرعت توسعه رو در نظر نگیریم(که توی پایتون به طرز قابل توجهی سریع‌تر هست) و همچنین سرعت اجرا و مصرف رم(که توی راست به طرز قابل توجهی سریع‌تر هست و حافظه کمتری مصرف می‌کنه به خاطر نبود GC مثلا) و بقیه فاکتور‌ها رو در نظر بگیریم بنظرتون برتری‌های هر کدوم بر دیگری چیه؟


یک پست در مورد پایتون که نتیجه گفتگوی بنده با یک نفر بود:

بنظرم بسته به نوع پروژه باید تصمیم گیری بشه، نمیشه کلا یک نسخه برای همه پروژه‌ها پیچید.

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

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

اینم اضافه کنم داشتن یا نداشتن gc دلیل برتری یه زبان نیست. فقط یه قابلیت هست که باید در نظر داشت.

اما در مورد تایپ سیستم باید بگم که با اینکه قبلاً طرفدار سیستم های داینامیک بودم ولی تایپ سیستم های strongly typed بهتر هستن. ولی نه لزوما ستاتیک

2 پسندیده

سمیر جان مگه اکثر زبان های داینامیک تایپ strong نیستن؟ مثل کلوژر ، روبی و یا حتی پایتون؟ تا جایی که میدونم بین داینامیک ها فقط php و جاواسکریپت weak هستن(طبق ویکی پدیا)

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

مثل اینکه تعاریفی که از strong خوندم متفاوت بوده یه مقدار، مخصوصا وقتی دیدم که زبانهایی مثل کلوژر و روبی توی ویکیپدیا به عنوان strong و dynamic ثبت شدن، احساس کرده بودم، تعاریفی که خوندم درست بوده

چک نکردم ویکیپدیا رو ولی عجبه که اینجوری نوشته

اگر یک زبان تعیین نوع پویا داشته باشه اما check type داشته باشه بازم جلوی این باگ‌ها گرفته میشه مثلا تایپ‌اسکریپت رو با جاوا اسکریپت مقایسه کنید یا حتی توی پایتون check type بزارید یا دستکم یه لینتر به همراه type hint های پایتون که بازم جلوی یکسری از باگ‌ها گرفته میشه.

واقعا سرعت توسعه پایتون و گو تقریبا یکی هستن؟

در مورد GC معمولا زبان‌هایی که ندارنش مثلا راست یا سی مصرف حافظه پایین‌تری دارن.

نهایتا در مورد تایپ‌سیستم، زبانی مثل پایتون بنظر تعیین نوع قوی‌تری نسبت به جاوا اسکریپت یا لوآ داره. توی جاوا اسکریپت به عنوان مثال میتونید تصادفا یک عدد و یک رشته رو با هم «جمع» کنید و خطا نگیرید. توی لو‌آ هم میتونید با عملگر‌های … یا + یک رشته و عدد رو با هم جمع کنید یا به هم پچسبونید.

هدفم از ایجاد این بحث، بحث در مورد اکو‌سیستم زبان‌ها نبود منظورم بحث در مورد ویژگی‌های خود زبان‌ها بود. ولی خب اینکه فهمیدم گو اکو‌سیستم مشابه پایتون برای وب داره، دانستنی خیلی مفیدی بود.

خب جز سیستم تعیین نوع که واقعا نقش مهمی داره دیگه چه ویژگی‌هایی که یک زبان برنامه‌نویسی داره میتونه تاثیر گزار باشه؟

خیلی نزدیک هستند به هم. یه نکته مثبت دیگه برای گو اینه که دردسر مدیریت dependency ها رو روی پلتفرم مقصد ندارید بر عکس پایتون که همین مورد می تونه باعث کچلی موقت شه :joy:

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

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

1 پسندیده

در مورد گو خیلی ممنون. آره گو کلا یه executable میده تا جایی که من میدونم و این مزیت رو داره.

در مورد GC منظورم همین چیزی بود که شما میگید منظورم دلیل برتری نبود

بنظرم میاد strongly type دستکم تا اونجا که توی پاراگراف اول ویکی‌پدیای انگلیسی خوندم یک صفت نسبی باشه. مثلا پایتون قوی‌تر از جاوا اسکریپت و یک زبان دیگه قوی‌تر از پایتون

من زیاد با این حرف موافق نیستم. Strongly typed بودن یه سیستم به صورت ساده یعنی یه زبان نباید اجازه شکستن type constraint ها رو بده. اگر داد دیگه strongly typed نیست.که خوب هم پایتون هم کلوژر و هم جاواسکریپت این اجازه رو می دن. پس بحث کم و زیاد بودن نیست. چون شروط اولیه strongly typed بودن و ندارن که حالا بخوان کم یا زیادش باشن.

این دو تا مرتبط هستن: