Objective-C qanday kompilyatsiya qilinadi?

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!


person user3318845    schedule 06.03.2014    source manba
comment
Ha. Va yo'q. Balki. Men uni hech qachon ajratmaganman, lekin kontseptual jihatdan bu ish vaqtini qo'llab-quvvatlaydigan sithload bilan birlashtirilgan C preprotsessoridir. O'ylaymanki, amalda ular ba'zi funktsiyalarni C kompilyatoriga integratsiyalashgan.   -  person Hot Licks    schedule 06.03.2014


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.

person Merlevede    schedule 06.03.2014
comment
Agar Objective-C mashina kodiga kompilyatsiya qilsa, nima uchun unga ish vaqti kerak? To'g'ridan-to'g'ri protsessordan ishlamaydimi? - person user3318845; 07.03.2014
comment
user3318845, ish vaqti VM emas. Objective-C to'g'ridan-to'g'ri protsessorda ishlaydi. Ish vaqti ko'proq usulni qidirish uchun tezkor kod kabi narsalarni amalga oshiradigan standart kutubxonaga o'xshaydi. Shunday qilib, u ko'proq C standart kutubxonasiga o'xshaydi, faqat u faqat ob'ektga yo'naltirilgan dasturiy ta'minot tomonidan talab qilinadigan dizayn naqshlarini amalga oshirish bilan bog'liq. Ushbu maqola vaziyatni aniqlashga yordam berishi mumkin: orangejuiceliberationfront.com/runtime-time - person uliwitness; 07.03.2014
comment
Objective-C, boshqa har qanday til kabi, mashina kodiga kompilyatsiya qiladi. Va Java nima uchun kompilyatsiya qiladi? - person JohnK; 26.07.2017
comment
@JohnK Siz haqsiz !!!! Men javobimni tahrir qilaman. Buni ta'kidlaganingiz uchun tashakkur. - person Merlevede; 27.07.2017
comment
@Merlevede Salom, siz kompilyator faqat OC ni to'g'ridan-to'g'ri mashina kodiga kompilyatsiya qiladi deysiz, lekin javobda meni chalkashtirib yuboring. stackoverflow.com /savollar/44561285/ - person merito; 01.08.2017

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.

person uliwitness    schedule 06.03.2014
comment
Agar siz Bred Koksning asl kitobini o'qigan bo'lsangiz, bu haqiqat emasligini bilib olasiz. Dispetcherni C tilida yozish mumkin emas va maxsus hiyla-nayrangni talab qiladi. - person david.pfx; 08.03.2014
comment
Qaysi jihat C ga yaxshi mos kelmaydi? Men bir nechta OO ish vaqtlarini yozdim va o'zimning dasturlash tillarimni amalga oshirdim, ularning ba'zilari Smalltalk/ObjC ga juda o'xshash va men imkonsiz narsa haqida o'ylay olmayman. Albatta, men siz qo'shishingiz mumkin bo'lgan ko'plab optimallashtirishlar haqida o'ylashim mumkin, ularni C tilida amalga oshirib bo'lmaydi va hozirgi ABI bu tafsilotlarning ba'zilarini ochib beradi, shuning uchun siz ularga mos kelmasligingiz mumkin, ammo sth qilish uchun. joriy ObjC manba fayllarini oladi va xuddi shu narsani bajaradigan C manba fayllarini chiqaradi, nima uchun bu mumkin emasligini tushunmayapman. - person uliwitness; 08.03.2014
comment
Ha, men ham shundayman va men kitobni uzoq vaqt oldin o'qigan bo'lsam ham, u haqiqat bo'lganini eslayman. Xabar dispetcheri IIRC hech qanday standart C konstruktsiyasiga tarjima qilmaydi va turli xil tanlovlar (kalit, fn ko'rsatkichlari, vararglar va boshqalar) hammasi kamlik qiladi. Qanday bo'lmasin, kompilyator shunchaki "qidirish va almashtirish" dan ko'proq narsa edi, lekin bu maxsus sehrga muhtoj bo'lgan yordamchi kutubxona edi. - person david.pfx; 08.03.2014
comment
O'ylaymanki, agar 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.

person James Harnett    schedule 06.03.2014