René's URL Explorer Experiment


Title: 開發散記 · Issue #1 · ssrlive/javascript · GitHub

Open Graph Title: 開發散記 · Issue #1 · ssrlive/javascript

X Title: 開發散記 · Issue #1 · ssrlive/javascript

Description: 啓動這個項目其實是很偶然的。 我其實不怎麼會 JavaScript 這門語言,因爲平時用不到。 讓我對它產生興趣的是因爲一個很無厘頭的契機: 我以前開發 翻牆軟件 時, 使用過 事件循環庫 libuv, 我給它提過 PR, 但該項目 主理人 Ben Noordhuis 沒有理會我。 這讓我 出離 憤怒, 放棄了 C 語言, 憤而轉投 Rust 語言並奮力學會了它, 編寫了整個 翻牆軟件 工具鏈, 從服務端客戶端到移動端, 都用 Rust 實現,現在運行良好。 後來一時興...

Open Graph Description: 啓動這個項目其實是很偶然的。 我其實不怎麼會 JavaScript 這門語言,因爲平時用不到。 讓我對它產生興趣的是因爲一個很無厘頭的契機: 我以前開發 翻牆軟件 時, 使用過 事件循環庫 libuv, 我給它提過 PR, 但該項目 主理人 Ben Noordhuis 沒有理會我。 這讓我 出離 憤怒, 放棄了 C 語言, 憤而轉投 Rust 語言並奮力學會了它, 編寫了整個 翻牆軟件 工具...

X Description: 啓動這個項目其實是很偶然的。 我其實不怎麼會 JavaScript 這門語言,因爲平時用不到。 讓我對它產生興趣的是因爲一個很無厘頭的契機: 我以前開發 翻牆軟件 時, 使用過 事件循環庫 libuv, 我給它提過 PR, 但該項目 主理人 Ben Noordhuis 沒有理會我。 這讓我 出離 憤怒, 放棄了 C 語言, 憤而轉投 Rust 語言並奮力學會了它, 編寫了整個 翻牆軟件 工具...

Opengraph URL: https://github.com/ssrlive/javascript/issues/1

X: @github

direct link

Domain: patch-diff.githubusercontent.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"開發散記","articleBody":"啓動這個項目其實是很偶然的。\n\n我其實不怎麼會 JavaScript 這門語言,因爲平時用不到。\n\n讓我對它產生興趣的是因爲一個很無厘頭的契機:\n\n我以前開發 翻牆軟件 時, 使用過 事件循環庫 libuv, 我給它提過 PR, 但該項目 主理人 Ben Noordhuis 沒有理會我。\n這讓我 出離 憤怒, 放棄了 C 語言, 憤而轉投 Rust 語言並奮力學會了它, 編寫了整個 翻牆軟件 工具鏈,\n從服務端客戶端到移動端, 都用 Rust 實現,現在運行良好。\n\n後來一時興起, 轉回頭去看看 Ben 在幹什麼, 發現他在折騰 QuickJS,\n這個 Bellard Fabrice 大神 編寫的 JavaScript 引擎, \nBen 主要是給它加上了 Windows 平臺的支持,\n整個項目大概 五萬 行 C 代碼,\n當時也就翻了翻, 沒做多想。\n\n某天,在 crates.io 上閒逛, 無意中發現 JavaScript 這個 crate 竟然不存在, \n雖然有一些 JavaScript 相關的 crate, 如 Boa 和 QuickJS 的綁定包 等等,\n就是沒有 JavaScript 這個包, 當時就很不解,它們爲什麼不直接佔用 JavaScript 這個名字呢?\n\n我就想, 既然沒人佔, 那我就不客氣了,我來, 我要用純 Rust 編寫一個 JavaScript 引擎。\n\n一開始,我打算用 諸如 C2Rust 之類的工具直接把 QuickJS 的 C 代碼轉換成 Rust 代碼,\n投機取巧欺世盜名地實現它, 在多次被 C2Rust 這弱智工具拉胯的表現整得沒脾氣後放棄了。\n\n直到有一天, 我發現, AI 輔助編程 的 能力已經強大到足以 自動生成 整個 複雜 Rust 項目的代碼了,\n於是我決定, 乾脆就用 AI 來幫我實現 這個 JavaScript 引擎吧。\n\n這個項目就這樣誕生了。\n\n剛開始, 我讓 AI 通讀 QuickJS 的源代碼, 然後把它轉換成 Rust 代碼。\n但是,我發現, 即使強如 ChatGPT-5.2 和 Gemini 3 Pro 這樣的 AI 模型,\n依然無法完全理解 QuickJS 的複雜邏輯,\n於是 我讓 它們 拋棄所有 QuickJS 代碼, 自己從零開始設計一個 JavaScript 引擎的架構。\n\n於是, 在與 AI 的一次次對話中, 這個 JavaScript 引擎的雛形逐漸成型了起來。\n這個過程中,我並沒有給 AI 什麼設計思路、架構藍圖, 完全是讓它自由發揮,\n我只是給它提供各種測試用例, 讓它根據測試用例來完善引擎的功能。\n\n某個時刻,我突然意識到,我這個玩笑性質的項目,最終結果竟然是要實現一個當今編程語言流行度排行榜前 5 語言的引擎,\n這讓我感到幾分惶恐,好在有 AI 助力, 就硬着頭皮幹了下來。\n\n很自然的, 對於內存管理, 它選擇了 Rust 的 Rc 和 RefCell 來實現引用計數垃圾回收機制;\n由於我本人對 JavaScript 語言也是一知半解, \n對於 JavaScript 引擎實現使用 Rc 和 RefCell 來實現內存管理這一點,並沒有覺得有什麼不妥。\n\n直到後來, 要實現原型鏈了, 我發現事情大條了, \nJavaScript 語言內, 循環引用其實是該語言的一部分, Rc 和 RefCell 根本無法應付這種情況,\n這讓我不得不重新審視整個引擎的內存管理機制。\n\n經過一番掙扎, 我決定放棄 Rc 和 RefCell, 改用 與 JavaScript 語言更契合的\n標記清除垃圾回收機制 (Mark-and-Sweep Garbage Collection)。\n研究了一通 rust-gc, rust-cc, dumpster 等 Rust 生態中的垃圾回收庫後,\n我最終選擇了 gc-arena 這個庫來實現引擎的內存管理。\n\n這導致了一個後果, 之前 AI 幫我生成的代碼幾乎全部報廢, 剩下的遺產 只有 Tokenizer 和 Parser 了,\n其他的代碼都得重寫。\n\n於是 在 AI 的再一次加持下, 我的 JavaScript 引擎終於走到現在。\n\n我發現, “測試驅動開發” 是這種語言類項目開發的最自然的開發路徑選擇。\n\n目前這個 JavaScript 引擎已經能夠通過所有 此前的測試用例, \n\n本引擎只支持現代 JavaScript 的 **嚴格模式**。\n這是因爲, 如果要 兼容 舊的 JavaScript 語言規範, 既縱容壞的 JS 編碼習慣, 也會讓引擎變得極其複雜臃腫不堪難以維護。\n\n本項目的最終目標是 通過 Test262 的全部 嚴格模式 測試用例,\n\n簡而言之, 這個 JavaScript 引擎, 將是 一個 嚴格模式 下的,乾淨利落的, 現代化的, 由純 Rust 實現的 JavaScript 引擎。\n它應該可以方便地嵌入到任何需要 使用 JavaScript 腳本的 Rust 項目中。\n","author":{"url":"https://github.com/ssrlive","@type":"Person","name":"ssrlive"},"datePublished":"2026-01-15T04:13:37.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/1/javascript/issues/1"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:f881cebb-8a5f-83c6-40c9-e030ed595ef5
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idD5AA:1975D8:EAB07:125737:6990AB52
html-safe-nonce4f20941fb71f3bae4b114b6e201920536bb269783da5c5c7e971f6d2d0adcb3c
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJENUFBOjE5NzVEODpFQUIwNzoxMjU3Mzc6Njk5MEFCNTIiLCJ2aXNpdG9yX2lkIjoiODE2NjU1MDM5NzIwMjI0NjQ4MiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmaccdfd2ef6168eef32ea5b36bf94240262d555490757ad029f46a0e5b1a1110152
hovercard-subject-tagissue:3815936704
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/ssrlive/javascript/1/issue_layout
twitter:imagehttps://opengraph.githubassets.com/b201a339094137f7caae58d0fcd64a7cd6ea344f40d1146ab340c87efbba4dce/ssrlive/javascript/issues/1
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/b201a339094137f7caae58d0fcd64a7cd6ea344f40d1146ab340c87efbba4dce/ssrlive/javascript/issues/1
og:image:alt啓動這個項目其實是很偶然的。 我其實不怎麼會 JavaScript 這門語言,因爲平時用不到。 讓我對它產生興趣的是因爲一個很無厘頭的契機: 我以前開發 翻牆軟件 時, 使用過 事件循環庫 libuv, 我給它提過 PR, 但該項目 主理人 Ben Noordhuis 沒有理會我。 這讓我 出離 憤怒, 放棄了 C 語言, 憤而轉投 Rust 語言並奮力學會了它, 編寫了整個 翻牆軟件 工具...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernamessrlive
hostnamegithub.com
expected-hostnamegithub.com
None42c603b9d642c4a9065a51770f75e5e27132fef0e858607f5c9cb7e422831a7b
turbo-cache-controlno-preview
go-importgithub.com/ssrlive/javascript git https://github.com/ssrlive/javascript.git
octolytics-dimension-user_id30760636
octolytics-dimension-user_loginssrlive
octolytics-dimension-repository_id1105676051
octolytics-dimension-repository_nwossrlive/javascript
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1105676051
octolytics-dimension-repository_network_root_nwossrlive/javascript
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release3b33c5aedc9808f45bc5fcf0b1e4404cf749dac7
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://patch-diff.githubusercontent.com/ssrlive/javascript/issues/1#start-of-content
https://patch-diff.githubusercontent.com/
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2Fssrlive%2Fjavascript%2Fissues%2F1
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2Fssrlive%2Fjavascript%2Fissues%2F1
Sign up https://patch-diff.githubusercontent.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=ssrlive%2Fjavascript
Reloadhttps://patch-diff.githubusercontent.com/ssrlive/javascript/issues/1
Reloadhttps://patch-diff.githubusercontent.com/ssrlive/javascript/issues/1
Reloadhttps://patch-diff.githubusercontent.com/ssrlive/javascript/issues/1
ssrlive https://patch-diff.githubusercontent.com/ssrlive
javascripthttps://patch-diff.githubusercontent.com/ssrlive/javascript
Notifications https://patch-diff.githubusercontent.com/login?return_to=%2Fssrlive%2Fjavascript
Fork 0 https://patch-diff.githubusercontent.com/login?return_to=%2Fssrlive%2Fjavascript
Star 1 https://patch-diff.githubusercontent.com/login?return_to=%2Fssrlive%2Fjavascript
Code https://patch-diff.githubusercontent.com/ssrlive/javascript
Issues 1 https://patch-diff.githubusercontent.com/ssrlive/javascript/issues
Pull requests 0 https://patch-diff.githubusercontent.com/ssrlive/javascript/pulls
Actions https://patch-diff.githubusercontent.com/ssrlive/javascript/actions
Projects 0 https://patch-diff.githubusercontent.com/ssrlive/javascript/projects
Security 0 https://patch-diff.githubusercontent.com/ssrlive/javascript/security
Insights https://patch-diff.githubusercontent.com/ssrlive/javascript/pulse
Code https://patch-diff.githubusercontent.com/ssrlive/javascript
Issues https://patch-diff.githubusercontent.com/ssrlive/javascript/issues
Pull requests https://patch-diff.githubusercontent.com/ssrlive/javascript/pulls
Actions https://patch-diff.githubusercontent.com/ssrlive/javascript/actions
Projects https://patch-diff.githubusercontent.com/ssrlive/javascript/projects
Security https://patch-diff.githubusercontent.com/ssrlive/javascript/security
Insights https://patch-diff.githubusercontent.com/ssrlive/javascript/pulse
New issuehttps://patch-diff.githubusercontent.com/login?return_to=https://github.com/ssrlive/javascript/issues/1
New issuehttps://patch-diff.githubusercontent.com/login?return_to=https://github.com/ssrlive/javascript/issues/1
開發散記https://patch-diff.githubusercontent.com/ssrlive/javascript/issues/1#top
https://github.com/ssrlive
https://github.com/ssrlive
ssrlivehttps://github.com/ssrlive
on Jan 15, 2026https://github.com/ssrlive/javascript/issues/1#issue-3815936704
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.