compiler algoritmasi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
compiler algoritmasi
selamun aleykum!
ayni kategorilere ait olan yada birbirlerini miras alan classlari bir unit altinda topladigimda ve bu classlarin yalnizca birkacini kullandigimda compile edildikten sonra olusan exe tüm uniti mi kapsar yoksa yalnizca gerekli olan classlari mi?
örnegin birbirini miras alan TAclass'dan TZclass'a kadar bilesenlerim oldugunu varsayalim. bu bilesenlerden örnegin yalnizca THclqss'i kullandim. compile edilirken TAclass'dan THclass'a kadar mi kapsar yoksa Taclassdan TZclass'a kadar mi.
ayni kategorilere ait olan yada birbirlerini miras alan classlari bir unit altinda topladigimda ve bu classlarin yalnizca birkacini kullandigimda compile edildikten sonra olusan exe tüm uniti mi kapsar yoksa yalnizca gerekli olan classlari mi?
örnegin birbirini miras alan TAclass'dan TZclass'a kadar bilesenlerim oldugunu varsayalim. bu bilesenlerden örnegin yalnizca THclqss'i kullandim. compile edilirken TAclass'dan THclass'a kadar mi kapsar yoksa Taclassdan TZclass'a kadar mi.
kıdemsiz üye
Re: compiler algoritmasi
Merhaba. Bildiğim kadarıyla Delphi compileri tüm kütüphaneleri .exe içerisine gömer o yüzden .exe boyutu büyük olur. .NET dili gibi ek kütüphaneye ihtiyaç duymaz bu sayede. Sizin sorunuza gelirsek fonksiyonları kullanmasanız bile derleyici derler hazır yapar. Yalnız bilgi gibi gösterirseniz derleyici dikkate almaz ve derlemez. Yinede yanlışım varsa affola. Ben öyle biliyorum.
Re: compiler algoritmasi
Kod: Tümünü seç
TAclass = class
end;
TBclass = class(TAclass)
end;
TCclass = class(TBclass)
end;
...
TZclass = class(TYclass)
end;
There's no place like 127.0.0.1
Re: compiler algoritmasi
Eskiden bu iş için optimize parametresi vardı. Hala vardır sanırım. Eğer bunu işaretlemezseniz tümünü derliyordu.
Re: compiler algoritmasi
Yanlış bilmiyorsam, compiler pas filelara included edileekleri ekler ve uniti önce compile eder (dcu) [delphi compiled unit] eğer bu bir pakete dahilse dcu ları bpl olarak birleştirir. yanılmıyorsam borland program library kısaltmasıydı. Exe yi oluşturuken, önce yazdığınız pasları dcu olarak kaydeder, sonra kullandığınız yani uses lara eklenmiş unitler, eğer bpl e dahilse, exe ye bpl i ekler, değilse sadece dcu yu ekler. dcu ların içeriğindeki class ları takip etmez. yani senin sorduğun şekilde unit(ler) içindeki classları ayıklayıp derlemez. Mantıklı düşünürsende bu ayıklama işi çok çetrefilli olacaktır, hata olasılığını arttıracaktır. paket içinden bir unit için bile projeye paketi komple eklemeye bu hataları azaltmaya yönelik. yoksa her exe yi derleme işleminde tüm bu paket ve bileşenlerini denetlemek ve derlemek gerekirdi. oysa paketi derlendimi bpl oluşur ve delphi source larında bir değişiklik olmadıkça exe kullansa bile derlemez, direk bpl i kullanır, hazır derlenmişi var yani 

ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: compiler algoritmasi
DCU yada BPL için haklısınız freeman35. Fakat EXE için durum farklı.
En azından ben öyle bildiğim için basit bir deneme yaptım.
Bir console uygulaması ve bir adet Unit.
Unitin içeriği:
Uygulamayı şu şekilde derledim:
Oluşan Exe'yi bir hex editor'de (HexEdit) açıp arama yaptığımda TThirdClass, TSecondClass ve TFirstClass üçü de mevcut.
Uygulamayı bir de şu şekilde derledim:
HexEdit ile baktığımda exe içinde sadece TFirstClass var.
Zaten, eğer kullanılmayan bir class'ın constructor'una breakpoint koyup programı debug modda çalıştırdığımızda o breakpoint'in kullanılmaz şekilde olduğu görülür. Tahminim bu onun exe içine alınmayacağına işaret.
Not: Delphi XE ile ve her hangi bir compiler ayarını değiştirmeden test ettim. mkysoft'un yazdığı gibi bir şekilde (compiler directive vs ile) bu özelliğin değiştirilmesi mümkündür diye düşünüyorum ($STRONGLINKTYPES veya $TYPEINFO olabilir).
En azından ben öyle bildiğim için basit bir deneme yaptım.
Bir console uygulaması ve bir adet Unit.
Unitin içeriği:
Kod: Tümünü seç
type
TFirstClass = class
end;
TSecondClass = class(TFirstClass)
end;
TThirdClass = class(TSecondClass)
end;
Kod: Tümünü seç
var
T: TThirdClass;
begin
T := TThirdClass.Create();
Readln;
T.Free;
Uygulamayı bir de şu şekilde derledim:
Kod: Tümünü seç
var
T: TFirstClass;
begin
T := TFirstClass.Create();
Readln;
T.Free;
Zaten, eğer kullanılmayan bir class'ın constructor'una breakpoint koyup programı debug modda çalıştırdığımızda o breakpoint'in kullanılmaz şekilde olduğu görülür. Tahminim bu onun exe içine alınmayacağına işaret.
Not: Delphi XE ile ve her hangi bir compiler ayarını değiştirmeden test ettim. mkysoft'un yazdığı gibi bir şekilde (compiler directive vs ile) bu özelliğin değiştirilmesi mümkündür diye düşünüyorum ($STRONGLINKTYPES veya $TYPEINFO olabilir).
There's no place like 127.0.0.1
Re: compiler algoritmasi
@SimaWB saolasın, bugüne kadar hiç class bazında düşünüp incelememiştim. Compiler directive lerde mutlaka etkileyecektir.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!