Home Explore Blog CI



neovim

59th chunk of `runtime/doc/luaref.txt`
8e501d65367248cc684d0cd3b0b20201530eee8e646229fe0000000100000fa2
 stored in `package.cpath`. If that also fails,
        it tries an `all-in-one` loader (see below).

        When loading a C library, `require` first uses a dynamic link facility
        to link the application with the library. Then it tries to find a C
        function inside this library to be used as the loader. The name of
        this C function is the string `"luaopen_"` concatenated with a copy of
        the module name where each dot is replaced by an underscore. Moreover,
        if the module name has a hyphen, its prefix up to (and including) the
        first hyphen is removed. For instance, if the module name is
        `a.v1-b.c`, the function name will be `luaopen_b_c`.

        If `require` finds neither a Lua library nor a C library for a module,
        it calls the `all-in-one loader`. This loader searches the C path for
        a library for the root name of the given module. For instance, when
        requiring `a.b.c`, it will search for a C library for `a`. If found,
        it looks into it for an open function for the submodule; in our
        example, that would be `luaopen_a_b_c`. With this facility, a package
        can pack several C submodules into one single library, with each
        submodule keeping its original open function.

        Once a loader is found, `require` calls the loader with a single
        argument, {modname}. If the loader returns any value, `require`
        assigns the returned value to `package.loaded[modname]`. If the loader
        returns no value and has not assigned any value to
        `package.loaded[modname]`, then `require` assigns `true` to this
        entry. In any case, `require` returns the final value of
        `package.loaded[modname]`.

        If there is any error loading or running the module, or if it cannot
        find any loader for the module, then `require` signals an error.

package.cpath                                                    *package.cpath*
        The path used by `require` to search for a C loader.

        Lua initializes the C path `package.cpath` in the same way it
        initializes the Lua path `package.path`, using the environment
        variable `LUA_CPATH` (plus another default path defined in
        `luaconf.h`).

package.loaded                                                  *package.loaded*
        A table used by `require` to control which modules are already loaded.
        When you require a module `modname` and `package.loaded[modname]` is
        not false, `require` simply returns the value stored there.

package.loadlib({libname}, {funcname})                       *package.loadlib()*
        Dynamically links the host program with the C library {libname}.
        Inside this library, looks for a function {funcname} and returns this
        function as a C function. (So, {funcname} must follow the protocol
        (see |lua_CFunction|)).

        This is a low-level function. It completely bypasses the package and
        module system. Unlike `require`, it does not perform any path
        searching and does not automatically adds extensions. {libname} must
        be the complete file name of the C library, including if necessary a
        path and extension. {funcname} must be the exact name exported by the
        C library (which may depend on the C compiler and linker used).

        This function is not supported by ANSI C. As such, it is only
        available on some platforms (Windows, Linux, Mac OS X, Solaris, BSD,
        plus other Unix systems that support the `dlfcn` standard).

package.path                                                      *package.path*
        The path used by `require` to search for a Lua loader.

        At start-up, Lua initializes this variable with the value of the
        environment variable `LUA_PATH` or with a default path defined in
        `luaconf.h`, if the environment variable is not defined. Any `";;"` in
        the value of the environment variable is

Title: Lua Module Loading Details and Package Variables
Summary
This section continues describing how Lua's `require` function loads modules, covering the 'all-in-one' loader and the process of linking with C libraries. It explains how `require` determines the C function name (`luaopen_...`) and how it assigns values to `package.loaded` after a successful load. Error handling during loading is also mentioned. The section then details the `package.cpath` and `package.loaded` variables, along with the low-level function `package.loadlib` for directly linking C libraries. Finally, it introduces `package.path`.