Lesson 12-Bun.js Source Code Architecture

Bun.js Core Module Source Code

JavaScriptCore Engine Integration and Optimization

Bun’s Integration with JavaScriptCore:

// Pseudo-code showing how Bun embeds JavaScriptCore
#include <JavaScriptCore/JavaScript.h>

class BunVM {
private:
    JSGlobalContextRef context;

public:
    BunVM() {
        // Create JavaScript execution context
        context = JSGlobalContextCreate(nullptr);

        // Inject Bun global APIs
        JSObjectRef globalObject = JSContextGetGlobalObject(context);
        injectBunAPIs(globalObject);
    }

    ~BunVM() {
        JSGlobalContextRelease(context);
    }

    void injectBunAPIs(JSObjectRef global) {
        // Implement Bun global objects (e.g., process, Buffer)
        JSStringRef processName = JSStringCreateWithUTF8CString("process");
        JSObjectRef processObj = createProcessObject();
        JSObjectSetProperty(context, global, processName, processObj, kJSPropertyAttributeNone, nullptr);
        JSStringRelease(processName);
    }

    JSValueRef evaluateScript(JSStringRef script) {
        // Execute JavaScript code
        JSValueRef exception = nullptr;
        JSValueRef result = JSEvaluateScript(context, script, nullptr, nullptr, 0, &exception);

        if (exception) {
            handleException(exception);
            return JSValueMakeUndefined(context);
        }
        return result;
    }
};

Key Optimization Techniques:

  1. Just-In-Time (JIT) Compilation Optimization:
    • Customized optimizations based on JavaScriptCore’s JIT compiler
    • Fast-path optimizations for hot code
    • Improved inline caching (IC) implementation
  2. Memory Management Optimization:
    • Custom memory allocator to reduce GC pressure
    • Object pool technique for reusing frequently created objects
    • Optimized memory access patterns

Module System Source Code Implementation

ESM Loader Core Logic:

// Pseudo-code showing ESM module loading process
class ESMLoader {
public:
    JSValueRef loadModule(const std::string& specifier, JSValueRef referrer) {
        // 1. Resolve module path
        std::string resolvedPath = resolveSpecifier(specifier, referrer);

        // 2. Check cache
        if (moduleCache.has(resolvedPath)) {
            return moduleCache.get(resolvedPath);
        }

        // 3. Read file content
        std::string sourceCode = readFile(resolvedPath);

        // 4. Parse to AST
        ASTNode* ast = parseToAST(sourceCode);

        // 5. Create module record
        ModuleRecord* module = createModuleRecord(resolvedPath, ast);

        // 6. Compile to bytecode
        Bytecode* bytecode = compileToBytecode(ast);

        // 7. Execute module
        JSValueRef moduleNamespace = executeModule(bytecode);

        // 8. Cache module
        moduleCache.set(resolvedPath, moduleNamespace);

        return moduleNamespace;
    }
};

CommonJS Compatibility Layer Implementation:

class CommonJSLoader {
public:
    JSValueRef loadModule(const std::string& filePath) {
        // 1. Check if already loaded
        if (moduleCache.has(filePath)) {
            return moduleCache.get(filePath);
        }

        // 2. Create module object
        JSObjectRef moduleObj = JSObjectMake(context, moduleClass, nullptr);
        JSObjectRef exportsObj = JSObjectMake(context, nullptr, nullptr);
        JSObjectSetProperty(context, moduleObj, JSStringCreateWithUTF8CString("exports"), exportsObj, kJSPropertyAttributeNone, nullptr);

        // 3. Execute module code
        std::string sourceCode = readFile(filePath);
        JSValueRef result = evaluateScript(sourceCode, moduleObj);

        // 4. Handle exports
        if (JSValueIsObject(context, result)) {
            // If module returns an object, override exports
            JSObjectSetProperty(context, moduleObj, JSStringCreateWithUTF8CString("exports"), result, kJSPropertyAttributeNone, nullptr);
        }

        // 5. Cache module
        moduleCache.set(filePath, JSObjectGetProperty(context, moduleObj, JSStringCreateWithUTF8CString("exports"), nullptr));

        return JSObjectGetProperty(context, moduleObj, JSStringCreateWithUTF8CString("exports"), nullptr);
    }
};

Built-in Toolchain Source Code

Package Manager Core Logic:

class PackageManager {
public:
    void installPackage(const std::string& packageName) {
        // 1. Parse package metadata
        PackageMeta meta = fetchPackageMeta(packageName);

        // 2. Download package content
        downloadPackage(meta.tarballUrl);

        // 3. Extract to node_modules
        extractPackage(meta.version);

        // 4. Handle dependencies
        for (const auto& dep : meta.dependencies) {
            installPackage(dep.name);
        }

        // 5. Generate cache record
        cachePackage(meta);
    }

private:
    PackageMeta fetchPackageMeta(const std::string& name) {
        // Fetch package metadata from registry
        // Includes version resolution, dependency analysis, etc.
    }
};

Test Framework Integration:

class TestRunner {
public:
    void runTests(const std::string& testFile) {
        // 1. Load test file
        JSValueRef testModule = loadModule(testFile);

        // 2. Find test cases
        JSValueRef testCases = findTestCases(testModule);

        // 3. Execute tests
        executeTestCases(testCases);

        // 4. Generate report
        generateReport();
    }

    void executeTestCases(JSValueRef testCases) {
        // Iterate through test cases and execute
        // Handle assertions, catch exceptions, etc.
    }
};

Event Loop and Asynchronous I/O

Event Loop Core Structure:

class EventLoop {
private:
    std::vector<IOEvent> ioEvents;
    std::queue<TimerEvent> timerQueue;
    std::queue<ImmediateEvent> immediateQueue;

public:
    void run() {
        while (true) {
            // 1. Process timers
            processTimers();

            // 2. Process I/O events
            processIOEvents();

            // 3. Process immediate tasks
            processImmediateTasks();

            // 4. Sleep if no tasks are pending
            if (noPendingTasks()) {
                waitForEvents();
            }
        }
    }

    void waitForEvents() {
        // Use epoll/kqueue to wait for events
        int timeout = calculateTimeout();
        epoll_wait(epfd, events, MAX_EVENTS, timeout);
    }
};

Asynchronous I/O Implementation:

class AsyncIO {
public:
    void readFile(const std::string& path, Callback callback) {
        // 1. Create async task
        auto task = std::make_shared<ReadFileTask>(path, callback);

        // 2. Submit to thread pool
        threadPool.submit([task]() {
            // Actual file read operation
            std::string content = syncReadFile(task->path);

            // 3. Execute callback in event loop thread
            eventLoop.post([task, content]() {
                task->callback(content);
            });
        });
    }
};

Performance Optimization Mechanisms

JIT Compilation Optimization:

class JITCompiler {
public:
    void compile(Function* func) {
        // 1. Analyze hot code
        if (!isHotFunction(func)) return;

        // 2. Generate machine code
        MachineCode* code = generateMachineCode(func);

        // 3. Replace interpreted execution
        func->setImplementation(code);
    }

private:
    bool isHotFunction(Function* func) {
        // Determine if function is hot based on call count and time
        return func->callCount > HOT_THRESHOLD;
    }
};

Memory Management Optimization:

class MemoryManager {
public:
    void* allocate(size_t size) {
        // 1. Try to allocate from object pool
        if (auto ptr = objectPool.allocate(size)) {
            return ptr;
        }

        // 2. Directly allocate large objects
        if (size > LARGE_OBJECT_THRESHOLD) {
            return malloc(size);
        }

        // 3. Use custom allocator for small objects
        return smallObjectAllocator.allocate(size);
    }

    void deallocate(void* ptr, size_t size) {
        // Reverse operation of allocation
    }
};

Network and File System Source Code

HTTP Server Implementation

HTTP Server Core Architecture:

class HTTPServer {
private:
    Socket listener;
    ThreadPool threadPool;

public:
    void start(int port) {
        listener.bind(port);
        listener.listen();

        while (true) {
            Socket client = listener.accept();
            threadPool.submit([this, client]() {
                handleConnection(client);
            });
        }
    }

    void handleConnection(Socket client) {
        // 1. Parse HTTP request
        HTTPRequest req = parseRequest(client);

        // 2. Route request
        HTTPResponse res = routeRequest(req);

        // 3. Send response
        sendResponse(client, res);
    }
};

HTTP/2 Implementation Key Points:

class HTTP2Connection {
public:
    void handleFrame(Frame frame) {
        switch (frame.type) {
            case FRAME_HEADERS:
                processHeadersFrame(frame);
                break;
            case FRAME_DATA:
                processDataFrame(frame);
                break;
            // Handle other frame types...
        }
    }

    void processHeadersFrame(Frame frame) {
        // Implement HPACK header compression/decompression
        // Manage stream state
    }
};

File System Operations

fs Module Core Implementation:

class FileSystem {
public:
    std::string readFile(const std::string& path) {
        // 1. Validate path security
        validatePath(path);

        // 2. Open file
        int fd = open(path.c_str(), O_RDONLY);
        if (fd < 0) throw std::runtime_error("File open failed");

        // 3. Get file size
        struct stat st;
        fstat(fd, &st);
        size_t size = st.st_size;

        // 4. Read content
        std::string content(size, '\0');
        read(fd, &content[0], size);

        // 5. Close file
        close(fd);

        return content;
    }
};

File Watcher Implementation:

class FileWatcher {
public:
    void watch(const std::string& path, Callback callback) {
        // 1. Select watching mechanism based on platform
#ifdef __linux__
        int fd = inotify_add_watch(inotifyFd, path.c_str(), IN_MODIFY);
#elif _WIN32
        // Use ReadDirectoryChangesW
#endif

        // 2. Add to watch list
        watchers[path] = {fd, callback};
    }

    void pollEvents() {
        // Check file system events and trigger callbacks
    }
};

WebSocket Implementation

WebSocket Protocol Handling:

class WebSocketConnection {
public:
    void handleFrame(Frame frame) {
        switch (frame.opcode) {
            case OPCODE_TEXT:
                handleTextFrame(frame);
                break;
            case OPCODE_BINARY:
                handleBinaryFrame(frame);
                break;
            case OPCODE_PING:
                sendPong(frame);
                break;
            // Handle other opcodes...
        }
    }

    void sendText(const std::string& message) {
        Frame frame;
        frame.opcode = OPCODE_TEXT;
        frame.payload = message;
        sendFrame(frame);
    }
};

WebSocket Compression Extension:

class WebSocketCompression {
public:
    void enablePerMessageDeflate() {
        // Implement RFC 7692 compression extension
        // Includes context takeover, compression level negotiation, etc.
    }

    std::string compress(const std::string& data) {
        // Compress using zlib
    }

    std::string decompress(const std::string& data) {
        // Decompress using zlib
    }
};

Network Protocol Parsing

TCP Protocol Implementation Key Points:

class TCPSocket {
public:
    void connect(const std::string& host, int port) {
        // 1. DNS resolution
        std::vector<IPAddress> addresses = resolveDNS(host);

        // 2. Create socket
        sockfd = ::socket(AF_INET, SOCK_STREAM, 0);

        // 3. Connect to server
        for (auto& addr : addresses) {
            sockaddr_in serv_addr = createSockAddr(addr, port);
            if (::connect(sockfd, (sockaddr*)&serv_addr, sizeof(serv_addr)) == 0) {
                return; // Connection successful
            }
        }

        throw std::runtime_error("Connection failed");
    }
};

UDP Protocol Implementation:

class UDPSocket {
public:
    void sendTo(const std::string& data, const std::string& host, int port) {
        // 1. Resolve address
        IPAddress addr = resolveHost(host);
        sockaddr_in dest_addr = createSockAddr(addr, port);

        // 2. Send data
        ::sendto(sockfd, data.c_str(), data.size(), 0,
                (sockaddr*)&dest_addr, sizeof(dest_addr));
    }
};

Network Performance Optimization

Zero-Copy Technology Implementation:

class ZeroCopyHTTPServer {
public:
    void handleRequest(int fd) {
        // 1. Use sendfile system call to send file directly
        struct stat st;
        fstat(fd, &st);

        off_t offset = 0;
        sendfile(client_fd, fd, &offset, st.st_size);
    }
};

Multiplexing Optimization:

class MultiplexedIO {
public:
    void run() {
#ifdef __linux__
        // Use epoll
        epoll_event events[MAX_EVENTS];
        int n = epoll_wait(epfd, events, MAX_EVENTS, timeout);

        for (int i = 0; i < n; i++) {
            handleEvent(events[i]);
        }
#elif __APPLE__
        // Use kqueue
        struct kevent events[MAX_EVENTS];
        int n = kevent(kq, nullptr, 0, events, MAX_EVENTS, nullptr);

        for (int i = 0; i < n; i++) {
            handleEvent(events[i]);
        }
#endif
    }
};
Share your love