Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

core:os tracking issue #4710

Open
1 of 57 tasks
laytan opened this issue Jan 17, 2025 · 3 comments
Open
1 of 57 tasks

core:os tracking issue #4710

laytan opened this issue Jan 17, 2025 · 3 comments

Comments

@laytan
Copy link
Collaborator

laytan commented Jan 17, 2025

We are nearing the replacement of core:os, this issue outlines todos and nice to haves.

Todos:

  • core:os/os2 read_entire_file creates infinite loop #3279
  • os2.pipe() -> Assert error #4712
  • @gingerBill needs to look at the env API, env_posix.odin has a bunch of NOTE(laytan): comments outlining potential improvements
  • the IMPORTANT NOTE saying the package is a mockup needs to be removed from doc.odin
  • write on linux needs to loop until everything is written, just like windows and posix implementations
  • linux does not do the MAX_RW thing other implementations do but afaik it does have the same restriction
  • remove on posix needs to handle directories, just like the other implementations (it already did, whoops)
  • unused File_Flag cases should be removed, .Sparse, .Unbuffered_IO
  • core:path needs to be looked over and possibly removed/merged into os2

Targets supported in core:os but not yet in core:os/os2:

  • wasi (os/os2: wasi target support #4716)
  • js - just os.write is implemented, maybe it should just be dropped entirely for os2
  • haiku - should be pretty easy to use the posix implementation at first, can go "native" later

Non blocking but can have api consequences:

  • buffered file mode/flag (needs testing to see if it's beneficial)
  • Virtual File System - file possibly backed by not actual files

Packages that use core:os and need to be updated:

  • core:compress/gzip

  • core:crypto

  • core:encoding/csv

  • core:encoding/hxa

  • core:encoding/ini

  • core:encoding/xml

  • core:flags

  • core:fmt (JS impl needs rewrite to not use core:os at all)

  • core:image/bmp

  • core:image/netpbm

  • core:image/png

  • core:image/qoi

  • core:image/tga

  • core:image

  • core:log

  • core:math/big

  • core:mem/virtual

  • core:net

  • core:odin/parser

  • core:path/filepath

  • core:prof/spall

  • core:testing

  • core:text/i18n

  • core:text/regex

  • core:text/table

  • core:time/timezone

  • core:unicode/tools

  • tests/core/encoding/hxa

  • tests/core/flags

  • tests/core/io

  • tests/documentation

  • vendor:fontstash

  • vendor:libc

  • vendor:opengl

  • odin-lang/examples repo needs to be updated

Nice to have, but not blocking the replacement of core:os:

  • more tests
  • docs additions, dir.odin, file.odin, etc. don't have any docs
  • docs unification, doc style differs between files and procs
  • netbsd, openbsd, freebsd targets implementation for _process_info_by_pid, _process_list, _process_open, _process_handle_still_valid, _process_state_update_times for full process API coverage (decided to make non blocking because it is a new API)
  • current_executable_path(allocator: runtime.Allocator) -> (string, Error) returning the full absolute executable path of the program, useful for loading things relative to this path. You can already do this in a round about way with: current_process_info({.Executable_Path}, context.allocator) but a more direct way with the native APIs for each target would be nice
  • wrapper api over the process API that handles the details of processes and just allows easy communication, similar to this idea: https://gist.github.com/laytan/68be38614d9274663a48fd3d710fefc2
  • a heap allocator that does not rely on any system libraries, ideally this goes into base: though, so it can be the default allocator in general
  • core:testing to replace os2.stdout and os2.stderr with an implementation that synchronises between tests (currently writing to stdout or stderr in tests doesn't work well because the terminal renders progress and clears it out)

After replacement the following can be closed:

@laytan laytan pinned this issue Jan 17, 2025
@Kelimion
Copy link
Member

Kelimion commented Jan 17, 2025

Virtual File System, working similarly to allocators, in that you call it with a Mode, instead of having to have vtable with all of stat , open , close , read ,write, etc.

@flysand7
Copy link
Contributor

doc style differs between files and procs

Pretty sure I messed up files a little bit. I (or someone else) will have to rewrite the documentation at some point for files. process.odin should be the most recent and the most correct style, but still not ideal.

@laytan
Copy link
Collaborator Author

laytan commented Jan 17, 2025

Virtual File System, working similarly to allocators, in that you call it with a Mode, instead of having to have vtable with all of stat , open , close , read ,write, etc.

I put it on the list under "non blocking but can have api consequences"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants