Git Product home page Git Product logo

vygr / chrysalisp Goto Github PK

View Code? Open in Web Editor NEW
1.6K 73.0 94.0 176.11 MB

Parallel OS, with GUI, Terminal, OO Assembler, Class libraries, C-Script compiler, Lisp interpreter and more...

License: GNU General Public License v2.0

Shell 0.48% Makefile 0.25% C++ 52.02% Common Lisp 19.92% PHP 1.13% Assembly 8.45% Batchfile 1.26% Pawn 0.11% NASL 3.90% PowerShell 1.20% NewLisp 0.08% C 3.40% HTML 2.76% SourcePawn 3.46% BitBake 1.58%
os lisp assembly vm gui osx linux x86-64 aarch64 raspberry-pi-3

chrysalisp's Introduction

ChrysaLisp

ChrysaLisp is a 64-bit, MIMD, multi-CPU, multi-threaded, multi-core, multi-user parallel operating system with features such as a GUI, terminal, OO Assembler, class libraries, C-Script compiler, Lisp interpreter, debugger, profiler, vector font engine, and more. It supports MacOS, Windows, and Linux for x64, Riscv64 and Arm64 and eventually will move to bare metal. It also allows the modeling of various network topologies and the use of ChrysaLib hub_nodes to join heterogeneous host networks. It has a virtual CPU instruction set and a powerful object and class system for the assembler and high-level languages. It has function-level dynamic binding and loading and a command terminal with a familiar interface for pipe-style command line applications. A Common Lisp-like interpreter is also provided.

Join us at #ChrysaLisp-OS:matrix.org for banter. element.io room recommended.

ChrysaLisp can be used on MacOS, Windows and Linux. Supports x64, arm64 and riscv64 CPUs. It also supports a VP64 software CPU emulator used for the install process, but this can be used, with the -e option, on platforms where no native CPU support currently exits, as the runtime system. It runs on a hosted environment while experimentation is being done, but eventually it will be transitioned to run on bare metal. In the future, I plan to create a VM boot image for UniKernel appliances and a WebAssembly target for use within web browsers.

ChrysaLisp allows for the simulation of various network topologies utilizing point-to-point links. Each CPU in the network is represented as a separate host process, and point-to-point links utilize shared memory to simulate CPU-to-CPU, bidirectional connections. The design intentionally does not include global bus-based networking.

The ChrysaLib project, https://github.com/vygr/ChrysaLib, enables the use of IP and USB3/USB2 Prolific chip "copy" cables to create heterogeneous host networks. This allows users to connect their MacBooks, Linux, Windows machines and PI4's to create their own development LAN or WAN networks, which is pretty cool.

ChrysaLisp uses a virtual CPU instruction set to eliminate the use of x64, ARM64, RISCV64, or VP64 native instructions. Currently, it compiles directly to native code, but it has the capability to also be translated to byte code form and use runtime translation.

To avoid the need for register juggling for parameter passing, all functions define their register interface, and parameter sources and destinations are automatically mapped using a topological sort. If non-DAG mappings are detected, the user can address them with a temporary. The software also includes operators to make it easy to bind parameters to dynamic bound functions, relative addresses, auto-defined string pools, references, and local stack frame values. Output parameters that are not used can be ignored with an underscore.

ChrysaLisp has a powerful object and class system that is not limited to just the assembler but is quite as capable as a high level language. It allows for the definition of static classes or virtual classes with inline, virtual, final, static, and override methods. The GUI and Lisp are built using this class system.

It has function-level dynamic binding and loading. Functions are loaded and bound on demand as tasks are created and distributed. Currently, functions are loaded from the CPU file system where the task is located, but in the future, they will come from the server object that the task was created with and will be transported across the network as needed. Functions are shared among all tasks that use the same server object, so only one copy of a function is loaded, regardless of how many tasks use it.

The system functions are accessed through a set of static classes, which makes it easy to use and eliminates the need to remember static function locations, and also decouples the source from changes at the system level. The interface definitions for these functions can be found in the sys/xxx.inc files.

A command terminal with a familiar interface for pipe style command line applications is provided with args vector, stdin, stdout, stderr etc. Classes for easy construction of pipe masters and slaves, with arbitrary nesting of command line pipes. While this isn't the best way to create parallel applications it is very useful for the composition of tools and hides all the message passing behind a familiar streams based API.

A Common Lisp like interpreter is provided. This is available from the command line, via the command lisp. To build the entire system type (make), calculates minimum compile workload, or (make-all) to do everything regardless, at the Lisp command prompt. This Lisp has a C-Script 'snippets' capability to allow mixing of C-Script compiled expressions within assignment and function calling code. An elementary optimize pass exists for these expressions. Both the virtual assembler and C-Script compiler are written in Lisp, look in the lib/asm/code.inc, lib/asm/xxx.inc, lib/asm/func.inc, lib/trans/x86_64.inc, lib/trans/arm64.inc and lib/asm/vp.inc for how this is done. Some of the Lisp primitives are constructed via a boot script that each instance of a Lisp class runs on construction, see class/lisp/root.inc for details. The compilation and make environment, along with all the compile and make commands are created via the Lisp command line tool in lib/asm/asm.inc, again this auto runs for each instance of the lisp command run from the terminal. You can extend this with any number of additional files, just place them after the lisp command and they will execute after the lib/asm/asm.inc file and before processing of stdin.

Don't get the idea that due to being coded in interpreted Lisp the assembler and compiler will be slow. A fully cleaned system build from source, including creation of a full recursive pre-bound boot image file, takes on the order of 2 seconds on a 2014 MacBook Pro ! Dev cycle (make) and (remake) under 0.5 seconds. It ain't slow !

Network link routing tables are created on booting a link, and the process is distributed in nature, each link starts a flood fill that eventually reaches all the CPU's and along the way has marked all the routes from one CPU to another. All shortest routes are found, messages going off CPU are assigned to a link as the link becomes free and multiple links can and do route messages over parallel routes simultaneously. Large messages are broken into smaller fragments on sending and reconstructed at the destination to maximize use of available routes.

The -run command line option launches tasks on booting that CPU, such as the experimental GUI (a work in progress, -run gui/gui/gui.lisp). You can change the network launch script to run more than one GUI session if you want, try launching the GUI on more than CPU 0, look in funcs.sh at the boot_cpu_gui function ! :)

The -l command line option creates a link, currently up to 1000 CPU's are allowed but that's easy to adjust. The shared memory link files are created in the tmp folder /tmp, so for example /tmp/000-001 would be the link file for the link between CPU 000 and 001.

An example network viewed with ps looks like this for a 4x4 mesh network:

./main_gui -l 011-015 -l 003-015 -l 014-015 -l 012-015
./main_gui -l 010-014 -l 002-014 -l 013-014 -l 014-015
./main_gui -l 009-013 -l 001-013 -l 012-013 -l 013-014
./main_gui -l 008-012 -l 000-012 -l 012-015 -l 012-013
./main_gui -l 007-011 -l 011-015 -l 010-011 -l 008-011
./main_gui -l 006-010 -l 010-014 -l 009-010 -l 010-011
./main_gui -l 005-009 -l 009-013 -l 008-009 -l 009-010
./main_gui -l 004-008 -l 008-012 -l 008-011 -l 008-009
./main_gui -l 003-007 -l 007-011 -l 006-007 -l 004-007
./main_gui -l 002-006 -l 006-010 -l 005-006 -l 006-007
./main_gui -l 001-005 -l 005-009 -l 004-005 -l 005-006
./main_gui -l 000-004 -l 004-008 -l 004-007 -l 004-005
./main_gui -l 003-015 -l 003-007 -l 002-003 -l 000-003
./main_gui -l 002-014 -l 002-006 -l 001-002 -l 002-003
./main_gui -l 001-013 -l 001-005 -l 000-001 -l 001-002
./main_gui -l 000-012 -l 000-004 -l 000-003 -l 000-001 -run gui/gui

Getting Started

Take a look at the docs/intro.md for instructions to get started on all the supported platforms.

The experimental GUI requires the SDL2 library to be installed.

Get them via your package manager, on Linux with:

sudo apt-get install libsdl2-dev

Or on Mac via Homebrew.

brew install sdl2

Make/Run/Stop

Take a look at the docs/intro/intro.md for platform specific instructions. The following is for OSX and Linux systems. Windows has a pre-built main.exe provided, or you can configure Visual Studio to compile things yourself if you wish.

Installing

The first time you download ChrysaLisp you will only have the vp64 emulator boot image. You must create the native boot images the first time round. This is a little slower than subsequent boots and system compiles but allows us to keep the snapshot.zip file as small as possible.

If on Linux or Mac via Homebrew:

make install

Or on Windows

install.bat

Make

make

Run

./run_tui.sh [-n num_cpus] [-e] [-b base_cpu]

Text user interface based fully connected network. Each CPU has links to every other CPU. Careful with this as you can end up with a very large number of link files and shared memory regions. CPU 0 launches a terminal to the host system.

./run.sh [-n num_cpus] [-e] [-b base_cpu]

Fully connected network. Each CPU has links to every other CPU. Careful with this as you can end up with a very large number of link files and shared memory regions. CPU 0 launches a GUI.

./run_star.sh [-n num_cpus] [-e] [-b base_cpu]

Star connected network. Each CPU has a link to the first CPU. CPU 0 launches a GUI.

./run_ring.sh [-n num_cpus] [-e] [-b base_cpu]

Ring connected network. Each CPU has links to the next and previous CPU's. CPU 0 launches a GUI.

./run_tree.sh [-n num_cpus] [-e] [-b base_cpu]

Tree connected network. Each CPU has links to its parent CPU and up to two child CPU's. CPU 0 launches a GUI.

./run_mesh.sh [-n num_cpus on a side] [-e] [-b base_cpu]

Mesh connected network. Each CPU has links to 4 adjacent CPU's. This is similar to Transputer meshes. CPU 0 launches a GUI.

./run_cube.sh [-n num_cpus on a side] [-e] [-b base_cpu]

Cube connected network. Each CPU has links to 6 adjacent CPU's. This is similar to TMS320C40 meshes. CPU 0 launches a GUI.

Stop

Stop with:

./stop.sh

Snapshot

Snapshot with:

make snapshot

This will create a snapshot.zip file of the obj/ directory containing only the host directory structures, the pre-compiled Windows main_gui.exe and main_tui.exe plus the VP64 boot_image files !

Used to create the more compact snapshot.zip that goes up on Github. This must come after creation of (make-all-platforms) boot_image set !

obj/vp64/VP64/sys/boot_image
obj/x86_64/WIN64/Windows/main_gui.exe
obj/x86_64/WIN64/Windows/main_tui.exe

Clean

Clean with:

make clean

chrysalisp's People

Contributors

bananaearwig avatar baydrift avatar frankc01 avatar ghaerr avatar iacore avatar metalbot avatar neauoire avatar no-identd avatar nuclearfall avatar traverseda avatar vitiral avatar vygr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chrysalisp's Issues

Logo for ChrysaLisp

Branding can be an important part of attracting developers. The ability to add wallpaper would also help. I've designed a logo for the OS. Feel free to use it, make suggestions, or decide it's not what you're looking for.

I don't know if this is helpful at all: https://github.com/Ramarren/png-read

ChrysaLisp v 0 6 512px
Logo.zip

POLO: Plain Ol' Lisp Object

Toying around:

(defun init-data-element (environment data-element)
  (def environment data-element nil))

(defmacro class (name properties)
  (defq
    _i (sym (str name ".new"))
    _d (sym (str name ".del"))
    _g (sym (str name ".get"))
    _s (sym (str name ".set")))
  `(progn
     (def: ,properties (env))
     (defq ,name (list (list nil) (list nil)))
     (defun ,_i ()
       (defq _mye (env -1))
       (each (curry init-data-element _mye) ,properties)
       _mye)
     (defun ,_g (obj data-element)
       (eval data-element obj))
     (defun ,_s (obj data-element val)
       (set obj data-element val))
     (defun ,_d (clz) (print "In deinit for " ,name))
     ))

(class test '(a b))
(defq t1 (test.new))
(test.get t1 a)
(test.set t1 a "value")
(print t1)

Segmentation fault

This is causing a segmentation fault:

(reduce (lambda (acc el) (cat acc el)) '(fee fie foe fum) (list))

Before getting to this simple reproduction, I was seeing Malloc fail !!!funcs.sh: line 60:

A few items

Ran into a few things:

(push 1 '(2 3)) ; => got (2 3 1) but expected (1 2 3)
(find "foo" '("fie" "foo" "fun") ; => got nil but expected 1 (index of "foo")

Also, if there is some other way you want me to convey observations, suggestions, etc. just let me know

Running on embedded hardware

Apologies if I'm way too far in left field on this issue. Love all the care, thought, and work going into this.
Any hopes this code base could offer some of the promises of the Tao system of lore, specifically related to pushing code to tiny/networked hardware that isn't 64-bit (8-bit Arduino/AVR)?
Maybe that's too small a target, but how about something like an ARM Cortex-M0?
What do you think the smallest target is reasonable for this project?

Look and Feel

I was just poking around Oberon Native and Genera, I’ve always had a crush on aliases type and pixel UIs. I was wondering if you’d be into helping me to build the Chrysa UI into the likes of these OS classics. I’m curious to know what that would entail, if disabling aliasing is something that can be done.

I think that could make Chrysa stand out. I’d love to hear your thoughts on that.

UI/UX design suggestions.

These are just some thoughts I've had concerning the GUI. These shouldn't be considered priority items. I may choose one or two that I think I can complete in the cscript.

I've been considering the titlebar of the window. It seems like having a toolbar class that acts as a titlebar for windows my be a better option. It would eliminate special functions like window-set-title for the more universal (set window 'text "title"). This would allow for different flows to be set, having toolbars at the bottom or on the side of a window.

If this were implemented with fullscreen windows, it could provide a customizable toolbar for the gui without the need to access the screen view at all, as it's just a window. Which leads to the point of styling.

Certain things like padding of elements would be useful in UI design. If styling issues like 'color 'ink_color and the like are kept in a separate class it would make markdown readers, with or without css, much easier to write.

Specific component-connect functions could be kept in a class library for things that are oft used. Things like closing a window, maximizing or full-screening a window, could be accessible as single functions, like hide-window. This allows the ability to expand that library to things like opening a dialog or viewing a hidden field or window without the need to recreate boiler plate code.

I would write a library of boiler plate if you think it would be better implemented in ChryaLisp instead of at the gui/ level. But, I think the point of keeping things at a lower level was to improve efficiency?

That brings me to another point. Am I correct that hide-window function does what it says, and does not close the window? Is it possible to retrieve or show-window things that have been "closed." If this were implemented at the component level, would it allow hiding and showing of any widget? Is this a complicated matter? This allows for hiding and showing toolbars and views creating more dynamic UX.

Pardon any suggestions that are already implemented and I've not found them.

A bit of a checklist for UI/UX design and implementation.

  • [x ] sane defaults that allow users to simply (ui-tree window (create-window).
  • automatically place windows in a cascading fashion from the previous window unless a user explicitly requests a specific position.
  • add fullscreen mode and/or no_titlebar and undecorated flags.
  • [ x] eliminate certain widget specific functions where more universal functions are sufficient. This allows easier adaptability for different widgets.
  • hide/show component functions or style options.
  • implement percentage based flows to allow all views/components to be scaled. I think the background already does something similar?
  • implement styling as separate from a specific class to avoid hardcoding things like default 'fonts. Add padding and margins to components.
  • create a certain number of fonts globablly upon start-up so that they may be used without creating fonts for specific views. 'font and 'font_size.
  • Implement buttons as views to easily enable the creation of image buttons or film buttons. This would create cohesion for buttons, instead of requiring creation of a pseudo-button.
  • implement hide and show at the component level to allow easily hiding and showing windows/buttons/etc.
  • Make determinations on what should be implemented at the gui class level and what should be implemented in lisp as a boilerplate library using the gui classes.
  • Keyboard chords macros using modifier keys.
  • Mouse down/mouse up/right-click events.

Again, these are merely suggestions, and I will be happy to help given time and my own limitations.

Global windows controls

I was wondering if you we could start building windows management shortcuts.
I would love it if we could use win/cmd + key to control maximize, minimize, hide, stick to left, etc..
What do you think?

A proposal for the file system

NOTE: I really need to put my computer away in the middle of the night. This is a huge undertaking and I will someday start it in my own little corner of github. I'm going to mark this closed.

Abstraction of a hierarchy agnostic file system which provides self encapsulated elements of component, permission, and member systems:

Component System

  • Metadata may include binary data linking low level file system specifics, applications, or may be text with unique identifiers, tags, data types, application references, etc.
  • Tags act as a specific form of organizational metadata allowing for a hierarchy agnostic approach to file handling which can associate devices, records, data types and uids.
  • Records are containers for data and metadata. Record metadata may refer to one or more applications, contain mixed data types, and be associated with zero or more tags.
  • Applications consist of the binaries, data, and metadata necessary to interoperate with and utilize records and other applications using apis and pipelines.
  • Systems data includes physical hardware, drivers, the file system, and the operating system. Access may be restricted via blacklists, whitelists, and through the permission system.

Permission System

  • Allows for standard permissions of R-W-X for the component system.
  • Adds permissions for Protected, Encrypted, and Hidden all system elements.
  • Permissions may differentiate between local and remote members and component elements.

Member System

  • Members include users and groups and makes a distinction between local and remote members.
  • Replaces root user with a primary system operator with self-selected username.
  • Sysop usernames may be anonymized via proxy users and group communications.
  • Mail is delivered and may be picked up at a central repository by those with permission to do so.
  • Maintains a level of security through anonymity and inaccessibility. Out of site out of mind.
  • Sysops need not even know the existence or privileges of other sysops.
  • SysOps may be accountable for very specific system tasks or sysytem-wide oversight.

GUI and TUI error on startup

When running either the following error occurs:

Error: (ffi sym path flags) wrong_types ! < (ffi find-rev "class/seq/lisp_rfind" 0) > File: class/lisp/boot.inc(39)

Use sprites for graphics, from the ground up?

See here:

http://alvyray.com/Sprite/

Albeit—and I don't think that that makes for much of a caveat—I do think the concept of sprites presented there could do with a move from rectilinear polygons to some (further) generalization of isothetic polygons which could represent any planigon

(I do suspect that such a generalization likely already exists somewhere in the literature, whose name—and hence literature on it!—I have yet to find. The Wikipedia page for rectilinear polygons—but not the one for isothetic ones!—points to two generalizations, but neither of them seems particularly helpful for representing e.g. a regular hexagon…)

chyrsa(sh): a different approach to the shell.

Please name the shell chyrsash. It's in ".*[a-z]sh" format like *Nix shells.

Instead of putting energy into just another shell, use the existing Lisp interpreter with an included lisp file to allow for parsing of commands and normal system interaction.

Users could have a per user preference automator—or pupa.lisp—startup script that performs certain commands on login.

I would be interested in working on this. I can also work on simple bug fixes in the UI.

Sphinx docs don't build on Mac

cd into doc folder.
make clean
make html

Error reported here is:
Running Sphinx v1.8.3

Extension error:
source_parser for 'restructuredtext' is already registered
make: *** [html] Error 2

That's after using Macports update to get all the latest updates and pulling all the Sphinx packages with:

pip install -r Requirements.txt

Text Fields and Editor

I've been trying to work on a text editor and it occurs to me that a text field widget would be really vauable. I've been working through the terminal and the docs app examples and it's proving difficult to really get anything going.

What does create-slave do?

I've started reviewing and want to start with adding a few command to the TUI. I came upon the function but not sure what it is doing...

Thanks

Shell commands and pathing

Currently the Terminal application assumes that a command entered can be resolved in the cmd/ folder.

It would be desirable to be able to enter a command at the shell prompt and have the terminal app search through a configured 'path' to resolve the location of the command location and load from there unless the user has provided a qualified command.

For example, assuming Terminal preloaded a configuration file upon startup from config/shell.profile (or similar) containing:

export PATH=cmd/:examples/  ; Search order is important
export ENV_VAR1=blah 

The export declaration semantics are that PATH and ENV_VAR1 are automagically added to the environment.

Upon Terminal startup it reads and processes the profile and, with the configuration of PATH, can do a search through the locations to resolve the request. (Is the environment ready this early?)

Alternately the user can specify an absolute path at the command

Raw, but working, ChrysaLisp argument processor

From a crawl, walk, run perspective - I'm still looking for the kneepads to start crawling with.

Here is the heart and test driver - Gist link

I haven't hooked up the 'help' yet, been focused on class spikes and getting something working. I moved away from the raw 'class' for the moment but may return on that another time...

Narrow test, I've since fixed boundary conditions:

tstap cat this is just stdio input
tstap cat -f cmd/echo.cmd

Advanced Debugging Features?

You might wish to consider implementing advanced debugging features, like Medic:

And Ripple (for which unfortunately I have yet to find source code, and which one must distinguish from @ripple, with which it has, to my knowledge, zero relation):

Both of the above made by @lixiangqi & @mflatt. 🙂

P.S.:
Only semi-related to the above, here's a semi-related paper from December that might interest y'all: https://hal.inria.fr/hal-01662336/document

Fullscreen causes background flicker.

I've ensured that SDL2 is at 2.0.10 and SDL2_TTF is at 2.0.15. I've cloned the most recent ChrysaLisp.

As an aside I had some intermittent issues with flickerring in a normal mac window in previous versions, but have not had those outside of fullscreen since that round of changes was pushed. Returning Chrysalisp to a normal window resolves all issues.

After switching to fullscreen, symptoms are:
Except for the clock face itself, the clock causes screen flickering black every second.
Animations causes the screen to pulse at the fps of the animation.
Windows moved leave tracer images of the window.
Canvases and buttons do not appear to flicker as reliably, but will eventually.
Any input (keyboard or mouse) causes the screen to switch on and off. This is most easily demonstrated with keyboard input.

To recreate:
./run.sh
enter fullscreen

Things I've tried:
Using the supplied snapshot
using the README.md instructions
using the INTRO.md instructions
removing all apps from launcher startup list.
removing each specific app from launcher.

Screen Shot 2019-12-22 at 7 07 33 AM

Screen Shot 2019-12-20 at 6 12 13 PM

Screen Shot 2019-12-22 at 6 57 18 AM

backdrop app ?

GUI process currently uses a black label as the screen widget. Should at least be able to specify any view class, and would be very nice if could run a live application to supply the view.

Should be possible to have a live backdrop like Boing running etc

Define GUI window size in ./run.sh

It would be very helpful for dev if I could send a window size as a script parameter so it doesn’t always take the full screen on load.

Context aware tab completion

Gui Terminal now does basic path completions. But should be aware of the structure of a pipe command line and complete to commands in command positions.

Provide capabilities for Internet Protocol stack

Are there any big-picture plans for this?

From my limited view of how ChrysaLisp works, perhaps just exposing a few primitives for socket creation would do the job (assuming this happens via main.c's host_funcs table).

On the other hand, it would be an interesting path to use a plan9-style set of primitives for accessing external servers (http://9p.cat-v.org/documentation/, https://en.wikipedia.org/wiki/9P_(protocol), https://blog.aqwari.net/9p/).

Interested to know if there are plans in motion and I'm willing to forge into the unknown or help others as well.

RISC-V backend

Hi again,
For another side project I'm going to be working on implementing a RISC-V compliant CPU and I thought as an additional test an for general fun and games, getting ChrysaLisp running on it would be a very interesting experiment.

So, …. where should I start looking in order to add another backend.

Thanks,
Martyn

`docstrings` equivalent

In the interest of having good documentation, it would be nice if objects were self-describing in some way. I don't really do lisp, I work with python, but my understanding is that in lisp objects an implement a "describe", "inspect", or "documentation" method?

To get such a system integrated with sphinx (for auto-generating object documentation), we'd need a way to get that information out of ChrysaLisp, presumably a command that output all the documentation in a semi-structured way. Sphinx already has support for common lisp, and if we think that would work on chrysa-lisp I could try setting that up, but I think it would require that the code could actually run under common lisp.

I might be able to just set ChrysaLisp as the lisp executable for sphinx to use, but I don't know if that would work or not.

What are CPMs files?

I noticed that images were in the cpm format, is there a way to include JPGs into a project?

Distinction between the different uses of color

There seems to be different uses to 'color, in some cases like the label, it defines the foreground, in other cases, like the grid->button, it defines the background. It would be nice to have something like foreground and background.

Screenshots

Do you have any screenshots that showcase the OS as it's working, even if it's console-only?

MakeFile SDL Library links for OSX

While the MakeFile looks for SDL in /Library/Frameworks/,
brew installs in usr/local/Cellar/.

Would you like me to add the instructions for homebrew in the makefile? or explain how to link the homebrew libraries into Frameworks?

Add Time APIs

I would like to build a clock app tutorial, and I would need a way to do a few things.

  • Time based refresh.
  • Time API, hours, minutes, seconds.
  • Timer(timeout/interval) methods.

`str-to-num` expected behavior?

Not sure if these are expected but doesn't seem to be consistent with name of the function:

(str-to-num "-20")
-280
(str-to-num "20.9")
1369702
(str-to-num "-0")
-30

doc/Requirements.txt seems to be missing

While following the instructions on a fresh git clone.
cd doc
pip install --user -r Requirements.txt
make html
'Requirements.txt' is not present in the directory.

File management

I know it's currently possible to open file-streams that exist. Is it possible to create new files, view folder contents. Would this require adding new dependencies?

Branding

I was wondering what you thought about adding a wallpaper, it could be its own app apps/desktop/app.lisp? I'm not a fan of desktop icons, but I definitely enjoy setting a background. This could tie into creating a logo for ChrysaLisp, and adding it to the default boot. I'd be happy to tackle the making of logo, if you can help me make an app that always stays at lowest zIndex.

Basic paint application

To complete a first demo, Chrysa should have at least a few expected applications, i’d suggest building a painting application, something to the order of MS Paint.

That would include the saving/loading of files, which I don’t think any of the apps support at the moment.

The zerofil function?

I was looking at the list of functions and I couldn't find an equivalent to zerofill, or strpad. I was wondering if there was a Chrysa-wide function that could be used to pad an int with zeros, or something of the sort. I'll define one in the clock app to pad the minutes and seconds, but I would like to know for the future :)

Thanks!
Chrysa is amazing.

screen shot 2018-10-05 at 9 43 33 pm

issues raised by clock app

  1. Font cache is never getting flushed ! Clock keeps on filling it up for ever...
  2. Mystery of the flickering last digit, looks like a dual buffer dirty region issue ! (shows up if Boing is running causing the buffers to keep swapping)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.