عن المشروع
GoSX هي منصة ويب أصلية بلغة Go تتعامل مع المتصفح كهدف عرض بدلاً من بيئة تشغيل. تتيح للمطورين تعريف مكونات `.gsx` باستخدام صياغة صارمة ومُنمّطة (`component Name(props: Type)`)، والتي تُترجم عبر خط أنابيب مترجم حقيقي. تُعرض مكونات الخادم كـ HTML افتراضياً، بينما تُهيَّأ الجزر التفاعلية عبر WebAssembly في آلة افتراضية مشتركة. لا يتطلب الإطار أي سلسلة أدوات JavaScript على جانب التطبيق ولا CGo، ويحافظ على ميزانية تبعيات صغيرة.
الإصدار الحالي هو v0.57.1 (قبل 1.0)، مع تغييرات كاسرة موثقة في CHANGELOG.md.
## المفاهيم الأساسية
- **مكونات الخادم**: دوال Go تُرجع HTML، تُعرض على جانب الخادم بتكلفة صفرية على العميل.
- **الجزر**: أشجار DOM فرعية تفاعلية تستخدم الإشارات وتفويض الأحداث، تُترجم إلى آلة WASM افتراضية مشتركة بحمولات برامج صغيرة.
- **المحركات**: حسابات ثقيلة على العميل (canvas، WebGL، WebGPU، عمال الخلفية) عبر حزم WASM أو JS مخصصة.
- **المراكز**: حضور WebSocket، والتوزيع، والحالة المشتركة، ومزامنة CRDT.
- **الإجراءات**: معالجات التغيير على جانب الخادم مع تحقق منظم.
## الميزات الرئيسية
- **مكونات مُنمّطة**: الخصائص هي هياكل Go عادية مُعلنة في نفس ملف `.gsx`، لذا يكتشف مترجم Go الحقول غير المعروفة أو القيم غير المتوافقة.
- **سطح تعبيرات صارم**: مجموعة صغيرة وآمنة للعرض من التعبيرات لحقول الخصائص (سلاسل، قيم منطقية، أعداد صحيحة، أعداد عشرية، مراجع حقول مباشرة).
- **نشر القيم**: تقبل المكونات الصارمة نشر `{...source}` واحد مع إثبات نوع بنيوي.
- **الجزر**: تدعم الإشارات والقيم المحسوبة والمعالجات وتكوين مكونات العرض النقي (تُضمّن في وقت الترجمة).
- **الصياغة القديمة**: صيغة `func Name(props T) Node` الأقدم لا تزال تعمل لكنها مهجورة؛ ستُزال المكونات القديمة غير المُنمّطة قبل v1.0.
- **التوجيه القائم على الملفات**: تُكتشف المسارات من دليل `app/` مع التخطيطات والمسارات المتداخلة والمقاطع الديناميكية والمقاطع الشاملة ومجموعات المسارات.
- **وحدات الخادم**: اربط منطق Go (تحميل البيانات، الإجراءات، البيانات الوصفية) بصفحات `.gsx` دون لمس القوالب.
- **خط أنابيب الترجمة**: يُحلَّل بواسطة gotreesitter (إعادة تنفيذ tree-sitter بلغة Go نقية)، ويُخفَّض إلى IR بمصفوفة مسطحة، ويُتحقق منه، ثم يُعرض أو يُترجم إلى برامج الجزر.
- **الحالة التفاعلية**: إشارات بتفاعلية دقيقة؛ الإشارات ذات البادئة `$` مشتركة عبر الجزر في الصفحة.
- **ميزات الخادم**: الجلسات والمصادقة (HMAC-SHA256، AES-GCM، CSRF، روابط سحرية، OAuth 2.0، WebAuthn)، إجراءات مع تحقق على مستوى الحقل، التخزين المؤقت (static، revalidate، data، ISR)، التنقل بانتقالات ناعمة، البث عبر `ctx.Defer()` و`ctx.Suspense()`، تحسين الصور والخطوط، توجيه i18n، طبقة المحتوى (mdpp)، سجل المكونات، تخطيط النص، الفيديو المُدار، الحركة، جسر صوت خلفية YouTube، أسطح وقت التشغيل، وتكامل Stripe.
- **المحركات**: سطح برمجي `engine.Config` / `ctx.Engine` لـ v1؛ الوحدات هي برامج Go WASM عادية.
## الفلسفة
- المتصفح هدف عرض؛ JavaScript اختيارية لكل ميزة.
- لغة واحدة (Go) مع مترجم متصفح صريح؛ لا Node ولا npm ولا webpack ولا إعداد bundler.
- لا CGo في أي مكان؛ جميع الحزم تُترجم إلى WASM وتُترجم تبادلياً بشكل نظيف.
- أوليات، لا أطر داخل أطر؛ خمس أوليات تنفيذ متميزة مفروضة.
- ادفع مقابل ما تستخدمه؛ الصفحات الثابتة ثابتة، والجزر تُشحن فقط عند الحاجة.
- لا سحر خفي في المسار الساخن؛ خط أنابيب المترجم قابل للفحص.
- ميزانية تبعيات صغيرة كقيد تصميمي.
## البدء السريع
```bash
gosx init my-app
cd my-app
go run .
```
أو أنشئ قالب الوثائق:
```bash
gosx init my-docs --template docs
cd my-docs
go run .
```
خادم بسيط بدون CLI:
```go
package main
import (
"m31labs.dev/gosx"
"m31labs.dev/gosx/server"
)
func main() {
app := server.New()
app.Page("/", func(ctx *server.Context) gosx.Node {
return gosx.El("h1", gosx.Text("Hello from GoSX"))
})
app.ListenAndServe(":8080")
}
```
## مثال مكون
```gsx
package app
import "m31labs.dev/gosx/signal"
type GreetingProps struct {
Name string
}
component Greeting(props: GreetingProps) {
return <div class="greeting">
<h1>Hello, {props.Name}!</h1>
<p>Welcome to GoSX.</p>
</div>
}
type CounterProps struct {
Initial int
}
//gosx:island
component Counter(props: CounterProps) {
count := signal.New(props.Initial)
increment := func() { count.Set(count.Get() + 1) }
decrement := func() { count.Set(count.Get() - 1) }
return <div class="counter">
<button onClick={decrement}>-</button>
<span>{count.Get()}</span>
<button onClick={increment}>+</button>
</div>
}
```
## مهارات الوكيل
للوكيلات التي تساعد المستخدمين في GoSX، المهارة الأساسية هي [using-gosx](https://github.com/odvcencio/m31labs-skills/blob/main/skills/using-gosx/SKILL.md). للجوال الأصلي والمحرر والإدارة ونظام إدارة المحتوى المحيطي، راجع [using-gosx-ecosystem](https://github.com/odvcencio/m31labs-skills/blob/main/skills/using-gosx-ecosystem/SKILL.md).
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.