Thread overview
Çalışma Zamanı Kod Üretmek
May 28, 2017
İbrahim
May 30, 2017
Abdullah
May 30, 2017
İbrahim
Aug 07, 2017
kerdemdemir
May 28, 2017

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!

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

May 30, 2017

Aleykum selam,
Anahtar kelimeler: metaprogramming ve macro olması lazım.

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

May 30, 2017

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/limitations/. 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-possible-to-create-a-function-dynamically-during-runtime-in-c. İş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!

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

May 30, 2017

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

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

May 30, 2017

O zaman İbrahim derleme zamanında kod üretmek demiş olmalı. :)

Ali

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

May 31, 2017

Alıntı (İ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. (?))

Alıntı:

>

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.

Alıntı:

>

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

Ben öyle anlıyorum.

Alıntı:

>

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

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

August 07, 2017

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/scriptingConsole.h 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

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