 
     open class func compile(_ program: Program, options: [Option]) throws -> PTX {
         return try options.map{$0.rawArgument}.withUnsafeBufferPointer { ptr in
-            ///var cStringPtr: [UnsafePointer<Int8>?] = ptr.map{$0.rawArgument.withCString{$0}}
             var cArgs: [ContiguousArray<Int8>] = ptr.map{$0.utf8CString}
             var cArgPtrs: [UnsafePointer<Int8>?] = []
             for i in cArgs.indices {

    let handle: nvrtcProgram

    public var name: String?

    /// Initialize with source program and headers
    public init(data: Data, name: String? = nil, externC: Bool = true,
                headers: [(name: String, data: Data)]) throws {
        self.name = name
        var data = data
        if externC { /// Disable mangling
            data.insert(contentsOf: "extern \"C\"{".utf8, at: 0)
            data.append(UInt8("}")!)
        }
        var headerNames: [UnsafePointer<Int8>?] = headers.map { name, _ in
            name.withCString{$0}
        }
        var headerCodes: [UnsafePointer<Int8>?] = headers.map { _, data in
            data.withUnsafeBytes{$0}
        }
        var handle: nvrtcProgram?
        try ensureSuccess(
            data.withUnsafeBytes { bytes in
                nvrtcCreateProgram(
                    &handle,                          /// Handle
                    bytes,                            /// Source

    /// Initialize with source program
    public init(data: Data, name: String? = nil, externC: Bool = true) throws {
        self.name = name
        self.data = data
        if externC { /// Disable mangling
            self.data.insert(contentsOf: "extern \"C\"{".utf8, at: 0)
            self.data.append(contentsOf: "}".utf8)
        }
        var handle: nvrtcProgram?
        try ensureSuccess(
            self.data.withUnsafeBytes { bytes in
                nvrtcCreateProgram(
                    &handle,                          /// Handle
                    bytes,                            /// Source
