שחרור הפרויקט , אשר מפתחת מהדר שפת Go עבור אזורים הדורשים ייצוג קומפקטי של הקוד המתקבל וצריכת משאבים נמוכה, כגון מיקרו-בקרים ומערכות קומפקטיות של מעבד יחיד. קוד תחת רישיון BSD.
הידור עבור פלטפורמות יעד שונות מיושם באמצעות LLVM, וספריות המשמשות בערכת הכלים הראשית מפרויקט Go משמשות לתמיכה בשפה. ניתן להריץ את התוכנית הקומפילטית ישירות על מיקרו-בקרים, מה שמאפשר להשתמש ב-Go כשפה לכתיבת סקריפטים לאוטומציה.
המניע ליצירת פרויקט חדש היה הרצון להשתמש בשפת Go המוכרת במכשירים קומפקטיים – המפתחים טענו שאם יש גרסת Python עבור מיקרו-בקרים, אז למה לא ליצור דומה לשפת Go. ללכת במקום Rust מכיוון שקל יותר ללמוד, מספק תמיכה בלתי תלויה בחוט עבור הקבילה מבוססת קורוטין, ומציע ספרייה סטנדרטית נרחבת ("סוללות כלולות").
В текущем виде поддерживается 15 моделей микроконтроллеров, включая различные платы Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary и Phytec. Программы также могут быть собраны для запуска в браузере в формате WebAssembly и в виде исполняемых файлов для Linux. Поддержки контроллеров ESP8266/ESP32 , אך פותח פרויקט נפרד להוספת תמיכה בשבב Xtensa ב-LLVM, שעדיין מסומן כלא יציב ואינו מוכן לשילוב עם TinyGo.
יעדי הפרויקט העיקריים:
תמיכה במערכות מרובות ליבות אינה בין המטרות העיקריות,
השקה יעילה של מספר עצום של קורוטינים (ההשקה של קורוטינים עצמה נתמכת במלואה), השגת רמת הביצועים של מהדר הייחוס gc (האופטימיזציה נשארת ל-LLVM ובאפליקציות מסוימות Tinygo עשויה להיות מהירה יותר מ-gc) והשלמה עם כל יישומי Go.
ההבדל העיקרי מהדר דומה הוא ניסיון לשמר את מודל ניהול הזיכרון המקורי של Go באמצעות איסוף זבל ולהשתמש ב-LLVM כדי ליצור קוד יעיל במקום להדר אותו לייצוג C. Tinygo מציעה גם ספריית זמן ריצה חדשה המיישמת מתזמן, מערכת הקצאת זיכרון ומטפלי מחרוזות המותאמות למערכות קומפקטיות. חלק מהחבילות, כגון סינכרון ו-reflection, נוצרו מחדש על סמך זמן הריצה החדש.
בין השינויים במהדורה 0.7 ניתן למנות את יישום הפקודה "מבחן tinygo", מתן תמיכה לאיסוף אשפה עבור רוב לוחות היעד (מבוסס על ARM Cortex-M) ו-WebAssembly, תמיכה בלוח HiFive1 rev B המבוסס על RISC- ארכיטקטורת V ולוח Arduino nano33,
תמיכה משופרת בשפה (תמיכה בשדות סיביות תוך שימוש ב-getters ו-seters, תמיכה במבנים אנונימיים).
מקור: OpenNet.ru
