SORU
15 AĞUSTOS 2013, PERŞEMBE


OS X Linux benzeyen, zayıf sembol takma ad ya da yakın bir eşdeğer?

Ben ne

Linux için paylaşılan kitaplıkları yazarken, tehcir, simge, görünürlük, PLT etc/VAR dikkat eğilimindedir.

Uygun olduğunda, aynı kütüphane fonksiyonları birbirlerini çağırmak PLT koçanları arama önlemek için çalışıyorum. Örneğin, paylaşılan bir nesne iki kamu görev - foo() bar() (ikisi de kullanıcı tarafından çağrılabilir) sağlar söylüyorlar. bar() işlevi, ancak, aynı zamanda foo() çağırır. Yani bu durumda ben ne bu

  1. _foo() _bar() özel görünürlüğü olan işlevlerini tanımlamak.
  2. foo() bar() _foo() _bar() sırasıyla zayıf takma ad tanımlar.

Bu şekilde, paylaşılan nesne kodu asla zayıf semboller kullanır. Sadece yerel işlevler, doğrudan çağırır. _bar() çağrıldığında, örneğin, _foo() doğrudan çağırır.

Ama kullanıcılar _* fonksiyonlar ve her zaman kullanıma karşılık gelen zayıf takma adlar farkında değil.

Nasıl ben bunu

Linux, bu aşağıdaki inşa: kullanılarak elde edilir

extern __typeof (_NAME) NAME __attribute__(weak, alias("_NAME"));

Sorun

Ne yazık ki, bu işe yaramazsa için OS X yok derin bilgi OS X veya ikili biçimlerde, ben de kurcaladım biraz ve buldum bir kaç örnek zayıf işlevleri (this one), ama bu pek aynı gibi bir sembol zayıf değil ama zayıf bir sembol, bir diğer ad için DSO yerel işlevi.

Olası çözüm...

Şimdilik, sadece tüm semboller küresel olan bu özellik makroları kullanarak uygulanan () devre dışı bıraktık ve varsayılan görünürlük var. Tek yol düşündüğüm için elde etmek için aynı anda tüm _foo fonksiyonları ile özel görünürlük ve ilgili foo fonksiyonları varsayılan görünürlük ve arama onların "gizli" karşılıkları.

Daha iyi bir yolu?

Ancak, kod baya bir değiştirilmesi gerekir. Bu nedenle gerçekten başka yolu yok sürece, oraya gitmek istemiyorum.

Kapatır X alternatif veya aynı semantiği/davranış kazanmanın en kolay yolu OS nedir?

CEVAP
2 ŞUBAT 2013, CUMARTESİ


Temel soru aslında "" -. roxygenize. Bu hiç sorun görmemişti.

Paket geliştirme roxygenizing yaklaşım için iyi bir sebep olsa da, Ben hala çok iyi bir sebep göremiyorumdeğiloraya gitmek için:

Daha az aşırı roxygenation için savunma

Sonuçta yardım sayfaları bakmak eğilimindedirson derecesıkıcı, sadece otomatik oluşturulur.Rd dosyaları değil, aynı zamanda işlenmiş bir sonucu. E. g.

  1. örnekler genellikle düşüktür, yorum içermeyen, genellikle iyi biçimlendirilmiş (, / yeni satır / .. boşluk kullanarak) değildir
  2. Matematiksel sorunları nadiren \eqn ile açıklanmıştır {} \deqn{}
  3. tarif{ .. } ve daha yüksek düzeyde benzer \biçimlendirme nadiren kullanılır

Bu yüzden mi? Çünkü

1) okuma ve roxygen yorum düzenleme çok daha fazla. "" en azından görsel olarak doyurucu olmayan hantal okuma ve düzenleme daha *.Rd dosyaları ESS veya (o. *başka bir IDE. Rstudio Rd yerleşik destek)

2) Eğer bu belgeler . kullanılır

otomatik olarak paket binası sonunda üretilen bir şeyi kontrol ediyorum

genellikle önemli bir şey olduğu da yazılmış R belgelerine değil considerung eğilimindedir (ama tüm dokümanlar R kodunuzu, daha doğrususadecebir yorum :-)

Tüm bunların sonucu: İnsanlar örtüden ya da bloglar, github gists bile işlevleriyle ilgili belgeleri yazmayı tercih ederim, youtube videoları ya ... yazma sırasında çok güzel bir yerdi ama. çok fazla kod kopuk ve eski ve tarihi (ve dolayısıyla, Google Arama üzerinden . kızışırsa ^strong>yanıltıcıkullanıcılarınız) -->Aynı yerde kod ve belgelere sahip roxygen orijinal motivasyon tamamen yenildi.

Roxygen seviyorum ve sürekli yeni bir işlev oluşturun anda kullanın... ve devam ediyorum ve bu benim görevim, bir paket değil gibi . uzun korumak ^strong>yadeğil ihraç etti. Verme,karar verdim bir kere Ben (ESS eşdeğer) çalıştırmak roxygenize()bir kez ve sonra küçük bir ekstrayük*sürdürmek.Rd çok iyi biçimlendirilmiş, kendi yorumlar (yazar olarak benim için) içerir, çok güzel örnekler var, kendi revizyon (git / svn / ...) tarih, vb kontrol dosyası.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gadgetgal38

    gadgetgal38

    9 HAZİRAN 2009
  • MkElite

    MkElite

    13 NİSAN 2012
  • spyib

    spyib

    9 Ocak 2007