# Carbon API
Carbon, Macintosh bilgisayarları çalıştıran işletim sistemi olan Mac OS X (bugün macOS olarak bilinir) için Apple'ın C tabanlı uygulama programlama arayüzlerinden (API) biridir. Carbon, Mac OS 8 ve Mac OS 9 işletim sistemlerinde çalışan programlar için iyi bir geriye dönük uyumluluk sağlamıştır. Geliştiriciler, “klasik” Mac OS ve Macintosh işletim sistemleri yazılımlarını OS X platformuna taşımak için uygulamayı azami çaba harcayarak çok az bir çaba ile kullanabilirler. OpenStep'te ortaya çıkan tamamen farklı Cocoa API sistemidir.
Carbon, Apple'ın Mac OS X'i pazara sunma stratejisinin önemli bir parçasıydı; mevcut yazılım uygulamalarının hızlı bir şekilde taşınması için bir yol sunmanın yanı sıra, Mac OS X veya klasik Mac OS'de çalışacak nakliye uygulamaları için bir yol sunuyordu. Pazar giderek artan bir şekilde Cocoa bazlı çerçevelere geçtiğinden, özellikle iOS piyasaya sürüldükten sonra bir taşıma kütüphanesine duyulan ihtiyaç seyreltildi. Apple, 2007 çerçevesindeki diğer çerçevelerini güncellerken 64 bitlik bir Carbon sürümü oluşturmadı ve sonunda 24 Temmuz 2012'de yayımlanan OS X Mountain Lion'daki tüm API'yi kullanımdan kaldırdı.


## Tarihi.
Orijinal Mac OS, Pascal'ı birincil geliştirme platformu olarak kullandı ve API'ler Pascal'ın çağrı anlambilimine dayanıyordu. Macintosh Toolbox Araç Kutusunun çoğu, Pascal'ın değişken kayıt konseptine dayanan çeşitli veri yapıları kullanarak API ve program arasında bilgi ileri geri ileten prosedür çağrılarından oluşuyordu.
Zamanla, Mac'te, özellikle Pascal'da Object Pascal kütüphanesi MacApp ve THINK C Library'de (TCL) ve daha sonra MacApp ve CodeWarrior PowerPlant'ın C ++ sürümlerinde sürümlerinde Mac üzerinde bir dizi nesne kütüphanesi gelişti. 1990'ların ortalarına gelindiğinde, Mac yazılımlarının çoğu C ++ ile CodeWarrior kullanılarak yazılmıştır.
Orijinal Mac OS, Pascal'ı birincil geliştirme platformu olarak kullandı ve API'ler Pascal'ın çağrı anlambilimine dayanıyordu. Macintosh Araç Kutusunun çoğu, Pascal'ın değişken kayıt konseptine dayanan çeşitli veri yapıları kullanarak API ve program arasında bilgi ileri geri ileten prosedür çağrılarından oluşuyordu.


## Rhapsody.
NeXT'nin 1996 yılının sonlarında satın alınmasıyla Apple, büyük ölçüde mevcut OpenStep platformuna dayanan yeni bir işletim sistemi stratejisi geliştirdi. Yeni Rhapsody nispeten basitti; OpenStep'in mevcut nesne kitaplıklarının çoğunu "Yellow Box" adı altında, OpenStep'in mevcut GUI'sini barındıran ve daha fazla Mac benzeri görünmesini sağladı, Mac OS'den birkaç büyük API'yi Rhapsody'nin temelindeki Unix benzeri sisteme (özellikle QuickTime ve AppleSearch'e) taşıdı. ve mevcut Mac OS yazılımını çalıştıran "Blue Box" olarak bilinen bir öykünücüyü ekledi.
Bu plan 1997 yılında Apple Worldwide Developers Conferencede açıldığında, kod tabanlarının etkili bir şekilde güncellenmesi muhtemel olmayan bir emülatöre kilitleneceği için üzülen mevcut Mac OS geliştiricilerinden bir miktar geri dönüş vardı. Microsoft ve Adobe gibi daha büyük geliştiriciler tamamen düpedüz kaldı ve mevcut Mac OS'den çok farklı olan veya uyumsuzluğun çok az olduğu OpenStep'e taşınmayı düşünmeyi reddetti. .
Apple bu endişeleri kalbe aldı. Steve Jobs bu değişikliği 1998 WWDC'de duyurduğunda, "geliştiricilerin gerçekten istediği şey Mac OS'nin modern bir sürümü olduğunu ve Apple'ın bunu sunacağını" belirtti. Açıklama, gök gürültülü alkışlarla karşılandı. Orijinal Rhapsody işletim sistemi konsepti sonunda 1999'da türünün tek sürümü olan mac OS X Server 1.0 olarak piyasaya sürüldü.


## Cocoa ve Carbon.
Apple, mevcut Mac OS kod tabanları için gerçek ve iyi desteklenen bir yükseltme yolu sunmak için Carbon sistemini tanıttı. Carbon, Mac benzeri bir API sunan, ancak öykünme içinde çalışan Mac işletim sisteminin bir kopyası yerine, altında yatan Unix benzeri işletim sisteminin üstünde çalışan birçok kitaplık ve işlevden oluşur. Carbon kütüphaneleri kapsamlı bir şekilde temizlenir, modernize edilir ve daha iyi "korunur". Mac OS veri iletmek için hafızayı paylaşan API'lerle doluyken, Carbon altında bu tür tüm erişim opak veri türlerinde erişimci alt yordamları kullanılarak yeniden uygulandı. Bu, Carbon'un gerçek çoklu görev ve hafıza korumasını desteklemesini sağladı; Mac geliştiricilerin on yıldan beri talep ettiği özellikler idi. Önceden var olan API'deki diğer değişiklikler, kavramsal olarak Mac OS X'le uyumlu olmayan ya da sadece eski olan özelliklerden kaldırıldı. Örneğin, uygulamalar artık kesme kotarıcı veya aygıt sürücüsü yükleyemedi.
Carbon'ı desteklemek için tüm Rhapsody modeli değişti. Rhapsody etkin bir öykünücüyle etkin bir şekilde OpenStep olurken, yeni sistemde hem OpenStep hem de Carbon API mümkün olduğunda ortak kodu paylaşacaktır. Bunu yapmak için, OpenStep sisteminin alt seviyelerinden, Objective-C dilinde yazılmış ve Foundation olarak bilinen yararlı kod bitlerinin çoğu saf C'de yeniden uygulandı. CF çağırmak için gösterilen "Yellow Box"'un bir versiyonu yeni Cocoa API'sine dönüştü ve Mac benzeri Carbon çağrıları da aynı işlevleri çağırdı. Yeni sistemde, Carbon ve Cocoa eşlerdi. Bu dönüşüm normal olarak, temel C kütüphanelerine çağrılan nesne metotları olarak Cocoa performansını yavaşlatırdı, ancak Apple bu etkiyi azaltmak için ücretsiz köprüleme olarak adlandırdıkları bir teknik kullandı.
Bu dönüşümün bir parçası olarak, Apple, grafik motorunu lisanslı Display PostScript'ten lisanssız Quartz'a ("Ekran PDF" olarak adlandırılır) aktardı. Quartz, hem Carbon hem de Cocoadan kullanılabilecek doğal çağrılar sağlamanın yanı sıra Java 2D benzeri arayüzler de sundu. Altta yatan işletim sisteminin kendisi daha da izole edildi ve Darwin olarak serbest bırakıldı.


## Serbest bırakma ve evrim.
1997 yılında, Mac OS 8.1 ile geriye dönük olarak uyumlu paylaşılan bir kütüphane olarak, Carbon 2000 yılında eksik olarak tanıtıldı. Bu sürüm, geliştiricilerin bu programların mevcut Mac OS makinelerinde çalışabilme yeteneğini kaybetmeden kodlarını Carbon'a aktarmalarına izin verdi. Resmi Mac OS X desteği, 2001'de yeni işletim sisteminin ilk halka açık sürümü olan Mac OS X 10.0'ın piyasaya sürülmesiyle geldi. Carbon, Mac OS X'in ilk sürümlerinde neredeyse tüm büyük yazılım evleri tarafından Apple tarafından bile kullanıldı. Örneğin, Finder, 2009 yılında yalnızca Mac OS 10.6'nın (Mac OS X Snow Leopard) piyasaya sürülmesiyle Cocoa'ya taşınan, uzun yıllar boyunca bir Carbon uygulaması olarak kaldı.
26 Ekim 2007'de yayınlanan Mac OS X Leopard (Mac OS X v10.5) ile başlayan 64 bit Macintosh uygulamalarına geçiş, Carbon için ilk büyük kısıtlamaları getirdi. Apple, 64-bit ortamdaki Macintosh grafik kullanıcı arayüzü ile C programlama dili arasında uyumluluk sağlamaz; bunun yerine, Cocoa API ile Objective-C lehçesi kullanılmasını gerektirir. Birçok yorumcu bunu Carbon'un nihai ortadan kaybolmasının ilk işareti olarak gördü, Apple, Carbon sistemine yeni önemli bir ilaveler eklenmeyeceğini söylediğinde yeniden uygulanan bir pozisyondu ve 2012'de değer düşüklüğü ile daha da güçlendirildi.


## Cocoaya Geçiş.
Cocoa'nın öngörülen avantajlarına rağmen, büyük miktarlarda eski kodun yeniden yazılması ihtiyacı, Nisan 2010'da sonunda Cocoa'ya güncellenen ünlü Adobe Photoshop ile olan Carbon tabanlı uygulamaların geçişini yavaşlattı. iTunes ve Final Cut Pro (ayrıca QuickTime motorundaki güç veren özellikler gibi) yazılım paketleri de yıllarca Carbon'da yazılı kaldı. Hem iTunes hem de Final Cut Pro X, Cocoa sürümlerinde piyasaya sürüldü.


## Karşı koyma.
2012'de, OS X 10.8 Mountain Lion'un piyasaya sürülmesi ile çoğu Carbon API'si kullanımdan kaldırılmıştır. API'lar geliştiricilere hala erişilebilir durumda ve tüm Carbon uygulamaları çalışacak, ancak API'ler artık güncellenmeyecekdir. 28 Haziran 2017'de, Apple, MacOS için tüm Carbon uygulamaları gibi 32 bit yazılımların, macOS High Sierra'dan sonra macOS sürümlerinde artık “ödün vermeden” desteklenmediğini açıkladı. macOS Catalina, 32-bit uygulamalar için desteği resmi olarak kaldırır ve bu nedenle tüm Carbon uygulamaları artık desteklenmez.


## Mimari.
Carbon, Araç Kutusundan iner ve bu nedenle “Yöneticiler” den oluşur. Her Yönetici, veri yapıları kümelerini ve bunları işlemek için kullanılan işlevleri tanımlayan, işlevsel olarak ilgili bir API'dir. Yöneticiler genellikle birbirine bağımlı veya katmanlıdır. Carbon, dosyaları, belleği, verileri, kullanıcı arayüzünü ve diğer sistem servislerini yönetmek için geniş bir işlevler setinden oluşur.
Mac'e özgü işlevselliğe erişen tüm C dili API prosedürlerini kapsayan bir şemsiye terim olan Carbon, ayrı bir sistem olarak tasarlanmamıştır. Aksine, neredeyse eşdeğer Cocoa API'sı için gereken Objective-C dilini bilmeyen geliştiricilere macOS'un neredeyse tüm işlevselliğini açar.
Carbon, PowerPC Mac OS için mevcut tüm çalıştırılabilir formatlarla uyumludur. Mac OS X ve önceki sürümleri arasındaki ikili uyumluluk, Apple'ın Xcode IDE'lerinde hiç desteklemediği Tercih Edilen Yürütülebilir Format dosyasının kullanılmasını gerektirir.
Carbon'un daha yeni kısımları, çoğu Core Foundation'a dayanan anlayışlarında çok daha fazla nesne yönelimli olma eğilimindedir. HIView Manager (Kontrol Yöneticisinin bir süperseti) gibi bazı Yöneticiler C ++ 'ta uygulanmaktadır ancak Carbon bir C API olmaya devam etmektedir.
Carbon Yöneticilerinin bazı örnekleri:
  - Dosya Yöneticisi - dosya sistemine erişimi, açılmasını, kapanmasını, okunmasını ve yazmasını yönetir.
  - Kaynak Yöneticisi - bir programın gerektirebileceği önceden tanımlanmış veri parçaları olan kaynaklara erişimi yönetir. Disk dosyalarından kaynakları okumak ve yazmak için Dosya Yöneticisi'ni çağırır. Kaynaklara örnek olarak simgeler, sesler, resimler, aletler için şablonlar vb aittir.
  - Font Yöneticisi - yazı tiplerini yönetir. Mac OS X v10.4'ten beri Apple Type Services (ATS) lehine itiraz edildi (QuickDraw'ın bir parçası olarak).
  - QuickDraw - 2D grafik ilkeleri. Mac OS X v10.4'ten beri Quartz 2D'nin lehine itiraz edildi.
  - Carbon Event Manager - kullanıcı ve sistem etkinliğini, kodun tanıyabileceği ve yanıt verebileceği olaylara dönüştürür.
  - HIObject - Carbon'a GUI oluşturmak için bir OO modeli getiren tamamen yeni bir nesne yönelimli API-dir. Mac OS Classic ve Copland'daki HIToolbox, terkedilmiş IBM Sistem Nesne Modeline dayanıyordu, bu yüzden Carbon, eski kodun taşınmasını sağlamak için hızlı ve kirli değiştirme sağlamak zorundaydı. Bu Mac OS X 10.2 veya sonrasında mevcuttur ve Carbon programcılarına Cocoa geliştiricilerinin uzun zamandır tanıdığı araçlardan bazılarını verir. Mac OS X v10.2 ile başlayarak, HIObject, Carbon'daki tüm GUI öğeleri için temel sınıftır. HIView, Apple'ın geliştirici araçlarının bir parçası olan Interface Builder tarafından desteklenmektedir. Geleneksel olarak bu tür GUI mimarileri sağlamak için üçüncü taraf uygulama çerçevelerine bırakılmıştır. Mac OS X v10.4'ten başlayarak, HIObjects, NSObjects'tir ve veri aktarımı veya diske kaydedilmesi için veri akışlarına seri hale getirilebilme özelliğine sahiptir.
  - HITheme - grafik kullanıcı arayüzü (GUI) elemanlarını ekrana getirmek için QuickDraw ve Quartz kullanıyor. HITheme, Mac OS X Panther'de tanıtıldı ve Görünüm Yöneticisi bu sürümden beri HITheme'nin üstündeki bir uyumluluk katmanıdır.
  - HIView Manager - kontrollerin oluşturulması, çizilmesi, isabet testi ve manipülasyonunu yönetir. Mac OS X v10.2'den bu yana, tüm kontroller HIViews'tir. Mac OS X v10.4'te, Kontrol Yöneticisi HIView Manager olarak yeniden adlandırıldı.
  - Pencere Yöneticisi - pencerelerin oluşturulmasını, konumlandırılmasını, güncellenmesini ve değiştirilmesini yönetir. Mac OS X v10.2'den beri, pencerelerin kök HIView'i var.
  - Menü Yöneticisi - Menülerin oluşturulmasını, seçilmesini ve değiştirilmesini yönetir. Mac OS X v10.2'den beri, menüler HIObjects'tir. Mac OS X v10.3'ten beri, menü içeriği HIViews kullanılarak çizilebilir ve tüm standart menüler çizmek için HIViews kullanır.