گفتگو پیرامون کمونیسم و سوسیالیسم -
kourosh_iran - 11-02-2014
نقل قول:کد رو به یک زبان میانی کامپایل میکنه به نام CIL و بعدش توسط مفسر تفسیر میشه!!! خبری از کامپایل شدن به زبان ماشین نیست! (دلیل کند بودنش هم همینه ولی در مقایسه با PHP و جاوا و ... خیلی سریع تره)
در ضمن CIL قابل خواندن توسط انسانه!
اینجا دیگه کم سوادیت با سند ثابت شد!
اینکه همینطور با اطلاعات سطحی و ناقص میای ادعا میکنی و نظر میدی اینم نمونش :e405:
برو بگو بزرگترت بیاد :e057:
بله منم میدونم که دات نت کد مثلا سی شارپ یا هر زبان دات نتی دیگر رو به CIL تبدیل میکنه، و فایلهای exe و dll دات نت محتوی CIL هستن، ولی موقع اجرا، CIL توسط مکانیزمی که بهش JIT که مخفف Just-in-time compilation است به کد زبان ماشین مقصد تبدیل میشه. هر بار موقع استارت/بارگذاری یک برنامه این عمل صورت میگیره.
ضمنا برنامه ای/ابزاری بنام
ngen هم خود میکروسافت داده که میشه باهاش پیشاپیش اون کدها رو به کد native تبدیل کرد تا تاخیر کامپایل JIT در هر شروع برنامه حذف بشه، ولی به این شکل فایلهای اجرایی دات نت وابسته به پلتفرمی میشن که براش کامپایل شدن و دیگه قابلیت cross platform ندارن.
جالب اینکه در همون مقالهء ویکیپدیا که خودت درج کردی این چیزایی که میگم آمده یه نگاهی میکردی و میخوندی باید متوجه میشدی:
Upon execution of a CLI assembly, its code is passed through the runtime's JIT compiler to generate native code. Ahead-of-time compilation may also be used, which eliminates this step, but at the cost of executable-file portability.
ترجمه: «هنگام اجرای یک اسمبلی CLI، کد آن از کامپایلر JIT محیط اجرا عبور میکند تا کد native تولید شود. کامپایل پیشاپیش همچنین میتواند استفاده شود، که این قدم را حذف میکند، ولی به هزینهء قابل حمل بودن فایل اجرایی»
منبع:
Common Intermediate Language - WiKi
البته بخاطر تکمیل مطلب باید اضافه کنم که در یک سیستم JIT لزوما تمام کد و برنامه به کد Native/زبان ماشین، یا هر نوع کد هدف دیگر، تبدیل نمیشه، ولی حداقل بخشی از اون تبدیل میشه (توی مقاله ای که قبلا از وبلاگم آوردم اطلاعات در این زمینه داده شده). درمورد دات نت اطلاعات دقیق و موثقی ندارم که آیا همهء کد یا بخش عمده ای از اون به کد Native تبدیل میشه یا بخش کوچکتری و بطور متوسط چقدر مثلا.
گفتگو پیرامون کمونیسم و سوسیالیسم -
sonixax - 11-02-2014
kourosh_iran نوشته: اینجا دیگه کم سوادیت با سند ثابت شد!
اینکه همینطور با اطلاعات سطحی و ناقص میای ادعا میکنی و نظر میدی اینم نمونش
برو بگو بزرگترت بیاد
بله منم میدونم که دات نت کد مثلا سی شارپ یا هر زبان دات نتی دیگر رو به CIL تبدیل میکنه، و فایلهای exe و dll دات نت محتوی CIL هستن، ولی موقع اجرا، CIL توسط مکانیزمی که بهش JIT که مخفف Just-in-time compilation است به کد زبان ماشین مقصد تبدیل میشه. هر بار موقع استارت/بارگذاری یک برنامه این عمل صورت میگیره.
ضمنا برنامه ای/ابزاری بنام ngen هم خود میکروسافت داده که میشه باهاش پیشاپیش اون کدها رو به کد native تبدیل کرد تا تاخیر کامپایل JIT در هر شروع برنامه حذف بشه، ولی به این شکل فایلهای اجرایی دات نت وابسته به پلتفرمی میشن که براش کامپایل شدن و دیگه قابلیت cross platform ندارن.
جالب اینکه در همون مقالهء ویکیپدیا که خودت درج کردی این چیزایی که میگم آمده یه نگاهی میکردی و میخوندی باید متوجه میشدی:
Upon execution of a CLI assembly, its code is passed through the runtime's JIT compiler to generate native code. Ahead-of-time compilation may also be used, which eliminates this step, but at the cost of executable-file portability.
ترجمه: «هنگام اجرای یک اسمبلی CLI، کد آن از کامپایلر JIT محیط اجرا عبور میکند تا کد native تولید شود. کامپایل پیشاپیش همچنین میتواند استفاده شود، که این قدم را حذف میکند، ولی به هزینهء قابل حمل بودن فایل اجرایی»
منبع: Common Intermediate Language - WiKi
البته بخاطر تکمیل مطلب باید اضافه کنم که در یک سیستم JIT لزوما تمام کد و برنامه به کد Native/زبان ماشین، یا هر نوع کد هدف دیگر، تبدیل نمیشه، ولی حداقل بخشی از اون تبدیل میشه (توی مقاله ای که قبلا از وبلاگم آوردم اطلاعات در این زمینه داده شده). درمورد دات نت اطلاعات دقیق و موثقی ندارم که آیا همهء کد یا بخش عمده ای از اون به کد Native تبدیل میشه یا بخش کوچکتری و بطور متوسط چقدر مثلا.
وقتی میگم دو زار سواد نداری، پستها رو درست نمیخونی و فقط چشم رو مبندی و دهنت رو باز میکنی بعد ناراحت میشی!!!
sonixax نوشته: دات کد رو به یک زبان میانی کامپایل میکنه به نام CIL و بعدش توسط مفسر تفسیر میشه!!! خبری از کامپایل شدن به زبان ماشین نیست! (دلیل کند بودنش هم همینه ولی در مقایسه با PHP و جاوا و ... خیلی سریع تره)
یک اسمبلی دات نت تنها در هنگام اجرای هر متد! اون متد رو به کد ماشین کامپایل میکنه و نه همه کد رو و اسم این عمل کامپایل شدن نیست! کدهای تولید شده On the fly هستند و اسم این عمل در زبان فارسی میشه تفسیر کد! که البته با تفسیر کدهای اسکریپتهایی نظیر JavaScript فرق داره!
شبیه همین رو ما در PHP هم حتا داریم! که نه زبان برنامه نویسی بلکه زبان اسکریپت نویسیه ولی به کمک افزونه ها و مودهای آپاچی. به طور مثال از طریق HHVM . حالا که یه چیز جدید یاد گرفتی بدو برو توی وبلاگت بنویس :))
گفتگو پیرامون کمونیسم و سوسیالیسم -
kourosh_iran - 11-02-2014
نقل قول:و اسم این عمل کامپایل شدن نیست!
چرا اسمش دقیقا کامپایله. شما فکر کردی کامپایل فقط به کامپایل پیشاپیش و کاملی که کامپایلری مثل زبان سی یا سی++ انجام میده میگن؟
شاید با اغماض بشه از اصطلاح تفسیر هم بطور کلی در این موارد استفاده کرد اما منابع با کیفیت و معتبر نگاه کنی اکثریت قریب به اتفاق گفتن کامپایل یا حداقل اسمی از کامپایل و Just-in-time compilation آوردن و میگن به کد زبان ماشین کامپایل میکنه نه اینکه تفسیر میکنه.
اون compilation در انتهای Just-in-time compilation پس چیه؟
ضمنا چون بیشتر مفسرها و بخصوص زبانهای قدیمی تر که جور دیگه کار میکردن و مستقیما کد منبع رو میخونن و دستوراتش رو از جانب خودشون انجام میدن (نه اینکه به زبان ماشین تبدیل کنن و بعد مستقیما اجرا بشه) و تا الان بیشتر متداول بوده که به اونا میگفتن زبان تفسیری و اسکریپتی و اینها و به روشی که کار میکردن تفسیر گفته میشد و به پردازندهء اونا مفسر، بهتره از اصطلاح بیش از حد کلی و مبهم و گمراه کننده تفسیر در این موارد اجتناب بشه.
نقل قول:کدهای تولید شده On the fly هستند و اسم این عمل در زبان فارسی میشه تفسیر کد!
در تعریف تخصصی کامپایل، شرط On the fly نبودن وجود نداره. شرط کامپایل تمام کد یا اینکه زمان خاصی داشته باشه هم وجود نداره.
اسم زبان فارسی رو هم بذاره درکوزه! فارسی به درد کسی نمیخوره، هرچی ابهام و اشتباه توی زبان انگلیسی و منابع اصلی هست فارسی خیلی وقتا یه چیزی هم میذاره روش و حسابی قاطی و اشتباه میکنه همه چیز رو.
نقل قول:به طور مثال از طریق HHVM
به HHVM بطور معمول مفسر نمیگن. اسم خودش هم به ماشین مجازی اشاره داره و مخفف اینه: HipHop Virtual Machine
و توی مقالهء ویکیپدیا نگاه کنی نوشته is a process virtual machine based on just-in-time (JIT) compilation.
و اینم نوشته که فکر کنم بقدر کافی واضح میکنه مطلب رو:
This contrasts to the PHP's usual interpreted execution, in which the Zend Engine transforms the PHP source code into opcodes as a form of intermediate code, and executes the opcodes directly on the Zend Engine's virtual CPU
ترجمه: «این در تقابل با اجرای تفسیری معمول PHP است که در آن Zend Engine (م: مفسر رسمی PHP) کد منبع PHP را به opcode بعنوان یک شکل میانی کد تبدیل میکند و opcode ها را مستقیما روی CPU ی مجازی Zend Engine اجرا میکند»
من تعجب میکنم این همه اصطلاحات و منابع همه اشاره به کامپایل دارن و عبارتی که درشون خیلی کمتر دیده میشه و بعضی جاها اصلا دیده نمیشه Interpret و Interpreter هست، اونوقت تو میای از این اصطلاح نادقیق و کلی و مبهم استفاده میکنی و میگی اینه و اون نیست و کامپایل به اون نمیگن!
اطلاعاتت مثل اینکه خیلی قدیمه.
ضمنا این همه بحث ما از اول روی این شروع شد که گفتم چون موقع اجرا به زبان ماشین تبدیل میکنه یک تاخیری داره، که جنابعالی اونطور جواب دادی! حالا هم میبینی که بالاخره داره این کار رو میکنه و این تاخیر بهرحال وجود داره در کل حالا چه در ابتدا و چه در وسط و چه در آخر بهرحال درکل این تاخیر و مجموع تاخیر اجرای تمام بخشهای برنامه به زمان اجرا اضافه میشه. بعدم اون ابزار خود میکروسافت و این همه بند و بساط و تبدیل پیشاپیش توسط ngen و اینها بیخود که نیست توی مقالهء ویکیپدیا بخونی نوشته که به این شکل میشه سرعت اجرا رو در بعضی موارد بحد قابل توجهی افزایش داد.
نقل قول:تنها در هنگام اجرای هر متد! اون متد رو به کد ماشین کامپایل میکنه
ضمنا دلیل و سند برای این ادعا لطفا!
گفتگو پیرامون کمونیسم و سوسیالیسم -
sonixax - 11-02-2014
kourosh_iran نوشته: چرا اسمش دقیقا کامپایله. شما فکر کردی کامپایل فقط به کامپایل پیشاپیش و کاملی که کامپایلری مثل زبان سی یا سی++ انجام میده میگن؟
شاید با اغماض بشه از اصطلاح تفسیر هم بطور کلی در این موارد استفاده کرد اما منابع با کیفیت و معتبر نگاه کنی اکثریت قریب به اتفاق گفتن کامپایل یا حداقل اسمی از کامپایل و Just-in-time compilation آوردن و میگن به کد زبان ماشین کامپایل میکنه نه اینکه تفسیر میکنه.
اون compilation در انتهای Just-in-time compilation پس چیه؟
ضمنا چون بیشتر مفسرها و بخصوص زبانهای قدیمی تر که جور دیگه کار میکردن و مستقیما کد منبع رو میخونن و دستوراتش رو از جانب خودشون انجام میدن (نه اینکه به زبان ماشین تبدیل کنن و بعد مستقیما اجرا بشه) و تا الان بیشتر متداول بوده که به اونا میگفتن زبان تفسیری و اسکریپتی و اینها و به روشی که کار میکردن تفسیر گفته میشد و به پردازندهء اونا مفسر، بهتره از اصطلاح بیش از حد کلی و مبهم و گمراه کننده تفسیر در این موارد اجتناب بشه.
kourosh_iran نوشته: در تعریف تخصصی کامپایل، شرط On the fly نبودن وجود نداره. شرط کامپایل تمام کد یا اینکه زمان خاصی داشته باشه هم وجود نداره.
اسم زبان فارسی رو هم بذاره درکوزه! فارسی به درد کسی نمیخوره، هرچی ابهام و اشتباه توی زبان انگلیسی و منابع اصلی هست فارسی خیلی وقتا یه چیزی هم میذاره روش و حسابی قاطی و اشتباه میکنه همه چیز رو.
kourosh_iran نوشته: به HHVM بطور معمول مفسر نمیگن. اسم خودش هم به ماشین مجازی اشاره داره و مخفف اینه: HipHop Virtual Machine
و توی مقالهء ویکیپدیا نگاه کنی نوشته is a process virtual machine based on just-in-time (JIT) compilation.
من تعجب میکنم این همه اصطلاحات و منابع همه اشاره به کامپایل دارن و عبارتی که درشون خیلی کمتر دیده میشه و بعضی جاها اصلا دیده نمیشه Interpreter هست، اونوقت تو میای از این اصطلاح نادقیق و کلی و مبهم استفاده میکنی و میگی اینه و اون نیست و کامپایل به اون نمیگن!
اطلاعاتت مثل اینکه خیلی قدیمه.
ضمنا این همه بحث ما از اول روی این شروع شد که گفتم چون موقع اجرا به زبان ماشین تبدیل میکنه یک تاخیری داره، که جنابعالی اونطور جواب دادی! حالا هم میبینی که بالاخره داره این کار رو میکنه و این تاخیر بهرحال وجود داره در کل حالا چه در ابتدا و چه در وسط و چه در آخر بهرحال درکل این تاخیر و مجموع تاخیر اجرای تمام بخشهای برنامه به زمان اجرا اضافه میشه. بعدم اون ابزار خود میکروسافت و این همه بند و بساط و تبدیل پیشاپیش توسط ngen و اینها بیخود که نیست توی مقالهء ویکیپدیا بخونی نوشته که به این شکل میشه سرعت استارت رو در بعضی موارد بحد قابل توجهی افزایش داد.
من نمیدونم چرا باید همه چیز رو برای شما شیرفهم کرد!!!! یک مقداری هم زحمت تحقیق به خودتون بدید دوست عزیز!
Interpreter (computing) - WiKi
In computer science, an interpreter is a computer program that directly executes, i.e. performs, instructions written in a programming or scripting language, without previously compiling them into a machine language program. An interpreter generally uses one of the following strategies for program execution:
- parse the source code and perform its behavior directly
- translate source code into some efficient intermediate representation and immediately execute this
- explicitly execute stored precompiled code[SUP][1][/SUP] made by a compiler which is part of the interpreter system
Early versions of the
Lisp programming language and
Dartmouth BASIC would be examples of the first type.
Perl,
Python,
MATLAB, and
Ruby are examples of the second, while
UCSD Pascal is an example of the third type. Source programs are compiled ahead of time and stored as machine independent code, which is then
linked at run-time and executed by an interpreter and/or compiler (for
JIT systems). Some systems, such as
Smalltalk, contemporary versions of
BASIC,
Java and others may also combine two and three.
While interpretation and compilation are the two main means by which programming languages are implemented, they are not mutually exclusive, as most interpreting systems also perform some translation work, just like compilers. The terms "
interpreted language" or "
compiled language" signify that the canonical implementation of that language is an interpreter or a compiler, respectively. A
high level language is ideally an
abstraction independent of particular implementations.
HHVM
HHVM uses a just-in-time (JIT) compilation approach to achieve superior performance while maintaining the development flexibility that PHP provides.
kourosh_iran نوشته: ضمنا دلیل و سند لطفا!
Compiling MSIL to Native Code
نقل قول:Because the JIT compiler converts an assembly's MSIL to native code when individual methods defined in that assembly are called,
اینها رو هم بخونید بد نیست :
What is the Difference Between Compiler and Interpreter? | Compiler vs Interpreter
Interpreter Vs Compiler : Difference Between Interpreter and Compiler | Programming Tutorials, Articles and Examples
[ATTACH=CONFIG]4476[/ATTACH]
پس چی شد ؟! وقتی کل برنامه به Native کد ترجمه نشده باشد اسمش کامپایل کردن نیست. ولی وقتی قسمت قسمت و در زمان اجرا اون رو ترجمه میکنیم اسمش میشه تفسیر!
گفتگو پیرامون کمونیسم و سوسیالیسم -
sonixax - 11-02-2014
البته خیلی هم ممنون میشم ربط این بحث به کمونیسم و سوسیالیسم رو بگید!!!
گفتگو پیرامون کمونیسم و سوسیالیسم -
kourosh_iran - 11-02-2014
واقعا خیلی لجبازی!
شما داری مدام از کلی بودن و ابهام و نادقیق بودن یکسری اصطلاحات و تعاریف و تغییرات نسبی در استفاده متداول و معنای متعارف اونا در طول زمان سوء استفاده میکنی، یک بیان و تفسیر مطلق و ظاهرا دقیق از خودت میدی میگی همینه دقیقا فقط همینه و بس و اون که شما میگی نیست!!
درمورد بحث قبلی و تعریف Patent هم کم و بیش مشابه همین کار رو کردی.
نقل قول:وقتی کل برنامه به Native کد ترجمه نشده باشد اسمش کامپایل کردن نیست.
گفتم که اگر کامپایل رو به اون معنای قدیمی متداول و زبانهایی مثل سی بخوایم معنی کنیم بله نیست چون پیشاپیش نیست و/یا کامل نیست.
ولی کامپایل یه اصطلاح کلی تر از اینه و شامل کاری که مکانیزمهای JIT میکنن هم میشه و اصلا کلمش (compilation) توی اسم خود این چیزا هست دیگه دلیل از این واضحتر؟ نکنه میخوای بگی در زبان فارسی compilation رو به تفسیر معنی میکنن؟ پس معنای کلمهء Interpret چیه اونوقت؟
حتی توی همون مقالهء میکروسافت که لینکش رو گذاشتی همون اولش اینو نوشته:
[RTL]Before you can run Microsoft intermediate language (MSIL), it must be compiled against the common language runtime to native code for the target machine architecture.[/RTL]
ترجمه: «قبل از اینکه شما بتوانید MSIL را اجرا کنید، آن باید توسط CLR به کد ماشین برای معماری ماشین هدف کامپایل شود».
یخورده پایین ترش تیترش زده که
Compilation by the Just-in-time
Compiler و نه
Interpretation by the Just-in-time
interpreter.
اوکی؟ دیدی؟ نظری چیزی نداری؟ :e057:
حالا شما کجاش مشکل داری واسه چی میگی من چیزی رو اشتباه گفتم نمیدونم!
چیزی که بنده میگم و استفاده ای که از اصطلاح کامپایل کردم بخاطر اینه که اینطور مقاله ها رو زیاد خوندم و میدونم که کامپایل فقط به کامپایل زبانهایی مثل سی گفته نمیشه و معنای خیلی کلی تری داره که شامل کاری که JIT میکنه هم میشه و توی اکثریت این موارد و منابع از این اصطلاح استفاده میشه! شما میگی نمیشه؟! این همه دلایل و نوشته ها و اسم ها رو نمیبینی؟ چشمت سالم نیست یا اینکه مشکل در خوندن زبان انگلیسی داری شاید؟
من اصلا با فارسی و کتابها و منابع قدیمی کاری ندارم. چیزی که تخصصی و بروز هست اینه که من میشناسم و دلیل و سند هم این همه ریخته جلوی چشمت. همین!
یکسری منابع هم میبینی ظاهر جور دیگه گفتن چون یکسری تعاریف و معنای متعارف کلی و بعضا برگرفته از منابع و کتابها و جوامع قدیمی تر برنامه نویسی رو گرفتن و دارن مفروضا اونا رو برای بخصوص افراد مبتدی و تازه واردها توضیح میدن. مثلا داره تفاوت یه زبانی مثل پایتون و سی رو در این زمینه برجسته میکنه و توضیح میده. دلیل نمیشه که بگی اون رفرنس و تعریف دقیق و رسمی فلان اصطلاحه و هیچ جای دیگه هیچ معنای و کاربرد دیگری نداره!
همونطور که گفتم این اصطلاحات اغلب کلی و دارای ابهامات و همپوشانی هایی هستن و در منابع و Context های مختلف به کاربردهای متفاوتی از اونا پرداختن و ضمنا در طول زمان هم کاربرد متداول اونا کم و بیش تغییراتی کرده.
اینم از مقالهء ویکیپدیا درمورد
Compiler:
Modern trends toward just-in-time compilation and bytecode interpretation at times blur the traditional categorizations of compilers and interpreters.
ترجمه: «گرایش های مدرن به سوی just-in-time compilation و تفسیر بایت کد بعضی اوقات دسته بندی سنتی کامپایلرها و مفسرها را تیره میکند»
خلاصه منبع و دلیل و سند زیاد هست و بقدر کافی توضیح دادم که هر آدم عاقلی بفهمه و قانع بشه، حالا باز میخوای به رویه بی معنی خودت ادامه بدی خودت میدونی! من اینقدر سواد دارم تاحالا هزاران صفحه و صدها مقاله و منبع در این زمینه ها خوندم و کلی بحث کردم خنده داره که این چیزای پایه رو ندونم.
گفتگو پیرامون کمونیسم و سوسیالیسم -
sonixax - 11-03-2014
kourosh_iran نوشته: درمورد بحث قبلی و تعریف Patent هم کم و بیش مشابه همین کار رو کردی.
ما در اون مورد سند آوردیم! شما کشک!
در این مورد هم همچنین!
kourosh_iran نوشته: گفتم که اگر کامپایل رو به اون معنای قدیمی متداول و زبانهایی مثل سی بخوایم معنی کنیم بله نیست چون پیشاپیش نیست و/یا کامل نیست.
ولی کامپایل یه اصطلاح کلی تر از اینه و شامل کاری که مکانیزمهای JIT میکنن هم میشه و اصلا کلمش (compilation) توی اسم خود این چیزا هست دیگه دلیل از این واضحتر؟ نکنه میخوای بگی در زبان فارسی compilation رو به تفسیر معنی میکنن؟ پس معنای کلمهء Interpret چیه اونوقت؟
مگه همه چیز رو باید کلمه به کلمه معنی کرد ؟!
kourosh_iran نوشته: گفتم که اگر کامپایل رو به اون معنای قدیمی متداول و زبانهایی مثل سی بخوایم معنی کنیم بله نیست چون پیشاپیش نیست و/یا کامل نیست.
ولی کامپایل یه اصطلاح کلی تر از اینه و شامل کاری که مکانیزمهای JIT میکنن هم میشه و اصلا کلمش (compilation) توی اسم خود این چیزا هست دیگه دلیل از این واضحتر؟ نکنه میخوای بگی در زبان فارسی compilation رو به تفسیر معنی میکنن؟ پس معنای کلمهء Interpret چیه اونوقت؟
حتی توی همون مقالهء میکروسافت که لینکش رو گذاشتی همون اولش اینو نوشته:
Before you can run Microsoft intermediate language (MSIL), it must be compiled against the common language runtime to native code for the target machine architecture.
ترجمه: «قبل از اینکه شما بتوانید MSIL را اجرا کنید، آن باید توسط CLR به کد ماشین برای معماری ماشین هدف کامپایل شود».
یخورده پایین ترش تیترش زده که Compilation by the Just-in-time Compiler و نه Interpretation by the Just-in-time interpreter.
اوکی؟ دیدی؟ نظری چیزی نداری؟
نظرم اینه که شما مفهوم درست این مسایل رو نمیدونید و کلمه به کلمه ترجمه میکنید! نتیجه این میشه که در جهل مرکب ابد الدهر بمانید!!!
من براتون آوردم معنی تفسیر چیست، معنی کامپایل چیست! میخواهی بیاموز! میخواهی لجبازی کن و بگو اونجا نوشته کامپایل پس اسم پروسه کامپایله :))
kourosh_iran نوشته: حالا شما کجاش مشکل داری واسه چی میگی من چیزی رو اشتباه گفتم نمیدونم!
چیزی که بنده میگم و استفاده ای که از اصطلاح کامپایل کردم بخاطر اینه که اینطور مقاله ها رو زیاد خوندم و میدونم که کامپایل فقط به کامپایل زبانهایی مثل سی گفته نمیشه و معنای خیلی کلی تری داره که شامل کاری که JIT میکنه هم میشه و توی اکثریت این موارد و منابع از این اصطلاح استفاده میشه! شما میگی نمیشه؟! این همه دلایل و نوشته ها و اسم ها رو نمیبینی؟ چشمت سالم نیست یا اینکه مشکل در خوندن زبان انگلیسی داری شاید؟
من اصلا با فارسی و کتابها و منابع قدیمی کاری ندارم. چیزی که تخصصی و بروز هست اینه که من میشناسم و دلیل و سند هم این همه ریخته جلوی چشمت. همین!
شما در اینجا نشون دادید که نه معنی کامپایل رو درست میدونید و نه معنی تفسیر رو! چیزی که من برای شما شرح کاملش رو آوردم و زحمت مطالعه به خودتون نمیدید!
اینکه در طول یک پروسه بخشی وجود داره که کد رو به زبان ماشین ترجمه میکنه (و اصطلاحن بهش کامپایل میگند البته با پسوند و پیشوند) اسمش کامپایل کردن برنامه نیست.
برای اینکه بی اطلاعی شما در این زمینه رو نشون بدم :
یک برنامه که به زبان PHP نوشته شده هنگام اجرا :کامپایل میشه به کدهایی موسوم به OPCODES یا (Operation codes) ، به این کدها ByteCode هم میگند که فهرست OPCODE های Zend Engine رو میتونید اینجا ببینید :
PHP: Zend Engine 2 Opcodes - Manual
PHP: Opcode Descriptions and Examples - Manual
سپس این OPCODE ها توسط Zend Engine که همون موتورو PHP باشه Execute میشند!
شرح کامل داستان :
Still trying to get it all out: Understanding Opcodes
پس طبق ادعای شما! چون در اینجا از کلمه Compile به معنی (ترجمه) استفاده شده پس PHP نه یک زبان تفسیری بلکه یک زبان کامپایلی هستش :)))))
حالا چرا شما هر جا کلمه Compile رو میبینی فکر میکنی منظور همونی هست که شما فکر میکنی ؟! به خاطر اینکه آشنایی لازم و کافی با زبان انگلیسی و ریشه واژه های اون نداری!
پس من مجبورم یک کلاس زبان هم برات بذارم!
خود وازه Compile به معنی ساختن، کنار هم گذاشتن،
ترجمه کردن معنی میده.
در دنیای کامپیوتر به خصوص معنی ترجمه کردن مد نظر هست! برای همین هر جایی که یک زبان به زبان دیگری ترجمه میشه از واژه کامپایل استفاده میکنند حتا زمانی که کد PHP شما داره ترجمه میشه OPCODE های قابل اجرا برای زند انجین! ولی چون فعل کامپایل کردن (ترجمه کردن) در اینجا داره اتفاق میوفته ، معنیش این نیست که کد PHP داره کامپایل میشه!!! به خاطر اینکه Compile کردن یک برنامه به اون طریقی که مد نظر شما هست همون طوری که بالاتر هم براتون گذاشتم یعنی ترجمه کل کدهای اون قبل از اجرا توسط یک کامپایلر!
ترجمه شدن قطعه قطعه، یا در زمان اجرا (Just In Time) با اینکه درش فعل کامپایل کردن استفاده میشه ولی عمل کامپایل کردن نیست و اسمش رو گذاشتند تفسیر کردن! که باز بالاتر در این مورد برای شما و باقی دوستانی که حوصله خوندن این بحث رو دارند توضیحات لازم رو گذاشتم.
پ.ن :
Compile | Define Compile at Dictionary.com
نقل قول: Computers. to translate (a computer program) from a high-level language into another language, usually machine language, using a compiler.
گفتگو پیرامون کمونیسم و سوسیالیسم -
kourosh_iran - 11-03-2014
دقیقا بنده همه اینا رو که گفتی میدونستم. هیچوقت هم نگفتم که دات نت یک زبان کامپایلی است (هرچند هیچوقت هم نمیگم که تفسیریه چون این اصطلاح هم بیش از پیش مبهم میکنه ساختار اصلی دات نت رو که یک چیزی بینابین مفسرهای کلاسیک و کامپایلرهای کلاسیک (منظورم اون انواع و تعاریف و استفاده متداول قدیمی/سنتی) است).
من در Context خود JIT صحبت کرد و در اون Context گفته نمیشه که کد ها به زبان ماشین تفسیر میشن، بلکه گفته میشه که کدها به زبان ماشین کامپایل میشن (البته شما از عبارت تبدیل هم میتونی استفاده کنی ولی ضرورت نداره و منابع خودشون اکثرا بجای translate یا transform از compile استفاده کردن و همین کلمه هم توی اسمهایی که برای اینطور مکانیزمها گذاشتن هست).
من دقیقا میدونم compilation حتی به تبدیل به کد ماشین هم محدود نمیشه. کسی که این مقاله ها (ویکیپدیا) رو خونده باشه به همهء این نکات توش صراحتا اشاره شده. ضمنا این نکته رو حتی در پستهای قبلی که داشتم توضیح میدادم میخواستم بیارم ولی گفتم حالا مسائل جانبی و جزییات رو باز زیاد کنم و بطور مستقیم به بحث JIT مربوط نیست بعدم تو میای باز از توی این یه جفنگی درمیاری دهنمون رو سرویس میکنی
حالا اینطور مذبوحانه داری تلاش میکنی که بگی من اینقدر بی سواد بودم، قضاوت با خوانندگان!
همون مقاله که توی وبلاگم هست و امثالهم نشون میده من قبلا مقاله های ویکیپدیا رو حداقل در این موارد خوندم و بنابراین باید بدونم این چیزا رو!
عزیزم من خوره مطالعه این چیزام و توی ویکیپدیا دیگه سخت مقاله ای میتونم پیدا کنم که نخونده باشم، زبان انگلیسی و ترجمم هم که میبینی مشکلی نداره، بعد فکر میکنی تمام اینا رو نمیدونستم؟!
گفتگو پیرامون کمونیسم و سوسیالیسم -
kourosh_iran - 11-03-2014
خودمونیم کلت رو خابوندما
تا تو باشی دیگه اینقدر بچه گانه رفتار نکنی.
با اون تفسیرهای سطحی و خودرای ای که داری!!
یه چیزی میاری میگی فقط همینه که من میگم، بعد طرف مقابل دلیل و سند میاره برات میگه نه معنا/تفسیر/کاربرد دیگری هم داره جای دیگر در Context دیگر هست استفاده میشه، میگی نه اون نیست و منظور توی مخاطب اون نبوده بلکه اون بوده که من میگم!! دیگه این خودرای بودن و ادعای بدون اثبات تا چه حد؟
به همین شکله که به خودت اجازه میدی هرکس رو که ازش خوشت نمیاد و کاملا هم سلیقه تو نیست و طبق تفکر و تصورات سطحی تو به سرمایه داری مطلق اعتقادی نداره و مجیزگویی و اغراق نمیکنه دربارش و ایراد و انتقادی داره و در بعضی موارد نظرات متفاوتی، بهش برچسب کمونیست بزنی گرچه طرف خودش صراحتا انکار کنه و در خیلی موارد هم با ساختارهای اساسی کمونیسم موافق نباشه.
تا اینجا چند مسئله مطرح کردم در ایراد به گفته هات که هیچکدوم رو نتونستی جواب بدی. حتی در همون بحث Patent که میخوای وانمود کنی قطعا فقط نظر خودت درش درست بود.
بذار برات لیست کنم.
- اون متن و بیانی که Xiph.Org برات آوردم و استنباطی که ازش میشه رو بیان کردم و ناسازگاری اون رو با تعریف و چیزهایی که جنابعالی از پتنت و نقص پتنت ادعا میکنی نشون دادم. قبلا گفتم که یکی دو مورد نیست اینطور مطالب و بنده تاحالا به کرات مشاهده کردم.
مورد از لینوکس هم برات آوردم باز میگی که عمدا و اآگاهانه کار خودشون بوده، درحالیکه بنا بر استدلالهایی که کردم و ادعاهای خودت این حرف چندان معقول بنظر نمیرسه!
- کاربردهای خط فرمان که ازت پرسیدم با رابط گرافیکی چطور پیاده میکنی. بطور مثال گفتم دوتا برنامهء گرافیکی رو چطور میشه با هم ترکیب و خودکار سازی کرد. یکی دیگه مثال استارت آپاچی و اطلاع از وضعیت استارتش از طریق پخش صدا بود (مثالی که جنابعالی از WHM میاری این قابلیت پخش صدا رو نداره). یا فکر کن اصلا ما میخواستیم یک کار دیگه هم بکنیم مثلا وضعیت آپاچی رو تحت نظر بگیریم و درصورت بروز مشکل یک ایمیلی ارسال کنیم و این حرفا. شما میگی برای همهء اینا میشه رابط گرافیکی درست کرد، درست شدنش میشه، ولی باید یک رابط گرافیکی درست کنی که تمام حالتهای ممکن و نیازهای تمام افراد رو در تمام شرایط در طول زمان پیشبینی و پیاده سازی کرده باشه! اونوقت اون رابط گرافیکی اونقدر روش کار باید بشه اونقدر حجیم و پیچیده و سنگین شده و تازه بازهم نمیشه ادعا کرد که برنامه نویس میتونه دقیقا تمام موارد ممکن رو پیشبینی بکنه و چیزی رو از قلم نندازه و چیزی و نیاز خاصی نباشه که به ذهنش نرسه.
و فکر کن این کار رو بخوای درمورد تمام برنامه ها انجام بدی چه شود!
دقیقا خط فرمان و شل برای همین نیازها هستن (علاوه بر کاربردهای دیگری که دارن) و یک اینترفیس پایه و کلی و یک محیط خودکار سازی و برنامه نویسی و ترکیب در سطح سیستم عامل رو در اختیار شما میذارن که کاربر فوق حرفه ای و برنامه نویسان میتونن ازش برای سفارشی سازی های پیشرفته و پیچیده و ترکیب و خودکار سازی عملیات ها استفاده کنن. و این کم سوادی و کمبود درک جنابعالی است که نمیفهمی خط فرمان هم یک نوع رابط با مزایا و کاربردهای خاص خودش و فراتر از صرف یک رابط است و جزیی از امکانات مهم هر سیستم عامل و محیط و برنامه ای است و یک زبان اسکریپت نویسی و برنامه نویسی سرخود روی سیستم عامله که برای همین کارهای عمومی و ترکیب و کنترل برنامه های دیگر کاربرد داره. اگر میفهمیدی ادعا نمیکردی که یک چیزی درپیت قدیمیه و داره به سرعت منسوخ میشه یا باید بشه. شما اول برو این همه قدرت و انعطاف و کاربرد که خط فرمان داره و میتونه داشته باشه رو جواب بده و گرافیکیش کن و بعد بیا حرف از عقب ماندگی و باید و نباید بزن! همونطور که اگر ادعا کنی زبان های قدیمی و سطح پایین تر مثل سی++ به زودی حذف میشن یا باید بشن و به دردی نمیخورن، باید پاسخگوی ادعای خودت باشی! فعلا هم در دنیای مهندسی نرم افزار و رایانه چیز خیلی زیادی در این زمینه ها وجود نداره و فقط تونستن یکسری چیزهای نسبتا ساده و کلیشه ای رو گرافیکی و بصورت موثری خودکار کنن مثل ایجاد GUI و کارایی های متداول و ثابت و ساده برنامه های دیتابیسی و این حرفا. تازه همینا هم بعضی وقتا نیاز میشه که برنامه نویس شخصا اونا رو دستکاری کنه. ضمنا بگو ببینم مثلا رابط گرافیکی نرم افزارهایی مثل اتوکد و فتوشاپ رو هم بنظرت با دیزاینرهای ویژوال درست کردن؟ منکه فکر نمیکنم!
خب دیگه؟ ولش کن تا همین جا برات بسه
گفتگو پیرامون کمونیسم و سوسیالیسم -
kourosh_bikhoda - 11-03-2014
Theodor Herzl نوشته: ولی اگر چیزی هم هست مشکل داخلی ما هست ، کاپیتالیسمی که باعث کشته شدن ۱۰۰ میلیون بومی آمریکایی شده گه میخورد به شوروی ایراد میگیرد!
کسرا سفسطه نکنه اصلن نمیشه.
راستش یه خورده که فکر میکنم میبینم جز این هیچ استدلال دیگری نمیتونه در جهت پاکسازی جنایت های سوسیالیسم مردمی و کارگری و هومن دوستانه بکنند اینها.