Forum: D Programlama Dili RSS
D aralıkları C++'a eklenecek
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D aralıkları C++'a eklenecek
Eric Niebler'ın CppCon 2015 konuşması aralıkların ne kadar yararlı oldukları üzerine. Eric bu fikirlerin daha önce hangi dillerde kullanıldığını söylemekten çekinmiyor. Daha başından bu konuşmanın D'ci H. S. Teoh'un bir yazısındaki takvim programını C++'ta nasıl olacağı üzerine olduğunu söylüyor. Bu olanaklar ileride C++'a eklenecek.

  https://www.youtube.com/watch?v=mFUXNMfaciE

Reddit'teki konusu:

  https://www.reddit.com/r/programming/comments/3mwu4e/cppco…

Teoh'un asıl yazısı:

  http://wiki.dlang.org/Component_programming_with_ranges

Ali
Avatar
zekeriyadurmus #2
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
D dili de artık diğer dilleri etkilemeye başladı yani :)

Güzel bir haber :)

Zekeriya
Bilgi meraktan gelir...
zafer #3
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Benim pek hoşuma gitmedi. Aralıklar hakkında çok bilgim yok, ancak söylendiği gibi D diline güç katan bir özellik ise bunun başka diller tarafından kopyalanması D dilinin bu  alandaki farklılığını ortadan kaldıracaktır. Bu da ilerleryen zamanda D diline geçmenin ne artısı olacak sorusuna verilecek cevapları azaltacaktır.

Benim fikrim bu yönde ama tabi kimseye bu özelliği kendi diline aktarma diyemeyiz.
https://github.com/zafer06 - depo
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
zafer:
Benim pek hoşuma gitmedi.

Benim hoşuma giden tarafı, bir C++'çının C++'a eklenecek olan bir olanağın daha önce D'de hiç olmazsa denenmiş olduğunu açıkça söylemiş olması. C++11, C++14, vs. neredeyse tamamen C++'ı D'ye yaklaştırmış oluyor. Ancak, kimse D'nin adını anmıyor.

Tabii, bütün bu olanakların D'den geldiği iddia edilmiyor. Çoğu modern dil olanağı genelin malı. Herkes her dil ortamında konuşuyor, her dil de uygun gördüklerini alıyor.

D'nin aralıkları da bütünüyle Andrei'nin icadı değil. Benim de yeni öğrendiğime göre, aralıklar onlarca yıldır artık kullanımda olmayan dillerde bile varmış.

Aralıklar hakkında çok bilgim yok,

Temelde, C++'tan ve başka dillerden tanıdığımız iterator (erişici) soyutlamasının yerine kullanılan başka bir soyutlama. C++'ta bütün elemanları gezmek için topluluğun begin() ve end() işlevlerini çağırırız:
    foo(topluluk.begin(), topluluk.end());
D'de ancak gerekirse köşeli parantezleri kullanırız:
    foo(topluluk);    // gereken türler için foo(topluluk[]) 
begin() ve end()'in aksine, aralıklar tek nesne ile ifade edilirler. (Aynen begin() ve end()'in döndürdükleri erişicilerin bir yapı içinde bir araya geldikleri gibi...) Bu özellikleri, algoritmaların sonuçlarının zincirleme bağlanmasına ve bu sayede elemanların teker teker işlenebilmelerini sağlar (UFCS'ten de yararlanarak). Örneğin, foo'nun ürettiği elemanların değerleri ek olarak ikiyle de çarpılabilir:
    aralık.foo.map!(a => a * 2)
ancak söylendiği gibi D diline güç katan bir özellik ise
Aralıklar çok yararlı.
bunun başka diller tarafından kopyalanması

Walter Bright aşağıdaki konuda aralıkların geçmişine de değindi:

  http://forum.dlang.org/thread/hatpfdftwkycjxwxcthe@forum.d…

İşin ilginci, aralıkları C++'a ilk öneren kişi eski D'cilerdenmiş: Matthew Wilson. Yukarıdaki konuda da söylediğim gibi, ben C++'ı takip ettiğim zamanlarda böyle birisini hatırlıyordum. Aralıkların yararlarını anlatıyordu ve C++'a eklenmeleri gerektiğini söylüyordu.

Walter, fikirlerin D ortamında piştiğini ama Matthew'un kendi gerçekleştirmesini C++'ta yazdığını söylüyor.

Yukarıdaki tartışmaya Eric Niebler'ın kendisi de katıldı ve C++'a gelecek olan aralıkların D'ninkilerden çok Boost'unkilere benzediğini söyledi.

D dilinin bu  alandaki farklılığını ortadan kaldıracaktır. Bu da ilerleryen zamanda D diline geçmenin ne artısı olacak sorusuna verilecek cevapları azaltacaktır.

Kesinlikle öyle. Ancak, D biraz hastalık gibi. :) Bir kere kullanan bir daha başka dillere (başta C++) geçmek istemiyor. :) Manu Evans aşağıda H. S. Teoh'a katılıyor:

  http://forum.dlang.org/post/mailman.646.1443862705.22025.d…

İkisi de kariyerlerinin kötü yönde etkilendiğini çünkü artık C++ yazmak istemediklerini söylüyorlar. :D

Ali
zafer #5
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Ancak, D biraz hastalık gibi. :) Bir kere kullanan bir daha başka dillere (başta C++) geçmek istemiyor. :)

İngilizce konusunda daha çok çalışmam gerek, neyse, bu yazdıklarına kesinlikle katılıyorum Ali. Aynı durum bende de var çünkü, D dilinden bir ara uzak durmaya çalışsamda yine dönüp dolaşıp geri geliyorum. Bazı kişisel projelerim var bunları C# gibi çok daha oturmuş ve olanağı olan bir dilde yapmak varken kendimi D ile uğraşırken buluyorum. İş yerimdeki bazı projelerde de D kullanmak istiyorum ama henüz MSSQL için bir çözüm bulamadım.

Kısaca gerçekten D ile kodlamanın kelimelerle anlatılamayacak insana keyif veren farklı bir yanı var.Umarım dilin olanakları biraz daha genişlerde daha ciddi projelerde kullanma imkanına kavuşuruz.
https://github.com/zafer06 - depo
nurullahisrgan #6
Üye Ock 2015 tarihinden beri · 76 mesaj · Konum: Mardin, Nusaybin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aralıklar ile de C++ biraz daha iyi olabilir diye düşünüyorum. Aslında bir de foreach döngüsü eklense daha güzel olacak...
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
C++11'le birlikte range-based for da gelmişti. Ayrı bir anahtar sözcük getirmediler; for'un farklı bir kullanımından yararlandılar:

  http://en.cppreference.com/w/cpp/language/range-for

Ali
nurullahisrgan #8
Üye Ock 2015 tarihinden beri · 76 mesaj · Konum: Mardin, Nusaybin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler, bu kullanıma bakacağım acaba bu yeniliklerin daha fazlasını nereden takip edebiliriz.
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Wikipedia'dan başlanabilir ama bu konuda başka kaynaklar da bulunuyor:

  https://en.wikipedia.org/wiki/C%2B%2B11

Ali
nurullahisrgan #10
Üye Ock 2015 tarihinden beri · 76 mesaj · Konum: Mardin, Nusaybin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #7
acehreli on 2015-10-17, 12:57:
C++11'le birlikte range-based for da gelmişti. Ayrı bir anahtar sözcük getirmediler; for'un farklı bir kullanımından yararlandılar:

  http://en.cppreference.com/w/cpp/language/range-for

Ali

Ali hocam bir de bu sitede bulujnan kodlar hangi derleyici derlenmiş. Sanırım g++ 4.9.2 C++11 ve C++14'ü desteklemiyor.
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu dilleri ne kadar desteklediklerini şu sayfalarda görebilirsin:

  https://gcc.gnu.org/projects/cxx0x.html
  https://gcc.gnu.org/projects/cxx1y.html

Orada da bahsedildiği gibi, -std seçeneğini kullanmak gerekiyor.

Ali
nurullahisrgan #12
Üye Ock 2015 tarihinden beri · 76 mesaj · Konum: Mardin, Nusaybin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Bu dilleri ne kadar desteklediklerini şu sayfalarda görebilirsin:

  https://gcc.gnu.org/projects/cxx0x.html
  https://gcc.gnu.org/projects/cxx1y.html

Orada da bahsedildiği gibi, -std seçeneğini kullanmak gerekiyor.

Ali
Çok teşekkürler..
kerdemdemir #13
Üye Eyl 2013 tarihinden beri · 96 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Arkadaşlar bu Eric Niebler'ın aralıklarını bir açık kodlu projemde deneme fırsatım oldu

Proje şu : https://github.com/kerdemdemir/OpenCVSpeakerFinder
Rangleri en çok kullandığım dosyada şu olacak https://github.com/kerdemdemir/OpenCVSpeakerFinder/blob/ma… .

Bir kısım kodu aşağıyada kopyalıyorum.

Diyeceğim şuki D'nin dilin içine inşa edilmiş aralıkları ile baş etmesi bana çok mümkün gelmedi.

struct Reader
{
    static constexpr size_t MAX_FILE_SIZE = 20000000;
 
 
    using ReaderIter = std::vector< double >::iterator;
    using ReaderView = ranges::counted_view< ReaderIter, int >;
 
    std::vector<double> rawData;
 
    std::array<size_t, NUMBER_OF_PEOPLE> trainSizes;
    size_t trainUpLimit;
 
    size_t fileSize;
 
    Reader () : trainSizes{0}
    {
        trainUpLimit = 20000000;
        rawData.resize(MAX_FILE_SIZE);
    }
 
    ReaderView getView()
    {
        return ranges::counted_view< ReaderIter, int >( rawData.begin(), fileSize);
    }
 
    ReaderView
    openWavFile(std::string fileName)
    {
        SF_INFO soundFileInfo;
        SNDFILE* soundFile ;
 
        int state = fileName2State(fileName);
        if ( trainSizes[state] >  trainUpLimit )
        {
            fileSize = 0;
            std::cout << "Up Limit for speaker " << state  << std::endl;
            return getView();
        }
 
        soundFileInfo.format = 0;
        soundFile = sf_open(fileName.c_str(), SFM_READ , &soundFileInfo);
 
 
        if ( sf_error (soundFile)  != 0)
        {
            std::cout << "Problem with input wav file" << std::endl;
            fileSize = 0;
        }
 
        fileSize = sf_read_double(soundFile, rawData.data(), MAX_FILE_SIZE);
        //for ( size_t i = 0; i < fileSize; i++)
            // rawData[i] *= 3.3;
 
        if (fileSize <= 0)
        {
            std::cout << "Problem while reading the file" << std::endl;
            fileSize = 0;
        }
 
        trainSizes[state] += fileSize / (sampleRate / 1000) ;
 
        return getView();
    }
};
 
 
class FeatureList
{
public:
 
    FeatureList()
    {
        inputSimple = new_fvec(hopSize);
        phaseVocedor = new_aubio_pvoc( win_s, hopSize);
        inputComplex = new_cvec(win_s);
    }
 
    ~FeatureList()
    {
        del_cvec (inputComplex);
        del_fvec(inputSimple);
        del_aubio_pvoc(phaseVocedor);
    }
 
    int start ( const std::string& input )
    {
        auto readView = reader.openWavFile(input);
 
        if ( readView.empty())
            return -1;
 
        auto readerChunks = readView | ranges::view::chunk(hopSize);
 
        for ( auto extractor : extractors )
            extractor->getFeatures().resize( readerChunks.size() );
 
        RANGES_FOR( auto chunk, readerChunks )
{
Bu mesaj kerdemdemir tarafından değiştirildi; zaman: 2016-07-24, 18:26.
acehreli (Moderatör) #14
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bazı D'ciler C++'taki kullanımını sevdiklerini söylüyorlardı ame ben hiç bakmadım. (Zaten artık C++'tan tamamen kopmuş olabilirim; çünkü şu anda D kullanan bir yerde çalışıyorum ve C++ deneyimim C++11 öncesine dayanıyor.)

Umarım C++ da aralıkları iyice benimser ve gerekiyorsa bunun için dil değişiklikleri getirir.

Ali
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-08-23, 18:17:12 (UTC -07:00)