Mesajlarını aradığınız kullanıcı: jbytecode (12)

konu: D ile işletim sistemi  ; forum:: D Programlama Dili
jbytecode #1
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Şu Adreste : http://wiki.osdev.org/C%2B%2B

delete ve new operatörlerinin stdlib kullanılmadığı durumda kendimiz yazmak isteyeceğimizi ve bu durumda en basit formun da aşağıdaki gibi olması gerektiğini söylüyor.


// size_t depends on your implementation, the easiest would probably be:
// typedef __SIZE_TYPE__ size_t;
 
void *operator new(size_t size)
{
    return malloc(size);
}
 
void *operator new[](size_t size)
{
    return malloc(size);
}
 
void operator delete(void *p)
{
    free(p);
}
 
void operator delete[](void *p)
{
    free(p);
}

yukarıdakiler wrapper fonksiyondur. Tabi ki yalnızca wrapper olduklarından ciddi performans kaybı yaşamayız. Yalnızca fazladan fonksiyon çağırım süresi var.

Yazar, bellek ayırdıktan sonra sıfırlama ihtiyacı olabileceğini de söylüyor. Evet yukarıdaki koda bu da güzelce eklenebilir.

new ve delete yukarıdaki gibi sadeleştirilirse (+ sıfırlama) söylediğiniz bir çok şeyde sizle hemfikirim demektir. ama orijinal new ve delete implementation bence işletim sistemi kernelinin hassas kısımlarında sakınca yaratır

ayrıca şu adreste new ve delete'nin optimal yazılmadığı, genel amaçlı olduğu yazıyor:
http://stackoverflow.com/questions/7149461/why-would-one-r…
The new and delete operators work reasonably well for everybody, but optimally for nobody. This behavior arises from the fact that they are designed for general purpose use only. They have to accommodate allocation patterns ranging from the dynamic allocation of a few blocks that exist for the duration of the program to constant allocation and deallocation of a large number of short-lived objects. Eventually, the operator new and operator delete that ship with compilers take a middle-of-the-road strategy.

If you have a good understanding of your program's dynamic memory usage patterns, you can often find that custom versions of operator new and operator delete outperform (faster in performance, or require less memory up to 50%)the default ones. Of course, unless you are sure of what you are doing it is not a good idea to do this(don't even try this if you don't understand the intricacies involved).
:)

güzel bir sohbet oldu değil mi Ali bey? bu altbaşlıkta biriken entry'ler baştan aşağı okunduğunda bir çok bilgiyi hatırlatacak bize.

paylaşım için çok teşekkürler, keyif aldım
Bu mesaj jbytecode tarafından değiştirildi; zaman: 2012-09-10, 07:00.
konu: D ile işletim sistemi  ; forum:: D Programlama Dili
jbytecode #2
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7618
C dilini, Assembly dilinin evcilleştirilmiş hali gibi görmek gerekir. C hem yüksek seviyeli bir dildir, hem de, derleyici tarafından üretilen makine kodunu da ciddi şekilde düşünmek gerektirdiğinden düşük seviyeli bir dildir de (onu yüksek ve düşük seviyeli yapan özellikler sadece bunlar değil). Yani derleyicisini iyi tanıyan bir programcı başka bir dilde, örneğin C'de, assembly diline yakın bir performansa kavuşabilir.

MenuetOS 'u hiç denemedim. Daha sonra incelerim tabi ki. Ama yanlış yolda olduklarını kimse söyleyemez çünkü Linus Torvalds "onu C diliyle yazıyordum ama dışardan bakan biri yazdıklarıma C demez çünkü büyük oranda assembly kullanıyordum" diyor kitabında. Minix için de bunlar kısmen geçerlidir.
konu: D ile işletim sistemi  ; forum:: D Programlama Dili
jbytecode #3
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7615
Merhaba Ali Bey,

Yazmayı ihmal ettiğim şeylere de değinmişsiniz, faydalı olmuş. Şu noktayı düzeltebilirim: Nesne üretilecekse üretilecektir. Evet böyle. Ancak C ve Assembly'de terminolojik olarak nesne üretmek kavramından bahsedemeyiz. (Evet her dilde object orientation taklit edilebilir. C 'de  de durum böyledir.) Benim söylemek istediğim, new ve delete operatörlerinin malloc ve free 'den fazlasını yaptığıdır. İşletim sistemi programcısının çoğu zaman istediği şey bir struct'ın (örneğin filesystem'de) belleğe alınması. Öyle ki, bu struct'un üzerine yazılacağı belleğin miktarının yeterli olduğu bile varsayılabilir (tehlikeli olsa da işletim sistemini yazan asıl patrondur).

Test etmedim ancak new, malloc'tan fazla iş yapıyor. Bunun en büyük delillerinden biri yeterli bellek kontrolü için hata denetim mekanizması içermesi ve gerektiğinde bir bad_alloc exception fırlatması. Fazladan 20 ms bir gecikme işletim sisteminin yavaşlaması demektir. Önemsiz olmakla birlikte performans optimizasyonlarında göz önüne alınmaya değer bir durumdur.
konu: D ile işletim sistemi  ; forum:: D Programlama Dili
jbytecode #4
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7340
bu başlığı başından sonuna heyecanla okudum. bilgisayar bilimlerinde alaylı biri olmama rağmen daha önce hakkında okuduğum ve bir kaç deneyim yaşadığım bir konu olduğu için paylaşayım, bazı sorulara da elimden geldiğinde cevap aramaya çalışayım:

Tanenbaum'un modern operating systems adlı kitabıyla tanışmam, Linus Torvalds'ın kitabını okumam sayesinde oldu. Tanenbaum Minix adlı işletim sisteminin yazarıdır ve kitabını Minix üzerinden anlatmaktadır. Linus ise Linux işletim sistemini yazarken bu kitaptan faydalanmış ancak litabında Minix hakkında yaptığı sert eleştirilerde fazlaca cömert davranmıştır.

Tanenbaum özellikle process management kısmında assembly kullanmak zorunda kaldığını söylüyor. Görevler arası geçiş olabildiğine hızlı olmalı, eğer olamıyorsa tüm sistemi yavaşlatıyor. Bu bağlamda işletim sistemi yazmak konusunda C bile hız konusunda yetersiz kalır.  Sonuç olarak process management kütüphanesi D içinde (ve diğer tüm dillerde) internal olarak yazılmadığı taktirde assembly kullanmak şart oluyor.

Bios, işletim sistemi yüklemek için ilk tetiklemeyi yaptığında ortada Bios kesmelerinden başka çağıracak fonksiyon olmadığı için standart kütüphanenin baştan aşağı yazılması gerekiyor. Standart kütüphane ekrana bir harf basmaktan dosya işlemlerine kadar binlerce fonksiyon içeriyor. Dosya açmak için tabi ki bir de dosya sisteminin önceden yazılması işi var. Bir nevi işletim sistemi yazma işlemi ile standart kütüphane yazma işlemi bot bağı gibi birbirine girmiştir (bootstrapping ifadesi bu yüzden kullanılır).

Standart kütüphaneden (nostdlib) ve işletim sistemi kesmelerinden hariç tutularak yazılan tüm programlar zaten birbirine benzer. Bu bağlamda, evet yalnızca D'de değil, tüm dillerde (derlenebilen) işletim sistemi yazmak teorik olarak mümkündür (yazılanlara göre pratik olarak da mümkün) ancak işi derlendiğinde hızlı kod üreten ikiliye bırakmak şimdiki teknoloji ile en iyi yoldur. Tabi ki bu ikili de C ve Assembly. C++ kullanmayı dahi önermeyenler var. Evet bazen sınıflardan nesne üretirken geçen zamana bile tahammül yoktur işletim sistemlerinde.

belki de araştırmayı şöyle yönlendirmek gerekebilir. Standart kütüphane kullanmadan döngüler, degisken ve dizi atamaları D'de ne kadar sürede gerçekleşiyor ve aynı işi yapan C programı için gereken toplam hesap süresi ne kadardır? Eğer D derleyicisi C 'dekine yakın kalitede bir kod üretmişse, C 'ye alternatif olarak yerini alabilir ancak yine assembly kullanmak gerekecek :)
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #5
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7468
Tekrar merhaba,

Geç dönüş yaptım biraz, kusura bakmayın. Problemin neden olduğunu anlayamadım ancak yeni pakette bazı iyileştirmeler yaptık. Yeni deb paketini

http://code.google.com/p/fuzuli/downloads/det…?name=fuzu…

adresinden indirip

sudo dpkg -i fuzuli_0.1-9_i386-ubuntu.deb

komutuyla bir kez daha dene istersen.

Fuzuli 'nin yeni paketinde daha çok optimizasyonlara odaklandık. Örneğin 1'den 24'e kadar olan Fibonacci sayılarını hesaplayan recursive Fibonacci fonksiyonu %30 daha hızlı çalışıyor. Hem internal interpreter hem de çekirdek kütüphanelerde iyileştirmeler var.

Bu forum D dili üzerine, ancak duyurular altında Fuzuli için bir başlık var diye sizlerle paylaşıyorum. Umarım bu paylaşımlar forumdaki arkadaşlara rahatsızlık vermiyordur.

Bol eğlenceler!
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #6
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7151
Salih Dinçer on 2012-07-31, 05:02:
Açıklamalar için çok teşekkürler...

Şimdi taşlar, yerine daha çok oturuyor. En kısa zamanda yeni sürümü denemek için (özellikle Linux ortamında) can atıyorum. Sanırım Temmuz başı güncelleme yapılmıştı. Bu durumda bir kaç gün sonra (Ağustos'un üçü gibi?) bir güncelleme söz konusu olabilir mi?

jbytecode:
Ayrıca bugün itibariyle Fuzuli 'nin artık toplama mekanizmasında büyük gelişmeler meydana geldi. Size verdiğim online interpreter üzerinden (henüz herkesin kullanımına açık değil) hızını test edebilirsiniz. Ayrıca artık toplama ile ilgili yazı (tabiki fuzulinin artık toplama mekanizması) http://stdioe.blogspot.com/2012/07/garbage-collection-mech… adresinde yer alıyor.
Oooov, işte bu harika oldu! Özellikle GC'nin kapatılıp açılması çok hoş. Hocam bilgilendirme için de teşekkürler, hemen denemeliyim...

selamlar,

nihayet bir ubuntu paketi çıkarabildik. bu paket performans ve dil özellikleri bakımından oldukça önemli. dille ilgili yeni planlar var ancak uygulama zaman alabilir. 

ubuntu paketi http://code.google.com/p/fuzuli/downloads/det…?name=fuzu… adresinden indirilebilir.
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #7
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7163
arkadaşlar, Fuzuli için hazırladığımız online interpreter yayinlanmistir.

http://fuzuliproject.org/index.php?node=tryonline

ilginiz için teşekkürler.
Bu mesaj jbytecode tarafından değiştirildi; zaman: 2012-08-01, 12:56.
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #8
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7161
az önce ubuntu 'nun resmi reposunda gdc-4.6 paketini gördüm ve açıklamasında "This compiler supports D language version 2." yazıyor. Bu sürümü test etmek isteyen arkadaşlar olabilir.

ben bir süre daha Fuzuli'yle meşgul olacağım sanırım :)
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #9
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7158
Merhabalar, hosbulduk!

D icin gnu compiler (gdc) yi denemistim. dmd yerine bu kullanildiginda sanirim linux icin uyumlu bir kod uretilir.
ancak gdc, dmd 'nin biraz gerisinden geliyor. yani d'nin 2 degil de 1.2 versiyonu implemente edilmis.

galiba Fuzuli icin paket yazmanin dogal yolu olan c++ 'ya devam etmeli.

ben programlama dillerini incelemekten keyif alirim. d dili de ilginc. ozellikle java yerine compile edilebilme ozelligi icin kullanolabilecek bir dil.

sicak karsilama icin tesekkurler.
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #10
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7154
hoş bulduk.

evet D dilini biraz inceledim. D dilinden kolaylıkla dinamik kütüphane çağırıldığını da gördüm. Aslında D dilinde yazılmış kütüphanelerin Fuzuli 'ye entegrasyonu üzerine çalışılabilir. Sanırım D derleyicisi object kod üretebiliyor. Eğer öyleyse D ve C object kodlar birlikte derlenebilir demektir. Bu da D 'de bir şekilde Fuzuli için kütüphane yazılabileceğini gösterir. Böylelikle harici olarak da D 'de yazdıklarınızı Fuzuli'ye bağlayabiliriz.
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #11
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 7151
Linux paketlerini idogan hazırlıyor. Artık ne zaman bu işe ayıracak vakti olursa o zaman çıkaracağız. Paketlerle ilgili gecikme yaşamamak için online interpreter 'ı kullanıma sunmayı düşünüyoruz. Online interpreter ile kodda bir değişiklik olduğu anda insanlara sunma imkanımız oluyor. Paketler ise daha stabil sürümler oluyor ve mutlaka bir gecikme içermek zorunda.
konu: Fuzuli Programlama Dili  ; forum:: Duyurular
jbytecode #12
Üye Tem 2012 tarihinden beri · 12 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 6948
Merhaba Salih,

foreach 'den sonra konulan block ifadesinin kafa karıştırması normal. Fuzuli 'de block ifadesinin kullanılmasının zorunlu olduğu tek yer fonksiyonlar. örneğin

(function myFunc (params a b)
   (block
      ..
      ..
      (return ...)
   )
)

for, while, foreach gibi ifadelerde kullanılmasına gerek yok. isteğe bağlı. ancak bir if ifadesinde eğer birden fazla iş yapılacaksa block zorunlu oluyor. Mesela aşağıdaki kod içinde block ifadesine gerek yok:

(if (= a 3)
   (print "eşit") 
)

Ancak koşulun doğru olması durumunda birden fazla iş yapılacaksa, block kullanılmalı. Mesela:

(if (= a 3)
   (block
      ....
      ....
   )
)

çünkü if iki farklı yapıda kullanılıyor. birinci if-then, ikincisi if-then-else. bu yapıların birbirine karışmaması için birden fazla satır için block kullanıldı.

Ayrıca bugün itibariyle Fuzuli 'nin artık toplama mekanizmasında büyük gelişmeler meydana geldi. Size verdiğim online interpreter üzerinden (henüz herkesin kullanımına açık değil) hızını test edebilirsiniz. Ayrıca artık toplama ile ilgili yazı (tabiki fuzulinin artık toplama mekanizması) http://stdioe.blogspot.com/2012/07/garbage-collection-mech… adresinde yer alıyor.

sevgiler.
Özel Karakterler:
Özel sorgulamalar

Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 19:46:48 (UTC -08:00)