ekinakyurek / bilsoz

Türkçe Bilişim Sözlüğü Uygulaması
MIT License
5 stars 1 forks source link

Daha iyi bir Make yöntemi #1

Open ekinakyurek opened 5 years ago

ekinakyurek commented 5 years ago

Hızlı olması açısından sözlük BilSoz.cpp içinde sabit ve statik bir değişken olarak tanımlanmıştır*. Bunun için BilSoz.cpp kodu bilsoz.tsv sözlük dosyasından Julia betiği kullanılarak oluşturulmaktadır. Bu adım yerine Makefile içinde BilSoz.cpp oluşturma adımı C++ kodu ile eklenebilir.

*: Bu yanlış bir tercih olabilir. Önerilere açığım.

AhmetCanSolak commented 5 years ago

Selam @ekinakyurek ,

  1. bilsoz.tsv dosyasi su anda 88.3KB, bu dosyayi bu boyutlarda kalacak ise static degiskende sozlugu tanimlamakta sorun olmaz, fakat daha buyuk bir kelime dagarcigi istersen bu yontemi degistirmeyi tavsiye ederim.

  2. Julia I/O benchmark'i yapmadim daha once, ama .tsv dosyasindan .cpp dosyasi olusturmak C++ ile implement edilince en az suan ki kadar hizli olacaktir. Cok daha hizli olacaginin garantisini veremem.

  3. C++ dilinde map<> yapisi self-balancing BST olarak implement edildigi icin boyle bir degiskeni olusturmak daha uzun zaman alir unordered_map<> kullanmaya nazaran. Ikinci yontem hashmap kullanilarak implement edildigi icin her yeni eleman ekleme kompleksitesi O(1) olacaktir O(logn) yerine. https://github.com/ekinakyurek/BilSoz/blob/0a7d5da548bb8a41cf2852f316b7f9f214f97693/include/bilsoz/BilSoz.hpp#L12

  4. Gercekten cok hizli I/O elde etmek icin harika bir yol binary dosya okumak. Elindeki dosyayi bir binary dosyaya donusturup onu okuyarak cidde performans kazanclari saglanabilir. Ayrica istream::read sayesinde bir array yapisi icine de okuyabilirsin binary dosyalari direk, misal kelimeler ve tanimlar icin birer dosya yaparsan hizlandirabilir.

Projende basarilar,

ekinakyurek commented 5 years ago
  1. Şimdilik varsayalım ki dosya boyutu hep küçük kalacak.

  2. .tsv'den .cpp oluşturma adımı sadece compilation'da ya da daha önce gerçekleşecek. O sebeple onun hızlı ya da yavaş olması'ndan ziyade herhangi bir şeye dependency'si olmaması daha önemli. Benim yapamadığım kısım bunu otomatik makefile ile yapmak.

  3. Bunu değiştirdim, çok teşekkürler

  4. Evet bu özellikle 1. varsayım olmadığında düşünülebilir. Ama şimdilik küçük kendi kendine yeten (self-contained) bir uygulama olsa daha iyi olur.

İkinci maddeyi biraz daha açayım. Şuan 'bilsoz.tsv` dosyası update olduktan sonra, programı tekrar build etmek için yaptığım adımlar ve problem.

cd src/
julia createclass.jl // Burada BılSoz.cpp update oluyor. 
 //Ben bu adımı make'in içine almak istiyorum, ve Julia bağımlılığı olmasın istiyorum.
cd ..
make clean
make
AhmetCanSolak commented 5 years ago

Julia bagimliligini kaldirmak ana amacin. Bunun icin ya dedigin gibi bir C++ programi yazilabilir kucuk, yada makefile icerisinde shell komutlariyla implement edebilirsin. Birinci yolu tercih ediyorsan musait zamanda sana PR acabilirim.

Bir onemli konu da auto-generate edilen hicbir seyi versiyon kontrolde tutmamak. Implementasyonu degistirince reponu ona gore de update etmeni tavsiye ederim.

ekinakyurek commented 5 years ago

Tam olarak birinci yolu istiyorum, ve makefile’da bu iş sorunsuz bir şekikde yürüsün istiyorum :) Süper olur PR açarsan.

İkinci dediğin zaten aklımdaydı. Henüz birinci yolu yapamadığım için .cpp dosyasını mecburen repo’ya koymam gerekti.

On Tue, May 21, 2019 at 12:22 PM Ahmet Can Solak notifications@github.com wrote:

Julia bagimliligini kaldirmak ana amacin. Bunun icin ya dedigin gibi bir C++ programi yazilabilir kucuk, yada makefile icerisinde shell komutlariyla implement edebilirsin. Birinci yolu tercih ediyorsan musait zamanda sana PR acabilirim.

Bir onemli konu da auto-generate edilen hicbir seyi versiyon kontrolde tutmamak. Implementasyonu degistirince reponu ona gore de update etmeni tavsiye ederim.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/ekinakyurek/bilsoz/issues/1?email_source=notifications&email_token=ADVGX4JJVECYWGOSWSR6ZVDPWQOURA5CNFSM4HOD3XZKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODV4OCEI#issuecomment-494461201, or mute the thread https://github.com/notifications/unsubscribe-auth/ADVGX4OKE7DEAQP43MG4P2LPWQOURANCNFSM4HOD3XZA .