compiler algoritmasi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

compiler algoritmasi

Mesaj gönderen ikra »

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.
kıdemsiz üye
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: compiler algoritmasi

Mesaj gönderen AliZairov »

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.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: compiler algoritmasi

Mesaj gönderen SimaWB »

Kod: Tümünü seç

TAclass = class
end;
TBclass = class(TAclass)
end;
TCclass = class(TBclass)
end;
...
TZclass = class(TYclass)
end;
Yukarıdaki şekildeyse ve THclass'tan sonrasını hiç kullanmadıysanız(Yani hiç Create etmediyseniz) onlar exe içine alınmaz. Ama THclass'tan TAclass'a kadar olanların hepsi alınır. Aynı şekilde sadece TZclass'ı kullansanız bile diğer tüm class'lar exe'dedir.
There's no place like 127.0.0.1
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: compiler algoritmasi

Mesaj gönderen ikra »

Cok tesekkür ederim.
kıdemsiz üye
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: compiler algoritmasi

Mesaj gönderen mkysoft »

Eskiden bu iş için optimize parametresi vardı. Hala vardır sanırım. Eğer bunu işaretlemezseniz tümünü derliyordu.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: compiler algoritmasi

Mesaj gönderen freeman35 »

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 !!!
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: compiler algoritmasi

Mesaj gönderen SimaWB »

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:

Kod: Tümünü seç

type
  TFirstClass = class
  end;

  TSecondClass = class(TFirstClass)
  end;

  TThirdClass = class(TSecondClass)
  end;
Uygulamayı şu şekilde derledim:

Kod: Tümünü seç

var
  T: TThirdClass;
begin
  T := TThirdClass.Create();
  Readln;
  T.Free;
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:

Kod: Tümünü seç

var
  T: TFirstClass;
begin
  T := TFirstClass.Create();
  Readln;
  T.Free;
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).
There's no place like 127.0.0.1
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: compiler algoritmasi

Mesaj gönderen ikra »

agziniza saglik. tesekkür ederim.
kıdemsiz üye
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: compiler algoritmasi

Mesaj gönderen freeman35 »

@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 !!!
Cevapla