xv6-public
vlime
xv6-public | vlime | |
---|---|---|
25 | 15 | |
7,408 | 417 | |
1.3% | 0.7% | |
0.0 | 4.2 | |
6 days ago | 4 days ago | |
C | Vim Script | |
GNU General Public License v3.0 or later | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
xv6-public
-
Challenging projects every programmer should try
+1 for mini operating system.
Us, application developers, rely on many OS features: memory management, filesystem, etc. I'm sure eventually we'll ask "how such things are done behind the scene?"
That's why I tinker with xv6 (https://github.com/mit-pdos/xv6-public) during sparetime. Learning various process scheduling algorithms from textbook is a thing. Implementing it is another thing. I learn a lot. And it's definitely fun, even though there's almost zero chance the knowledge gained is relevant for my job (I'm a mobile app dev).
-
xv6 compile error
Recently I compiled xv6 using gcc 7.5.0 on Ubuntu 18 , everything is ok. But when I try to compile it using gcc 13.2.1 on latest Arch, it's failed: result
-
How could the early Unix OS comprise so few lines of code?
https://github.com/mit-pdos/xv6-public has under 10,000 lines of C and assembly including some user space programs.
-
The rxv64 Operating System: MIT's xv6, in Rust, for SMP x86_64 machines
xv6 was originally written for 32-bit x86; the RISC-V port is a relatively recent development. See e.g. https://github.com/mit-pdos/xv6-public for some of the earlier history.
rxv64 was written for a specific purpose: we had to ramp up professional engineers on both 64-bit x86_64 and kernel development in Rust; we were pointing them to the MIT materials, which at the time still focused on x86, but they were getting tripped up 32-bit-isms and the original PC peripherals (e.g., accessing the IDE disk via programmed IO). Interestingly, the non sequitur about C++ aside, porting to Rust exposed several bugs or omissions in the C original; fixes were contributed back to MIT and applied to the original (and survived into the RISC-V port).
Oh, by the way, the use of the term "SMP" predates Intel's usage by decades.
-
Some were meant for C [pdf]
I'd define an arena as the pattern where the arena itself owns N objects. So you free the arena to free all objects.
My first job was at EA working on console games (PS2, GameCube, XBox, no OS or virtual memory on any of them), and while at the time I was too junior to touch the memory allocators themselves, we were definitely not malloc-ing and freeing all the time.
It was more like you load data for the level in one stage, which creates a ton of data structures, and then you enter a loop to draw every frame quickly. There were many global variables.
---
Wikipedia calls it a region, zone, arena, area, or memory context, and that seems about right:
https://en.wikipedia.org/wiki/Region-based_memory_management
It describes history from 1967 (before C was invented!) and has some good examples from Apache ("pools") and Postgres ("memory contexts").
I also just looked at these codebases:
https://github.com/mit-pdos/xv6-public (based on code from the 70's)
https://github.com/id-Software/DOOM (1997)
I looked at allocproc() in xv6, and gives you an object from a fixed global array. A lot of C code in the 80's and 90's was essentially "kernel code" in that it didn't have an OS underneath it. Embedded systems didn't run on full-fledges OSes.
DOOM tends to use a lot of what I would call "pools" -- arrays of objects of a fixed size, and that's basically what I remember from EA.
Though in g_game.c, there is definitely an arena of size 0x20000 called "demobuffer". It's used with a bump allocator.
---
So I'd say
- malloc / free of individual objects was NEVER what C code looked like (aside from toy code in college)
- arena allocators were used, but global vars and pools are also very common.
- arenas are more or less wash for memory safety. they help you in some ways, but hurt you in others.
The reason C programmers don't malloc/free all the time is for speed, not memory safety. Arenas are still unsafe.
When you free an arena, you have no guarantee there's nothing that points to it anymore.
Also, something that shouldn't be underestimated is that arena allocators break tools like ASAN, which use the malloc() free() interface. This was underscored to me by writing a garbage collector -- the custom allocator "broke" ASAN, and that was actually a problem:
https://www.oilshell.org/blog/2023/01/garbage-collector.html
If you want memory safety in your C code, you should be using ASAN (dynamically instrumented allocators) and good test coverage. Arenas don't help -- they can actually hurt. An arena is a trivial idea -- the problem is more if that usage pattern actually matches your application, and apps evolve over time.
- Run Linux Programs on DOS
-
The Magma operating system
Magma is proudly licensed under the MIT license, and uses code from Xv6 and Yagura.
-
User Space vs Kernel Space Development (For an experienced Dev)
My OS classes used xv6, a reimplementation of Unix Version 6 for a RISC-V architecture. Accompanying that was the OSTEP textbook.
-
MINIX is an awesome way to learn a wide range of CS concepts
Check out xv6 if you are only getting started with operating systems and want something simpler.
-
I am getting an undefined reference despite including the source file when compiling
Here is kernel.ld.
vlime
-
Does anyone use vim for lisp dev?
https://github.com/vlime/vlime works for me fine
-
Developing Common Lisp using GNU Screen, Rlwrap, and Vim
You should try out Vlime, it is a bit janky but it beats copy-pasting into a terminal any day.
-
Portacle - Does it have auto indent?
Maybe you should stick to one new thing at a time. Vim is more than capable of handling Common Lisp. Look at Slimv and Vlime for vim-style SLIME. Focus on CL first. You can come back to Doom / Emacs later.
-
What is to go-to environment on Windows for Common LISP development?
Neovim works just fine. I use Neoterm to send-to-repl, here's what my config looks like. Your other options include vlime and slimv. I switched to neoterm because it's simple, explicit, and doesn't create unpredictable windows. Works for any other language just as well.
- Why Lisp?
-
Are there plugins for Neovim that don't exist, that should exist, in your opinion?
A proper Neovim client for Slime or Sly. The closest is Vlime, but its UI is really janky.
-
Common Lisp vs Racket
Join me vim brother and don't settle for forcing yourself to use emacs while developing in CL when you don't have to! You even have two vim options! https://github.com/kovisoft/slimv and https://github.com/vlime/vlime with a great comparison of the two: https://susam.net/blog/lisp-in-vim.html
-
Lisp programming configuration for neovim
If you're interested more in Common Lisp, there's both vlime and vim-slime however I don't have any experience with them.
-
Noob looking to learn Vim on Windows for writing/programming/notes
I think I'll dig at vimtutor within a few days, then. I've seen it mentioned a few times already, so now's a good time I reckon. Like you said, I'll be avoiding plugins, but with the guide I referenced, vlime is mentioned. You don't think that'll be too problematic on Windows, do you? I recall seeing that plenty of plugins don't work outside of linux. Thanks again, btw!
-
What would you consider a modern lisp workflow/toolchain?
That's quite a tough question because different people appreciate different things about Emacs. Personally I use Neovim as my text editor with Vlime for live Common Lisp integration (works with Vim as well). Vlime uses the same backend as Slime for Emacs, so the features should be the same, even if the interface is different. I know there is also Slima for Atom, but I have never used Atom, so no idea how well it works.
What are some alternatives?
xv6-riscv - Xv6 for RISC-V
slimv - Official mirror of Slimv versions released on vim.org
homebrew-i386-elf-toolchain - Homebrew formulas for buildling a valid GCC toolchain for the i386-elf target.
sidebar.nvim - A generic and modular lua sidebar for Neovim
minixfromscratch - Development and compilation setup for the book versions of MINIX (2.0.0 and 3.1.0) on QEMU
paredit.vim - Paredit Mode: Structured Editing of Lisp S-expressions
foam3 - FOAM: Feature-Oriented Active Modeller, Version 3 (unstable)
info.vim
stumpwm - The Stump Window Manager
Vim - The official Vim repository
lispe - An implementation of a full fledged Lisp interpreter with Data Structure, Pattern Programming and High level Functions with Lazy Evaluation à la Haskell.
neovim - Vim-fork focused on extensibility and usability