Men shunchaki qiziqaman, Objective-C C kodiga kompilyatsiya qiladimi yoki Objective-C ish vaqti dastur ustidagi abstraksiya qatlami kabi ishlaydi? Nima haqida gapirayotganimni bilmasam oldindan uzur!
Objective-C qanday kompilyatsiya qilinadi?
Javoblar (3)
Objective-C ni C ga kompilyatsiya qilish mantiqiy emas, chunki u holda C kodini tahlil qilish va uni kompilyatsiya qilish kerak bo'ladi.
Objective-C mashina kodiga kompilyatsiya qiladi. Esda tutingki, til (Objective-C, C, C++) faqat kodni to'g'ri yozish qoidalarini belgilaydi. Kompilyator sizning kodingiz to'g'ri yoki yo'qligini tekshiradi va uni kompilyatsiya qiladi, ya'ni uni bajariladigan kodga tarjima qiladi.
Bundan tashqari, Objective-C tilini va Objective-C ish vaqtini aralashtirib yubormang. Til sintaksisni belgilaydi, ish vaqti kompilyatsiya qilingan kodni ishga tushirishga imkon beradi (siz aytganidek, bu qatlam, lekin u har safar dasturingiz bilan kompilyatsiya qilinmaydi).
EDIT:
Ish vaqti kompyuter tilining asosiy harakatlarini amalga oshiradi. Ish vaqti kutubxonada bo'lgani kabi kompilyatsiya qilingan funktsiyalar kodini o'z ichiga oladi. Masalan, C tilida printf()
ga qo'ng'iroq qilganingizda kodingiz mashina kodiga kompilyatsiya qilinadi va ushbu funktsiyani amalga oshirishni o'z ichiga olgan kutubxona bilanbog'lanadi; bu mashina kodi nima qiladi parametrlarni kutubxonadagi bajariladigan kodga o'tkazadi.
Kichik tarix darsi:
C++ ham, Objective C ham dastlab C uchun protsessor sifatida boshlangan. Shunday qilib, siz ObjC kodingizni kiritdingiz va u kod orqali qidirish va almashtirishni samarali ishga tushiradi va Objective-C buyruqlarini bir oz ishlatadigan to'g'ri C kodiga tarjima qiladi. yordamchi kutubxona (objc/runtime.h va shunga o'xshash fayllardagi narsalar).
Til murakkablasha boshlagach, u C kompilyatoridagi tahlilchini Objective-C ga xos bo'lgan/o'zgartirgan/kengaytirilgan to'liq tahlil qiluvchiga aylantirildi. Shunday qilib, Objective-C-ni to'g'ridan-to'g'ri C ga kompilyatsiya qilish juda mumkin bo'lsa-da, hozirgi ObjC kompilyatorlari endi buni qilmaydi.
objc_msgSend()
hozirgi kundagi kabi funktsiya chaqiruvi sifatida amalga oshirilsa, ha, to'g'ridan-to'g'ri C dan foydalanib funktsiya parametrlarini uzatishning hech qanday usuli yo'q. Ya'ni, tarkibni asosan joylashtiradigan kod generatorini yozish hali ham mumkin. Sizning usul qo'ng'irog'ingiz joylashgan joyda objc_msgSend()
dan, so'ngra to'g'ri parametrlar va imzo bilan IMPni to'g'ridan-to'g'ri chaqiradi.
- person uliwitness; 22.07.2015
Xcode-dan qat'iy ravishda gapiradigan bo'lsak, kod LLVM kompilyatori bilan tuzilgan. Bu yerda LLVM kompilyatori haqida batafsil ma'lumot. LLVM kompilyatori qanday ishlashi haqida ko'proq ma'lumotni oddiy Google qidiruvlari orqali topishingiz mumkin.