صفحه 1 از 2 12 آخرین
جهت مشاهده مطالب کارشناسان و کاربران در این موضوع کلیک کنید   

موضوع: پرسش و پاسخهای علمی و درسی کاربران

  1. #1

    عضویت
    جنسیت آبان ۱۳۹۰
    نوشته
    75
    حضور
    7 روز 9 ساعت 17 دقیقه
    دریافت
    1
    آپلود
    0
    گالری
    39
    صلوات
    421

    سوال درباره کامپایلر و مفسر




    question about compiler and interpreter

    به نام خدا
    پرسش و پاسخهای علمی و درسی کاربران

    بچه ها من یه مطلبی رو توضیح میدم درباره کارکرد interpreter و compiler شما اصلاحش کنید و اگه برداشت اشتباهی ازش داشتم بهم بگید

    با توجه به تصویر زیر



    پرسش و پاسخهای علمی و درسی کاربران

    به زبان های java , visual basic در شکل بالا نگاه کنید که چه اتفاقی در موقع run می افتد : اینها interpreter pl هستند که دو موقع run ،
    سی پی یو jvm را اجرا می کند . این jvm شامل jit , interpreter هست که وقتی سی پی یو ، jvm را اجرا میکند. jit می اید bytecode سیو شده در فایل را دستور به دستور به machine code تبدیل می کند و بعد interpreter همزمان دستور به دستور اینها را اجرا میکند .


    حالا به c, c++ که زبان های کامپایلی هستند و interpreter ندارند وقتی برنامه run میشه cpu میات machine code سیو شده در فایل رو می خونه و اجرا می کنه

    حالا دو مرحله بالا رو مقایسه کنید
    ببینید کاری که توی زبان های کامپایلی انجام میشه در موقع run کردن برنامه خیلی کمتره چون مستقیما machine code اجرا میشه ولی در زبان های interpret هر بار bytecode به machine code تبدیل میشه و بعد دوباره میره سراغ دستور بعدی پس میشه گفت زمان run در برنامه های کامپایلی خیلی کمتر از زبان های interpret هست یعنی سریعتر انجام میگیرد .

    حالا شما عیب یابی کنید پرسش و پاسخهای علمی و درسی کاربران

    تشکر

    ما زنده به انیم که ارام نگیریم
    موجیم که اسودگی ما عدم ماست

  2. صلوات ها 5


  3.  

  4. #2

    عضویت
    جنسیت مرداد ۱۳۹۲
    نوشته
    229
    حضور
    11 روز 8 ساعت 42 دقیقه
    دریافت
    0
    آپلود
    0
    گالری
    55
    صلوات
    1311



    سلام ...
    کامپایلر در زبان های برنامه نویسی مانند C و ++C و ... مفهوم پیچیده ای ندارند ... برنامه نوشته شده کاربر رو میگرفتند و اون رو تبدیل به زبان ماشین میکردند ... و CPU با هر با Fetch کردن ... یک Instruction Code رو از حافظه میخونه و اجرا میکنه ... کامپایلر زبان C هم که Interpreter نداره ... چون نیازی نداره ... داده به زبان ماشین ترجمه شده و کار تمام است ...

    اما برخی از زبان ها هستند مثله Java که مستقل از ماشین هستند ... یعنی برنامه ای که شما با این زبون برنامه نویسی مینویسی رو هر ماشینی قابل اجرا هست ... رو IBM روی Apple روی Supper Compute ها و ... این دستگاهها که سی پیو شون با هم فرق داره ... و مطمینا Instruction Code های متفاوتی دارند ... پس چطور یه برنامه نوشته شده این قابلیت رو داره که رو هر ماشینی اجرا بشه ؟؟؟

    به خاطر این هست که کامپایلر Java اون برنامه رو به زبان ماشین ترجمه نمیکنه و به قوله شما به Byte Code ترجمه میکنه و این Byte Code قابله خوندن و اجرا شدن توسط CPU کامپایلر نیست ... بایت کد یه کد خاصی با استانداردی خاص هست ... وقتی شما داری این کار رو میکنی Virtual Machine جاوا رو هم مطمینا نصب میکنی ... Virtual Machine جاوا هست که باعث میشه اینترپرتر بفهمه که Byte Code رو چگونه به زبان ماشین ترجمه کنه ... حالا این یعنی چی ...

    فرض کن من یه برنامه به زبان Java مینویسم ... اگر این رو روی کامپیوتر خودم که IBM Compatible هست اجرا کنم ... ابتدا کامپایلر میاد و دستورات رو به یه کد فی مابین به نام Byte Code تبدیل میکنه ... و چون Virtual Machine جاوایی که روی کامپیوتر من نصب شده مرتبط با IBM Compatible هست ... اون کدها رو به کدهایی خاص که CPU کامپیوتر من میفهمه بدل میکنه ....

    حال اگر همین برنامه رو من ببرم و رویه یه کامپیوتر Apple اجرا کنم ... باز هم این کدها قابلیت اجرا دارن ... چون رو اون کامپیوتر Virtual Machine جاوا مرتبط با Apple نصب شده و این بار Virtual Machine جاوا کدهای من رو به ماشین کدی قابل فهم برای CPU اپل تبدیل میکنه ...

    و اما بر میگردیم به سوال شما ... زمان های سابق اینگونه بود که سرعت برنامه های Java پایین تر بود اما این مشگل هم حل شد ... در حقیقت کامپایلر های درست و به موقع (Just In Time) بوجود اومدن که این نقیصه رو حل کردند ... یعنی پس از کامپایل کردن عمل اینترپرتر نیز انجام میشه و کد به زبان ماشین آماده هست و تنها کافی هست CPU اون رو از حافظه Fetch کنه و اجرا کنه ...
    ویرایش توسط عنکبوت سرخ : ۱۳۹۲/۰۷/۱۳ در ساعت ۲۲:۳۶


  5. صلوات ها 5


  6. #3

    عضویت
    جنسیت آبان ۱۳۹۰
    نوشته
    75
    حضور
    7 روز 9 ساعت 17 دقیقه
    دریافت
    1
    آپلود
    0
    گالری
    39
    صلوات
    421



    نقل قول نوشته اصلی توسط عنکبوت سرخ نمایش پست ها
    سلام ...
    کامپایلر در زبان های برنامه نویسی مانند C و ++C و ... مفهوم پیچیده ای ندارند ... برنامه نوشته شده کاربر رو میگرفتند و اون رو تبدیل به زبان ماشین میکردند ... و CPU با هر با Fetch کردن ... یک Instruction Code رو از حافظه میخونه و اجرا میکنه ... کامپایلر زبان C هم که Interpreter نداره ... چون نیازی نداره ... داده به زبان ماشین ترجمه شده و کار تمام است ...

    اما برخی از زبان ها هستند مثله Java که مستقل از ماشین هستند ... یعنی برنامه ای که شما با این زبون برنامه نویسی مینویسی رو هر ماشینی قابل اجرا هست ... رو IBM روی Apple روی Supper Compute ها و ... این دستگاهها که سی پیو شون با هم فرق داره ... و مطمینا Instruction Code های متفاوتی دارند ... پس چطور یه برنامه نوشته شده این قابلیت رو داره که رو هر ماشینی اجرا بشه ؟؟؟

    به خاطر این هست که کامپایلر Java اون برنامه رو به زبان ماشین ترجمه نمیکنه و به قوله شما به Byte Code ترجمه میکنه و این Byte Code قابله خوندن و اجرا شدن توسط CPU کامپایلر نیست ... بایت کد یه کد خاصی با استانداردی خاص هست ... وقتی شما داری این کار رو میکنی Virtual Machine جاوا رو هم مطمینا نصب میکنی ... Virtual Machine جاوا هست که باعث میشه اینترپرتر بفهمه که Byte Code رو چگونه به زبان ماشین ترجمه کنه ... حالا این یعنی چی ...

    فرض کن من یه برنامه به زبان Java مینویسم ... اگر این رو روی کامپیوتر خودم که IBM Compatible هست اجرا کنم ... ابتدا کامپایلر میاد و دستورات رو به یه کد فی مابین به نام Byte Code تبدیل میکنه ... و چون Virtual Machine جاوایی که روی کامپیوتر من نصب شده مرتبط با IBM Compatible هست ... اون کدها رو به کدهایی خاص که CPU کامپیوتر من میفهمه بدل میکنه ....

    حال اگر همین برنامه رو من ببرم و رویه یه کامپیوتر Apple اجرا کنم ... باز هم این کدها قابلیت اجرا دارن ... چون رو اون کامپیوتر Virtual Machine جاوا مرتبط با Apple نصب شده و این بار Virtual Machine جاوا کدهای من رو به ماشین کدی قابل فهم برای CPU اپل تبدیل میکنه ...

    و اما بر میگردیم به سوال شما ... زمان های سابق اینگونه بود که سرعت برنامه های Java پایین تر بود اما این مشگل هم حل شد ... در حقیقت کامپایلر های درست و به موقع (Just In Time) بوجود اومدن که این نقیصه رو حل کردند ... یعنی پس از کامپایل کردن عمل اینترپرتر نیز انجام میشه و کد به زبان ماشین آماده هست و تنها کافی هست CPU اون رو از حافظه Fetch کنه و اجرا کنه ...

    ممنوم از شما

    پس یعنی تمام چیزایی که من نوشتم درست بود و هیچ مشکلی درش نبود ؟(تمام توضیحاتم )
    ما زنده به انیم که ارام نگیریم
    موجیم که اسودگی ما عدم ماست

  7. صلوات ها 4


  8. #4

    عضویت
    جنسیت مرداد ۱۳۹۲
    نوشته
    229
    حضور
    11 روز 8 ساعت 42 دقیقه
    دریافت
    0
    آپلود
    0
    گالری
    55
    صلوات
    1311



    نه هیچ مشگلی نداشت ... کاملا هم درست بودن ...
    کلمات کلیدی Just In Time و Java رو با Google ...سرچ کن ... مطالب مفیدی در موردش پیدا میکنی ...


  9. صلوات ها 4


  10. #5

    عضویت
    جنسیت آبان ۱۳۹۰
    نوشته
    75
    حضور
    7 روز 9 ساعت 17 دقیقه
    دریافت
    1
    آپلود
    0
    گالری
    39
    صلوات
    421



    دوستان چرا مقدار حافظه درخواستی interpreter کمتر از compiler هست ؟
    ما زنده به انیم که ارام نگیریم
    موجیم که اسودگی ما عدم ماست

  11. صلوات ها 3


  12. #6

    عضویت
    جنسیت آبان ۱۳۹۰
    نوشته
    75
    حضور
    7 روز 9 ساعت 17 دقیقه
    دریافت
    1
    آپلود
    0
    گالری
    39
    صلوات
    421



    بچه ها من یه جریانی برای نشون دادن runtime errors ها تو ذهنم برای compiler و interpreter

    توضیح می دم کمک کنید بگید درسته یا نه یا کامش کنید و عیب یانی کنید .

    از اونجایی که errors زمان runtime فقط شامل dynamic semantic errors میشه ( به مراحل کار زبان جاوا در شکل بالا دقت کنید ) قبل از run کامپایلر برنامه شروع به کار میکند یکی از مراحل کار کامپایلر پیدا کردن خطاهای semantic هست این خطاها را پیدا می کند و در یک فایل سیو می کند انگاه در موقه run کردن برنامه (از انجا که خطاهای dynamic semantic در زمان run نشان داده می شود ) با توجه به این که interpreter کدام دستور را اجرا می کند خطای semantic مربوط به همان را نشان می دهد و بعد دوباره که interpreter شروع به اجرا کردن دستور بعدی کرد خطاهای semantic ان را در صورت وجود نمایش خواهد داد.و همین طور تا پایان کد ادامه دارد.

    حالا این برداشت درسته؟
    ویرایش توسط reyhaneh.a : ۱۳۹۲/۰۷/۱۵ در ساعت ۱۷:۰۰
    ما زنده به انیم که ارام نگیریم
    موجیم که اسودگی ما عدم ماست

  13. صلوات ها 3


  14. #7

    عضویت
    جنسیت مرداد ۱۳۹۲
    نوشته
    229
    حضور
    11 روز 8 ساعت 42 دقیقه
    دریافت
    0
    آپلود
    0
    گالری
    55
    صلوات
    1311



    نقل قول نوشته اصلی توسط reyhaneh.a نمایش پست ها
    دوستان چرا مقدار حافظه درخواستی interpreter کمتر از compiler هست ؟
    سلام ریحانه جان ...
    امیدوارم که خوب و سلامت باشی ...
    من نمیدونم شما چجوری حجم حافظه رو اندازه گرفتی ... چون ...
    وظیفه کامپایلر ساخته Byte Code هست و وظیفه Interpreter ساخته بزنامه به زبان ماشین بر اساس بایت کد ...

    وقتی کامپایلر داره Byte Code رو میسازه ... اون رو به ریز دستورات قابل فهم پردازنده تبدیل نمیکنه ... مثلا فرض کن شما یه دستوره For رو نوشته ...
    تو بایت کد ... اعلان میشه ... دستور For - تعداد دفعات تکرار - نام Counter ... شاید حجم این دستور در Byte Code نهایتا 3 بایت بشه ...
    ولی اگر همین دستور بخواد به زبان ماشین ترجمه بشه ... میتونه شامل دستوراتی جهت تخصیص رجیستر ... مقدار دهی رجیستر ها - مقایسه رجیستر با مقداری پیش فرض ... درستور پرش ... و خیلی چیزهای دیگه بشه ...

    نمیدونم SQL کار کردی یا نه ... شما تو SQL میتونی فانکشن تعریف کنی ... فرض کن شما رو سرورت یه فانکشن SORT کردن Database تعریف کردی که وظیفه اون Sort کردن محتوای Table هست ... این تابع میتونه 1K بایت کد و 100 بایت رم نیاز داشته باشه ...
    ولی وقتی شما داری فانکشن SORT رو از درون Client صدا میزنی ... فقط میگی سورت کن ... شاید حجم اجرایی این دستور 10 بایت هم نشه ... چون فقط فراخوانی یه تابع هست ...

    در حقیقت علت اینکه کامپایلر حجم کد کوتاه تری تولید میکنه و تقاضای حافظه کمتری میکنه این هستش که میخواد دستوراته ما رو به یه زبان سطح بالا ترجمه کنه و علته اینکه Interpreter حجم کد بالاتر و Ram بالاتری نیاز داره بخاطره این هست که میخواد دستوراته ما رو به زبان ماشین ترجمه کنه ...

    پس در نهایت Interpretter حجم کد بالاتر و Ram بالاتری رو مطالبه میکنه ...


  15. صلوات ها 5


  16. #8

    عضویت
    جنسیت خرداد ۱۳۹۳
    علاقه
    13 آبان :)
    نوشته
    561
    حضور
    24 روز 23 دقیقه
    دریافت
    0
    آپلود
    0
    گالری
    27
    صلوات
    2166

    پرسش پرسش و پاسخهای علمی و درسی کاربران




    دوستان سلام
    در ضرب اعداد بزرگ در درس طراحی الگوریتم همه چیش آسونه به جز خطر آخرش که نوشته t(n)=4t(n/2)+cn خوب الان سوال اینجاست این 4 پشت t از کجا اومده؟
    بعدش نوشته a=4 و b=2 و k=1 و در آخر نتیجه گرفته : n و در توان: لگاریتم چهار بر پایه دو
    این وسط cn هم نمی دونم چیه؟ دوستان اگر کسی بلده کمکی بکنه.
    ممنون
    «عابدى هفتاد سال خدا را بندگى كرد، روزها را روزه و شبها را به نماز مى‌ايستاد، آنگاه حاجتى از خداوند متعال طلب نمود، ولى بر آورده نگرديد، رو به خود كرد و گفت: اشكال از خود تو است، چون اگر در تو خيرى مى‌بود، حاجتت روا مى‌شد، در اين هنگام خداوند متعال فرشته‌اى براى او فرستاد و گفت: اى فرزند آدم! اين يك لحظه‌اى كه خود را كوچك شمردى، از تمام عبادتهاى گذشته‌ات بهتر است»

  17. صلوات ها 3


  18. #9

    عضویت
    جنسیت تير ۱۳۹۳
    علاقه
    ❤خدا و ائمه تنها کسایین که دارم❤
    نوشته
    734
    حضور
    36 روز 9 ساعت 33 دقیقه
    دریافت
    0
    آپلود
    0
    گالری
    0
    صلوات
    2995



    سلام

    من خیلی یادم نیست ولی تا اونجا که در خاطرم هست جواب میدم

    اینی که شما دادید اصولا صورت مسئله هست، البته با چند خط حل کردن هم می تونید بهش برسید

    ولی اون 4 یعنی هربار مسئله رو به 4 تا زیر مسئله به اندازه نصف (n/2) می شکنید

    اون Cn هم یعنی زیر مسئله ها رو با زمان cn با هم ترکیب می کنید مثلا با زمان 5n
    بگــــــذآر تمـــآم دنیا بد وبیرآهه بگویند!

    به خــــــودت...

    به چـــــــــــآدرت...

    به سیـآه بودنش...

    می ارزد به یک لبخند رضآیت مـــــــــــــدی فاطمـــــه(س)

  19. صلوات ها 4


  20. #10

    عضویت
    جنسیت خرداد ۱۳۹۳
    علاقه
    13 آبان :)
    نوشته
    561
    حضور
    24 روز 23 دقیقه
    دریافت
    0
    آپلود
    0
    گالری
    27
    صلوات
    2166



    نقل قول نوشته اصلی توسط Ṃᾄʀẓἷἔ نمایش پست ها
    سلام

    من خیلی یادم نیست ولی تا اونجا که در خاطرم هست جواب میدم

    اینی که شما دادید اصولا صورت مسئله هست، البته با چند خط حل کردن هم می تونید بهش برسید

    ولی اون 4 یعنی هربار مسئله رو به 4 تا زیر مسئله به اندازه نصف (n/2) می شکنید

    اون Cn هم یعنی زیر مسئله ها رو با زمان cn با هم ترکیب می کنید مثلا با زمان 5n
    میشه این قسمتو بیشتر توضیح بدی؟
    "ولی اون 4 یعنی هربار مسئله رو به 4 تا زیر مسئله به اندازه نصف (n/2) می شکنید"
    چرا اینکارو می کنیم مگه ضرب نیست؟
    و بعد اینکه :
    یعنی صورت مسئله هست و ما نباید به دستش بیاریم؟
    ممنون
    «عابدى هفتاد سال خدا را بندگى كرد، روزها را روزه و شبها را به نماز مى‌ايستاد، آنگاه حاجتى از خداوند متعال طلب نمود، ولى بر آورده نگرديد، رو به خود كرد و گفت: اشكال از خود تو است، چون اگر در تو خيرى مى‌بود، حاجتت روا مى‌شد، در اين هنگام خداوند متعال فرشته‌اى براى او فرستاد و گفت: اى فرزند آدم! اين يك لحظه‌اى كه خود را كوچك شمردى، از تمام عبادتهاى گذشته‌ات بهتر است»

  21. صلوات ها 2


صفحه 1 از 2 12 آخرین

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

کاربرانی که این موضوع را مشاهده کرده اند: 5

کلمات کلیدی این موضوع

اشتراک گذاری

اشتراک گذاری

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
^

ورود

ورود