Forum: Diğer Konular RSS
Çalışma Zamanı Kod Üretmek
İbrahim #1
Üye Eki 2015 tarihinden beri · 153 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Çalışma Zamanı Kod Üretmek
Selamün Aleyküm, hayırlı Ramazanlar;

Çalışma zamanı kod üretmek tam olarak ne işe yarıyor? Niçin çalışma zamanında kod üretmek isteyelim? C / C++ dillerinde bu iş tam olarak nasıl yapılabilir? Teşekkürler!
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4508 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Biraz daha açar mısın? Kaynak koddan bahsetmiyorsun herhalde değil mi?

Çalışma zamanında derlenmiş kod üretmeye örnek olarak JIT derleme (just-in-time compiling) var. Onun iki yararı: Hiç çağcrılmayan kodu derlememiş oluyor, ve derlemeyi asıl kullanıma göre yapabiliyor. Örneğin, eniyileştirmeleri çalışan koda bakarak uygulayabiliyor.

Ali
Abdullah #3
Üye Ağu 2015 tarihinden beri · 48 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aleykum selam,
Anahtar kelimeler: metaprogramming ve macro olması lazım.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4508 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
O zaman İbrahim derleme zamanında kod üretmek demiş olmalı. :)

Ali
İbrahim #5
Üye Eki 2015 tarihinden beri · 153 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hayır, makrolardan ve metaprogramming'den bahsetmiyorum. Çalışma zamanında kod üretimini şöyle açıklayayım; şimdi Apple, iOS uygulamalarında statik kod istiyor, çalışma zamanında üretilen kodlar vs. kabul etmiyor. Misal olarak Xamarin dökümanında ilk başlık altında ve 'No Dynamic Code Generation' başlığı altında anlatmış: https://developer.xamarin.com/guides/ios/advanced_topics/l…. Bununla beraber eğer kütüphanelerimiz varsa bunları dinamik (.so) değil statik (.a) olarak bağlamalıymışız. Paylaşımlı kütüphanelerin (shared libraries) JIT derleme mantığıyla ne alakası olabilir ki? C / C++'da dinamik kod üretimi veya çalışma zamanı kod üretimi şurada bahsedilmiş: https://stackoverflow.com/questions/11016078/is-it-possibl…. İşte bunu soruyorum, Apple'ın istemediği şekilde dinamik kod üretimi JIT mantığı mıdır? C / C++'da dinamik kod üretimi gerçekten Stackoverflow'da gösterilenlerle yapılabilir mi? Ya da daha iyi bir yolu var mı? Teşekkürler!
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4508 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İbrahim:
'No Dynamic Code Generation' başlığı altında anlatmış

Mono/.NET ile karşılaştırıyorlar ve onun aksine, yalnızca baştan derlenmiş kod kabul ettiklerini söylüyorlar.

Bildiğim kadarıyla Java ortamlarında da öyle: Kod ilk çalıştırıldığında derlenir. Sanırım bunun yararı, Java programlarının her ortamda çalışabilmeleri. Üzerinde Java ortamı bulunan her platform Java programlarını çalışma zamanında kendi işlemcisinin anladığı dile derler.

Xamarin bunu kabul etmiyormuş. (Bir ihtimal, güvenlik nedeniyle; ne kodun işleyeceğini başından bilmek istiyor olabilirler. (?))

Paylaşımlı kütüphanelerin (shared libraries) JIT derleme mantığıyla ne alakası olabilir ki?

Evet, ilgileri yok. Paylaşımlı kütüphaneler de derleme zamanında oluşturulmuştur.

Apple'ın istemediği şekilde dinamik kod üretimi JIT mantığı mıdır?

Ben öyle anlıyorum.

C / C++'da dinamik kod üretimi gerçekten Stackoverflow'da gösterilenlerle yapılabilir mi? Ya da daha iyi bir yolu var mı? Teşekkürler!

Sistem dillerinde herşey yapılabilir ama benim deneyimim yok.

Ali
kerdemdemir #7
Üye Eyl 2013 tarihinden beri · 120 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Eger QT gibi bir ortamin varsa QScriptingEngine'e bakmani tavsiye edebilirim. C++ programlari icinde javascript kullanarak dinamik kod derlenip calistirilabiliyor.

Ornek olarak benim projemdeki

https://github.com/kerdemdemir/sharpEar/blob/master/script… classina. bakabilirsin.

C++ siniflarinda slot olarak belirletigim methodlari cagirabiliyordum. Ve tezimi bu sayede bitirebildim cunku algoritmam uzun suruyordu ve 1000 kere denemi istemisti hocam, Bin kere bir yerlere tiklayip beklemektendense bende C++ fonksiyonlarimi java script ile cagirilabilir yapmistim. Asagida gordugun tamamen java script kodu  "Room.insertSound" gibi cagrilarsa benim C++ da bulunan fonksiyonlarim. Bunu calisma zamaninda bir widgetdan aliyordum.

Room.reset();
radius = 1000
for ( i = 0; i < 1000; i++)
{
    angle = 50 - Math.floor(Math.random() * 100);
    radiusOffSet = 500 - Math.floor(Math.random() * 1000);
    angleOffSet = 40 - Math.floor(Math.random() * 80);
    if ( angleOffSet < 30 && angleOffSet > -30  )
        angleOffSet = 30;
    Room.insertSound ( radius, angle, "D:\\speakerWavs\\testAndValidation\\f1rsenum.wav", "Source");
    noiceAng =  angle + angleOffSet;
    if ( noiceAng <= -90 )
     noiceAng = -85;
    else if ( angleOffSet >= 90)
        noiceAng = 85;
    noiceRad =  radius + radiusOffSet;
    if ( noiceRad <= 0 )
        noiceRad = 100;
    else if ( noiceRad >= 2000 )
        noiceAng = 1900;
    Room.insertSound ( noiceRad, noiceAng, "D:\\speakerWavs\\testAndValidation\\m3rsenue.wav", "Noice");
    Room.listen(radius, angle);
    Dialog.setSpeakerTracking( true );
    Dialog.setLookAngle( angle );
    Dialog.setForLocationOnly( true );
    Room.startBeamforming();
}

Javascript ve QT tek opsiyonun degil bu arada LUA, python gibi dinamik dillere baglanabilir ve elindeki scripti calisma zamaninda bu script dilleri araci ile derleyebilirsin.

Umarim sorunun disina cikmamisimdir

Saygilar
Erdem
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
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-10-18, 02:24:57 (UTC -07:00)