Thread overview
DMD ve LDC ile Derleme Arasında Farklar Neler
October 23

Merhaba,

Hızlı çalışan ve iyi optimize edilmiş bir D Projesi üzerine çalışıyorum. Derleme sonucunda öyle MB'larca yer kaplayan bir binary dosya istemiyorum. Bu yüzden kodlamada gereken iyileştirmeleri yapmama rağmen, DMD'nin 2 MB. sınırına (aslında tam olarak 1991688 byte) yanaştığını gördüm...

import ettiklerim sadece bu kadar:

import arsd.simpledisplay;
import std.algorithm;
import std.random;

Optimize (-O) ederek derlemeye çalıştıysam da dosya boyutu (2012176 byte) küçülmek yerine büyüdü, neden acaba? Üstelik -betterC de kullanamıyorum çünkü Adam'ın modülleri buna imkan vermiyor:

arsd/color.d(140):
Error: `TypeInfo` cannot be used with -betterC

Ben de LDC deneyim dedim! Sonuç (4'de 1 katı) muazzam:

pico@enpi:~/Belgeler$ ldc2 -O -of"axial.out" axial.d arsd/color.d arsd/simpledisplay.d && ls -l --b=K  axial.out | cut -d " " -f5
469K
pico@enpi:~/Belgeler$ ldc2 -version
LDC - the LLVM D compiler (1.24.0):
  based on DMD v2.094.1 and LLVM 11.0.1
  built with LDC - the LLVM D compiler (1.24.0)
  Default target: x86_64-pc-linux-gnu
  Host CPU: ivybridge

O yüzden sormak istedim; LDC kullanırsam (en azından proje sonunda) bana bir eksisi olur mu? DMD'nin (build v2.097.2) proje geliştirme sırasında avantajlarının farkındayım ama LDC ile arasındaki önemli olabilecek farklarını merak ediyorum.

Vee tabiiii, -O parametresi LDC'de çalışırken DMD'de neden çuvallamış olabilir?

Teşekkürler...

October 23

On Saturday, 23 October 2021 at 09:39:10 UTC, Salih Dincer wrote:

>

Vee tabiiii, -O parametresi LDC'de çalışırken DMD'de neden çuvallamış olabilir?

Teşekkürler...

DMD ile derlerken "-O" ya ek olarak -O -release -inline -boundscheck=off denenebilir. Gerçi -inline ve -boundscheck=off hız ile ilgili optimizasyonlar. belki -release dosya boyutunu azaltabilir.

https://dlang.org/dmd-windows.html#switch-O

>

O yüzden sormak istedim; LDC kullanırsam (en azından proje sonunda) bana bir eksisi olur mu? DMD'nin (build v2.097.2) proje geliştirme sırasında avantajlarının farkındayım ama LDC ile arasındaki önemli olabilecek farklarını merak ediyorum.

LDC'nin dplug gibi ticari boyutu olan projelerde kullanıldığını biliyorum.

October 23
On 10/23/21 2:39 AM, Salih Dincer wrote:

> Hızlı çalışan ve iyi optimize edilmiş bir D Projesi üzerine çalışıyorum.
> Derleme sonucunda öyle MB'larca yer kaplayan bir binary dosya
> istemiyorum.

Linux üzerindeysen:

$ strip deneme

Sembolleri programdan çıkartır. Rasgele bir deneme yaptım: 800K'dan 550K'ya indi.

> import ettiklerim sadece bu kadar:
> ```d
> import arsd.simpledisplay;
> import std.algorithm;
> import std.random;
> ```

Bütün modülü değil, sembolleri isimle eklersen hem daha çabuk derler hem daha küçük olur(abilir):

import std.stdio: writeln;

> Optimize (```-O```) ederek derlemeye çalıştıysam da dosya boyutu
> (```2012176 byte```) küçülmek yerine büyüdü

Eniyileştirme yöntemlerinden birisi, işlevleri "inline etmektir". O da programı büyütür. (gcc'nin küçültmeye yönelik eniyileştirme seçenekleri de var ama dmd'de yalnızca -O.)

> LDC kullanırsam (en azından proje sonunda) bana
> bir eksisi olur mu?

Tam tersine: LDC, dmd'den kat kat üstün bir derleyici:

- dmd'nin ön tarafı (front end) D'ciler tarafından geliştirilir, arka tarafı da öyle.

- LDC'nin ön tarafı dmd'nin ön tarafıdır ama arka tarafı, senelerdir geliştirilmekte olan (ve D ile özel bir ilgisi olmayan) çok üstün LLVM'dir.

LDC daha uzun sürede derler ama ürettiği program daha hızlıdır. Hatta, profile guided optimization, link time optimization vs. gibi üstünlükleri de kullanılabilir.

> DMD'nin (build v2.097.2) proje geliştirme sırasında
> avantajlarının farkındayım

dmd'nin avantajları:

- Hep son sürüm

- Hızlı derleme

> ama LDC ile arasındaki önemli olabilecek
> farklarını merak ediyorum.

LDC'nin avantajları:

- dmd'nin bir iki sürüm gerisinden gelebilir (aynı günde güncellendiği bile olmuştur)

- Yalnızca X86 için değil, LLVM'in desteklediği her platform için kod üretir.

- Ürettiği kod dmd'den daha hızlıdır

> Vee tabiiii, -O parametresi LDC'de çalışırken DMD'de neden çuvallamış
> olabilir?

LLVM yüzlerce programcı tarafından senelerdir geliştirilmekte olan bir derleyici; dmd, Walter Bright'ın yazdığı kodları kullanan ve yavaş yavaş geliştirilen bir derleyici. Ayrıca, D dünyasında başka sorunlar öncelikli olduğundan kimse eniyileştirmeye önem vermiyor.

LDC'yi övdük ama gdc'yi de unutmamak gerek: Onun ürettiği programlar da çok hızlı çalışır çünkü o da GCC'nin arka tarafından ve başka güzelliklerden yararlanır.

Ali


October 24

On Saturday, 23 October 2021 at 22:47:45 UTC, Ali Çehreli wrote:

>

On 10/23/21 2:39 AM, Salih Dincer wrote:>
Sembolleri programdan çıkartır. Rasgele bir deneme yaptım: 800K'dan 550K'ya indi.

Bu açıkladıklarınızın bir kısmını (belki çok temeldir) ilk defa okuyorum! Strip'i unutmuşum ama denedim. Programın son hali (LDC2 ve -O ile):

Orj.: 642.952KB
Str.: 461.240KB
Dif.: 181.712KB (~40%)

>

LDC daha uzun sürede derler ama ürettiği program daha hızlıdır. Hatta, profile guided optimization, link time optimization vs. gibi üstünlükleri de kullanılabilir.

Diğer üstünlüklerini örnek bulursam deneyeceğim. Dediğiniz gibi -O ile derleme süresi uzadığı gibi laptopun fanı hızlanmaya başlıyor :)

>

dmd'nin avantajları:

  • Hep son sürüm
  • Hızlı derleme

Bu durumda proje geliştirme aşamasında DMD ve yayınlama sırasında LDC gibi duruyor; tabi son sürüm özellikler kullanılmadıysa.

>

LDC'yi övdük ama gdc'yi de unutmamak gerek: Onun ürettiği programlar da çok hızlı çalışır çünkü o da GCC'nin arka tarafından ve başka güzelliklerden yararlanır.

Aslında front-end özellikler ile daha çok ilgileniyorum. İşin mutfak kısmı aklımın alamayacağı kadar karışık olmalı. Hele ki GPU'ların hakim olduğu şu dünyada (Kripto Para Madenciliği'nde kullanıldığına göre) makine dilinde inanılmaz iyileştirmeler var. Özellikle bir grafik hesaplanırken yazacağımız en akıllı kod bile geride kalabilir!

S.Dinçer

October 24
On 10/23/21 10:07 PM, Salih Dincer wrote:

> Bu durumda proje geliştirme aşamasında DMD ve yayınlama sırasında LDC
> gibi duruyor

Doğru karar. :) Bildiğim kadarıyla profesyonel olarak kullananlar da öyle yapıyor.

Ali


October 24

On Saturday, 23 October 2021 at 22:47:45 UTC, Ali Çehreli wrote:

>

On 10/23/21 2:39 AM, Salih Dincer wrote:>
Sembolleri programdan çıkartır. Rasgele bir deneme yaptım: 800K'dan 550K'ya indi.

Bu açıkladıklarınızın bir kısmını (belki çok temeldir) ilk defa okuyorum! Strip'i unutmuşum ama denedim. Programın son hali (LDC2 ve -O ile):

Orj.: 642.952KB
Str.: 461.240KB
Dif.: 181.712KB (~40%)

>

LDC daha uzun sürede derler ama ürettiği program daha hızlıdır. Hatta, profile guided optimization, link time optimization vs. gibi üstünlükleri de kullanılabilir.

Diğer üstünlüklerini örnek bulursam deneyeceğim. Dediğiniz gibi -O ile derleme süresi uzadığı gibi laptopun fanı hızlanmaya başlıyor :)

>

dmd'nin avantajları:

  • Hep son sürüm
  • Hızlı derleme

Bu durumda proje geliştirme aşamasında DMD ve yayınlama sırasında LDC gibi duruyor; tabi son sürüm özellikler kullanılmadıysa.

>

LDC'yi övdük ama gdc'yi de unutmamak gerek: Onun ürettiği programlar da çok hızlı çalışır çünkü o da GCC'nin arka tarafından ve başka güzelliklerden yararlanır.

Aslında front-end özellikler ile daha çok ilgileniyorum. İşin mutfak kısmı aklımın alamayacağı kadar karışık olmalı. Hele ki GPU'ların hakim olduğu şu dünyada (Kripto Para Madenciliği'nde kullanıldığına göre) makine dilinde inanılmaz iyileştirmeler var. Özellikle bir grafik hesaplanırken yazacağımız en akıllı kod bile geride kalabilir!

S.Dinçer

October 24
On 10/24/21 7:21 AM, Salih Dincer wrote:

Bu mesajı ikinci kere aldık çünkü birincisi "spam filter"a takılmış. Şimdi geçti. :)

Ali