PDA

View Full Version : گفتگو: کتابخانه ها ، توابع <> قدرت زبان برنامه نویسی



Mahmood_M
چهارشنبه 05 اسفند 1388, 03:11 صبح
با سلام ...
من چند وقت پیش این موضوع رو مطرح کردم ولی کسی در بحث شرکت نکرد ، اما یک بار دیگه دوستان رو دعوت به بحث در این زمینه می کنم ...
با یک سئوال شروع می کنم :
آیا توابع ، و کتابخانه های موجود در ( برای ) یک زبان برنامه نویسی می تونه دلیل قدرت و برتری اون زبان باشه ؟!
به عنوان مثال فرض کنید در زبان دلفی Unit هایی تعریف شده و درون هر کدوم توابع زیادی وجود داره که کار رو برای برنامه نویس ساده می کنه ، اما سئوال اینجاست که وجود این توابع آیا ویژگی خاصی به زبان دلفی اضافه کرده ، آیا درسته که مثلا بگیم زبان دلفی توابع بسیاری رو در خودش داره ؟!
یا مثلا در زبان ++C فایلهای Header به چیزی شبیه به Unit ها در دلفی هستند ، آیا توابع درون Header ها جزئی از زبان ++C هستند ؟!
یک مثال می زنم :
می خوایم دو عدد رو بگیریم و عدد بزرگتر رو نمایش بدیم ، می دونیم که :

Max = ( | A1 + A2 | + | A1 - A2 | ) / 2
زبان دلفی به من امکان میده که به صورت زیر این کار رو انجام بدم :
var
A1, A2 : Integer;
Max : Double;
begin
A1 := a;
A2 := b;
Max := (ABS(A1+A2)+ABS(A1-A2))/2;
end;
توضیح : a , b عدد هستن و ABS هم تابعی هست در زبان / محیط دلفی برای محاسبه ی قدرمطلق یک عدد ...
خوب ، حالا اگر فرض کنیم که برای محاسبه ی عدد بزرگتر بین دو عدد ، یک Unit در کتابخانه های دلفی شامل تابعی به نام Max باشه که مقدار عدد بزرگتر رو محاسبه کنه ، آیا باید این رو به عنوان یک ویژگی برای زبان دلفی در نظر بگیریم یا محیط دلفی یا نرم افزار دلفی یا ... ؟؟ !!
به نظرم باید قدرت محیط برنامه نویسی به یک زبان رو از قدرت زبان برنامه نویسی جدا کرد ، یعنی منظورم اینه که وجود تابعی به نام Max یا همون ABS برای محاسبه ی قدر مطلق ، در واقع امکاناتی هستن که سازندگان محیط دلفی ( شامل IDE , Code Editor و ... ) ، اون رو درون یک Unit به امکانات زبان دلفی اضافه کردند ...
کمی توضیح بیشتر :
زبان ++C هم به من امکان می ده که به صورت زیر عدد بزرگتر رو از بین دو عدد پیدا کنم :
{
A1 = a;
A2 = b;
Max = (abs(A1+A2)+abs(A1-A2)) / 2;
}
حالا اگه در زبان دلفی تابعی به نام Max داشتیم ولی در ++C تابعی به این نام وجود نداشت آیا می تونیم این رو دلیلی برای برتری زبان دلفی بیان کنیم ؟ یا باید به عنوان یک ویژگی مثبت محیط یا نرم افزار دلفی بیان بشه ؟

من نظرم اینه که این توابع و Unit ها یا Header ها از زبانهای برنامه نویسی جدا هستند ، هرکسی می تونه یک Unit یا Header بنویسه و به محیط یا نرم افزار دلفی یا Visual CPP اضافه کنه !

اما ویژگی ای که زبان دلفی و زبان ++C رو در حل مسئله ی بالا متمایز می کنه نحوه ی نوشتن دستورات هست ، مثلا در ++C نیاز نبود که حتما A1 و A2 به عنوان متغیر عددی تعریف بشن ولی در دلفی باید حتما این کار رو انجام بدیم ...

این رو هم میشه به حساب کامپایلر گذاشت و به زبان مربوطش نکرد ! ، به نظر شما یک زبان برنامه نویسی شامل چه قسمتهایی هست ؟ ( جدا از Syntax ! )

خوشحال می شم دوستان در این بحث شرکت کنند ، مطمئنا برای خیلی ها مفید خواهد بود ...

موفق باشید ...

lordarma
چهارشنبه 05 اسفند 1388, 03:43 صبح
من یک نظر کلی و غیر علمی دارم،
به نظر من هر زبانی برای کاربرد خاصی اختراع شده است و به همین خاطر وِیژگی های خاص خودش را دارد،
به همین دلیل برخی توابع در برخی از زبان ها برای کار خاصی تهیه شده اند،
ولی این به این معنا نیست که زبان دیگر در انجام آن کار ضعیف است، این به این معنا است که زبانی که توابع بیشتری دارد کار برنامه نویس را راحت می کند و معمولا در اکثر مواقع می شود همان تابع را با دستوراتی سخت تر در زبان دیگر هم پیاده کرد...

اَرژنگ
چهارشنبه 05 اسفند 1388, 11:55 صبح
این بحث بی‌معنی است ، به این دلایل:
۱.ضعف و یا قدرت زبان برنامه‌نویسی تعریف نشده، و بحث سر اینکه خصوصیت الف، ب ، ... یک زبان را قویتر و یا نداشتنشان ضعیفتر میکند بی‌معنی است.
۲.مقایسه زبانهایه مختلف مانند مقایسه پیاز و سیر میماند ، هر کدام جایه خودشان را دارند، برایه بعضی کارها جون میدن و برایه بعضی کارها اصلاً نباید استفاده بشند.
۳.فوقاً همه زبانها به باینری تبدیل میشند و به این شکل هیچ زبانی از زبان باینری کاری بیشتر نمیتواند انجام بده.
۴.چونکه اینجا تالار تئوری است، از لحاض تئوری تمام کامپیوترهایه کنونی یک نوع ماشین تورینگ حساب میشند و یکی از پایه‌ترین پله‌هایه تئوری علم برنامه‌ها این است که تمام تورینگ ماشینها با هم برابرند.
ولی کارهایی را که میشه با #F به راحتی انجام داد با دلفی و یا زبانهایه دیگر Proceduralو OO به سختی میشه انجام داد و بعضی از کارهایی را که با دلفی و سی‌شارپ ... میشه به راحتی انجام داد با زبانهایه Functional بعضاً به سختی میشه انجام داد، (مهم نیست که چقدر کتابخانه جمع آوری شده باشد).
اصل این موضوع ربطی به برنامه‌نویسی ندارد و به فلسفه و تئوری زبانها بازمیگرده، برایه شروع Linguistics را مطالعه کنید.

اَرژنگ
چهارشنبه 05 اسفند 1388, 12:00 عصر
من یک نظر کلی و غیر علمی دارم،
به نظر من هر زبانی برای کاربرد خاصی اختراع شده است و به همین خاطر وِیژگی های خاص خودش را دارد،
به همین دلیل برخی توابع در برخی از زبان ها برای کار خاصی تهیه شده اند،
ولی این به این معنا نیست که زبان دیگر در انجام آن کار ضعیف است، این به این معنا است که زبانی که توابع بیشتری دارد کار برنامه نویس را راحت می کند و معمولا در اکثر مواقع می شود همان تابع را با دستوراتی سخت تر در زبان دیگر هم پیاده کرد...
این نظر به حقیقت نزدیک است، تنها چیزی که میشه بهش اضافه کرد این است که زبانها اختراع نمیشند بلکه برایه کار بخصوص ساخته میشند. همانطوری که ابزارها برایه کارهایه مختلف ساخته میشند زبانهایه برنامه‌نویسی هم برایه کارهایه مختلف طراحی و پیاده میشند، مفهوماتی برایه جستجو:
Domain Languages, YACC, Teory of programming languages

Mahmood_M
چهارشنبه 05 اسفند 1388, 14:13 عصر
فکر می کردم که این مباحث توسط دوستان مطرح بشه ...
شاید باید منظور رو بهتره بیان کنم :
نظر من اینه که اصلا ویژگی یک زبان نمی تونه داشتن توابع زیاد یا کم باشه ، توابع هم خودشون توسط همون زبان ایجاد شدن ( یا زبانهایی مثل Assembley ) ، منظورم سورس توابع هست ...
بحث سر این نیست که چه زبانی برای چه هدفی ساخته شده ، قصد مقایسه هم نیست ، فقط می خوایم این موضوع رو مشخص کنیم که آیا توابع موجود در یک زبان جزء اون زبان هستند یا نه ؟ فکر کنم موضوع بحث در پست اول کاملا مشخص بود ... !

منتظر نظرات دوستان هستم ...

اَرژنگ
چهارشنبه 05 اسفند 1388, 17:19 عصر
فکر می کردم که این مباحث توسط دوستان مطرح بشه ...
شاید باید منظور رو بهتره بیان کنم :
نظر من اینه که اصلا ویژگی یک زبان نمی تونه داشتن توابع زیاد یا کم باشه ، توابع هم خودشون توسط همون زبان ایجاد شدن ( یا زبانهایی مثل Assembley ) ، منظورم سورس توابع هست ...
بحث سر این نیست که چه زبانی برای چه هدفی ساخته شده ، قصد مقایسه هم نیست ، فقط می خوایم این موضوع رو مشخص کنیم که آیا توابع موجود در یک زبان جزء اون زبان هستند یا نه ؟ فکر کنم موضوع بحث در پست اول کاملا مشخص بود ... !

منتظر نظرات دوستان هستم ...

اگر زبان را مانند آجر در نظر بگیریم که ساخته‌هایه دیگر را باهاش بنا میکنیم، ساختمان بنا شده را باید آجر در نظر بگیریم؟

dousti_design
جمعه 07 اسفند 1388, 16:18 عصر
آیا توابع موجود در یک زبان جزء اون زبان هستند یا نه ؟
به نظر من نه!
مانند زبان هایی که توسعه داده میشن ولی درواقع از بعد علمی و تخصصی همونی هستند که در ابتدا بودند.

nima898
شنبه 08 اسفند 1388, 11:11 صبح
فقط می خوایم این موضوع رو مشخص کنیم که آیا توابع موجود در یک زبان جزء اون زبان هستند یا نه ؟ فکر کنم موضوع بحث در پست اول کاملا مشخص بود ... !


من نظرم اینه که این توابع و Unit ها یا Header ها از زبانهای برنامه نویسی جدا هستند ، هرکسی می تونه یک Unit یا Header بنویسه و به محیط یا نرم افزار دلفی یا Visual CPP اضافه کنه !

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