PDA

View Full Version : سرعت ترجمه دستورات در کدام یک بیشتر است VB.Net یا C#.Net



Netsky
یک شنبه 06 بهمن 1387, 23:56 عصر
سلام . لطفا در نظر سنجی شرکت کنید و دلیل انتخابتون رو هم بگید .
سوال : سرعت ترجمه دستورات در کدامیک از زبان های برنامه نویسی سی شارپ یا ویبی دات نت بیشتر است .
با تشکر ...................

Behrouz_Rad
دوشنبه 07 بهمن 1387, 07:57 صبح
آخه در مورد چیزی که بارها بحث شده و نتیجش از پیش مشخصه چرا دوباره سوال می پرسی؟
جواب اینه>>> هیچ کدام!

جواب فنی: تعداد دستورات IL تولید شده برای هر کدوم از دستورات #C و VB.NET ممکنه متفاوت باشه. در نتیجه هزینه ی ترجمه و اجرای یک دستور در VB.NET ممکنه بیشتر از #C باشه و بالعکس!

موفق باشید.

Microsoft.net
پنج شنبه 13 فروردین 1388, 22:04 عصر
آخه در مورد چیزی که بارها بحث شده و نتیجش از پیش مشخصه چرا دوباره سوال می پرسی؟
جواب اینه>>> هیچ کدام!

جواب فنی: تعداد دستورات IL تولید شده برای هر کدوم از دستورات #C و VB.NET ممکنه متفاوت باشه. در نتیجه هزینه ی ترجمه و اجرای یک دستور در VB.NET ممکنه بیشتر از #C باشه و بالعکس!

موفق باشید.

من با این حرف مخالفم ، اتفاقا سوال اگه از روی بینش پرسیده شده باشه سوال بسیار خوبیه به نظرم .
اصولا زبانهای C-Base زبانهایی هستند با تقید زود هنگام (Early Binding) یعنی زمان کامپایل باید همه چیز مشخص باشه ولی زبان vb زبانی است با تقید دیرهنگام (Late Binding) لذا قاعدتا باید سرعت کامپایل برنامه های وی بی بیشتر(چرا که برخی از کارها به زمان اجرا Postpone میشه) باشه و سرعت اجراش کمتر . (منظور 2 برنامه یکسان معادل سازی شده) .
البته اینی هم که بهروز خان فرمودن "تعداد دستورات IL تولید شده برای هر کدوم از دستورات #C و VB.NET ممکنه متفاوت باشه" هم غلطه چرا که یک دستور همیشه معادل IL اش یکسانه و اینجور نیست که هر باری که برنامه کامپایل بشه یه IL متفاوت واسه یک دستور یکسان تولید بشه (اگه منظور این بوده!)
در هر صورت زبانهای با تقید دیرهنگام انعطاف زیادی به برنامه نویس توی کد نویسی میده زبانهایی نظیر smalltalk , lisp هم از این قبیل هستند ولی خوب سرعت اجرای برنامه زمان اجرا به علت Type Casting های مختلف کم میشه
بحث در این مورد زیاده ...

anubis_ir
پنج شنبه 13 فروردین 1388, 22:08 عصر
VB6 مدنظر شما با VB.Net متفاوت است (اين‌دو را با هم مخلوط كرديد و بعد نتيجه گرفتيد).

Microsoft.net
پنج شنبه 13 فروردین 1388, 22:55 عصر
VB6 مدنظر شما با VB.Net متفاوت است (اين‌دو را با هم مخلوط كرديد و بعد نتيجه گرفتيد).

اتفاقا دقیقا منظورم vb.net بود vb6 که اصلا کامپایلر نداره ، مفسر خطی هست جانم ! شما مثل اینکه متوجه بحث نشدی اصلا . vb6 به طور کلی زبانی کامپایلری نیست و بنابر این بحث های تقید در ان بی معنیه

anubis_ir
پنج شنبه 13 فروردین 1388, 23:57 عصر
compiler = static interpreter
interpreter = dynamic compiler

late binding و early binding‌ هم در vb.net مهيا است و هم در سي شارپ (براي مثال زمانيكه شيءايي را از نوع object معرفي مي‌كنيد مثل حالتي كه در vb6 از نوع variant استفاده شود) و اساسا مطلبي نيست كه اين يكي فقط اينطوري است و اون يكي خير.
در VB.Net فقط زمانيكه Option Explicit را خاموش كنيد و نوع متغير را تعريف نكنيد مي‌شود late binding كه حالت پيش فرض vb6 بود يا زمانيكه از نوع object استفاده كنيد.
(به همين دليل عرض كردم كه اين دو را با هم مخلوط كرديد)

Microsoft.net
جمعه 14 فروردین 1388, 00:18 صبح
عزیز جان vb6 کامپایلر به اون معنایی که تو ذهنت هست نداره ، شما برنامت Syntax error داشته باشه تو وی بی 6 بازم اجرا میشه وقتی موقع اجرا برسه به اون خط خطا میده پس وی بی 6 رو تو این بحث وارد نکن .


در VB.Net فقط زمانيكه Option Explicit را خاموش كنيد و نوع متغير را تعريف نكنيد مي‌شود late binding

یکیش اینه ! ولی همش این نیست 100 ها مورد دیگه هم هست که شامل تعریف late binding میشه(اصلا تعریفی که گفتی برای late binding اشتباه هست) ! مثلا شما توی وی بی نت میتونی long رو بریزی توی string (در runtime کامپایلر عملیات type casting انجام میده) ولی توی #C همونجا باید type casting رو برنامه نویس انجام بده وگرنه کامپایلر بهش خطا میده


string tmpstr;
long tmplong;
tmpstr = (string) (tmplong);

ولی توی وی بی نت


Dim tmpstr As String
Dim tmpLong As Long
tmpstr = tmplong


بخاطر همینه میگم به صورت کلی وی بی نت رو جزو زبانهای با تقید دیر هنگام دسته بندی کردند و سی شارپ رو توی دسته بندی تقید زود هنگام ، اون object هم که گفتی توی #C خیلی محدود تر از vb.net عمل میکنه ! شما توی vb.net با object تقریبا همه کاری می تونی بکنی ولی توی سی شارپ خیلی محدود شده .
حالا هی بگو vb6 !

Mehdi Asgari
جمعه 14 فروردین 1388, 00:32 صبح
البته اینی هم که بهروز خان فرمودن "تعداد دستورات IL تولید شده برای هر کدوم از دستورات #C و VB.NET ممکنه متفاوت باشه" هم غلطه
نه ، کاملا هم درسته (مثال به اندازۀ کافی در اینترنت هست ؛ مثل: http://www.codeproject.com/KB/msil/vbvscsmsil.aspx )
ایشون نگفتن دستورات متفاوت ، بلکه تعداد متفاوت (البته در درج modifier هایی مثل hidebysig و غیره هم فرق دارن)

یک دستور همیشه معادل IL اش یکسانه
نه لزوما ؛ تو یک ساختار سطح بالا رو میتونی با چندین روش و به چندین شکل در یک زبان سطح پایین تر پیاده سازی کنی
(حالا زبان هایی مثل #F که بمانند)

Microsoft.net
جمعه 14 فروردین 1388, 11:41 صبح
نه لزوما ؛ تو یک ساختار سطح بالا رو میتونی با چندین روش و به چندین شکل در یک زبان سطح پایین تر پیاده سازی کنی
(حالا زبان هایی مثل #F که بمانند)

البته توی فاز بهینه سازی میشه اینجوری تصور کرد که حالتهای بهینه متفاوتی برای یک سری از دستورات پیدا بشه ولی فکر می کنم اینجوری نیست که واسه هر بار build برنامه یک کد کاملا متفاوت بدست بیاد .
ولی بازم روی حرفم هستم که یک دستور همیشه کد IL اش یکسانه مگر اینکه در فاز بهینه سازی کامپایلر از ترکیب یک دسته از کد ها کد بهینه تری بشه جایگزین بشه
اون لینکی هم که داده بودی نگاه کردم و چیزی در مورد اینکه گفتی "تو یک ساختار سطح بالا رو میتونی با چندین روش و به چندین شکل در یک زبان سطح پایین تر پیاده سازی کنی" نبود و حرف منو در مورد اینکه کد IL تولید شده vb.net و #C با هم متفاوته تایید می کرد .

pernia
جمعه 28 فروردین 1388, 08:50 صبح
سوال درست نیست!
لطفا بفرمایید در کدام دستور مقایسه بین این دو زبان انجام میشود؟
مقایسه در سطح زبان یک مبحث نا متجانس است