2011-12-25 8 views
21

, bu üç kavram arasındaki fark nedir?bir sarıcı bağlama ve bir liman arasındaki fark nedir? Yazılım taşınabilirliği kapsamında

Örneğin, ncurses kitaplığını kullanmak istiyorum, orijinal ncurses kitaplığı C ile yazılıyor, ancak C++ uygulamasında yazıyor, sonra "ncurses wrapper", "ncurses için bağlamalar" ve " ncurses bağlantı noktası. Hangisini kullanmalıyım?

her birinin avantajları ve dezavantajları nelerdir?

+0

Daha fazla bağlam vermediğiniz sürece neden bahsettiğinizi söylemek imkansız. –

cevap

36

wrapper, işlevselliğini geri dönüştürmek için başka bir arabirim ile diğer kodun üstünde yer alan bir koddur. Bu genellikle aynı dilde yazılmış bir arabirimi ifade eder. Aynı zamanda insanlar teknik olarak ne anlama geldiyse sarıcı (bazen dahil) olduğunu söyleyecektir.

Artıları:

  • Orijinal
  • Sarmalayıcıdan aynı dilde var artırmak veya tam yeniden yazmak gerek kalmadan işlevsellik yeniden kullanın.
  • Önemsiz güncellemeler kaynak kütüphane değişiklikleri gerçekleştirmek için
  • Nispeten hızlı. onlar işlevleri/sınıfların beklenen giriş/çıkışları değiştirerek geriye uyumluluk kırdı sürece muhtemelen sadece yeni fonksiyonlar bağlamak gerekir.

Eksileri:

  • bütün bir kütüphaneyi tamamlayan son derece tekrarlayan olabilir

A binding diğer kodun üstüne oturur başka bir kod biraz bu sefer bağlamaları hariç işlevselliğini geri dönüşüm olduğunu Bağladıkları şeyden farklı bir dilde yazılır. Önemli bir örnek, QT için python bağlanması olan PyQt'dir.

Artıları:

  • seçtiğiniz dile başka bir dilden işlevselliğini getirin.
  • Bağlantı noktasına göre nispeten hızlı
  • Sarma işleminde olduğu gibi aynı düzeyde önemsiz değişikliklere de ihtiyaç duyulur - Muhtemelen işlevlerin beklenen giriş/çıkışlarını değiştirerek geriye dönük uyumluluğu kırmadıkça yalnızca yeni işlevler/sınıflar sarmanız gerekecek/sınıflar.

Eksileri: Muhtemelen oldukça büyük bir performans isabet alıyorsun bir sarıcı

  • iki ucunda
  • üzerinde yorumlanmış dili kapsayan özellikle herhangi sarıcı olarak Tıpkı tekrarlayan

    • Eğer farklı bir ortamda çalışması için bazı kod çevirmek zaman bir Port olduğunu. Ortak analojiler, XBox için çıkarılan oyunları içerir ve daha sonra PS3 için yayınlanır.

      Artıları: kod çalışır NASIL Eğer öyle değil sadece ne, sen aşina olacak

    • yetersizliklerini gördüğünüz gibi

      • size kod tabanına iyileştirmeler yapmak için fırsat verir.

      Eksileri: Bugüne kadar

      • zaman açısından en uzun çözüm/
      • Bir dilde kaynak kütüphane ihtiyacı mevcuttur olursa olsun işlevselliği olduğundan emin olmak için gereken bir tam yeniden yazma gerektirir senin hedef port dili veya ihtiyaç duyulan işlevselliği sarmakla sonuçlanırsınız (ve potansiyel olarak amacı yener.)
      • Kaynak kütüphanesi her güncellendiğinde, yaptığınız değişiklikleri veya geride kalma riskini de çevirerek güncellemeniz gerekir.
    +0

    Harika bir açıklama! – jweyrich

    +0

    Sarıcıda önemli bir performans isabet var mı? Sarıcıyı, performansın önemli olduğu bir kıyaslama uygulamasında kullanmalı mıyım? –

    +0

    Her sarıcı bir "performans isabeti" dir, çünkü verileri başka bir işleme etkin bir şekilde aktarıyor ve geri dönmesini bekliyorsunuz. Bunun tersi, daha hızlı bir şekilde bir şeye uzanıyorsanız, kazanım kazanımlarla dengelenebilir! Akla gelen bir örnek, gitmekte yazılan Hekad projesinin, C regex sarıcısını yürütmek için bir lua yorumcusu içermesidir. Bu, yerel regex işlemcisi ATM'sinden daha hızlıdır. – odgrim

    1

    Which one should I use?

    Sen bindings to ncurses kullanmalıdır. Bir ciltleme, bir uygulama, kütüphane, vb. Özgün bir kaynaktan başka bir dil ile kullanabileceğiniz orijinalden farklı bir özel verdir. Sık yapılan örnekler arasında pencere yöneticileri bulunmaktadır (gtk + = C, gtkmm = C++; Qt = C++, PyQt = Python; ecc.). Bununla birlikte, insanlar genellikle sarmalayıcı veya bağlantı noktası gibi başka kelimeler kullanırlar, bu yüzden kendinizi şaşkınlaştırmak kolaydır.

    İlgili konular