वेबसाइट लिखने के लिए Forth से प्रेरित भाषा
(robida.net)- Forge एक प्रायोगिक भाषा है जो वेबसाइट को stack-based भाषा में लिखने का प्रयोग करती है, और HTML tags को Forth-स्टाइल शब्दों के रूप में परिभाषित करके इस्तेमाल करती है
- word library के जरिए HTML में microformats जोड़ना आसान बनाया गया है, और साइट pages, libraries, और stylesheets से मिलकर बनती है
- एक single binary
.forgeफ़ाइलें चलाता है, और शामिल WebAssembly compiler Forge source से HTML बनाता है - सीधे विज़िट करने पर server HTML और मूल source दोनों देता है, और page navigation के समय service worker source लेकर browser में compile करता है
- state को
state,localStorage, और server के append-only log में सहेजा जा सकता है, और Forge अभी संभावनाओं की खोज के चरण में है
Forge का मूल विचार
- Forge वेबसाइट को stack-based भाषा में लिखने के लिए एक प्रायोगिक भाषा है
- HTML tags को Forth-स्टाइल शब्द (word) के रूप में परिभाषित करके इस्तेमाल किया जा सकता है
: h1 ( s -- ) "" emit . "
" emit ;
"Hello, World!" h1
- अगर word definition library बनाई जाए, तो HTML में **microformats** आसानी से जोड़े जा सकते हैं
- साइट pages, word libraries, और stylesheets से मिलकर बनती है
```text
my-site
├── lib.forge
├── style.css
└── pages
├── about.forge
├── hello.forge
└── notes.forge
- साइट को एक single binary से चलाया जाता है
forge --log forge.log my-site/
Rendering और state handling
- Forge binary में एक WebAssembly compiler शामिल है जो
.forgeफ़ाइलों से HTML बनाता है - किसी page पर सीधे जाने पर compiler server पर चलता है, और वास्तविक HTML source के साथ मूल
.forgesource भी दिया जाता है - pages के बीच navigation के दौरान service worker
/notesजैसे network requests को intercept करता है,/notes.forgesource लाता है, और browser में compiler चलाता है - इस संरचना से crawlers और WebMentions के लिए server-side rendering मिलता है, और page navigation के लिए SPA जैसा client-side rendering मिलता है
- state को
state,localStorage, और server के append-only log में सहेजा जा सकता है - उदाहरण के लिए, “Like” button क्लिक होने पर
"1"मान को"likes:demo"topic में जोड़ता है: like-button ( -- ) "❤" "do-like" on-click ; : do-like "1" "likes:demo" log-append ; : body "I liked this!" p like-button ; - server log JSONL फ़ॉर्मेट में होता है, जहाँ हर पंक्ति में एक JSON document रखा जाता है
- forms को दूसरी
.forgepage पर submit किया जा सकता है, और submitted content target page के stack में चला जाता है - backend storage को target page को
log-appendका इस्तेमाल करके संभालना पड़ता है - Forge कोई ऐसा टूल नहीं है जिसका वास्तविक साइटों में उपयोग तय हो चुका हो; यह अभी छोटे stack-based web language की संभावनाओं की खोज के चरण में है
1 टिप्पणियां
Lobste.rs टिप्पणियाँ
सबसे ऊपर वाला उदाहरण बिल्कुल वैसा लगता है जैसे मैं personal website बनाता हूँ :)
"hey"मैंने सोचा था कि जो लोग concatenative language से वेबसाइट बनाते हैं उन्हें इकट्ठा करके कोई webring जैसी चीज़ बनाई जाए और ideas शेयर किए जाएँ, लेकिन catlang community के अंदर भी ऐसे लोगों को ढंग से ढूँढ़ नहीं पाया जिन्होंने इसे सच में आज़माया हो
अगर भविष्य में कोई इस पुराने thread को पढ़ते हुए अपने जैसे किसी और को ढूँढ़ रहा हो, और आपने लगभग 10 pages से ज़्यादा की वेबसाइट बनाई हो, process के किसी भी हिस्से में AI इस्तेमाल न किया हो, और सब कुछ किसी न किसी concatenative language में लिखा हो, तो बताइएगा। कम से कम example sites की एक सूची तो बनाना चाहूँगा
https://stk.junglecoder.com playground implementation सहित पूरी तरह StackTalk में लिखा गया है, लेकिन अभी साइट का आकार थोड़ा छोटा है
जब StackTalk का rebuild कुछ हद तक पटरी पर आ जाएगा, तो उस हिस्से को बेहतर करने की योजना है। https://junglecoder.com के कुछ pages भी इसी तरह बना रहा हूँ, और हाल में https://junglecoder.com/blarg/tired-of-csharp.html को भी ऐसे ही बनाया। साइट का ज़्यादातर हिस्सा अभी भी Mendoza से build होता है, लेकिन static site generator की foundation के रूप में StackTalk का इस्तेमाल करना काफ़ी मज़ेदार है, इसलिए Mendoza से pstk की तरफ pages को सक्रिय रूप से migrate करने का इरादा है
यह निश्चित रूप से uxn से inspired था
नमस्ते! मैं वास्तव में https://min-lang.org जैसी कुछ sites में min को rules engine के रूप में इस्तेमाल कर रहा हूँ
मेरा static site generator HastySite Nim में लिखा गया है और templates के लिए mustache इस्तेमाल करता है, लेकिन सारी functionality min API के ज़रिए expose की गई है
min language website में इस्तेमाल होने वाली rules.min file का example यहाँ है
मेरी blog post यहाँ आई देखकर हैरानी हुई। यह लगभग बिना किसी context के लिखी गई पोस्ट है, इसलिए अगर कोई सवाल हो तो खुशी से जवाब दूँगा
थोड़ा background जोड़ूँ तो, Forge Rust में लिखा गया है और WebAssembly, यानी एक stack-based language, और native web server में compile होता है। मैं कुछ दिनों के लिए यात्रा पर हूँ, इसलिए लौटकर अगले हफ़्ते source public करने की योजना है
pages के लिए DSL बनाते समय blocks को लगातार compose कर पाना मुझे सच में बहुत पसंद आया। यह मेरी उम्मीद से कहीं ज़्यादा expressive निकला
यह काम वेबसाइट लिखने के एक वैकल्पिक तरीके को explore करने वाली एक series का हिस्सा है
मुझे लगा कि concatenative/stack-based languages इस काम के लिए वास्तव में बहुत अच्छी तरह फिट बैठती हैं
stack, tree को traverse या construct करने की प्रक्रिया को व्यक्त करने के लिए शानदार है, और Forth-परिवार की कम punctuation वाली syntax दस्तावेज़-जैसे code के साथ काफ़ी स्वाभाविक रूप से मेल खाती है
Starting Forth के पुराने washing machine example की भावना को अगर आधुनिक रूप में ढाला जाए, तो वह The DOM को handle करने वाले example जैसा हो सकता है—इस पर मैंने आधा लेख लिख रखा है, और यह देखकर अच्छा लगा कि दूसरे लोग भी वही कड़ी पकड़ रहे हैं