メモ:Rのpackageとlibrary

この話、いつもソースを探し回るのでメモ。

注:よく分からないので訳は適当です。。信用しないでください。

A package is a directory of files which extend R, ...
(...snip...)
A package is not a library. The latter is used in two senses in R documentation.

  • A directory into which packages are installed, e.g. /usr/lib/R/library: in that sense it is sometimes referred to as a library directory or library tree (since the library is a directory which contains packages as directories, which themselves contain directories).
  • That used by the operating system, as a shared, dynamic or static library or (especially on Windows) a DLL, where the second L stands for ‘library’. Installed packages may contain compiled code in what is known on Unix-alikes as a shared object and on Windows as a DLL. The concept of a shared library (dynamic library on OS X) as a collection of compiled code to which a package might link is also used, especially for R itself on some platforms. On most platforms these concepts are interchangeable (shared objects and DLLs can both be loaded into the R process and be linked against), but OS X distinguishes between shared objects (extension .so) and dynamic libraries (extension .dylib).
    (https://cran.r-project.org/doc/manuals/r-devel/R-exts.html#Creating-R-packages)

Rを拡張するファイル群がひとつのディレクトリにまとまったものをpackageと呼ぶ。

packageはlibraryではない。後者はRのドキュメントでは2つの意味で使われる。

  • packageのインストール先となるディレクトリのこと。例えば、/usr/lib/R/libraryとか。この意味で、library directoryとかlibrary tree(なぜ「tree」なのかというと、libraryのディレクトリの下にpackageのディレクトリがあって、それぞれの下にさらにディレクトリがあるから)と呼ばれたりすることもある。
  • OSに使われている共有ライブラリ・動的ライブラリ・静的ライブラリ、あるいは、特にWindowsで使われるDLLのこと。インストールされたpackageには、UNIX系では共有オブジェクト、WindowsではDLLという形式で、コンパイルされたコードが含まれることがある。packageからリンク可能なコンパイル済みのコード群、という共有ライブラリ(OS Xでは動的ライブラリ)の概念は、Rにおいても使われる。いくつかのプラットフォームにでは、R本体についても使われている。多くのプラットフォーム間ではこのコンセプトは相互交換可能だ(動的オブジェクトとDLLはRのプロセスに読み込んでリンクすることができる)。しかし、OSXにおいては共有オブジェクト(.so)と動的ライブラリ(.dylib)は違う。

このあとの文章で、installとは何か、とかbuildとは何か、というあたりも軽く説明されている。用語がよく分からなくなったら読み返したい。