تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 9 از 9

نام تاپيک: مشکل در فهم "مستقل از پلت فرم"

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    13 مشکل در فهم "مستقل از پلت فرم"

    سلام
    ما میگیم فلان برنامه مستقل از پلت فرم هست. یعنی روی هر ماشین ی اجرا می شود.
    مثل جاوا و میگیم این به خاطر این هست که برنامه ای که می نویسیم یک واسطی اینجا هست که اول کد ها به اون واسط ترجمع و سپس اون واسط به زبان ماشین ترجمه می شود.واسط میشه JVM
    پس در سی شارپ .net چی؟ اون هم مگه کد ترجمه نمیشه به زبان میانی که خود ماکروسافت هم تولیدش کرده؟
    اینجا چی باعث میشه که تو هر پلت فرمی اجرا نشه؟

    مورد بعد:
    ما میگیم مفسر ها وابسته به پلت فرم نیستند. اما کمپایلر ها وابسته به نوع سخت افزار هستند.
    کامپایلر کد رو کامل به زبان ماشین تبدیل میکنه بعد اجرا میکنه
    اما مفسر خط به خط
    پس چرا مفسر وابسته به پلتفرم نیست اما کامپایلر هست؟

    اینکه میگیم هر سخت افزار زبان ماشین خودش رو داره و برای اجرا یک برنامه باید کامپایلر باشه.پس چطور هست یک برنامه مینویسم به زبان سی شارپ فایل exe اون در کامپویتر ها مختلف اجرا میشه؟

    الان صفات HTML دارن تفسیر میشن به وسیله مرورگر درسته؟ و زبان ماشین تولید نمیکنن. پس یعنی مفسر ها اصلا زبان ماشین تولید نمیکنند؟ برای همین هست که این صفحات در هر سیستم عامل و سخت افزاری صفحات یکسان html رو بهمون میدهند؟
    یک جا میگن مفسر خط به خط به زبان ماشین ترجمه میکنه یک بار میگن ترجمه نمیکنه !!!!!!
    راتسش نمیفهمم
    Last edited by Life24; 31-10-2013 at 17:01.

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    پس در سی شارپ .net چی؟ اون هم مگه کد ترجمه نمیشه به زبان میانی که خود ماکروسافت هم تولیدش کرده؟
    اینجا چی باعث میشه که تو هر پلت فرمی اجرا نشه؟
    بله دقیقاً درست است.
    اتفاقاً از بسیاری از لحاظ و حتی دستورات و حتی namespace ها هم شباهت های خیلی جالبی بیت #C و Java وجود دارد.
    کد #C به MSIL کامپایل اولیه و در نهایت توسط JIT کامپایل نهایی و در فضای CLR اجرا میشود.
    کد Java هم به bytecode کامپایل اولیه و در نهایت توسط JIT کامپایل نهایی و در فضای JVM اجرا میشود.

    درست به همین دلیل مستقل از پلتفرم است که میتوانیم در #C برنامه AnyCPU بنویسم که در x86 کاملاً 32 بیتی اجرا میشود و در x64 کاملاً 64 بیتی.
    این امکان در زبانی مانند ++VC وجود ندارد و باید زمان کامپیل دقیق مشخص کنید چه خروجی لازم دارید.

    ولی مشکل کجاست که Java بیش از #C مستقل از پلتفرم است؟؟؟
    مشکل آنجاست که شرکت مایکروسافت مالک سیستم عامل ویندوز است.
    مشکل آنجاست که شرکت مایکروسافت بیشترین سود مستقیم و غیر مستقیم را از گسترش و همه گیر شدن سیستم عامل ویندوز میبرد.
    مایکروسافت تمایلی ندارد Framework و JIT و CLR ای برای سایر سیستم عامل ها عرضه کند.
    مایکروسافت تمایلی ندارد کاربران را برای کارکردن در سایر سیستم عامل ها تشویق کند و این راه را آسفالت و آسان کند!
    مایکروسافت تمایلی ندارد از پشت به سیستم عامل خودش خنجر بزند و به تشویق و توصعه رقبای ویندوز کمک کند.
    (احتمالاً من هم جای رئیس و مالکین مایکروسافت بودم همین کار را میکردم!)

    در سایت قدیم sun و فعلی oracle خیلی راحت میتوانید jdk را برای سیستم عامل های مختلف دانلود کنید
    ولی در سایت مایکروسافت فقط لینک دانلود دات نت را برای ویندوز پیدا خواهید کرد.
    یعنی مایکروسافت فقط دات نت را مستقل از پلتفرم سخت افزاری می خواهد (x86,x64,arm,xbox,mobile) نه مستقل از سیستم عامل ویندوز!!! و نه مشوق استفاده از سایر سیستم عامل ها!!!

    درواقع #C هم مستقل از پلتفرم است (یا حداقل میتوانست باشد) ولی به شرطی که در سایت مایکروسافت دنبال آن نباشید!
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    (در صورت مشکل از ف-ی-ل-ت-ر ش-ک-ن استفاده کنید)


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

    شما میتوانید کدی در ++VC نوشته و برای windows x86 کامپایل کنید.
    این کد مخصوص قرارداد ها و زبان ماشین x86 و توابع سیستم عامل windows کامپایل میشود.
    در عوض این کد برای اجرا در یک ماشین windows x86 به هیچ چیزی اضافه ای نیاز ندارد.
    بدون نصب هیچ پیش نیازی و پس از پایان نصب ویندوز میتواند با یک دبل کلیک اجرا شود.
    کامپایر ++VC (میتواند) کامل این exe را برای اجرا در windows x86 آماده کند.


    ولی در مقابل وقتی شما کدی به زبان php (مفسری) یا java (دو کامپایلی) مینویسید درست است که کد شما میتواند هم در ویندوز و هم لینوکس و... و هم در x86 و هم در x64 و... کار کند و ائل باید مفسر یا کامپایلری مخصوص آن سیستم باید برایش نصب شود.
    یعنی فوراً بعد نصب ویندوز کد php یا java قابل اجرا نیست چون به زبان ماشین کامپایل نشده و نه توسط سیستم عامل و نه توسط cpu قابل شناسایی و فهم نیست.

    اگر windows x64 دارید باید اول jre-7u45-windows-x64.exe را نصب کنید.
    اگر windows x86 دارید باید اول jre-7u45-windows-i586.exe را نصب کنید.
    اگر Linux x86 دارید باید اول jre-7u45-linux-i586.rpm را نصب کنید.
    اگر linux x64 دارید باید اول jre-7u45-linux-x64.rpm را نصب کنید.
    و...
    (گفتم یک نفر یک جایی باید هزینه این تفاوت سخت افزار و سیستم عامل را بدهد و این هزینه همین تفاوت فایل مخصوص هر سخت و سیستم عامل برای مفسر یا کامپایلر دوم یا کتابخانه دوم است، یعنی طبق مثال فوق یک فایل مشترک نصب java برای همه سیستم عامل و سخت افزارها وجود ندارد، اینجاست که نصب java متفاوت و مخصوص هر سخت افزار و نرم افزار بطور مجزا دارد هزینه این تفاوت را میدهد)

    جواب شما:
    با کمی دقت، میتوان گفت، مفسرها مستقل از پلتفرم نیستند ولی زبان های مفسری مستقل از پلتفرم هستند چون برای اجرایشان باید مفسر مخصوص آن سخت افزار و سیستم عامل اول در رایانه مقصد نصب شود.
    در واقع این کدها مستقل از پلتفرم هستند، چون مفسرهای غیر مستقلشان در کنارشان باید به رایانه مقصد منتقل شود.
    (یک فایل php نهایی همان کدی است که برنامه نویس در notepad نوشته و هیچ کاری قبل انتشار روی آن انجام نمیشود همه کارها در ماشین مقصد انجام میشد)


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



    اینکه میگیم هر سخت افزار زبان ماشین خودش رو داره و برای اجرا یک برنامه باید کامپایلر باشه.پس چطور هست یک برنامه مینویسم به زبان سی شارپ فایل exe اون در کامپویتر ها مختلف اجرا میشه؟
    بله ولی استانداردهای جهانی در سخت افزار وجود دارد.
    اگر هرشرکت سخت افزاری به میل خود یک وسیله را میساخت که سنگ روی سنگ بند نمیشد!
    این استاندارد در هاردها میشود IDE,SATA,SCSI و...
    این استاندارد در پردازنده میشود x86,x64,ia64,Arm و...

    همانطور که شما میدانید مادربورد شما SATA II را پشتیبانی میکند و دنبال هارد SATA II میگردید و نگرانی از شرکت سازنده اش ندارید.
    در برنامه هم اگر یک برنامه x64 داشته باشید کافیست CPU (و OS) شما هم x64 باشد دیگر شرکت intel یا amd آن فرقی ندارد.

    در این بین استانداری مانند x64 در دل خود قوانین و شرایط x86 را هم شامل میشود یا رعایت و شبیه سازی میکند.
    نتیجه آن میشود که برنامه های x86 شما روی x86 و x64 کار خواهد کرد ولی برعکس آن صادق نیست.

    (((
    ولی برنامه x86 شما صددرصد روی ARM کار نمیکند یا برنامه x64 که نوشته اید روی x86 کار نمیکند.
    همانطور که هارد IDE را نمیتوانید به مادر بورد SATA متصل کنید
    برای این موارد غیر هماهنگ همواره یک پورت یا مبدل یا شبیه ساز و... لازم است
    )))


    الان صفات HTML دارن تفسیر میشن به وسیله مرورگر درسته؟ و زبان ماشین تولید نمیکنن. پس یعنی مفسر ها اصلا زبان ماشین تولید نمیکنند؟ برای همین هست که این صفحات در هر سیستم عامل و سخت افزاری صفحات یکسان html رو بهمون میدهند؟
    بله ولی مثال خیلی خوبی نزدید چون html یک زبن نشانه گذاری است و نمی توان خیلی آن را با زبان برنامه نویسی مقایسه کرد.
    گرچه بحث روی html هم مشکلی ندارد ولی اگر مثال شما را به javascript تغییر دهیم بهتر است و قابل فهم تر است؟!

    اول اجازه دهید ببینیم زبان ماشین یا زبان cpu چیست؟
    زبان cpu یک سری آپ کدهای صرفاً ععدی است که برای cpu یک فرمان انجام یک دستور ساده را تداعی میکند.

    مثلاً عدد 03 یکی از اپ کدهای جمع در cpu های x86 و x64 است.
    کد ساده ای مانند این را در نظر بگیرید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اینها متن هستند و برای cpu بی معنی هستند، یک نفر یک جایی باید زحمت تبدیل این متن به رشته عددی زیر را بکشد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این دقیقاً کد معادل زبان ماشین برای یک cpu خانواده x64 است، رشته عددی فوق چیزی است که cpu-x64 میفهمد و اجرا میکند.
    این رشته عددی کاملاً با چیزی که یک پردازنده ARM میفهمد فرق دارد، مانند زبان گفتاری ما انسان ها می ماند.
    یک کامپایلر x64 به جای دستوراتی که نوشتم کدی شبیه این را درون فایل exe میگذارد تا در رایانه مقصد اجرا شود.
    در نتیجه exe تولیدی کامپایلر بدون هیچ کمکی و با بیشترین سرعت به، راحتی به زبان x64 خواسته های خود را گفته و اجرا میشود.

    از قضا این رشته عددی همان چیزی هم است که یک مفسر x64 برای کد خود تولید میکند!
    تنها تفاوتش آن است که این کد درون فایل اجرایی یک زبان مفسری وجود ندارد.
    مفسر x64 مخصوصی که نصب شده همان لحظه این کد را تولید و به خورد cpu میدهد.

    از نظر انسانی:
    در واقع کامپایل مانند ان است که به کسی اسپانیولی یاد بدهید و سپس او را برای کار به اسپانیا بفرستید.
    و مفسر مانند ان است که یک مترجم (دونفری) مخصوص کشور مقصد همراه کارمندتان بفرستید تا حرف های او را مدام در لحظه ترجمه کند.

    طبیعتاً نفر اول اگر به چین برود نمیتواند ارتباط برقرار کند و کاری انجام دهد
    ولی کارمند دوم را (با تغییر مترجم مخصوص چینی) میتوان برای کار به چین هم فرستاد!!!
    (چه مثالی شد! )


    ازنظر رایانه ای:
    مفسر، کامپایلری است که باید در رایانه مقصد/مشتری باشد و آنجا کد را خط به خط کامپایل میکند.

    حالا جواب شما با فرض سوال در مورد javascript :
    کد javascript به صورت کدخام متنی به مرورگر ارسال میشود و توسط مرورگر تفسیر و اجرا میشود.
    ولی در نهایت نهایت ram,hdd,cdrom و... نیستند که میتوانند دو عدد را جمع کنند! چیزی را با چیزی مقایسه کنند! و...
    فقط cpu توان این کار را دارد و یک چیزی که زبان cpu (و OS) را میفهمد و میتواند به زبان آنها صحبت کند باید خواسته خود (دستور خود) را به cpu بدهد تا اجرا شود.
    در نهایت کسی باید با زبان ماشین و آپکدهای مخصوص cpu به cpu فرامین را بدهد تا اجرا شوند.

    ==============


    (((
    بخش اضافه!:

    کد MSIL دستور فوق نیز چنین است:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در واقع وقتی دررایانه تان کد #C را کامپایل و exe می سازید، رشته عددی فوق در فایل exe قرار میگرد.
    بعداً در رایانه مقصد و توسط کامپایلر دوم JIT (اگر cpu-x64 باشد) آن رشته کد بزرگ قبلی که کد زبان ماشین بود به یکباره تولید و برنامه اجرا میشود.
    یعنی زبان هایی مثل java و #C دو بار کامپایل میشوند یکبار در رایانه برنامه نویس تمام پردازش ها و اشکال یابی ها و... انجام میشود و به یک زبان میانه کامپایل میشوند و یکبار هم قبل از اجرا در رایانه کاربر کامپایل نهایی میشوند که این کامپایل بسیار بسیار کار کمتری دارد و خیلی سریع کارش را انجام میدهد.
    بدین ترتیب تلاش میککند هم سرعت را داشته باشند و هم عدم وابستگی به پلتفرم.
    )))



    امیدوارم به جواب تان رسیده باشید.
    Last edited by _H2_; 02-11-2013 at 02:26.

  3. 8 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض

    سلام
    خیلی ممنون از پاسخ کامل و خوب شما

    فکر کنم بخش نرم افزاری قضیه و سیستم عامل را درک کردم. اما یک سوال:
    ما میگیم کامپایلر یا مفسر میاد کد ما رو تبدیل میکنه به زبان اسمبلی (Native Code) سپس اسمبلی به زبان ماشین
    آن هم زبان ماشینی که هر سخت افزار با سخت افزار دیگر متفاوت هست و کد متفاوت میشود..


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

    چرا کاری نمیشه که همه زبان ماشین ها بکسان بشه؟ مشکل و کمبود کجا هست؟ ایراد کار کجان؟

    دقت کنید، بحرحال سخت افزار و سیستم عامل ها متفاوت هستند و یک کد یکسان تکی وجود ندارد که روی همه کار کند
    من علاقه مند هستم،کد یکسان و تک تولید کنم و استاندارد سازی را انجام دهم!!!

    زحمت تبدیل زبان اسمبلی به زبان ماشین تا CPU بتواند کد را اجرا کند، کامپایلر و مفسر میکشد؟یا کامپایلر میدهد به کرنل سیستم عامل؟ یا بخش دیگری؟

    الان این لینک حتی میگه زبان اسمبلی تولید شده برای هر سخت افزار هم متفاوت هست.
    در صورتی که من تا الان فکر میکردم برنامه ای که نوشته میشه تا قسمت زبان اسمبلی همه یکسان هستند در هر نوع سخت افزار برای اجرا!
    هر مجموعه دستورالعمل تعبیه شده در هر [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ، زبان [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] مخصوص خود را دارا می‌باشد. لذا اگر دو نوع پردازنده که ISA یا به عبارتی مجموعه دستورالعمل آنها متفاوت از یکدیگر میباشد را داشته باشیم نمیتوانیم با یک زبان اسمبلی (یا زبان همگذاری) یکسان برای آن دو برنامه بنویسیم. برای مثال زبان اسمبلی پردازنده‌های [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] با زبان اسمبلی پردازنده‌های MIPS تفاوت دارد. (معماری MIPS توسط شرکتهای مختلف مانند [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ، [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] ، و تعدادی دیگر از شرکتها مورد استفاده قرار میگردد)
    Last edited by Life24; 21-11-2013 at 12:17.

  5. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ...تبدیل میکنه به زبان اسمبلی (Native Code) سپس اسمبلی به زبان ماشین ...
    ...الان ما میگیم همه کد ها تبدیل به زبان اسمبلی میشه تا اینجا یکسان هست درسته؟....
    ...زحمت تبدیل زبان اسمبلی به زبان ماشین تا CPU بتواند کد را اجرا کند، کامپایلر و مفسر میکشد؟یا کامپایلر میدهد به کرنل سیستم عامل؟ یا بخش دیگری؟...
    خیر! اصلا! به هیچ وجه!
    چیزی به زبان اسمبلی تبدیل نمیشود.
    گمانم نباید اصلاً نام زبان اسمبلی را می آوردم.
    اصلاً زبان اسمبلی را فراموش کنید.
    کامپایلر کدشما را به کدهای زبان ماشین تبدیل میکند.

    زبان اسمبلی فقط یک نمایش متنی از زبان ماشین است.
    در همان مثال قبل گفتیم کدی مانند int a=5 (در زبانی مانند ++C و روی رایانه x64) مستقیم به کد رشته عددی زبان ماشین 0xC744242005000000 کامپایل میشود، تمام!!!

    متنی مانند mov dword ptr [rsp+20h],5 فقط نمود دیداری 0xC744242005000000 است.
    mov dword ptr [rsp+20h],5 یعنی 0xC744242005000000
    و
    0xC744242005000000 یعنی mov dword ptr [rsp+20h],5
    !!!

    زبان اسمبلی وجود دارد چون ما انسانها mov dword ptr [rsp+20h],5 را بیش از 0xC744242005000000 دوست داریم!
    (((این مورد عیناً در msil و bytecode هم وجود دارد، واقعاً فقط رشته ای از اعداد با معنی وجود دارد، متن یا text میانه ای وجود ندارد)))

    اصلاً اسمبلی همان زبان ماشین است، ماهیت دو گانه ای وجود ندارد، فاصله ای نیست که تبدیل بخواهد.
    درخیلی از متن ها وقتی میخوانید به تناوب زبان ماشین و اسمبلی به یک معنی استفاده میشود و نویسنده مینویسد اسمبلی در حالیکه که منظورش زبان ماشین بوده...
    و زبان اسمبلی هر سخت افزار هم مختص همان سخت افزار است، درست عین خود زبان ماشین.

    چرا نمی آن استاندارد سازی کنند؟
    چرا کاری نمیشه که همه زبان ماشین ها بکسان بشه؟ مشکل و کمبود کجا هست؟ ایراد کار کجان؟
    به این حد عملی نیست.
    بحرحال تفاوت وجود دارد.
    تفاوت قدرت پردازش.
    تفاوت زمان و تکنولوژی.
    تفاوت رقابت.


    پردازنده کوچکی مانند AVR بسیار کوچک و مختصر است.
    نمی توانید انتظار داشته باشید یک CPU هشت بیتی با یک RAM فقط 128byte همان مجموعه دستورات پردازنده x64 با هسته 64 بیتی و RAM های چند صد گیگابایتی را پشتیبانی کند.
    در طرف مقابل
    خیلی از تجهیزاتی که در پردازنده x64 در خارج از آن تعبیه شده در یک AVR در داخلش وجود دارد.
    یک پردازنده AVR معادل یک مادربور بسیار کوچک است و خودش با حداقل کمک (و شاید هیچ کمکی) میتواند کار کند در حالیکه یک x64 برای کاردنش به تعداد بسیار زیادی قطعه کمکی در خارج نیاز دارد، چیزی که ما با نام مادربورد میشناسیم.
    مثلاً وقتی یک AVR به طور داخلی ADC داخلی دارد یا PWM داشته باشد، باید دستورات زبان ماشین ویژه ای هم مخصوص این تجهیزات داشته باشد.
    و...

    بحرحال پردازنده یک مایکروفر با یک پردازنده سروراینترنتی متفاوت است! نمیتوانید انتظار داشته باشید هر دو مجموعه یکسانی از دستورات زبان ماشین را آن هم دقیقاً به یک شکل پشتیبانی کنند.
    Last edited by _H2_; 21-11-2013 at 21:11.

  6. 5 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  7. #5
    در آغاز فعالیت
    تاريخ عضويت
    Nov 2015
    پست ها
    1

    پيش فرض

    با تشکر از آقای حاجی شریفی

    چند تا سوال داشتم ممنون میشم جواب بدید

    1-چرا نمیشه یک برنامه c++ که با کامپایلر 86 کامپایل شده رو با پسوند exe در لینوکس اجرا کنیم و باید از نرم افزار های کمکی مثل wine استفاده کنیم؟(اصلا چرا سیستم عامل هایی که معماری cpu سیستمی که روی اون نصب هستند یکیه ولی برنامه های همدیگرو اجرا نمیکنن؟ مثل همین jre که با توجه به اینکه x86 هست ولی برای ویندوز و لینوکس در 2 نسخه جداگانه عرضه شده)

    2-معماری x64 و x86 یکیه(من اینطور فکر میکنم) چون x64 همون نسخه 64 بیتی x86 هست(x86-64)و isa هاشون یکیه. پس چرا برنامه 64 بیتی روی 32 بیت اجرا نمیشن ولی بر عکس چرا(اصلا تفوتشون ناشی از چیه؟
    و اینکه کد(سطح بالا) یک برنامه 64 بیتی با یک برنامه 32 بیتی فرق داره یا بعد از کامپایل این تفاوت ایجاد میشه؟(تفوات در کد ماشین)

    3-اینطور که پیداس آپ کد های x86 به صورت هگزادسیمال هستند.cpu مستقیم با هگزا کار میکنه یا اونارو تبدیل به اعداد دودویی(صفر و یک)می کنه؟
    لطفا جواب بدید به کل قاطی کردم
    Last edited by nightdel; 26-04-2016 at 16:06.

  8. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    جواب 1)
    نرم افزار های امروزی بسیاری از کارها را خودشان انجام نمیدهند.
    بخش بسیار بزرگی از کار و جزئیات ریز ودست وپاگیر، توسط سیستم عامل و برای کل برنامه ها انجام میشود.

    از آغاز برنامه را که اجرا میکنید، سیستم عامل فرمت فایل تان را شناسایی می کند وآن را از هارد به رم منتقل میکند و درصورت نیاز DynamicLink را انجام میدهد و ریسمانی برای اجرای اولین خط کد برنامه ایجاد میکند...
    اولین وکوچک ترین تفاوت میتواند در تفاوت فرمت فایل ها باشد...
    تفاوت فرمت مانند فرمت های مختلف تصویر و موسیقی و فیلم و... است.
    (اگر برنامه ای داشته باشید که فقط فیلم های ts را پخش کند و برنامه دیگری که فقط mkv را پخش کند، شما نمیتوانید فیلمی بسازید که در هر دوبرنامه پخش شود!)
    برای فایل های اجرایی این کوچک ترین تفاوت است.


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

    اگر شما فقط صف پیام های WM و فراخوانی API های سیستم عامل ویندوز را روی یک exe ساده ساده (جمع دوعدد ونمایش نتیجه) مانیتور کنید از حجم بالای پیام ها و توابع اجرا شده و ردوبدل شده متحر خواهید شد.

    این پیام ها و توابع و نحوه ارسال و دریافت آن و تبادل با سیستم عامل منشاء عدم اجرا شدن برنامه ها در سیستم عامل های مختلف است.
    ==============

    جواب 2)
    معماری x64 کاملتر از x86 است یعنی المان هایی در x64 است که در x86 وجود ندارد،
    مانند ثبات های پردازنده مانند RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP و...و...
    مانند دستورات ماشینی MOVSXD, MOVDQA, CMPSQ, LODSQ, STOSQ و...و...
    و...
    اینها هیچ معادل ومعنایی در پردازنده های x86 ندارد.

    وسیستم عامل هم که تفاوت ایجاد میکند، سیستم عامل 32 بیتی نمیتواند بلوک های کاری 64 بیتی را انجام دهد.
    این مانند جا دادن یک عدد 36 رقمی در یک فضای 18 رقمی است!

    در خصوص csharp و java کدهای کامپایلی اولیه که در exe ساخته میشود، تفاوتی برای x86 و x64 و arm و... ندارد و یکسان است.
    csharp کد میانه msil را دارد و java هم bytecode را دارد.
    شاید بتوان گفت msil و bytecode خیلی شبیه زبان های ماشین x86, x64, arm هستند ولی x86, x64, arm نیستند.
    msil و bytecode هر کدام یک زبان ماشین استاندارد و مشترک را شبیه سازی میکنند
    در رایانه مقصد و در لحظه اجرا و بسته به سخت افزار و سیستم عامل، JIT کدهای msil ,bytecode را به x86, x64, arm نگاشت نهایی میکند.
    ==============

    جواب 3)
    خیر اصلاً !
    یعنی تبدیلی وجود ندارد، این ما انسانها هستیم که اینطوری مینویسیم.
    وقتی میگوییم در یک بایت خانه حافظه عدد 29 قرار دارد این فرقی ندارد با آنکه بگوییم در آن خانه 0x1D قرار دارد، این فرقی ندارد با اینکه بگوییم در آن نقطه حافظه باینری B00011101 قرار دارد.

    این مانند آن است که من به چیزی بگویم "سیب" و شما بگویید "apple" !
    یک حیوان برای بلعیدن وخوردن وحضم سیب نیازی به تبدیل "سیب" به "apple" با برعکس ندارد
    طرز گفتن و تلفظ من وشما ماهیت خارجی، سیب را گلابی نمیکند، سیب یک مفهوم بیرونی دارد که تبدیلی لازم ندارد.

    این ما انسانها هستیم که برای راحتی فهم یا نوشتار خودمان، یکبار میگوییم 29 وباردیگر 0x1D و باردیگر B00011101
    واقعیت آن است که حافظه ای با هشت خانه قرار دارد که مقدار B00011101 در آن خانه ها قرار گرفته.
    cpu نیازی به تبدیلی از 29 به 0x1D وبرعکس ندارد، cpu با دیتاهای واقعی کار دارد و با تغییر گفتار ما انسانها کارش را عوض نمیکند.

  9. 3 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  10. #7
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    ولی مشکل کجاست که Java بیش از #C مستقل از پلتفرم است؟؟؟
    مشکل آنجاست که شرکت مایکروسافت مالک سیستم عامل ویندوز است.
    مشکل آنجاست که شرکت مایکروسافت بیشترین سود مستقیم و غیر مستقیم را از گسترش و همه گیر شدن سیستم عامل ویندوز میبرد.
    مایکروسافت تمایلی ندارد Framework و JIT و CLR ای برای سایر سیستم عامل ها عرضه کند.
    مایکروسافت تمایلی ندارد کاربران را برای کارکردن در سایر سیستم عامل ها تشویق کند و این راه را آسفالت و آسان کند!
    مایکروسافت تمایلی ندارد از پشت به سیستم عامل خودش خنجر بزند و به تشویق و توصعه رقبای ویندوز کمک کند.
    (احتمالاً من هم جای رئیس و مالکین مایکروسافت بودم همین کار را میکردم!)

    در سایت قدیم sun و فعلی oracle خیلی راحت میتوانید jdk را برای سیستم عامل های مختلف دانلود کنید
    ولی در سایت مایکروسافت فقط لینک دانلود دات نت را برای ویندوز پیدا خواهید کرد.
    یعنی مایکروسافت فقط دات نت را مستقل از پلتفرم سخت افزاری می خواهد (x86,x64,arm,xbox,mobile) نه مستقل از سیستم عامل ویندوز!!! و نه مشوق استفاده از سایر سیستم عامل ها!!!

    درواقع #C هم مستقل از پلتفرم است (یا حداقل میتوانست باشد) ولی به شرطی که در سایت مایکروسافت دنبال آن نباشید!
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    (در صورت مشکل از ف-ی-ل-ت-ر ش-ک-ن استفاده کنید)
    سلام.
    بنظر میاد طبق اخرین اخبار مایکروسافت زامارین رو خریده و شما همراه نصب ویزوال استادیو 2015 میتونید پکیج های اندروید و IOS و ... نصب کنید(تست کردم و نصب کردم)
    اینطور بنظر میاد که شاید مایکروسافت اولین شرکتی هست که با اینکه مانند گوگل و اپل (شرکت های بزرگ) سیستم عامل زده ولی به صورت رسمی داره خودش رو توی تمامی سیستم عامل ها نفوذ میده مثل Visual Studio Code که توی مک اجرا میشه.

    اگر ویژوال استادیو رو هم سایت مایکروسافت بدانیم شما میتوانید به دنبال زامارین و اندروید و مک و ... در ان باشید.

  11. #8
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام دوست عزیز، انشاا... سلامت باشید.
    بله، الآن وپس از دو سه سال از این بحث ها، شاهد تغییرات خوبی هستیم، بجز جریانات زامارین برای اولین بار شاهد بدعت های عجیب وغریبی مانند vs code و asp.net5 هستیم.
    asp.net core 1 که هنوز با معماری بسیار جالب درحال توسعه است بطرز عجیبی ، متن باز است و از ابتدا روی لینوکس و مک هم قابل اجرا است، شخصا چند سال قبل اصلا پیش بینی اش را نمیکردم ...

  12. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  13. #9
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    دیروز که ویژوال استادیو 2015 رو نصب کردم زامارین نسخه ی اخر هم همراش نصب شد (البته به صورت انلاین با پــروکسی) بعد از نصب براحتی تونستم از پروزه های قبلیم Build بگیرم.
    چون من کالاً از نسخه ی رایگان ویژوال استادیو استفاده میکنم.
    به نظر میاد تمامی قسمت هایی که نصب کردم رایگان هست.
    از این به بعد میشه از زامارین به صورت رایگان استفاده کرد و نیازی به کرک نیست .

  14. این کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

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

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •