PDA

View Full Version : آیا کد های دلفی به جاوا تبدیل میشوند؟



alireza es
سه شنبه 19 فروردین 1393, 20:06 عصر
با عرض سلام.
همون طور که میدونید هسته آندرویدو با C نوشتن و بقیه قسمتاشو با Java.
حالا فریم ورکی مثل کیوتی داره از آندروید پشتیبانی میکنه جای تعجب نیست اما
چطور کدهای دلفی که با کامپایلر پاسکال کامپایل میشه در آندروید اجرا میشه؟یا در ios؟

BORHAN TEC
شنبه 23 فروردین 1393, 15:02 عصر
با سلام،
از دید متخصصان کامپایلر و تولید کنندگان زبانهای برنامه نویسی، سینتکس یک زبان برنامه نویسی در یک سطح انتزاعی بالا قرار دارد و نمی توانید بگویید اگر فلان برنامه با فلان سینتکس نوشته شده توانایی اجرا در پلتفرم X را دارد یا نه. چیزی که مهم است کدهای نهایی نزدیک به زبان ماشین است که توسط CG : Code Generator مربوط به کامپایلر تولید می شود. در این روزها کامپایلر دلفی بسیار پیشرفت کرده است. فریم ورک اصلی ای که سازندگان کامپایلر دلفی از آن استفاده می کنند LLVM نام دارد. در اینجا باید برنامه ساخته شده با دلفی به یک کد میانی به نام IR : Intermediate Representation تبدیل شود. LLVM شامل Backend های متفاوتی است برای MAC و ARM و ... است که کار تبدیل کدهای IR به کد نهایی را انجام می دهند. به طور خیلی خلاصه مراحل تبدیل شباهت زیادی با برنامه های دات نتی دارد. در دات نت کدهای با زبانهای دات نتی به MSIL ولی در دلفی به IR تبدیل می شوند(توجه داشته باشید که نحوه اجرای برنامه های مبتنی بر دلفی با دات نت تفاوت دارد).

مثال: کد C زیر را در نظر بگیرید:
struct RT { char A;
int B[10][20];
char C;
};
struct ST {
int X;
double Y;
struct RT Z;
};


int *foo(struct ST *s) {
return &s[1].Z.B[5][13];
}
کد IR تولید شده از کد C بالا شبیه به این است:

%struct.RT = type { i8, [10 x [20 x i32]], i8 }%struct.ST = type { i32, double, %struct.RT }


define i32* @foo(%struct.ST* %s) nounwind uwtable readnone optsize ssp {
entry:
%arrayidx = getelementptr inbounds %struct.ST* %s, i64 1, i32 2, i32 1, i64 5, i64 13
ret i32* %arrayidx
}
در اینجا به طور ساده اگر از Backend مربوط به Win32 و یا Win64 استفاده کنیم برنامه ما مبتنی بر ویندوز خواهد بود. البته توضیحات در مورد LLVM بسیار زیاد است که برای کسب اطلاعات بیشتر در مورد آن می توانید به سایت زیر مراجعه کنید:
http://llvm.org/

با توجه به توضیحات بالا جواب سوالات شما به این شرح است:

آیا کد های دلفی به جاوا تبدیل میشوند؟
خیر، در اندروید کدهای جاوایی تحت Dalvik اجرا می شوند ولی برنامه های مبتنی بر دلفی به صورت Native است. Dalvik برای CPU های مختلف سازگار شده است و یک مزیت بزرگ رو برای برنامه های مبتنی بر JAVA Byte Coce فراهم می کند و آن هم این است که برنامه های مبتنی بر جاوا می توانند بر روی هر گوشی اندرویدی اجرا شوند ولی برنامه های مبتنی بر دلفی اینگونه نیستند. همانطور که می دانید برنامه های مفسری و یا مبتنی بر ماشین مجازی(VM) در تئوری قابلیت حمل بیشتری دارند.


چطور کدهای دلفی که با کامپایلر پاسکال کامپایل میشه در آندروید اجرا میشه؟یا در ios؟

با توجه به توضیحاتی که در مورد LLVM دادم باید خودتون بتونید توضیح بدین. از آنجایی که برنامه های مبتنی بر دلفی مفسری نیستند باید برای هر پلتفرم به صورت اختصاصی کامپایل شوند.

موفق باشید...