豫构包制
图既定,豫构乃书项目内包籍之所指于 .豫构缓存/豫构语言服务/<包文件相对路径去掉。豫>.语言服务.json,其式同源码之语言服务。入口之串与列中诸段皆指包内源书;所依之名与主皆指本地包籍,外部之包则用绝对路径。层级之包:「包含在」之值指其父之籍,「包含包」诸项各指其子之籍,故自父自子皆可跳至彼端;闭包含库子,故为父行豫构,其子之籍亦书跳转。再行豫构则更新其文,编辑器循既有跳转之法读之。
籍
包籍以 。包。豫 为尾,其目录即包根。唯取 parser 之静态值,不求值,不行其中代码。
名称、所有者、版本、简介、说明、类型,皆须明载;依赖、平台、许可、包含在、包含包,按需书之(平台见“平台”之节,许可见“许可”之节,包含在与包含包见“层级之包”)。名须合文件之名;所有者定其籍,不另署作者。官包之所有者曰“豫言”。版本暂用三段十进整数,无前导零;今诸包初定 0.1.0,非编译器之版本。
简介书为典,键曰汉语、文言、赋曰,三者皆不可空,述全包之旨:汉语举通称与大用,文言述其缘起,赋曰咏其所为与所以为(三段之分,从提案〇〇〇二九第九节篇首注释之法)。赋曰为赋,以骈偶为骨,其字之多寡随包自有之源码(子包不计):不及三百行者二十八至五十六字,三百至二千九百九十九行者五十六至一百一十二字,三千行以上者一百一十二至一百六十八字。发现与检查示其汉语。旧之串书,今亦识之。
包身份以所有者与名称两字段存之。异主同名可并存,同主同名虽异版本亦报错。此版不求远包、不解版本范围、不立锁籍,亦不以自署所有者为身份认证。
索与依
先遍当前目录取包名,继解候选元数据以定主。目录不定本地主;外部包集合首层之主名须与包籍相符。坏籍则止。链接、缓存、Git 与旧版目录不索。
依赖省主,则取同主之包;异主须明书所有者与包。命令省主,唯短名独一可取。导入首段只书包名,其后皆从包根寻之,不寻当前文件之邻。
唯自身与直依可见,同域短名重则拒。单名导入依该包之默认导入而展,默认导入书空列则报错,不自合诸书。目录相套之包为界,不可自外层包之路径越之;然登记为子者,可经父路径 父之子 引之(见“层级之包”)。
库与器
类型以典载之,种类惟库与可执行文件。库不得载入口与文件名,而必书「默认导入」(见“默认导入”);器则二者俱备而不可书「默认导入」,名书无缀之程名,占一径段,如 格式化(旧包书 日志 之类以 yy 起者亦可用);未书 --输出 者豫构依本机之系统补其缀,如林檎上出 格式化。林檎。豫行。解码成枚举,各支不杂。旧库、程序、入口之顶层字段皆拒。
器支可另书「入口函数」,指入口之文中入口之函名,如 「入口函数」者『主』也;不书则默「入口」(提案 00006)。豫构构包之本入口,乃授之于编译器(--入口函数 名);命令行入口段或明指之文所构之入口用默名。
器支又可书「界面」,以别图形之器与独对终端之器:「界面」者『图形』也 谓须画屏,开窗于桌面;「界面」者『终端』也 谓惟用终端与标准出入,于壳中以「行」行之;不书则为终端。图形之器与终端之器同,编全部五目标(提案〇〇〇四六第三节);软件目录、市肆与桌面启台据「界面」分为两类(提案〇〇〇四六)。
唯库可供依赖。构库则编诸普通模块,除试书、脚本、数据之文(名。数据。豫 随导之之模而编检)与子包,不链为器。验类同此范围;默认导入为空(且无入口)之库验类时并检试模,且印所检之数,此类多惟置试之包,其模不在诸默认导入之闭。明指文件之试例另论。编译器公用诸书迁库中编译器核心,命令入口仍在豫言编译器包。此二包各有其籍,不复包中套库。
默认导入
库之「类型」必书「默认导入」:目之列,定独书包名之导(寻观「甲」之书。,或径止于子)所展为何模。
「类型」者「典」【
「种类」者『库』也,
「默认导入」者「列」【『语言核心/内建类型』,『数据结构/多态列』,『控制/惰性求值』】也,
】也。
- 目者,以“/”分段之包内模径(不含缀),或登记之子名;子先于模,同“层级之包”之则。目为子,则递归展其子自身之默认导入;书作
子/模则为该子中之一模。目不可重,不可含“;”,每段皆合于名。 - 「默认导入」为库之必书字段,值为列,可为空列
【】:空列示此包不可独书包名而导,独书包名之导则报“没有默认导入,请写明模块”。器不可书此字段。 - 展依目之序:
寻观「甲」之书。于每叶模依次寻观(后者先),并以甲绑一名空间,统诸叶模,甲之名于诸叶模中逐一求之;寻「甲」之书。唯绑名空间;观自身不载文,唯开已导之叶模之名。目自身之模名空间不另绑,欲用则显寻。 - 展为多模,则诸模不许导出同名之义,导处报“默认导入的条目导出了同名定义「名」”。
- 目之存否与越子包之界,展时乃验,报错同常模之导。底层之文依底层之缀,着色之文依着色之缀,逐目求之。
- 构时包记载此列;包上下文书第五式,见“层级之包”。
缘由与迁移,见默认导入设计。
编译之模
编译之模以文名定之,详见底层模式:名含「。底层」者为底层之文(不用垃圾回收,供执行器、驱动等系统之码),曰底层之源 名。底层。豫、底层之试 名。底层。测试。豫、底层接口 名。底层接口。豫、底层内建之声 名。底层内建。豫;余皆高级之文(有垃圾回收)。包描述书“编译模式”之字段,则报错。
底层之文所导,唯求上述三种底层之模;高级之文导底层之模则报错,故底层之代唯依底层库诸含底层之文之包。一包之中可兼置二者,包之层级与模无涉。包之入口与 豫构 文件 所指之文,二者皆可:编译器依入口之文名择其管线。底层可执行之包,所成者 Wasm 模块。包上下文第三、四式之“底层”一行今恒空,存其式以供稳定编译器读之。
平台
可选之字段「平台」,明包可用于何平台,及各平台所须之外依。其书法如「依赖」:值为列,每项或为平台名之串(简书),或为含「名称」之典。如唯行于诺驿、须二诺驿库之包:
「平台」者「列」【「典」【「名称」者『诺驿』也,「诺驿库」者「列」【『@kmamal/sdl』,『@kmamal/gpu』】也】】也。
典之「名称」必书;「诺驿库」「系统库」可书,皆串之列。诺驿者,Node.js 也;诺驿库者,npm 之包也;「系统库」书动态装载器所认之文件名。如依操作系统而明图形处理器之系统库:
「平台」者
「列」
【「典」【「名称」者『诺驿之林纳』也,「系统库」者「列」【『libcuda.so.1』】也】
,「典」【「名称」者『诺驿之轩窗』也,「系统库」者「列」【『nvcuda.dll』】也】
,「典」【「名称」者『诺驿之林檎』也,「系统库」者「列」【『Metal.framework』】也】
】
也。
平台之树有定,子平台之名连“之”为一:
林檎
林纳
轩窗
豫言系统
诺驿
诺驿之林檎
诺驿之林纳
诺驿之轩窗
- 不书「平台」,则诸平台皆可用,无外依。书之,则唯所列之平台及其子平台可用;书『诺驿』,则兼诺驿之林檎、诺驿之林纳、诺驿之轩窗。
- 父子之平台俱书,则于子平台并二项之外依。
- 「诺驿库」唯诺驿及其子平台可书。其名依 npm 之则:唯小写字母、数字及
- . _ ~,可冠一@作用域/(/至多一,有/则必以@起),长不逾二百一十四。 - 「系统库」唯操作系统既定之平台可书:林檎、林纳、轩窗、诺驿之林檎、诺驿之林纳、诺驿之轩窗。其名唯 ASCII 字母、数字及
_ + - .,不许含路径之分隔符。 - 豫言系统暂无外依,唯可简书为
『豫言系统』。 - 平台名不在树中、典有未知之字段、同名之平台重出、「平台」书为空列,皆报错;错辞具包籍之径、字段与值,如
包配置:…/火星。包。豫:「平台」含未知平台名:火星(可写的平台:…)。 - 发现诸包之时,即解「平台」而验之;构建今唯解而验之,不装外依。所解之果存于包配置之数据:库
牌记之「包诸平台」依书之序列诸项,「包平台依」求包于某平台之外依(诺驿库之名与系统库之名二列),包不可用于其平台则得「可无」。 - 旧之「原生」字段(C 源文、包含目录与系统依赖)已删;包籍书「原生」则报未知字段。
- 待办事项:诺驿库之版本范围、可选之外依、依指令集更分平台、浏览器与云工入平台之树、依赖闭包之平台交集,皆未为之。
许可
可选之字段「许可」书包之许可,其值为 SPDX 许可式之串:
「许可」者『MIT』也。
「许可」者『AGPL-3.0-only』也。
「许可」者『MIT OR Apache-2.0』也。
- 值不可空,首尾无空格,唯 ASCII 字母、数字、
. - + : ( )与空格;不合则报错,错辞具包籍之名与字段,如包配置:火星。包。豫:「许可」只许 ASCII 字母、数字……。豫构唯验其字;SPDX 之名有效否,用者自验之。 - 发现诸包之时即解而验之;库
牌记之「包许可」读其值,不书则空串。 - 社区包仓库(
yuyan-lang/yuyan-community-packages)每包必书「许可」,唯收其白名单之许可(见彼仓之说明);语言仓抄入社区仓库之包,皆标AGPL-3.0-only。 - 此新字段也:旧之稳定豫构以为未知之字段而报错。本仓之包籍,俟 CI 一轮自举既过、连续版易以支之之原生工具链包,乃可书(CI 起步取连续版最新之包,见
AGENTS.md「包与接口」);社区包仓库自钉其工具链,钉于支之之包即可用。 - 待办事项:本仓之包籍补书「许可」,乃改为必书。
层级之包
包籍增二可选之字段,使诸包成组:父登记其直子,子明其父。以安全外壳诸库为例:
「:安全外壳。包。豫(父):」
「包含包」者「列」【『安全外壳密码』,『安全外壳协议』】也。 「:直子;次序有义:」
「:安全外壳协议。包。豫(子):」
「包含在」者『安全外壳』也。 「:父;不书则为根:」
二字段之值,皆同主之包名,一包至多一父。层乃逻辑之树,不系于目录;目录相套而未登记者,仍唯为界。身份仍为主、名,天下唯一,不因层而改。两向必相应:父之「包含包」当恰为凡书「包含在」其父者;缺一向、多一向、父或子不存、自含、重复、成环,皆报错,错辞含 包含在的父包不存在、父包未登记子包、登记的子包不存在、子包未声明包含在、包含关系成环、包不能包含自身、包不能包含在自身之中、包含包重复。
依父,则兼依父及其后裔之为库者(子、孙以下),亦可唯依某子。闭包之序:先「依赖」,次「包含包」所列之库子,末及自身;「包含包」之次宜稳。由是:子不得依其祖(成环,报“包依赖成环”;环含包含者,并示 子包不能依赖其祖先);可执行之子不入闭包,不可导入,唯登记以归类。
导入之法不改。设当前包为甲,路径为 一之二之…之末:首段必为甲自身或甲直依之名,得乙;自次段起,段为乙所登记之库子,则以其子代乙而续,否则余段为乙之包内模块;无余段,则依乙之默认导入而展,如单名导入。如唯依「密壳」者,可书 寻观「密壳」之「密壳约」之「通道」之书。。子先于模块:父之模块路径若以子名起(子名。豫 或 子名/…),则蔽其子,报 子包与父包模块重名。唯依父戊,则其子己不得为首段;寻 以末段名空间,故 寻观「戊」之「己」之书 所绑仍为 己。
包上下文书第五式:承第四式,每记于「父」与直依之间复增「默认导入」一列(目以“;”连之,空串示无默认导入);第四式承第三式,模行恒有,每记于文件与直依之间增「父」一列;旧编译器不识第四、五式。二至四式无「默认导入」之列,读之则自各包之包籍取此字段。行 ./豫构。林檎。豫行 检查 包名,于有包含关系之包,增一行 <包标识> 包含在:<父包名或(根)>;包含:<子包名、…>(无子则省“;包含”之辞),无包含者不增。行 ./豫构。林檎。豫行 发现 --树,依层级录诸包:无「包含在」者为根,依包述之径而排;子依「包含包」之序,每层缩进二格。每行书包名、自项目根之目录(可执行者另注“可执行文件”)与简介,末行计包数与树数;不书 --树 则仍逐行平列。本仓之层级,见仓库包构建“包之层级”之节。缘由、升级之序与试点,见豫构层级包设计。
书法
全仓之源惟一书法,曰雅言(提案〇〇〇二六、〇〇〇二七,见雅言之体)。包述无书法之字段;包上下文一律书第五式,读旧带“文体”之列之第六式则略其列。
说明之文
说明登记汉语、文言二路径,尾分别为 .汉语.md 与 .文言.md。验其存在、同包、无链接越界。简介供概览,正文载用途、用法与维护之则;不以说明作源码。普通包归档尚未实现,不称说明已可发布。
完整例与命令见汉语说明。旧稳定豫构不能读新籍;正式推广须先更新双种子。今版供审,不自行发布。