ter n i m al (หมายเหตุการสะกดคำ) เป็นโปรแกรมที่วาดรูปแบบแอนิเมชั่นในเทอร์มินัลโดยใช้สัญลักษณ์บล็อก Unicode มันทำงานในอีมูเลเตอร์เทอร์มินัลส่วนใหญ่และด้วยแบบอักษรที่มีการ monospaced ส่วนใหญ่

จากมุมมองที่ใช้งานได้จริงโปรแกรมไม่ได้มีประโยชน์มาก อย่างไรก็ตามมันมีเทคโนโลยีและคณิตศาสตร์ที่ยอดเยี่ยมเล็กน้อย:
Ternimal ยังเป็นการออกกำลังกายในความเรียบง่ายและความยับยั้งชั่งใจ เขียนด้วยสนิมเพียง 1,000 บรรทัด ไม่มีการพึ่งพา และใช้ทรัพยากรน้อยมาก: 400 kb บนดิสก์, RAM 3 MB และ 4 % ของแกน CPU เดียวที่มีพารามิเตอร์เริ่มต้น มันใช้การทำงานของพีชคณิตเชิงเส้นของตัวเองตั้งแต่เริ่มต้นเช่นเดียวกับการแยกวิเคราะห์บรรทัดคำสั่งพื้นฐานและเครื่องกำเนิดหมายเลขสุ่มแบบง่าย
Ternimal ไม่มีการพึ่งพานอกเหนือจากห้องสมุดมาตรฐานสนิมและไม่ต้องการสินค้าสำหรับการสร้าง จะต้องติดตั้งเฉพาะ rustc (> = 1.20) ซึ่งสามารถสร้าง ternimal ได้ด้วย::
git clone https://github.com/p-e-w/ternimal.git
cd ternimal
rustc -O ternimal.rs
โดยพื้นฐานแล้ว Ternimal ไม่ได้ทำอะไรมากไปกว่าสีสนามระยะไกลจากส่วนของเส้นทางที่คดเคี้ยว มีพารามิเตอร์มากมายที่ควบคุมกระบวนการนี้อย่างไรก็ตามเกือบทั้งหมดสามารถจัดการได้ผ่านบรรทัดคำสั่ง
สิ่งนี้ทำให้ระบบมีความยืดหยุ่นมาก ต่อไปนี้เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ ของสิ่งที่เป็นไปได้:
./ternimal length=100 thickness=1,4,1,0,0 radius=6,12 gradient=0:#666600,0.5:#00ff00,1:#003300

คลื่นไซน์สามารถใช้ในการสร้างรูปร่างที่ดูค่อนข้างเป็นอินทรีย์ ในกรณีนี้คลื่นครึ่งเดียวจะสร้างร่างของงู
./ternimal length=200 thickness=0,4,19,0,0

Ternimal ให้เพียงรุ่นเดียวเท่านั้น อย่างไรก็ตามการแปรผันของความหนาสามารถให้การปรากฏตัวของหน่วยงานที่ตัดการเชื่อมต่อหลายตัวที่เคลื่อนไหวในแบบประสานงาน
./ternimal length=20 thickness=70,15,0,1,0 padding=10 radius=5 gradient=0.03:#ffff00,0.15:#0000ff,0.3:#ff0000,0.5:#00ff00

ฟังก์ชั่นความหนารวมถึงพารามิเตอร์เวลา สิ่งนี้ทำให้สามารถกำหนดภาพเคลื่อนไหวรูปร่างได้ สามารถระบุคำศัพท์ฟูริเยร์ซีรีย์ได้หลายชุดโดยพลการทำให้มีภาพเคลื่อนไหวที่ซับซ้อนมาก
Ternimal ได้รับการปรับให้เหมาะสมอย่างมากสำหรับประสิทธิภาพในระดับที่ในหลาย ๆ สถานการณ์เวลา CPU ที่จำเป็นในการสร้างเอาต์พุตนั้นน้อยกว่าที่ใช้โดยเทอร์มินัลอีมูเลเตอร์เพื่อแสดงเดียวกัน มีการใช้เทคนิคต่าง ๆ เพื่อลดขนาดการคำนวณและขนาดเอาต์พุต ในเทอร์มินัล Gnome พารามิเตอร์เริ่มต้นจะแสดงผลสูงสุด 2,500 เฟรมต่อวินาที
ฉันได้ลองทุกอย่างภายใต้ดวงอาทิตย์เพื่อบีบประสิทธิภาพให้มากขึ้นด้วยผลลัพธ์ที่หลากหลาย ความพยายามที่ไม่ประสบความสำเร็จ/ความสำเร็จบางอย่างรวมถึง:
f32 แทน f64 สิ่งนี้ให้การเร่งความเร็ว 5-10 %แต่พบปัญหาที่แม่นยำหลังจากสองสามวัน อาจเป็นไปได้ที่จะ "รีเซ็ต" ค่าเวลาและตำแหน่งในช่วงเวลาปกติเพื่อหลีกเลี่ยงสิ่งนี้ แต่ตรรกะจะค่อนข้างซับซ้อนstdout แม้ว่า Ternimal จะเขียนเอาต์พุตจำนวนมาก แต่การเพิ่มประสิทธิภาพนี้ส่งผลให้เกิดการเร่งความเร็ว 1 % ที่น่าผิดหวังเท่านั้นและถูกทอดทิ้งformat! แมโครนั้นยากที่จะเอาชนะเพื่อจุดประสงค์นี้และทุกทางเลือกที่ฉันลองมีค่าเท่ากันหรือช้ากว่าtarget-cpu=native สิ่งนี้ยังไม่ปรับปรุงที่วัดได้การทำโปรไฟล์ด้วย Callgrind และ Oprofile เผยให้เห็นว่าเวลา CPU ส่วนใหญ่ใช้เวลาในการสร้างและเขียนสตริงเอาท์พุทและการคำนวณการเรนเดอร์มีบทบาทสำหรับรุ่นที่มีขนาดใหญ่มากเท่านั้น เมื่อขาดความสำเร็จในการพยายามจัดการเอาท์พุทได้เร็วขึ้นดูเหมือนว่าสมเหตุสมผลที่จะบอกว่าประสิทธิภาพของ Ternimal นั้นค่อนข้างน่าพอใจอยู่แล้ว
Ternimal ได้รับการทดสอบบน Linux, MacOS และ Windows
บน Linux อีมูเลเตอร์เทอร์มินัลเกือบทั้งหมดทำให้ ternimal ไม่มีที่ติ บน macOS แนะนำให้ใช้ iterm2 หรือ alacritty บน Windows, PowerShell และ WSL ดูเหมือนจะทำงานได้ดีด้วย ConeMU ก็ทำงานได้เช่นกัน แต่ขาดสี 24 บิต
เป็นไปได้มากที่สุดเนื่องจากเทอร์มินัลของคุณไม่รองรับลำดับการหลบหนีสี RGB 24 บิต นี่อาจหมายความว่าคุณกำลังใช้เทอร์มินัลเริ่มต้นของ MacOS ซึ่งเป็นตัวจำลองเทอร์มินัลที่สำคัญเพียงตัวเดียวที่ยังคงขาดคุณสมบัตินั้น
คุณมีสองตัวเลือก:
true_color=false ที่จะถอยกลับไปที่จานสี 256 สีซึ่งได้รับการสนับสนุนโดยเครื่องจำลองเทอร์มินัลทุกเครื่อง (แต่ดูไม่ดี)อาจเป็นเพราะอักขระบล็อกของตัวอักษรของคุณไม่ได้เติมเต็มเซลล์อักขระอย่างสมบูรณ์หรือเนื่องจากเทอร์มินัลของคุณมีระยะห่างของเส้นมากกว่าศูนย์
Ternimal ทำงานได้ดีที่สุดกับแบบอักษรที่มีอัตราส่วนตัวละครใกล้เคียงกับ 2: 1 มากที่สุด ตัวอักษรใน screencasts เป็น iosevka ที่ยอดเยี่ยม
คอนโซล Linux ไม่รองรับแบบอักษร Unicode อย่างไรก็ตามดูเหมือนว่าจะรับรู้ การเข้ารหัส Unicode และพยายามแปลจุดรหัส Unicode บางจุดไปยังจุดรหัสในการเข้ารหัสภายในซึ่งรวมถึงสัญลักษณ์บล็อกที่ต้องการโดย Ternimal
แม้ว่าจะมีข้อผิดพลาดในการแปลงนี้ อักขระ บล็อกครึ่งบน ถูกแปลอย่างถูกต้อง แต่ บล็อกครึ่งล่าง ไม่ได้ส่งผลให้รูปแบบลาย
แบบนี้:

ยินดีต้อนรับผู้ร่วมให้ข้อมูลเสมอ อย่างไรก็ตาม โปรดยื่นปัญหาที่อธิบายสิ่งที่คุณตั้งใจจะเพิ่มก่อนเปิดคำขอดึง โดยเฉพาะอย่างยิ่ง สำหรับคุณสมบัติใหม่! ฉันมีวิสัยทัศน์ที่ชัดเจนเกี่ยวกับสิ่งที่ฉันต้องการ (และไม่ต้องการ) ternimal ที่จะเป็นดังนั้นการพูดคุยเพิ่มเติมที่อาจเกิดขึ้นอาจช่วยให้คุณหลีกเลี่ยงการทำซ้ำและสูญเปล่างาน
โดยการมีส่วนร่วมคุณตกลงที่จะปล่อยการเปลี่ยนแปลงของคุณภายใต้ใบอนุญาตเดียวกันกับส่วนที่เหลือของโครงการ (ดูด้านล่าง)
ลิขสิทธิ์© 2017 Philipp Emanuel Weidmann ([email protected])
ปล่อยภายใต้เงื่อนไขของใบอนุญาตสาธารณะ GNU ทั่วไปเวอร์ชัน 3