Chrysalisp เป็น 64 บิต, MIMD, Multi-CPU, มัลติเธรด, มัลติคอร์, ผู้ใช้หลายคนพร้อมกับคุณสมบัติเช่น GUI, เทอร์มินัล, แอสเซมเบลอร์ OO, ไลบรารีคลาส, คอมไพเลอร์ C-Script รองรับ MacOS, Windows และ Linux สำหรับ X64, RISCV64 และ ARM64 และในที่สุดก็จะย้ายไปเป็นโลหะเปลือย นอกจากนี้ยังช่วยให้การสร้างแบบจำลองของทอพอโลยีเครือข่ายต่างๆและการใช้ Chrysalib hub_nodes เพื่อเข้าร่วมเครือข่ายโฮสต์ที่แตกต่างกัน มันมีชุดคำสั่ง CPU เสมือนจริงและระบบวัตถุและคลาสที่ทรงพลังสำหรับแอสเซมเบลอร์และภาษาระดับสูง มันมีการเชื่อมโยงและการโหลดแบบไดนามิกระดับฟังก์ชั่นและเทอร์มินัลคำสั่งที่มีอินเทอร์เฟซที่คุ้นเคยสำหรับแอปพลิเคชันบรรทัดคำสั่งแบบไพพ์ นอกจากนี้ยังมีล่ามเหมือน LISP ที่มีลักษณะเหมือนกัน









เข้าร่วมกับเราที่ #chrysalisp-os: matrix.org สำหรับล้อเล่น แนะนำให้ใช้ Element.io Room
Chrysalisp สามารถใช้กับ MacOS, Windows และ Linux รองรับ X64, ARM64 และ RISCV64 CPU นอกจากนี้ยังรองรับตัวจำลอง CPU ซอฟต์แวร์ VP64 ที่ใช้สำหรับกระบวนการติดตั้ง แต่สามารถใช้งานได้ด้วยตัวเลือก -e บนแพลตฟอร์มที่ไม่มีการสนับสนุน CPU ดั้งเดิมในปัจจุบันออกจากระบบรันไทม์ มันทำงานบนสภาพแวดล้อมที่โฮสต์ในขณะที่การทดลองกำลังดำเนินการ แต่ในที่สุดมันก็จะเปลี่ยนไปทำงานบนโลหะเปลือย ในอนาคตฉันวางแผนที่จะสร้างภาพบูต VM สำหรับเครื่องใช้ไฟฟ้า UnikerNel และเป้าหมาย WebAssembly สำหรับใช้ภายในเว็บเบราว์เซอร์
Chrysalisp ช่วยให้การจำลองทอพอโลยีเครือข่ายต่างๆโดยใช้ลิงก์แบบจุดต่อจุด CPU แต่ละตัวในเครือข่ายจะถูกแสดงเป็นกระบวนการโฮสต์แยกต่างหากและลิงก์แบบจุดต่อจุดใช้หน่วยความจำที่ใช้ร่วมกันเพื่อจำลอง CPU-to-CPU การเชื่อมต่อแบบสองทิศทาง การออกแบบโดยเจตนาไม่รวมเครือข่ายบนพื้นฐานของบัสทั่วโลก
โครงการ Chrysalib, https://github.com/vygr/chrysalib ช่วยให้สามารถใช้สายเคเบิล IP และ USB3/USB2 ที่อุดมสมบูรณ์ "Copy" เพื่อสร้างเครือข่ายโฮสต์ที่แตกต่างกัน สิ่งนี้ช่วยให้ผู้ใช้สามารถเชื่อมต่อ MacBooks, Linux, Windows Machines และ PI4 เพื่อสร้างเครือข่ายการพัฒนา LAN หรือ WAN ของตนเองซึ่งค่อนข้างเจ๋ง
Chrysalisp ใช้ชุดคำสั่ง CPU เสมือนจริงเพื่อกำจัดการใช้งาน X64, ARM64, RISCV64 หรือ VP64 คำแนะนำดั้งเดิม ปัจจุบันมันรวบรวมโดยตรงกับรหัสดั้งเดิม แต่มีความสามารถในการแปลเป็นแบบฟอร์มรหัสไบต์และใช้การแปลรันไทม์
เพื่อหลีกเลี่ยงความจำเป็นในการลงทะเบียนการเล่นปาหี่สำหรับการผ่านพารามิเตอร์ฟังก์ชั่นทั้งหมดกำหนดอินเตอร์เฟสการลงทะเบียนของพวกเขาและแหล่งพารามิเตอร์และปลายทางจะถูกแมปโดยอัตโนมัติโดยใช้การเรียงลำดับทอพอโลยี หากตรวจพบการแมปที่ไม่ใช่ DAG ผู้ใช้สามารถระบุได้ด้วยการชั่วคราว ซอฟต์แวร์ยังรวมถึงตัวดำเนินการเพื่อให้ง่ายต่อการผูกพารามิเตอร์กับฟังก์ชั่นที่ถูกผูกไว้แบบไดนามิกที่อยู่สัมพัทธ์พูลสตริงที่กำหนดอัตโนมัติการอ้างอิงและค่าเฟรมสแต็กท้องถิ่น พารามิเตอร์เอาท์พุทที่ไม่ได้ใช้สามารถละเว้นได้ด้วยขีดล่าง
Chrysalisp มีระบบวัตถุและคลาสที่ทรงพลังซึ่งไม่ได้ จำกัด อยู่เพียงแค่แอสเซมเบลอร์ แต่ค่อนข้างมีความสามารถเท่าภาษาระดับสูง มันช่วยให้คำจำกัดความของคลาสคงที่หรือคลาสเสมือนจริงที่มีวิธีการแบบอินไลน์, เสมือน, ขั้นสุดท้าย, คงที่และแทนที่ GUI และ LISP ถูกสร้างขึ้นโดยใช้ระบบคลาสนี้
มันมีการเชื่อมโยงและการโหลดแบบไดนามิกระดับฟังก์ชั่น ฟังก์ชั่นจะถูกโหลดและผูกพันตามความต้องการเนื่องจากงานถูกสร้างและแจกจ่าย ขณะนี้ฟังก์ชั่นถูกโหลดจากระบบไฟล์ CPU ซึ่งงานอยู่ แต่ในอนาคตพวกเขาจะมาจากวัตถุเซิร์ฟเวอร์ที่งานถูกสร้างขึ้นด้วยและจะถูกส่งผ่านเครือข่ายตามต้องการ ฟังก์ชั่นจะถูกแชร์ระหว่างงานทั้งหมดที่ใช้วัตถุเซิร์ฟเวอร์เดียวกันดังนั้นจะมีการโหลดฟังก์ชันเพียงหนึ่งชุดโดยไม่คำนึงถึงจำนวนงานที่ใช้งาน
ฟังก์ชั่นระบบสามารถเข้าถึงได้ผ่านชุดคลาสคงที่ซึ่งทำให้ง่ายต่อการใช้งานและไม่จำเป็นต้องจดจำตำแหน่งฟังก์ชันคงที่และยังแยกแหล่งที่มาจากการเปลี่ยนแปลงในระดับระบบ คำจำกัดความของอินเตอร์เฟสสำหรับฟังก์ชั่นเหล่านี้สามารถพบได้ในไฟล์ SYS/XXX.inc
เทอร์มินัลคำสั่งที่มีอินเทอร์เฟซที่คุ้นเคยสำหรับแอปพลิเคชันบรรทัดคำสั่งสไตล์ท่อมีให้พร้อมกับ args เวกเตอร์, stdin, stdout, stderr ฯลฯ คลาสสำหรับการสร้างที่ง่ายของอาจารย์ท่อและทาสโดยมีการทำรังโดยพลการของท่อบรรทัดคำสั่ง แม้ว่านี่จะไม่ใช่วิธีที่ดีที่สุดในการสร้างแอพพลิเคชั่นแบบขนาน แต่ก็มีประโยชน์มากสำหรับองค์ประกอบของเครื่องมือและซ่อนข้อความทั้งหมดที่ผ่าน API ตามสตรีมที่คุ้นเคย
มีการจัดเตรียมล่ามเหมือนล่าม สิ่งนี้สามารถใช้ได้จากบรรทัดคำสั่งผ่านคำสั่ง lisp ในการสร้างประเภทระบบทั้งหมด (make) ให้คำนวณปริมาณงานคอมไพล์ขั้นต่ำหรือ (make-all) เพื่อทำทุกอย่างโดยไม่คำนึงถึงที่พรอมต์คำสั่ง LISP LISP นี้มีความสามารถในการ 'ตัวอย่าง' C-Script เพื่ออนุญาตให้ผสม C-Script Compiled Expressions ภายในการกำหนดและรหัสการเรียกใช้ฟังก์ชัน มีการปรับให้เหมาะสมระดับประถมศึกษาสำหรับการแสดงออกเหล่านี้ ทั้งคอมไพเลอร์เสมือนจริงและคอมไพเลอร์ C-Script ถูกเขียนด้วย LISP ให้ดูใน lib/asm/code.inc , lib/ asm/xxx.inc, lib/asm/func.inc , lib/ trans/x86_64.inc , lib/trans/arm64.inc และ lib/asm/vp.inc บางส่วนของ LISP Primitives ถูกสร้างขึ้นผ่านสคริปต์บูตที่แต่ละอินสแตนซ์ของคลาส LISP ทำงานในการก่อสร้างดู คลาส/LISP/ROOT.INC สำหรับรายละเอียด การรวบรวมและสร้างสภาพแวดล้อมพร้อมกับการรวบรวมทั้งหมดและทำคำสั่งถูกสร้างขึ้นผ่านเครื่องมือบรรทัดคำสั่ง LISP ใน LIB/ASM/ASMINC อีกครั้งอัตโนมัตินี้จะทำงานสำหรับแต่ละอินสแตนซ์ของคำสั่ง lisp จากเทอร์มินัล คุณสามารถขยายสิ่งนี้ด้วยไฟล์เพิ่มเติมจำนวนใด ๆ เพียงแค่วางไว้หลังจากคำสั่ง LISP และพวกเขาจะดำเนินการหลังจากไฟล์ lib/asm/asm.inc และก่อนการประมวลผลของ stdin
อย่าได้รับความคิดที่ว่าเนื่องจากการเข้ารหัสในการตีความ Lisp แอสเซมเบลอร์และคอมไพเลอร์จะช้า ระบบที่ทำความสะอาดอย่างเต็มที่สร้างจากแหล่งที่มารวมถึงการสร้างไฟล์ภาพบู๊ตที่ถูกล้อมรอบเต็มรูปแบบเต็มรูปแบบใช้เวลา 2 วินาทีใน 2014 MacBook Pro! วงจร dev (make) และ (remake) ภายใต้ 0.5 วินาที มันไม่ช้า!
ตารางการกำหนดเส้นทางเชื่อมโยงเครือข่ายถูกสร้างขึ้นในการบูตลิงก์และกระบวนการถูกแจกจ่ายในธรรมชาติแต่ละลิงก์จะเริ่มเติมน้ำท่วมซึ่งในที่สุดก็มาถึง CPU ทั้งหมดและตลอดทางได้ทำเครื่องหมายเส้นทางทั้งหมดจาก CPU หนึ่งไปยังอีก CPU พบเส้นทางที่สั้นที่สุดทั้งหมดข้อความที่ปิด CPU จะถูกกำหนดให้กับลิงค์เนื่องจากลิงค์จะกลายเป็นฟรีและหลายลิงก์สามารถและทำเส้นทางข้อความผ่านเส้นทางขนานพร้อมกัน ข้อความขนาดใหญ่ถูกแบ่งออกเป็นชิ้นส่วนเล็ก ๆ ในการส่งและสร้างใหม่ที่ปลายทางเพื่อเพิ่มการใช้เส้นทางที่มีอยู่
ตัวเลือกบรรทัดคำสั่ง -run เปิดตัวงานเกี่ยวกับการบูต CPU เช่น GUI ทดลอง (งานระหว่างดำเนินการ -run gui/gui/gui.lisp ) คุณสามารถเปลี่ยนสคริปต์การเปิดตัวเครือข่ายเพื่อเรียกใช้มากกว่าหนึ่งเซสชัน GUI หากคุณต้องการลองเปิด GUI มากกว่า CPU 0 ดูที่ funcs.sh ที่ฟังก์ชัน boot_cpu_gui ! -
ตัวเลือกบรรทัดคำสั่ง -l สร้างลิงก์ซึ่งปัจจุบันได้รับอนุญาตสูงสุด 1,000 ซีพียูได้รับอนุญาต แต่ก็ปรับได้ง่าย ไฟล์ลิงค์หน่วยความจำที่ใช้ร่วมกันถูกสร้างขึ้นในโฟลเดอร์ TMP /TMP ดังนั้นตัวอย่างเช่น /TMP /000-001 จะเป็นไฟล์ลิงค์สำหรับลิงก์ระหว่าง CPU 000 และ 001
ตัวอย่างเครือข่ายที่ดูด้วย PS ดูเหมือนว่าสำหรับเครือข่าย 4x4 Mesh:
./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
ลองดูที่ docs/intro.md สำหรับคำแนะนำในการเริ่มต้นในแพลตฟอร์มที่รองรับทั้งหมด
GUI ทดลองต้องใช้ห้องสมุด SDL2 ที่จะติดตั้ง
รับผ่านตัวจัดการแพ็คเกจของคุณบน Linux ด้วย:
sudo apt-get install libsdl2-dev
หรือบน Mac ผ่าน Homebrew
brew install sdl2
ดู docs/intro/intro.md สำหรับคำแนะนำเฉพาะแพลตฟอร์ม ต่อไปนี้สำหรับระบบ OSX และ Linux Windows มี Main.exe ที่สร้างไว้ล่วงหน้าหรือคุณสามารถกำหนดค่า Visual Studio เพื่อรวบรวมสิ่งต่าง ๆ ด้วยตัวเองหากคุณต้องการ
ครั้งแรกที่คุณดาวน์โหลด Chrysalisp คุณจะมีภาพบูต VP64 Emulator เท่านั้น คุณต้องสร้างภาพบูตดั้งเดิมในรอบแรก นี่ช้ากว่ารองเท้าบูทและการรวบรวมระบบที่ตามมาเล็กน้อย แต่ช่วยให้เราสามารถเก็บไฟล์ snapshot.zip ให้เล็กที่สุดเท่าที่จะทำได้
ถ้าบน Linux หรือ Mac ผ่าน Homebrew:
make install
หรือบน windows
install.bat
make
./run_tui.sh [-n num_cpus] [-e] [-b base_cpu]
ข้อความเชื่อมต่อผู้ใช้ที่เชื่อมต่อกับเครือข่ายที่เชื่อมต่ออย่างสมบูรณ์ CPU แต่ละตัวมีลิงก์ไปยัง CPU อื่น ๆ ระวังสิ่งนี้เนื่องจากคุณสามารถจบลงด้วยไฟล์ลิงค์จำนวนมากและภูมิภาคหน่วยความจำที่ใช้ร่วมกัน CPU 0 เปิดตัวเทอร์มินัลไปยังระบบโฮสต์
./run.sh [-n num_cpus] [-e] [-b base_cpu]
เครือข่ายที่เชื่อมต่ออย่างสมบูรณ์ CPU แต่ละตัวมีลิงก์ไปยัง CPU อื่น ๆ ระวังสิ่งนี้เนื่องจากคุณสามารถจบลงด้วยไฟล์ลิงค์จำนวนมากและภูมิภาคหน่วยความจำที่ใช้ร่วมกัน CPU 0 เปิดตัว GUI
./run_star.sh [-n num_cpus] [-e] [-b base_cpu]
เครือข่ายเชื่อมต่อดาว CPU แต่ละตัวมีลิงก์ไปยัง CPU แรก CPU 0 เปิดตัว GUI
./run_ring.sh [-n num_cpus] [-e] [-b base_cpu]
เครือข่ายที่เชื่อมต่อวงแหวน CPU แต่ละตัวมีลิงก์ไปยัง CPU ถัดไปและก่อนหน้า CPU 0 เปิดตัว GUI
./run_tree.sh [-n num_cpus] [-e] [-b base_cpu]
เครือข่ายเชื่อมต่อต้นไม้ ซีพียูแต่ละตัวมีลิงก์ไปยัง CPU หลักและ CPU เด็กมากถึงสองคน CPU 0 เปิดตัว GUI
./run_mesh.sh [-n num_cpus on a side] [-e] [-b base_cpu]
เครือข่ายเชื่อมต่อตาข่าย CPU แต่ละตัวมีลิงก์ไปยัง 4 CPU ที่อยู่ติดกัน สิ่งนี้คล้ายกับตาข่าย transputer CPU 0 เปิดตัว GUI
./run_cube.sh [-n num_cpus on a side] [-e] [-b base_cpu]
เครือข่ายที่เชื่อมต่อกับลูกบาศก์ CPU แต่ละตัวมีลิงก์ไปยัง 6 CPU ที่อยู่ติดกัน สิ่งนี้คล้ายกับตาข่าย TMS320C40 CPU 0 เปิดตัว GUI
หยุดด้วย:
./stop.sh
ภาพรวมกับ:
make snapshot
สิ่งนี้จะสร้างไฟล์ snapshot.zip ของไดเรกทอรี OBJ/ ที่มีเฉพาะโครงสร้างไดเรกทอรีโฮสต์, windows main_gui.exe และ main_tui.exe รวมทั้งไฟล์ vp64 boot_image !
ใช้เพื่อสร้าง snapshot.zip ขนาดกะทัดรัดมากขึ้นที่ขึ้นไปบน GitHub สิ่งนี้จะต้องเกิดขึ้นหลังจากการสร้าง (make-all-platforms) ชุด boot_image !
obj/vp64/VP64/sys/boot_image
obj/x86_64/WIN64/Windows/main_gui.exe
obj/x86_64/WIN64/Windows/main_tui.exe
ทำความสะอาดด้วย:
make clean