Kütüphane (bilgi işlem) - Library (computing)

Bir Ogg Vorbis dosyasını oynatmak için libvorbisfile kullanan bir uygulamanın resmi

Gelen bilgisayar bilimleri , bir kütüphane topluluğudur uçucu olmayan kullandığı kaynakların bilgisayar programları sıklıkla için, yazılım geliştirme . Bunlar, yapılandırma verilerini, belgeleri, yardım verilerini, mesaj şablonlarını, önceden yazılmış kodu ve alt rutinleri , sınıfları , değerleri veya tip özelliklerini içerebilir . In IBM'in OS / 360 ve halefleri onlar olarak anılır bölümlenmiş veri kümeleri .

Bir kitaplık aynı zamanda , davranışın çağrıldığı iyi tanımlanmış bir arayüze sahip, bir dil açısından yazılmış bir davranış uygulamaları koleksiyonudur . Örneğin, daha üst düzey bir program yazmak isteyen kişiler, sistem çağrılarını tekrar tekrar uygulamak yerine sistem çağrıları yapmak için bir kütüphane kullanabilirler . Ek olarak, davranış birden çok bağımsız program tarafından yeniden kullanım için sağlanır. Bir program, kütüphane tarafından sağlanan davranışı, dilin bir mekanizması aracılığıyla çağırır. Örneğin, C gibi basit bir zorunlu dilde , bir kitaplıktaki davranış, C'nin normal işlev çağrısı kullanılarak çağrılır. Çağrıyı, aynı programdaki başka bir işleve göre bir kütüphane işlevine yönelik olarak ayıran şey, kodun sistemde düzenlenme şeklidir.

Kitaplık kodu, birbiriyle bağlantısı olmayan birden çok program tarafından kullanılabilecek şekilde düzenlenirken, bir programın parçası olan kod yalnızca o program içinde kullanılmak üzere düzenlenir. Bu ayrım, multi-milyon satırlık bir program gibi bir program büyüdüğünde hiyerarşik bir kavram kazanabilir. Bu durumda, büyük programın bağımsız alt bölümleri tarafından yeniden kullanılan dahili kütüphaneler olabilir. Ayırt edici özelliği, bir kitaplığın bağımsız programlar veya alt programlar tarafından yeniden kullanılmak amacıyla düzenlenmesi ve kullanıcının kitaplığın iç ayrıntılarını değil, yalnızca arayüzü bilmesi gerektiğidir.

Bir kitaplığın değeri, standartlaştırılmış program öğelerinin yeniden kullanılmasında yatar. Bir program bir kitaplığı çağırdığında, bu davranışı kendisi uygulamak zorunda kalmadan o kitaplık içinde uygulanan davranışı kazanır. Kütüphaneler, kodun modüler bir şekilde paylaşımını teşvik eder ve kodun dağıtımını kolaylaştırır.

Bir kitaplık tarafından uygulanan davranış, farklı program yaşam döngüsü aşamalarında çağıran programa bağlanabilir . Çağıran programın oluşturulması sırasında kitaplığın koduna erişilirse, kitaplığa statik kitaplık denir . Bir alternatif, çağıran programın yürütülebilir dosyasını oluşturmak ve bunu kitaplık uygulamasından bağımsız olarak dağıtmaktır. Kitaplık davranışı, yürütülebilir dosya yürütülmek üzere çağrıldıktan sonra, yürütmeyi başlatma sürecinin bir parçası olarak veya yürütmenin ortasında bağlanır. Bu durumda kitaplığa dinamik kitaplık denir ( çalışma zamanında yüklenir ). Bir program yürütülmek üzere hazırlanırken linker tarafından dinamik bir kitaplık yüklenebilir ve bağlanabilir . Alternatif olarak, yürütmenin ortasında, bir uygulama açıkça bir modülün yüklenmesini isteyebilir .

En derlenmiş diller bir var standart kütüphane programcılar da kendi özel kitaplıklar oluşturabilir rağmen,. Çoğu modern yazılım sistemi, sistem hizmetlerinin çoğunu uygulayan kitaplıklar sağlar. Bu tür kütüphaneler, modern bir uygulamanın gerektirdiği hizmetleri organize etmişlerdir. Bu nedenle, modern uygulamalar tarafından kullanılan çoğu kod bu sistem kitaplıklarında sağlanır.

Tarih

EDSAC bilgisayarı için delikli bant makaralarında alt program kitaplığını içeren bir dosya dolabının yanında çalışan bir kadın.

1947'de Goldstine ve von Neumann , o zamanlar henüz çalışmayan erken bir bilgisayar olan IAS makinesindeki çalışmaları için bir alt program "kütüphanesi" yaratmanın faydalı olacağını düşündüler . Her bir telin yeniden kullanılabilir bilgisayar kodunu sakladığı, manyetik tel kayıtlarından oluşan fiziksel bir kitaplık tasarladılar .

Von Neumann'dan ilham alan Wilkes ve ekibi, EDSAC'ı kurdu . Delikli banttan oluşan bir dosya dolabı , bu bilgisayarın alt program kitaplığını tutuyordu. EDSAC için programlar, bir ana program ve alt program kitaplığından kopyalanan bir dizi alt programdan oluşuyordu. 1951'de ekip , kütüphanenin oluşturulmasını ve amacını detaylandıran programlama üzerine ilk ders kitabı olan Elektronik Dijital Bilgisayar için Programların Hazırlanması kitabını yayınladı .

COBOL 1959'da "bir kütüphane sistemi için ilkel yetenekler" içeriyordu, ancak Jean Sammet bunları geçmişe bakıldığında "yetersiz kütüphane olanakları" olarak nitelendirdi.

JOVIAL , kabaca bir başlık dosyaları kitaplığı olan bir İletişim Havuzuna (COMPOOL) sahipti.

Modern kütüphane konseptine bir başka önemli katkı , FORTRAN'ın alt program yeniliği biçiminde geldi . FORTRAN alt programları birbirinden bağımsız olarak derlenebilir, ancak derleyicide bir linker yoktu . Bu nedenle Fortran-90'da modüllerin tanıtılmasından önce, FORTRAN alt programları arasında tip kontrolü imkansızdı.

1960'ların ortalarında, montajcılar için kopyalama ve makro kitaplıkları yaygındı. IBM System/360'ın popülaritesinden başlayarak , örneğin sistem parametreleri gibi diğer metin öğelerini içeren kitaplıklar da yaygınlaştı.

Simula ilk nesne yönelimli programlama diliydi ve sınıfları Java , C++ ve C#' da kullanılan modern konseptle neredeyse aynıydı . Sınıf Simula kavramı, bir progenitör olduğu bir paket içinde Ada ve modül arasında Modula-2 . İlk olarak 1965'te geliştirildiğinde bile, Simula sınıfları kütüphane dosyalarına dahil edilebilir ve derleme zamanında eklenebilir.

bağlama

Kitaplıklar, bağlantılar veya semboller olarak bilinen referansları kitaplık modüllerine çözen program bağlama veya bağlama sürecinde önemlidir . Bağlama işlemi genellikle belirli bir sırayla bir dizi kitaplık ve diğer modülleri arayan bir bağlayıcı veya bağlayıcı program tarafından otomatik olarak yapılır . Bir bağlantı hedefinin belirli bir kitaplık kümesinde birden çok kez bulunması genellikle bir hata olarak kabul edilmez. Bağlama, yürütülebilir bir dosya oluşturulduğunda veya program çalışma zamanında kullanıldığında yapılabilir .

Çözümlenmekte olan referanslar, atlamalar ve diğer rutin çağrılar için adresler olabilir. Ana programda veya diğerine bağlı olarak bir modülde olabilirler. Başvurulan her modülün bellek bölümleri için çalışma zamanı belleği tahsis edilerek sabit veya yeniden yerleştirilebilir adreslere (ortak bir tabandan) çözümlenirler .

Bazı programlama dilleri , bağlayıcının derleyiciden haberdar olduğu veya derleyiciyle entegre olduğu akıllı bağlantı adı verilen bir özellik kullanır ; böylece bağlayıcı, harici referansların nasıl kullanıldığını bilir ve dahili olarak referans verilmiş olsa bile, gerçekte hiç kullanılmayan bir kitaplıktaki kod olabilir. derlenmiş uygulamadan atılır. Örneğin, aritmetik için yalnızca tamsayıları kullanan veya hiç aritmetik işlemi yapmayan bir program, kayan nokta kitaplığı rutinlerini hariç tutabilir. Bu akıllı bağlantı özelliği, daha küçük uygulama dosyası boyutlarına ve daha az bellek kullanımına yol açabilir.

yer değiştirme

Bir program veya kitaplık modülündeki bazı referanslar, tüm kod ve kitaplıklara son statik adresler atanana kadar çözümlenemeyen göreli veya sembolik bir biçimde saklanır. Yer değiştirme , bu referansları ayarlama işlemidir ve ya bağlayıcı ya da yükleyici tarafından yapılır . Genel olarak, tek tek kitaplıklara yeniden yerleştirme yapılamaz, çünkü bellekteki adresler, onları kullanan programa ve birleştirildikleri diğer kitaplıklara bağlı olarak değişebilir. Konumdan bağımsız kod , mutlak adreslere referanslardan kaçınır ve bu nedenle yer değiştirme gerektirmez.

Statik kitaplıklar

Yürütülebilir dosyanın veya başka bir nesne dosyasının oluşturulması sırasında bağlama yapıldığında, statik bağlama veya erken bağlama olarak bilinir . Bu durumda, bağlama genellikle bir bağlayıcı tarafından yapılır , ancak derleyici tarafından da yapılabilir . Bir statik kütüphane olarak da bilinen, arşive , bir statik bağlantılı getirmek niyetindedir. Başlangıçta, yalnızca statik kitaplıklar vardı. Herhangi bir modül yeniden derlendiğinde statik bağlantı yapılmalıdır.

Bir programın gerektirdiği tüm modüller bazen statik olarak bağlanır ve yürütülebilir dosyaya kopyalanır. Bu işlem ve sonuçta ortaya çıkan bağımsız dosya, programın statik yapısı olarak bilinir . Statik yapı başka gerekmeyebilir tehcir eğer sanal bellek kullanılır ve hiçbir adres alanı düzeni rasgele arzu edilir.

Paylaşılan kitaplıklar

Bir kütüphane paylaşılan veya paylaşılan nesne tarafından paylaşılan amaçlanan bir dosyadır çalıştırılabilir dosya ve daha fazla paylaşılan nesne dosyaları. Bir program tarafından kullanılan modüller, program için tek bir monolitik yürütülebilir dosya oluşturduğunda bir bağlayıcı tarafından kopyalanmak yerine , yükleme zamanında veya çalışma zamanında belleğe tek tek paylaşılan nesnelerden yüklenir .

Paylaşılan kitaplıklar derleme sırasında statik olarak bağlanabilir, bu da kitaplık modüllerine yapılan başvuruların çözümlendiği ve yürütülebilir dosya oluşturulduğunda modüllere bellek ayrıldığı anlamına gelir. Ancak genellikle paylaşılan kitaplıkların bağlanması, yüklenene kadar ertelenir.

Çoğu modern işletim sistemi , yürütülebilir dosyalarla aynı biçimde paylaşılan kitaplık dosyalarına sahip olabilir. Bu, iki ana avantaj sunar: birincisi, iki yerine her ikisi için yalnızca bir yükleyici yapılmasını gerektirir (tek yükleyiciye sahip olmak, ek karmaşıklığına değer olarak kabul edilir). İkinci olarak, eğer bir sembol tablosuna sahiplerse, yürütülebilir dosyaların paylaşılan kitaplıklar olarak da kullanılmasına izin verir . Tipik birleştirilmiş yürütülebilir ve paylaşılan kitaplık biçimleri ELF ve Mach-O (her ikisi de Unix'te) ve PE'dir (Windows).

HP 3000 için 16 bit Windows veya MPE gibi bazı eski ortamlarda , paylaşılan kitaplık kodunda yalnızca yığın tabanlı verilere (yerel) izin verildi veya paylaşılan kitaplık koduna başka önemli kısıtlamalar getirildi.

Bellek paylaşımı

Kitaplık kodu , diskte olduğu gibi bellekte de birden çok işlem tarafından paylaşılabilir . Sanal bellek kullanılıyorsa, işlemler, işlemlerin farklı adres alanlarına eşlenen aynı fiziksel RAM sayfasını yürütür. Bunun avantajları vardır. Örneğin, OpenStep sisteminde uygulamalar genellikle yalnızca birkaç yüz kilobayt boyutundaydı ve hızlı bir şekilde yüklendi; kodlarının çoğu, işletim sistemi tarafından başka amaçlar için önceden yüklenmiş olan kitaplıklarda bulunuyordu.

Programlar, karmaşık ancak esnek bir mimariye yol açan Unix'te olduğu gibi konumdan bağımsız kod kullanarak veya Windows ve OS/2'de olduğu gibi ortak sanal adresleri kullanarak RAM paylaşımını gerçekleştirebilir . Bu sistemler, adres alanını önceden haritalamak ve paylaşılan her kitaplık için yuva ayırmak gibi çeşitli hilelerle, bu kodun büyük bir paylaşılma olasılığına sahip olmasını sağlar. Üçüncü bir alternatif, IBM System/38 ve ardılları tarafından kullanıldığı şekliyle tek düzeyli mağazadır . Bu, konuma bağlı koda izin verir, ancak kodun nereye yerleştirilebileceği veya nasıl paylaşılabileceği konusunda önemli bir kısıtlama getirmez.

Bazı durumlarda, paylaşılan kitaplıkların farklı sürümleri, özellikle farklı sürümlerin kitaplıklarının aynı dosya adına sahip olduğu ve bir sistemde kurulu farklı uygulamaların her birinin belirli bir sürüm gerektirdiği durumlarda sorunlara neden olabilir. Böyle bir senaryo, Windows ve OS/2 DLL dosyasının adını taşıyan DLL cehennemi olarak bilinir . 2001'den sonraki çoğu modern işletim sistemi, bu tür durumları ortadan kaldırmak veya uygulamaya özel "özel" kitaplıkları kullanmak için temizleme yöntemlerine sahiptir.

Dinamik bağlantı

Dinamik bağlama veya geç bağlama , yürütülebilir dosya oluşturulduğunda değil, bir program yüklenirken ( yükleme süresi ) veya yürütülürken ( çalışma zamanı ) gerçekleştirilir . Dinamik olarak bağlantılı bir kitaplık ( Windows ve OS/2 altında dinamik bağlantı kitaplığı veya DLL ; OpenVMS altında paylaşılabilir görüntü ; dinamik paylaşılan nesne veya Unix benzeri sistemler altında DSO ), dinamik bağlantı için tasarlanmış bir kitaplıktır. Yürütülebilir dosya oluşturulduğunda bağlayıcı tarafından yalnızca minimum miktarda iş yapılır ; sadece programın ihtiyaç duyduğu kütüphane rutinlerini ve kütüphanedeki rutinlerin indeks adlarını veya numaralarını kaydeder. Bağlama işinin çoğu, uygulama yüklendiğinde (yükleme süresi) veya yürütme sırasında (çalışma zamanı) yapılır. Genellikle, "dinamik bağlayıcı" veya "bağlayıcı yükleyici" olarak adlandırılan gerekli bağlantı programı, aslında temel işletim sisteminin bir parçasıdır . (Ancak, dinamik bağlantı için destek sağlamayan bir işletim sistemi için bile, dinamik bağlantı kullanan ve kendi dinamik bağlayıcısını içeren bir program yazmak mümkündür ve aşırı derecede zor değildir.)

Programcılar ilk olarak 1964'ten başlayarak Multics işletim sisteminde ve 1960'ların sonlarında inşa edilen MTS'de ( Michigan Terminal Sistemi ) dinamik bağlantı geliştirdiler .

Optimizasyonlar

Çoğu sistemdeki paylaşılan kitaplıklar sık ​​sık değişmediğinden, sistemler ihtiyaç duyulmadan önce sistemdeki her paylaşılan kitaplık için olası bir yükleme adresi hesaplayabilir ve bu bilgileri kitaplıklarda ve yürütülebilir dosyalarda saklayabilir. Yüklenen her paylaşılan kitaplık bu süreçten geçtiyse, her biri önceden belirlenmiş adresinde yüklenir ve bu da dinamik bağlantı sürecini hızlandırır. Bu optimizasyon olarak bilinir prebinding MacOS ve prelinking Linux. Bu tekniğin dezavantajları arasında, paylaşılan kütüphaneler her değiştiğinde bu adresleri önceden hesaplamak için gereken süre, adres alanı düzeni rastgeleleştirmesinin kullanılamaması ve kullanım için yeterli sanal adres alanı gereksinimi ( 64'ün benimsenmesiyle hafifletilecek olan bir sorun) sayılabilir. -bit mimarileri, en azından şimdilik).

Çalışma zamanında kitaplıkları bulma

Paylaşılan kitaplıklar için yükleyiciler, işlevsellik açısından büyük farklılıklar gösterir. Bazıları, kitaplıkların açık yollarını saklayan yürütülebilir dosyaya bağlıdır. Dosya sisteminin kitaplık adında veya düzeninde yapılacak herhangi bir değişiklik, bu sistemlerin başarısız olmasına neden olacaktır. Daha yaygın olarak, yalnızca kitaplığın adı (yol değil) yürütülebilir dosyada saklanır ve işletim sistemi, bazı algoritmalara dayalı olarak kitaplığı diskte bulmak için bir yöntem sağlar.

Yürütülebilir dosyanın bağlı olduğu paylaşılan bir kitaplık silinirse, taşınırsa veya yeniden adlandırılırsa ya da kitaplığın uyumsuz bir sürümü aramada daha önceki bir yere kopyalanırsa, yürütülebilir dosya yüklenemez. Buna birçok platformda bulunan bağımlılık cehennemi denir . (Rezil) Windows varyantı genellikle DLL cehennemi olarak bilinir . Bu sorun, her kitaplığın her sürümü benzersiz bir şekilde tanımlanırsa ve her program kitaplıklara yalnızca tam benzersiz tanımlayıcılarıyla başvurursa oluşmaz. Önceki Windows sürümlerindeki "DLL cehennemi" sorunları, programlardaki dinamik bağlantıları çözmek için yalnızca benzersiz olması garanti edilmeyen kitaplık adlarının kullanılmasından kaynaklandı. ("DLL cehenneminden" kaçınmak için, Windows'un sonraki sürümleri büyük ölçüde programların özel DLL'leri yükleme seçeneklerine (esas olarak paylaşılan kitaplıkların kullanımından kısmi bir geri çekilme) ve paylaşılan sistem DLL'lerinin önceki sürümleriyle değiştirilmesini önleme mekanizmalarına dayanır. )

Microsoft Windows

Microsoft Windows , COM nesnelerini uygulayan DLL'leri yüklemek için uygun yeri belirlemek için kayıt defterini kontrol eder , ancak diğer DLL'ler için dizinleri tanımlanmış bir sırayla kontrol eder. İlk olarak, Windows programı yüklediği dizini kontrol eder ( özel DLL ); işlevi çağırarak ayarlanan herhangi bir dizin ; System32, System ve Windows dizinleri; ardından geçerli çalışma dizini; ve son olarak PATH ortam değişkeni tarafından belirtilen dizinler . .NET Framework için yazılan uygulamalar (2002'den beri), DLL cehennemi sorununu ortadan kaldırmak için paylaşılan dll dosyalarının birincil deposu olarak Global Assembly Cache'i de kontrol eder . SetDllDirectory()

Adım Aç

OpenStep , sistem ilk başladığında (PATH konseptine benzer şekilde) bilinen bir dizi konumdan kitaplıkların bir listesini toplayarak daha esnek bir sistem kullandı. Kullanıcıların sistemi ilk başlatırken bir zaman maliyetine maruz kalmasına rağmen, kitaplıkları hareket ettirmek hiçbir soruna neden olmaz.

Unix benzeri sistemler

Çoğu Unix benzeri sistem, dinamik kitaplıkların aranacağı dosya sistemi dizinlerini belirten bir "arama yoluna" sahiptir. Bazı sistemler, bir yapılandırma dosyasındaki varsayılan yolu belirtirken , diğerleri bunu dinamik yükleyiciye sabit kodlar. Bazı yürütülebilir dosya biçimleri, belirli bir program için kitaplıkların aranacağı ek dizinler belirtebilir. Bu, setuid ve setgid programları için devre dışı bırakılsa da, genellikle bir ortam değişkeni ile geçersiz kılınabilir , böylece bir kullanıcı böyle bir programı kök izinleriyle rastgele kod çalıştırmaya zorlayamaz. Kitaplık geliştiricileri, dinamik kitaplıklarını varsayılan arama yolundaki yerlere yerleştirmeye teşvik edilir. Olumsuz tarafı, bu yeni kitaplıkların kurulumunu sorunlu hale getirebilir ve bu "bilinen" konumlar hızla artan sayıda kitaplık dosyasına ev sahipliği yaparak yönetimi daha karmaşık hale getirir.

Dinamik yükleme

Dinamik bağlamanın bir alt kümesi olan dinamik yükleme , istek üzerine çalışma zamanında dinamik olarak bağlantılı bir kitaplığın yüklenmesini ve boşaltılmasını içerir . Böyle bir talep zımnen veya açıkça yapılabilir. Bir derleyici veya statik bağlayıcı, dosya yollarını veya yalnızca dosya adlarını içeren kitaplık referansları eklediğinde örtük istekler yapılır. Uygulamalar bir işletim sisteminin API'sine doğrudan çağrı yaptığında açık istekler yapılır.

Dinamik olarak bağlantılı kitaplıkları destekleyen çoğu işletim sistemi, bir çalışma zamanı bağlayıcı API'si aracılığıyla bu tür kitaplıkların dinamik olarak yüklenmesini de destekler . Örneğin, Microsoft Windows API işlevlerini kullanır LoadLibrary, LoadLibraryEx, FreeLibraryve GetProcAddressile Microsoft dinamik bağlantı Kütüphaneleri ; UNIX ve UNIX benzeri sistemlerin çoğu dahil olmak üzere POSIX tabanlı sistemler dlopen, dlcloseve dlsym. Bazı geliştirme sistemleri bu süreci otomatikleştirir.

Nesne kitaplıkları

Başlangıçta 1960'larda öncülük edilmesine rağmen, dinamik bağlantı, 1980'lerin sonlarına kadar tüketiciler tarafından kullanılan işletim sistemlerine ulaşmadı . 1990'ların başlarında çoğu işletim sisteminde genellikle bir şekilde mevcuttu. Aynı dönemde, nesne yönelimli programlama (OOP), programlama ortamının önemli bir parçası haline geliyordu. Çalışma zamanı bağlamalı OOP, geleneksel kitaplıkların sağlamadığı ek bilgiler gerektirir. İçinde bulunan kodun adlarına ve giriş noktalarına ek olarak, bağımlı oldukları nesnelerin bir listesini de gerektirirler. Bu, OOP'nin ana avantajlarından biri olan kalıtımın bir yan etkisidir; bu, herhangi bir yöntemin tam tanımının bölümlerinin farklı yerlerde olabileceği anlamına gelir. Bu, bir kitaplığın diğerinin hizmetlerini gerektirdiğini basitçe listelemekten daha fazlasıdır: gerçek bir OOP sisteminde, kitaplıkların kendileri derleme zamanında bilinmeyebilir ve sistemden sisteme değişebilir.

Aynı zamanda birçok geliştirici, bir masaüstü bilgisayarda çalışan bir "ekranın" veri depolama veya işleme için bir ana bilgisayar veya mini bilgisayarın hizmetlerini kullanacağı çok katmanlı programlar fikri üzerinde çalıştı . Örneğin, GUI tabanlı bir bilgisayardaki bir program, görüntüleme için büyük bir veri kümesinin küçük örneklerini döndürmek için bir mini bilgisayara mesajlar gönderir. Uzaktan yordam çağrıları (RPC) bu görevleri zaten üstlendi, ancak standart bir RPC sistemi yoktu.

Kısa süre sonra mini bilgisayar ve ana bilgisayar satıcılarının çoğu, her yerde kullanılabilecek bir OOP kitaplık formatı üreterek ikisini birleştirmek için projeler başlattı. Bu tür sistemler, uzaktan erişimi destekliyorlarsa (hepsi değil) nesne kitaplıkları veya dağıtılmış nesneler olarak biliniyordu . Microsoft'un COM'u, yerel kullanım için böyle bir sistemin bir örneğidir. COM'un değiştirilmiş bir sürümü olan DCOM, uzaktan erişimi destekler.

Bir süredir nesne kitaplıkları, programlama dünyasında "bir sonraki büyük şey" statüsünü elinde tuttu. Platformlar arasında çalışacak sistemler oluşturmak için bir dizi çaba vardı ve şirketler, geliştiricileri kendi sistemlerine kilitlemeye çalışmak için rekabet etti. Örnekler arasında , IBM 'in Sistem Nesne Modeli (SOM / DSOM), Sun Microsystems ' Dağıtılmış Nesneleri Heryerde (DOE), NeXT 'in Taşınabilir Dağıtılmış Nesneleri (PDO), Dijital ' in ObjectBroker , Microsoft'un Bileşen Nesne Modeli (COM / DCOM) ve herhangi bir sayıda CORBA tabanlı sistem.

sınıf kitaplıkları

Sınıf kitaplıkları , eski kod kitaplıkları türlerinin kaba OOP eşdeğeridir. Özellikleri tanımlayan ve nesneleri içeren eylemleri ( yöntemleri ) tanımlayan sınıfları içerirler . Sınıf kitaplıkları, özellikleri belirli değerlere ayarlanmış örnekler veya nesneler oluşturmak için kullanılır . Java gibi bazı OOP dillerinde, sınıflar genellikle kitaplık dosyalarında (Java'nın JAR dosya formatı gibi ) ve yalnızca bellekte bulunan somutlaştırılmış nesnelerle (potansiyel olarak ayrı dosyalarda kalıcı hale getirilebilse de) ayrım açıktır . Smalltalk gibi diğerlerinde, sınıf kitaplıkları , ortamın tüm durumunu, sınıfları ve tüm somutlaştırılmış nesneleri içeren bir sistem görüntüsü için yalnızca başlangıç ​​noktasıdır .

Bugün çoğu sınıf kitaplığı bir paket deposunda (Java için Maven Central gibi) depolanmaktadır . İstemci kodu, yapı yapılandırma dosyalarındaki (Java'daki Maven Pom gibi) dış kitaplıklara bağımlılıkları açıkça bildirir.

Uzak kitaplıklar

Kitaplık sorununa başka bir çözüm, tamamen ayrı yürütülebilir dosyalar (genellikle bazı hafif biçimlerde) kullanmak ve bunları bir ağ üzerinden başka bir bilgisayara uzaktan yordam çağrısı (RPC) kullanarak çağırmaktan gelir . Bu yaklaşım, işletim sisteminin yeniden kullanımını en üst düzeye çıkarır: kitaplığı desteklemek için gereken kod, diğer tüm programlar için uygulama desteği ve güvenlik sağlamak için kullanılan kodla aynıdır. Ek olarak, bu tür sistemler, kütüphanenin aynı makinede bulunmasını gerektirmez, ancak istekleri ağ üzerinden iletebilir.

Ancak böyle bir yaklaşım, her kütüphane çağrısının önemli miktarda ek yük gerektirdiği anlamına gelir. RPC çağrıları, aynı makineye önceden yüklenmiş olan bir paylaşılan kitaplığı çağırmaktan çok daha pahalıdır. Bu yaklaşım , özellikle istemci-sunucu sistemleri ve Enterprise JavaBeans gibi uygulama sunucuları olmak üzere bu tür uzak çağrıları yoğun olarak kullanan dağıtılmış bir mimaride yaygın olarak kullanılır .

Kod oluşturma kitaplıkları

Kod oluşturma kitaplıkları, Java için bayt kodu oluşturabilen veya dönüştürebilen üst düzey API'lerdir . En -boy yönelimli programlama , bazı veri erişim çerçeveleri ve dinamik proxy nesneleri oluşturmak için testler için kullanılırlar. Ayrıca alan erişimini engellemek için kullanılırlar.

Dosya adlandırma

En modern Unix benzeri sistemler

Sistem , veya gibi dizinlerde depolar libfoo.ave libfoo.sodosyalar . Dosya adları her zaman ile başlar ve ( arşiv , statik kitaplık) veya (paylaşılan nesne, dinamik olarak bağlantılı kitaplık) son ekiyle biter . Bazı sistemler, dinamik olarak bağlantılı bir kitaplık için birden çok ada sahip olabilir. Bu adlar genellikle aynı ön eki paylaşır ve sürüm numarasını gösteren farklı son eklere sahiptir. Adların çoğu, en son sürüme giden sembolik bağlantıların adlarıdır . Örneğin, bazı sistemlerde , dinamik olarak bağlantılı kitaplığın ikinci ana arayüz revizyonunun dosya adı olabilir . Bazen kütüphane dizinlerde bulunan dosyalardır Libtool gibi sistem tarafından kullanılamaz arşivler. /lib/usr/lib/usr/local/liblib.a.solibfoo.so.2libfoo.la

Mac os işletim sistemi

Sistem , bir dosyada depolanan kitaplık ile BSD'den statik kitaplık kurallarını devralır .ave .so-style dinamik olarak bağlantılı kitaplıkları kullanabilir ( .dylibbunun yerine sonek ile ). Ancak macOS'teki çoğu kitaplık , kitaplığın gerekli dosyalarını ve meta verilerini saran " paketler " adı verilen özel dizinlerin içine yerleştirilmiş "çerçevelerden" oluşur . Örneğin, adı verilen bir çerçeve MyFrameworkdenilen bir demet uygulanacağına dair MyFramework.frameworkile, MyFramework.framework/MyFrameworkya da dinamik bağlantılı kitaplık dosyası olarak ya da bir dinamik bağlantı kütüphanesi dosyasına bir sembolik olarak MyFramework.framework/Versions/Current/MyFramework.

Microsoft Windows

Dinamik bağlantı kitaplıkları genellikle son ekine sahiptir *.DLL, ancak diğer dosya adı uzantıları, örneğin OLE kitaplıkları *.OCXiçin , özel amaçlı dinamik olarak bağlantılı kitaplıkları tanımlayabilir . Arabirim revizyonları ya dosya adlarında kodlanır ya da COM nesne arabirimleri kullanılarak soyutlanır . Nasıl derlendiklerine bağlı olarak, dosyalar ya statik kitaplıklar olabilir ya da yalnızca derleme sırasında ihtiyaç duyulan, " içe aktarma kitaplıkları " olarak bilinen dinamik olarak bağlanabilir kitaplıkların temsilleri olabilir . Aksine UNIX karşı bağlarken, farklı dosya uzantılarını kullanır dünyada, dosyanın , Windows düzenli statik kütüphane veya bir ithalat kütüphanesi ise ilk bilmelisiniz biri. İkinci durumda, çalışma zamanında bir dosya mevcut olmalıdır. *.LIB.LIB.DLL

Ayrıca bakınız

Notlar

Referanslar

daha fazla okuma