Dostlar, selam. Geçenlerde kendi kullandığım, hafif bir veritabanı yönetim aracı yazmaya karar verdim. "SQL sorgularını yazıp çalıştıracağım basit bir textarea yeter" diye düşünmüştüm. Ne kadar safmışım!
Syntax highlighting olsun, auto-indent olsun, satır numaraları olsun... Kullanıcı deneyimi için bunlar şart. Araştırmaya başladım ve karşıma hep aynı isim çıktı: Scintilla (ve onun ScintillaNET gibi wrapper'ları). "Tamam," dedim, "bunu entegre ederim, biter."
Meğerse iş o kadar basit değilmiş. Projem .NET Core üzerinde ve Scintilla'nın native bileşenleriyle uğraşmak, platform bağımsızlığı fikrini bir anda zora soktu. Şu hatayı görmekten bıktım usandım:
C#:
System.DllNotFoundException: Unable to load DLL 'scintilla.dll'
Dependency'ler, native DLL'ler, doğru sürüm, 32/64 bit derdi... Asıl amacım olan "veritabanı işlemleri"ni geliştireceğime, günlerce bu editör bileşeninin doğru çalışması için uğraştım. StackOverflow'da bile herkesin farklı bir çözümü vardı, hiçbiri tam olarak benim ortamımda çalışmadı.
Bir an, "Yeter be, kendi basit syntax highlighter'ımı yazayım!" diye isyan ettim. Aklıma şöyle bir şey geldi:
C#:
// Kelimeleri boyayayım bari dedim...
textBox.Text = Regex.Replace(textBox.Text, @"\b(SELECT|FROM|WHERE)\b", "[COLOR=BLUE]$0[/COLOR]");
// Sonuç: Berbat bir performans ve karmaşa!
Ama bu sefer de performans, doğruluk ve bakım maliyeti korkunç olacaktı. Scintilla gibi bir devin yıllar içinde geliştirdiği özellikleri (paren matching, code folding) tekrar yazmak, saçmalıktı.
Şu an için Scintilla'ya bağlı kaldım ve native DLL'leri projeye doğru şekilde paketleyerek bir çözüm buldum. Ama içimde hep bir ukde kaldı. Kendi basit aracım için bile bu kadar ağır bir kütüphaneye bağımlı olmak zorunda mıyım?
Siz bu tarz bir "editor/IDE component" ihtiyacınız olduğunda ne yapıyorsunuz? Hafif, platform bağımsız, C# ile kullanılabilir başka alternatifler var mı? Yoksa "oldu mu canım" deyip AvalonEdit gibi başka bir devin kollarına mı atlamalıyım? Fikirlerinizi bekliyorum!