HTTP/1.1 -1 Read error in cache disk data: SuccessContent-Type: text/plain; charset="utf-8" Last-Modified: Sat, 22 Jan 2022 04:31:52 GMT Content-length: 5435 Connection: Close Proxy-Connection: Close X-Cache: HIT from web1.osuosl.org Server: ProxyTrack 0.5 (HTTrack 3.49.2) = IO PMCs = * Separate pipe-related logic out of FileHandle. Create a Pipe PMC type. * Create a "Select" PMC * Move buffering logic from FileHandle and StringHandle to Handle. Be able to inherit it from all other PMC types. (include buffering-related ATTRs, METHOD_buffer_type, and METHOD_buffer_size) * Move encoding logic (METHOD_encoding, ATTR_encoding, etc) from StringHandle and FileHandle to Handle. Be able to inherit it from all other PMC types. * Unify logic wherever possible so multiple IO types can share * Use GET_ATTR macros in src/io/filehandle.c so all functions will be able to handle subclasses = IO API = * Change IO API to not use PCCINVOKE calls. Method calls on IO PMCs should call the API functions, not the other way around * Unify the codepaths for Socket and Pipe into the IO API. Refactor the IO API to be more unified. * Add externally-visible socket functions to src/io/api.c from src/io/socket_*.c * Rename Parrot_io_new_pmc to Parrot_io_new_filehandle_pmc * Add Pipe and Socket logic to Parrot_io_open. Call into Parrot_io_open from the "Open" method of each * Add Pipe and Socket logic to Parrot_io_close. * Add Pipe and Socket logic to Parrot_io_is_closed. * Add Pipe and Socket logic to Parrot_io_flush * Add Pipe and Socket logic to Parrot_io_reads * Add Pipe and Socket logic to Parrot_io_readline * Error handling: Figure out what happens if an unsuitable PMC type is passed to Parrot_io_seek, Parrot_io_tell, Parrot_io_eof, Parrot_io_is_tty * Extract a sane buffering API. * Cleanup Parrot_io_write, Parrot_io_puts, Parrot_io_putps. Unify where possible and remove duplicated effort = Misc Cleanup = * Add an src/io/pipe.c and src/io/stringhandle.c files for type-specific logic similar to src/io/filehandle.c * Make sure the functions in src/io/buffer.c will work with all buffer-enabled PMC types * Evaluate Parrot_io_make_offset, Parrot_io_make_offset32, Parrot_io_make_offset_pmc. If they do not need to be in src/io/api.c, move them elsewhere (src/io/filehandle.c?) * Make 'print' and 'say' stringify the same way. (See http://rt.perl.org/rt3/Ticket/Display.html?id=55196) * Change 'fprintf' to 'PIO_fprintf' where relevant. * Plain %s in parrot printf-alike functions do not handle NULL C strings well. Fix. * Further optimize where possible. * Move src/io/filehandle.c:Parrot_io_clear_buffer to src/io/buffer.c * Move src/io/filehandle.c:Parrot_io_is_encoding to src/io/core.c * Rename PARROT_NET_DEVEL to PARROT_NETWORKING_SUPPORT. Cleanup it's uses (#534) = Asynchronous IO = = various IO related RT tickets = * http://rt.perl.org/rt3/Ticket/Display.html?id=41353 * http://rt.perl.org/rt3/Ticket/Display.html?id=46413 * http://rt.perl.org/rt3/Ticket/Display.html?id=46841 * http://rt.perl.org/rt3/Ticket/Display.html?id=46843 == Ideas == * Create "StreamDescriptor" PMC type to abstract out system-dependent IO descriptors. Would allow FileHandles and Sockets to be subclassed more easily * Create a "StreamBuffer" PMC type to abstract out buffering details. Would allow FileHandles and Sockets to be subclassed more easily, and give all IO types easy access to buffering * Parrot_io_printf should output to Parrot's standard output PMC, not stdout * Parrot_io_eprintf should output to Parrot's standard error PMC, not stderr ---- = Completed: = * Create an abstract "IOHandle" class * Abstract relevant API code from FileHandle and Socket into IOHandle * Fix StringHandle to be a proper subclass of IOHandle * Rip out the layers structures and macros. (After the migration is complete.) * Remove src/io/io_mmap.c, unused and not useful. * Convert I/O layers to I/O objects. (allison) * src/io/io_unix.c is the guts of most I/O on most platforms. src/io/io_win32.c is Windows. src/io/io_stdio.c is STDIN, STDOUT, and STDERR. These three need to be ported to the new system. (allison) * src/io/io_utf8.c is really the wrong way to go about it. Filehandles should be marked with character set and encoding similar to strings. (allison) * Create a PMC named "FileHandle", as a core file handle object, which can be subclassed by various HLLs. (allison) * Continue to support different I/O operations on different platforms, using C '#ifdef's on platform-specific sections. (allison) * All 'PIO_*' functions change to 'Parrot_io_*'. (Since the implementation is completely changing, better to create new functions with the new names than to change the names of existing functions.) (allison) * Remove deprecated opcode 'pioctl', and fix related documentation. (See http://rt.perl.org/rt3/Ticket/Display.html?id=48589) * Decide if we plan to use AIO before the 1.0 release. (See http://rt.perl.org/rt3/Ticket/Display.html?id=57920) * Remove src/io/io_passdown.c and src/io/io_layers.c, purely implementation artifacts of I/O layers implementation. * Change src/io/io_string.c to a subclass of FileHandle PMC, that provides the same interface, but to a string instead of a file handle. * All IO PMC types should inherit from Handle * Add a "Close" or "Disconnect" method to the Socket PMC * Add an improved file-like API to the Socket PMC (open, close, readline, etc). Internally, these methods should direct to similar functions in src/io/api.c * Move METHOD_get_fd from FileHandle to Handle. Be able to inherit this into Socket, Pipe, etc.7.51 cusr + 89.05 csys = 436.56 CPU) </pre><p> I have my parrot run