منتخب بازارچه

فرق سی و وی بی

Bymir

کاربر تازه وارد
فرق سی و وی بی چیه ؟
 

saalek

مدیر بازنشسته
سلام.
بيشتر توضيح بده.
در چه مواردي منظورتون است؟
اولين فرق در زبانشان است. كه امر مسلمي است ولي همين تفاوت باعث كلي فرقها ميشه.
سي زبان قدرتمندي است ولي وي بي را چون كامپايل صورت نمي گيره نميشه زبان كاملي دانست.
تفاوت بعدي در اينه كه كار كردن با وي بي در شروع كار خيلي ساده است ولي سي دنگ و فنگش بيشتر.
من خودم به اين بحث شديد علاقه دارم و دوست دارم از دوستان چيز ياد بگيرم.
آقا سعيد در تاپيك ((آموزش سي پلاس از پايه)) براي من مقداري صحبت كرد. و اينجا هم اگر از علم خود باز ما را بهره مند كند ممنونيم.
.
================================
تا اونجا كه من خبر دارم:
وي بي را ميشه يك حال اساسي دانست كه ميكروسافت به بيسيك كارها داده.
يعني براحتي هر چه تمام تر(از اين راحت تر ديگه نميشده) به بيسيك كار اجازه داده تا از ابزارهاي ويندوز استفاده كنه و با ويندوز ارتباط برقرا كنه.

البته شيوه كدنويسي در بيسيك(و ويژوال بيسيك) بي نهايت شبيه شيوه كدنويسي سي است.
يعني اگر شما در بيسيك كدنويسي خوب بلد باشيد ، 10 ها برابر سريعتر كدنويسي در سي را ياد مي گيريد. ولي براي خود من سئواله كه وقتي روش كدنويسي اين قدر شبيه است(حتي تا 80 درصد) چرا سي ميشه يك زبان خيلي قوي و بيسيك ميشه يك زبان بسيار كند و دست و پا چلفتي.
البته دوستان گفتند كه اين برميگرده به اين كه بيسيك كامپايل نميشه و سي يك زباني است كه كامپايل ميشه و به صفر و يك تبديل ميشه. آقا سعيد كه بي نهايت از ايشان ممنونم و اقا آرش براي من توضيح دادند كه كدهاي بيسيك همان طور بي كامپايل بسته بندي مي شوند و موقع اجرا خط به خط خوانده مي شوند و تفسير مي شوند.
كامپايل در حد سواد من يعني تبديل دستورات كدنويسي ما به زبان ماشين.
و در بيسيك اين قضيه را نداريم.
بعدا براي من سئوال شد كه چرا وقتي بيسيك شيوه نوشتن دستوراتش اين قدر شبيه سي است را چرا نميشه كامپايل كرد كه آقا سعيد علت را ناقصي زبان بيسيك دانست زيرا براي سادگي بيسيك نويس آماده اند خيلي دنگ و فنگ ها را حذف كرده اند.

و براي اين كه سي با ويندوز ارتباط برقرار كند ، خيلي علم بايد داشت.
و ميشه همين مشكل فعلي ما ، كه سي تا حدي بلديم ولي براي صحبت با ويندوز بايد برويم معماري ويندوز را ياد بگيريم.
ولي در وي بي ، نيازي به يادگيري معماري ويندوز نيست و همه كارها اتوماتيك است.

من اين حرفها را زدم تا بحث داغ بشه ولي ممكنه خيلي موارد را اشتباه گفتم كه دوستان تكميل كنند.
با تشكر.
.

=========================
نظر نهايي من اينه: بيسيك(نسبت به سي) كمي راحت شده ولي بي نهايت ضعيف شده.
.
=========================
از تالار وي بي ، تاپيك ((دوست داران ويژوال بيسيك )) لينك دادم تا نظر اساتيد را بشنويم.
.
 

amironline

Registered User
براتون بگم كه C يه زبان سطح مياني هست و بيشتر اوقات سطح پايين هم بهش ميگن
يعني C در استفاده از سخت افزار و پورت ها و... خيلي قدرتمند هستش شبيه اسمبلي خودمون
من با VB كار نكردم ولي فكر نكنم كارايي رو كه با C ميشه انجام داد ب اون هم بشه
 

Y2K

Registered User
فرق سی و وی بی چیه ؟
در تکمیل صحبتهای saalek و amironline باید بگم که تنها گزینه ای که C و C++ رو نسبت به دیگر زبانها متمایز می کنه . مدیریت حافظه قدرتمند اوناست که کاملا در اختیار برنامه نویس( خوب) قرار داره و به نسبت از بقیه زبانها قویتره

یه نکته جالبه دیگه.
تا اونجایی که من می دونم وی بی رو با C نوشتن ولی C رو با خود C نوشتن



به نقل از Arash_j13 :
البته یه نکته ای هست
اگه کسی اصرار داره برنامه نویسی ویندوز رو با سی انجام بده و راحتی ویژوال بسیک رو می خواد می تونه از C++ Builder استفاده کنه ابزاری دو چهره به قدرت سی و به سادگی وی بی
سادگی رو موافقم ولی قدرت رو نه
درسته که کامپایلر C و C++ شرکت بورلند حرف اول میزنن ولی تو C++ builder فوق العاده ضعیف کار کرده​
 

saeedsmk

مدیر بازنشسته
سلام
تا اونجايي كه من ميدونم فرقاشون زياده و هم اينكه شباهتاشون هم زياده
- بصورت كلي ما دو نوع فايل اجرايي داريم
يكي فايل هاي اجرايي هستند كه كامپايل شده اند
و ديگري فايل هاي كه احتياج به يك مفسر دارند
خوب فايلهاي كه به اسمبلي بر ميگردن ( بصورت كامل ) . داراي خطوط اضافي كمتري هستند و لذا سريع تر اجرا ميگردن
اما برنامه هاي مفسري چون احتياج دارن كدها و متغير ها را براي توابع موجود در مفسر آماده نماييند داراي خطوط بيشتري هستند .لذا كند تر انجام ميگردند.
----نكته منظورماز تعداد خطوط ، تعدا خطوط دي اسمبل شده برنامه اجرايي نيست منظورم تعداد خطوط پروسس شده براي انجام يك كار مشابه است

ممكنه بگيد خوب چرا خطوط زيادتري دارند ؟

توي فايل هاي مفسري توابعي كلي هستند كه چند كار شبيه به هم را ميكنه ( چون اگه بخوان براي هر كدوم يك تابع بنويسند فايل مفسر بزرگ شده و همچنين احتياج داره كه ساعات بيشتري برنامه نويسي انجام بشه و ....) لذا هميشه بايد متغير هاي مورد نياز ست بشه ( به قول معروف بره توي حافظه ) در نتيجه اين كار زبان بره
نتيجه اينكه سرعت اين برنامه ها مياد پايين

و از طرف ديگه چون اين برنامه ها دسترسي مستقيم به منابع سيستم ( مثلا توي ويندوز توابع api ) رو ندارن و اين ازتباط بايد از طريق مفسر انجام بشه . لذا باز هم سرعت مياد پايين و هم اينكه يك سري از قايليت ها برنامه مفسري كم ميشه . مثلا توي وي بي نميتونيم مستقيما حافظه برنامه رو بخونيم و يا ادرس يك متغير رو با ادرس يك پوينتر به تابع بديم .براي حل اين مشكل هم ميان از روش هاي استفاده ميكنن كه احتياج به كد نويسي داره و لذا مفسر بيشتر درگير ميشه و باز هم سرعت مياد پايين ( توي بعضي از موارد هم مشكل هنوز هست و نميشه اين كار رو كرد)
و در ضمن هموني كه بايد بشه هم در بيشتر مواقع نميشه لذا زيان مفسري ضعيف ميشه .

خوب توي وي بي كه يك برنامه مفسري است ( مفسرش همون msvb ها يا run time dl ها هستند ) ما يكسري كمبود ها مشاهده ميكنيم و همچنين ضعف هاي هم مشاهده ميكنيم
از طرف ديگر بعلت كاربر دوست شدن برنامه يكسري ضعف ها در برنامه ايجاد ميشه
مثلا همين راحتي شما (هر متغير رو بدون تعريف بتونين استفاده كنيد) باعث شده كه توابع مفسر به دو حالت تعريف شده و حالت تعريف نشده تبديل بشن . يعني اول مفسر ميايد ميبينه ايا متغير تعريف شده يا نه اگر نه بر اساس مقدار دهي انجام شده متغير رو تعريف ميكنه ( تا حالا سه مرحله كار اضافينسبت به زبان كتامپايلري انجام شده 1- مشخص كردن اينكه متغير تعريف شده است يا نه 2- اگر نه تعيين نوع مقدار داده شده 3- تعريف لوكال متغير اما در حالت تعريف شده ديگر قسمت 2 و 3 انجام نميشود و قسمت اول هم يكبار انجام ميگرد در حالي كه بدون تعريف هر دفعه اين كار انجام ميشه يعني 2 و 3 ) لذا سرعت مياد پايين . از طرف ديگر بعلت عدم دسترسي به منابع بصورت مستقيم بعضي از خواص حذف شده اند . مثلا پنجره textbox از خانواده edit box ها داراي متد paint است اما در وي بي بعلت همين مفسري و درگيري بين ادرس دهي پوينتري و مفسر و همچنين سخت شدن برنامه نويسي اين متد حذف گرديده است ( ممكن است دلايل ديگري هم داشته باشد اما من منيدونم ) نتيجه اينكه
1- زبان وي بي شي گرا كامل نيست چون همونطور كهتوي مثال ديده ميشه متد paint بصورت ارثي براي text box به ارث گذاشته نشده است
2- شما بايد براي انجام اين كار دو راه حل داريد
2-1- يكي اينكه براي اين كار به api ها متوصل بشويد ولذا چندين خط كد بايد نوشته شود ( بازم سرعت مياد پايين ) و در بعضي از موارد هم اين كد با حلقه اصلي برنامه مشكل پيدا كرده و برنامه كرش ميكند
2-2- يا اينكه متوصل به سي شويد و در نتيجه احتياج به ايمپورت يك dll يا ocx پيدا ميكنيد و
2-2-1- در نتيجه هم سرعت گرفته ميشود زيرامفسر اين كار را انجام ميدهد و يعني : صدا زدن چندين تابع جهت مهيا كردن استفاده از dll و چندين تابع براي هماهنگ كردن متغير ها با نوع متغير هاي تابع موجود در dll : در نتيجه چندين خط اضافه نسبت به برنامه مشابه در وي سي يا ++c و در نتيجه كندي برنامه
2-2-2- هم اينكه زبان برنامه نويسي نقص پيدا ميكند. چون خود نتوانسته است اين كار را انجام دهد .

براي اينكه ببني يك خط كد اضافه چه بلاي روي سرعت داره و استفاده از عدم تعريف چقدر سرعت رو ميگيره كد زير رو توي وي بي اجرا كن
هم sub1 و sub2 و sub3 يك كار رو ميكنن
sub2 يك خط اضافه توي برنامه داره .
sub هم كه متغير a و b بدون تعريف اند

کد:
Private Sub Form_Load()
Dim a As Double
    a = Timer
        sub1
    MsgBox Timer - a
    a = Timer
        sub2
    MsgBox Timer - a
    a = Timer
        sub3
    MsgBox Timer - a
    
End Sub
Sub sub1()
Dim a As Integer
Dim b As Integer
Dim max As Integer
a = 20
b = 10
Dim i As Double
    For i = 1 To 2000 Step 0.00005
        max = a
        If b > a Then max = b
    Next
End Sub
Sub sub2()
Dim a As Integer
Dim b As Integer
Dim max As Integer
a = 20
b = 10
Dim i As Double
    For i = 1 To 2000 Step 0.00005
        If b > a Then
            max = b
        Else
            max = a
        End If
    Next
End Sub
Sub sub3()
Dim max As Integer
a = 20
b = 10
Dim i As Double
    For i = 1 To 2000 Step 0.00005
        If b > a Then
            max = b
        Else
            max = a
        End If
    Next
End Sub
 

فایل های ضمیمه

Arash_j13

Registered User
به نقل از Y2K :


در تکمیل صحبتهای saalek و amironline باید بگم که تنها گزینه ای که C و C++ رو نسبت به دیگر زبانها متمایز می کنه . مدیریت حافظه قدرتمند اوناست که کاملا در اختیار برنامه نویس( خوب) قرار داره و به نسبت از بقیه زبانها قویتره

یه نکته جالبه دیگه.
تا اونجایی که من می دونم وی بی رو با C نوشتن ولی C رو با خود C نوشتن





سادگی رو موافقم ولی قدرت رو نه
درسته که کامپایلر C و C++ شرکت بورلند حرف اول میزنن ولی تو C++ builder فوق العاده ضعیف کار کرده​
به نظر شما چرا قدرتمند نیست جه نکاتی رو کم داره؟
تنها چیزی که به نظر می یاد بهینه کردن خودکار کد مانند دلفی است و گرنه چه فرقی با سی داره؟
 

Y2K

Registered User
به نقل از Arash_j13 :
به نظر شما چرا قدرتمند نیست جه نکاتی رو کم داره؟
تنها چیزی که به نظر می یاد بهینه کردن خودکار کد مانند دلفی است و گرنه چه فرقی با سی داره؟

تصحیح می کنم نسبت به Microsoft VC++ البته اگه IDE اون چشم پوشی کنیم.
 

Arash_j13

Registered User
دلیل تون رو نگفتید لصفا بگید چرا چون من هم دوست دارم بدونم من آدم زیاد متعصبی نیستم اگه واقعا ویژوال سی بهتره باشه اعتراف می کنم همین جا
 

Bymir

کاربر تازه وارد
به نقل از Arash_j13 :
البته یه نکته ای هست
اگه کسی اصرار داره برنامه نویسی ویندوز رو با سی انجام بده و راحتی ویژوال بسیک رو می خواد می تونه از C++ Builder استفاده کنه ابزاری دو چهره به قدرت سی و به سادگی وی بی
-----
ممنون
 

pony'sdown

فروشنده معتبر [؟]
سي زبان قدرتمندي است ولي وي بي را چون كامپايل صورت نمي گيره نميشه زبان كاملي دانست.
 
بالا