Jump to page: 1 2
Thread overview
std.stdio sınıfının hafif sürümü var mı?
Mar 08, 2012
Salih Dinçer
Mar 09, 2012
Salih Dinçer
Mar 09, 2012
erdem
Mar 09, 2012
erdem
Mar 09, 2012
Salih Dinçer
Mar 09, 2012
Salih Dinçer
Mar 09, 2012
Salih Dinçer
March 09, 2012

Merhaba,

İlk önce tartışmayı burada başlatayım istedim. Çünkü kesin bilmediğim bir şey vardır ve belki bu çok önemsiz bir şeydir. Tabi Ali hocamı da meşgul etmek istemem. Ama her türlü derleme parametresini denememe rağmen, ekrana bir harf yazan uygulamayı bırakın 500 kb. altına indirmeyi, 720 Kb. altına bile indiremedim...:)

Tamam, devir GB. hatta TB.'ların devri ve bu değerler GHz.'ler hızındaki bilgisayarlarımız ile önemsiz görünebilir. Ancak std.stdio'nun sadece int80 üzerinden ekrana yazma özelliğini kullanıyorsam derleme süresini de uzatan niye fazladan 500 kb. ile muhatap oluyorum? Örneğin:
Alıntı:

>
> /* Compile with:
>                 dmd test.d -O -release -inline
> (uses DMD32 D Compiler v2.057)*/
>
> import std.stdio;/*
>
> void write(int y) {
> }//*/
> void main(){
>    write(7);
> }
> ```

'import' satırını '//' ile gizlediğimde derleme boyutu: **237493 bayt**

Oysa bir std.stdio sınıfına bağlı 'write(') işlevini kullandığımızda boyut **~500 kb.** artıyor. Eğer uygulamamızda sınıfın diğer işlevlerini kullanmıyorsak bu kadar israf niye? Bu sınıf öyle bir şişmiş ki bence C'de olduğu gibi 'putchar()' gibi bir işlevin çekirdeğe dahil edilme zamanı gelmiş.

**Dip Not:** std.stdio sınıfını düzenleyip kullanmadığım şeyleri çıkardım. Ancak Phobos paketini derlemeyi beceremedim.

Sevgiler, saygılar...

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
March 09, 2012

Sorumu kısmen geri alıyorum ve evet, bilmediğim şeyler çokmuş...:)

Çekirdekteki C sınıfını (core.stdc.stdio) ile 'printf()''i kullandım. Böylece derleme süresinde önemli bir hız artışı oldu. Önemsiz gibi görünebilir ama bilgisayarımdaki yüze yakın derlenmiş D denemesi ile teorik olarak 50 MB. yer açmış olacağım. Bu vesileyle yeni bir soru sorayım:

Linux için özgün bir derleme aracı (script) kullanan var mı? Yani tek komut ile object dosyasının ayrı bir dizinde toplanması ve deneme uygulamalarımın hep aynı isimde (örneğin masaüstümde "dene" diye bir uygulama) oluşması gibi. Sadece .d uzantılı dosyayı vereceğim ve o da derleyecek. Hatta obj dizini içinde topladığı raw dosyayı, assembly'e çevirip asm dizine kaydetse ve ben gerektiğinde oradaki ilgili bölümleri kontrol etsem. Sanırım shell script falan yazmak gerekiyor. En iyisi öğrenmek...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 09, 2012

Alıntı (Salih Dinçer):

>

Linux için özgün bir derleme aracı (script) kullanan var mı? Yani tek komut ile object dosyasının ayrı bir dizinde toplanması ve deneme uygulamalarımın hep aynı isimde (örneğin masaüstümde "dene" diye bir uygulama) oluşması gibi.

Evet make kullanabilirsin.

https://github.com/erdemoncel/oyun/blob/master/Makefile

Editör olarak da Emacs :)

Hatta fi tarihinden kalmış bir Emacs kullanım dökümanı da bulabildim

http://bit.ly/wDSdxZ

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 09, 2012

En iyileştirmelerle ilgili olarak da Ali bey'in de sık kullandığı Donald Knuth'un ünlü bir sözü var. Hatta Gentoo gibi derleyerek oluşturulan bazı Linux sürümlerinde -O2 yerine -O3 kullanmak gibi bazı gcc bayrakları sistemin hızlı çalışmasını bırakın yavaşlatabiliyor, hatta bazı programların çökmesine derlenememesine neden olabiliyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 09, 2012

Alıntı (acehreli):

>

Bir önceki programı '/+' ve '+/' açıklamaları arasına alıveriyorum ve hep deneme.d'yi deneme olarak derliyorum.
Hocam, acaba sorması ayıp mıdır bilmiyorum...:)

Şu yıldız yerine artı kullanılarak yapılan şeyin bir esprisi var mı? Bu arada ilk BASH scriptimi yazdım, çok işime yaradı:
Alıntı:

>
> #!/bin/bash
>
> file_name=$(echo $1|sed 's/\(.*\)\.d/\1/')
>
> dmd $file_name.d -odobj
> obj2asm ./obj/$file_name.o > ./asm/$file_name.asm
>
> if [[ $? -eq 0 ]]; then
>         ./$file_name $2 $3 $4 $5
> fi
> ```

Yukarıdaki script kısaca; 'dmd deneme.d' yazmak yerine, sadece 'd.sh deneme' yazarak hem derlemiş, hem object dosyasını 'obj dizini'nde ve bundan assembly kodunu 'asm dizini'nde oluşturmuş, hem de (eğer hata vermediyse) parametrelerini aktararak binary dosyasını çalıştırmış oluyoruz.

Meğer DMD'nin -od diye bir parametresi varmış; böylece bulunduğu dizinde oluşan .o dosyaları karmaşasından kurtulmuş oldum. Gerçi bir de -o- var ki bu dosyanın oluşmasını engelliyormuş. Dileyen bunu da kullanır ama assembly kod ile ilgilenmiyorsa hemen altındaki satırı da iptal etmesi gerekir.

Henüz BASH Script yazmanın incelikleri (<http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html>)ni bilmediğim için çalıştırılırken gönderilen olası kullanılabilecek parametreleri amatörce sıraladım. Aslında bunların bir kısmı script içinde değerlendirerek daha akıllı şeyler yapılabilir. Şimdilik bu bana yeter de artar bile. Fena halde de zaman kazandıracak.

Başarılar...

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
March 09, 2012

Herkes bu gibi sorunların farkında ama bunlar ikinci planda kalıyorlar. Phobos henüz shared library olarak gelmiyor. Geldiği zaman bu sorun da bir ölçüde ortadan kalkacak.

Ayrıca D'nin runtime'ı C'ninkinden çok fazla iş yapıyor (örneğin çöp toplayıcı orada). O yüzden ne olursa olsun bir C programı kadar küçülemeyecek.

Deneme dosyaları için de bir çözümüm yok ama kendi yöntemimi söyleyebilirim. Benim tek deneme.d dosyam var. Eklediğim her kod onun sonua gidiyor. Bir önceki programı '/+' ve '+/' açıklamaları arasına alıveriyorum ve hep deneme.d'yi deneme olarak derliyorum. Örneğin şu anda o dosya şöyle:

/* ...
  ... Daha önceki yüzlerce program burada ...
  ... */




/+
import std.stdio;

/* ... Bir önceki program burada */
}
+/




import std.range;

void main()
{
   int[4] a = array(iota(4));
   assert(a == [ 0, 1, 2, 3 ]);
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 09, 2012

Aaaa...:)

Çok teşekkürler, bunu bilmiyordum ama yıldızların çapraz eşleşme olayına gıcık oluyordum. O yüzdendir //*/ dışında pek kullanmam. Onun da esprisini yukarıda ve Kod Yazma Teknikleri (http://ddili.org/forum/thread/708)'nde değinmiştim. Bu yeni yıldızsız artılı olay oraya da yakışmaz mı?

Bir de hatırladığım VS'nin yeni sürümüyle birlikte gelen çift yıldızlı vardı. Bu XML imlerini kullanmak için geliştirilmiş. Çünkü eskiden karışıklık oluyordu. Bence bütün IDE'ler desteklemeli ki zamanla projeler büyüyor ve nitelikli (sınıflandırılabilir) açıklama koymak gerekiyor. Kısaca şöyle yazılıyor:

/**<max>536870911</max>**/
const uint xSay= 198491317;
/**<min>~xDSay/8</min>**/

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 09, 2012

Alıntı (Salih Dinçer):

>

yıldız yerine artı kullanılarak yapılan şeyin bir esprisi var mı?

Onlar '/* ... */' açıklamalarını da kapsayabiliyorlar.

   /+
   /*
       // tek satır açıklama
       int i;

       çok satır açıklama
   */

   int j;

       hepsini kapsayan açıklama
   +/

'/+ ... +/' yerine '/* ... /' kullanılmaya çalışılsaydı, kodun tam ortasında bulunan '/' belirtecine kadar etkili olurdu. (Deneyiniz. ;))

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 10, 2012

DDOC'u duymuştum sanırım uzantıları .di oluyor, yoksa başka bir şeyle mi karıştırıyorum?

Bu arada D Script de var zannedersem, yoksa aynı şeyler mi? Yani web üzerinden cevap verecek bir (CGI) arabirim. Buna henüz geçmedim (yakında!) ama D dilini bilen herkesin kolaylıkla yapacağı bir şey olsa gerek. Zaten D'nin anlaşılabilirliliğine hayranım ve bir gün İngillizce gibi (olmadı C diyelim) dünya dili olacağını zannediyorum. Japonlar da çok sevmiş...

Elektronikte de çok tutabilir! siPIC-D'yi bitirebilirsem (hayalimdeki farklı olayı gerçekleştirebilirsem!) sanırım dilin başka meslek gruplarında gözde (popular) olması sağlanabilir. Hatta C harfi ile başlayan türevlere (bence D, C'nin türevinden farklı bir şeydir...) çok katkı sağlayabilir. Bir gün MS'in bile satın alma girişiminde bulunacağını tahmin ediyorum ki VS'ye çok şey katar. Belki de karşılıklı birbirlerine çok şey katarlar. CLR yapısı ile bu kolay bir şey.

Bu arada ben de konuyu dağıtacağım gibi (belki ayrı başlıkta açmalı?), doğal olarak çağrışım yaptı herhalde; D'de MVC tekniği ile program yazsak nasıl olur? Bana olur gibi geliyor çünkü üç farklı dosyayı modular yapıp class yapısıyla haberleştirip aynı anda derler hatta -lib parametresi ile kendi kütüphanemize akıllı bir şekilde çalışan uygulamalar yapabiliriz.

Dip Not: Farkında mısınız; hep güzel konular birbirlerini doğuruyor. Öyle ilginç başlıklar oluyor ki bunlara tohum başlıkları (Seed Threads) diyebiliriz. Adeta yayılıyor...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 09, 2012

'/**' ile başlayan açıklamalar Doxygen gibi otomatik kod belgeleme araçlarında da neredeyse standarttır. Hatta dmd'nin çift kişiliğinden :) diğeri olan ddoc'da o işe yarar:

http://dlang.org/ddoc.html

Konuyu dağıtıyorum ama Phobos modüllerinin belgeleri de ddoc ile hazırlanır. (ddoc'un yetersizlikleri var; biliniyor.) Hatta ddili.org'un forum ve wiki dışındaki sayfaları da ddoc ile hazırlanır. Örneğin Zaffer'in yeni makalesi:

http://code.google.com/p/ddili/source/browse/trunk/src/makale/d_tipleri.d?spec=svn390&r=390

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2