PageSourceSearch

https://www.moonbitlang.com/assets/js/367be8fd.12aa7041.js

js moonbitlang.com collected 2026-10-03 19:33:10 UTC 17,893 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[3634],{39722:(s,e,n)=>{n.r(e),n.d(e,{assets:()=>t,contentTitle:()=>o,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>h});var i=n(63947),l=n(13274),r=n(98703),a=n(98968),d=n(8764);const c={},o="2025-01-13",t={authorsImageUrls:[]},h=[{value:"Language Updates",id:"language-updates",level:2},{value:"IDE Updates",id:"ide-updates",level:2},{value:"Build System Updates",id:"build-system-updates",level:2},{value:"Documentation Updates",id:"documentation-updates",level:2},{value:"Standard Library Updates",id:"standard-library-updates",level:2}];function x(s){const e={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",span:"span",strong:"strong",ul:"ul",...(0,r.R)(),...s.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(e.h2,{id:"language-updates",children:"Language Updates"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.strong,{children:"Experimental Async Support"})}),"\n",(0,l.jsxs)(e.p,{children:["Experimental support for asynchronous programming has been added. You can declare asynchronous functions using ",(0,l.jsx)(e.code,{children:"async fn ..."})," and call them with ",(0,l.jsx)(e.code,{children:"f!!(...)"}),". MoonBit also provides primitives for interrupting control flow. For details, see ",(0,l.jsx)(e.a,{href:"https://docs.moonbitlang.com/en/latest/language/async-experimental.html",children:"docs/async-experimental"}),"."]}),"\n",(0,l.jsxs)(e.p,{children:["Currently, the async standard library and event loop are under development. Using the JavaScript backend's event loop and Promise API is easier for asynchronous programming. ",(0,l.jsx)(e.strong,{children:"As this feature is experimental, breaking changes may occur based on feedback. We welcome and appreciate your testing and feedback"}),"."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.strong,{children:"Upcoming Changes to Method Semantics"})}),"\n",(0,l.jsx)(e.p,{children:"Later this week, we will make major changes to simplify method-related rules. Currently:"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Methods can be declared as ",(0,l.jsx)(e.code,{children:"fn f(self: T, ..)"})," or ",(0,l.jsx)(e.code,{children:"fn T::f(..)"}),"."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Methods with ",(0,l.jsx)(e.code,{children:"Self"})," as the first parameter can be called with ",(0,l.jsx)(e.code,{children:"xx.f(..)"}),"."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["If unambiguous, methods can also be called with ",(0,l.jsx)(e.code,{children:"f(..)"}),"."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(e.p,{children:["However, the last rule lacks user control and consistency between call syntax (",(0,l.jsx)(e.code,{children:"f(..)"}),") and declaration syntax (",(0,l.jsx)(e.code,{children:"T::f(..)"}),"). The new design will:"]}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow ",(0,l.jsx)(e.code,{children:"fn f(self: T, ..)"})," to define methods callable with ",(0,l.jsx)(e.code,{children:"xx.f(..)"})," or ",(0,l.jsx)(e.code,{children:"f(..)"}),". These methods share the same namespace as regular functions and cannot have duplicate names."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow ",(0,l.jsx)(e.code,{children:"fn T::f(..)"})," to define methods callable with ",(0,l.jsx)(e.code,{children:"xx.f(..)"})," or ",(0,l.jsx)(e.code,{children:"T::f(..)"}),". These methods cannot be called as regular functions (",(0,l.jsx)(e.code,{children:"f(..)"}),")."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(e.p,{children:["Intuition: All ",(0,l.jsx)(e.code,{children:"fn f(..)"})," definitions are regular functions, while ",(0,l.jsx)(e.code,{children:"fn T::f(..)"})," definitions are placed in a small namespace associated with ",(0,l.jsx)(e.code,{children:"T"}),"."]}),"\n",(0,l.jsxs)(e.p,{children:["For methods like ",(0,l.jsx)(e.code,{children:"new"})," (without ",(0,l.jsx)(e.code,{children:"Self"})," as the first parameter), use ",(0,l.jsx)(e.code,{children:"fn new(..)"})," to enable direct calls as ",(0,l.jsx)(e.code,{children:"new(..)"}),". Library authors are encouraged to:"]}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Use ",(0,l.jsx)(e.code,{children:"fn f(..)"}
1)," for unambiguous functions and make the first parameter ",(0,l.jsx)(e.code,{children:"self"})," for ",(0,l.jsx)(e.code,{children:"xx.f(..)"})," calls."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Use ",(0,l.jsx)(e.code,{children:"fn T::f(..)"})," for potentially ambiguous functions to place them in a scoped namespace."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.strong,{children:"Enhanced Alerts"})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsx)(e.p,{children:"Trigger alerts on type usage."}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsx)(e.p,{children:"Trigger alerts on specific constructor usage."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:[(0,l.jsxs)(e.strong,{children:["Improvements to ",(0,l.jsx)(e.code,{children:"ArrayView"}),"/",(0,l.jsx)(e.code,{children:"BytesView"}),"/",(0,l.jsx)(e.code,{children:"StringView"})]}),":"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(e.ol,{children:["\n",(0,l.jsx)(e.li,{children:"Support for negative indices in view operations, e.g.:"}),"\n"]}),"\n",(0,l.jsx)(l.Fragment,{children:(0,l.jsx)(e.pre,{className:"shiki shiki-themes one-light one-dark-pro",style:{backgroundColor:"#FAFAFA","--shiki-dark-bg":"#282c34",color:"#383A42","--shiki-dark":"#abb2bf"},tabIndex:"0",children:(0,l.jsxs)(e.code,{children:[(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"let"}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" arr"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#56B6C2"},children:" ="}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:" ["}),(0,l.jsx)(e.span,{style:{color:"#986801","--shiki-dark":"#D19A66"},children:"1"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:", "}),(0,l.jsx)(e.span,{style:{color:"#986801","--shiki-dark":"#D19A66"},children:"2"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:", "}),(0,l.jsx)(e.span,{style:{color:"#986801","--shiki-dark":"#D19A66"},children:"3"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:", "}),(0,l.jsx)(e.span,{style:{color:"#986801","--shiki-dark":"#D19A66"},children:"4"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:", "}),(0,l.jsx)(e.span,{style:{color:"#986801","--shiki-dark":"#D19A66"},children:"5"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"]"})]}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"let"}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" arr_view"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#56B6C2"},children:" ="}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" arr"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"[-"}),(0,l.jsx)(e.span,{style:{color:"#986801","--shiki-dark":"#D19A66"},children:"4"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:":-"}),(0,l.jsx)(e.span,{style:{color:"#986801","--shiki-dark":"#D19A66"},children:"1"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"]"})]}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#4078F2","--shiki-dark":"#61AFEF"},children:"println"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"("}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"arr_view"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:") "}),(0,l.jsx)(e.span,{style:{color:"#A0A1A7",fontStyle:"italic","--shiki-dark":"#7F848E","--shiki-dark-font-style":"italic"},children:"// [2, 3, 4]"})]})]})})}),"\n",(0,l.jsxs)(e.ol,{start:"2",children:["\n",(0,l.jsxs)(e.li,{children:["Support for pattern matching in ",(0,l.jsx)(e.code,{children:"BytesView"})," with byte literals, e.g.:"]}),"\n"]}),"\n",(0,l.jsx)(l.Fragment,{children:(0,l.jsx)(e.pre,{className:"shiki shiki-themes one-light one-dark-pro",style:{backgroundColor:"#FAFAFA","--shiki-dark-bg":"#282c34",color:"#383A42","--shiki-dark":"#abb2bf"},tabIndex:"0",children:(0,l.jsxs)(e.code,{children:[(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"fn"}),(0,l.jsx)(e.span,{style:{color:"#4078F2","--shiki-dark":"#61AFEF"},children:" f"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"("}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"bs"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:": "}),(0,l.jsx)(e.span,{style:{color:"#C18401","--shiki-dark":"#E5C07B"},children:"BytesView"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:") "}),(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"->"}),(0,l.jsx)(e.span,{style:{color:"#C18401","--shiki-dark":"#E5C07B"},children:" Option"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"[("}),(0,l.jsx)(e.span,{style:{color:"#C18401","--shiki-dark":"#E5C07B"},children:"Byte"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:", "}),(0,l.jsx)(e.span,{style:{color:"#C18401","--shiki-dark":"#E5C07B"},children:"BytesView"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:")] {"})]}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"  match"}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" bs"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:" {"})]}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"    ["}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"b"}),(0,l.jsx)(e.span,{style:{color:"#50A14F","--shiki-dark":"#98C379"},children:"'a'"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:".."}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#56B6C2"},children:"="}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"b"}),(0,l.jsx)(e.span,{style:{color:"#50A14F","--shiki-dark":"#98C379"},children:"'z'"}),(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:" as"}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" b"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:", ..bs] "}),(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"=>"}),(0,l.jsx)(e.span,{style:{color:"#C18401","--shiki-dark":"#E5C07B"},children:" Some"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"(("}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"b"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:", "}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"bs"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:")),"})]}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"    _"}),(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:" =>"}),(0,l.jsx)(e.span,{style:{color:"#C18401","--shiki-dark":"#E5C07B"},children:" None"})]}),"\n",(0,l.jsx)(e.span,{className:"line",children:(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"  }"})}),"\n",(0,l.jsx)(e.span,{className:"line",children:(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"}"})}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"let"}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" s"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#56B6C2"},children:" ="}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" b"}),(0,l.jsx)(e.span,{style:{color:"#50A14F","--shiki-dark":"#98C379"},children:'"hello"'}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"[:]"})]}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#A626A4","--shiki-dark":"#C678DD"},children:"let"}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:" r"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#56B6C2"},children:" ="}),(0,l.jsx)(e.span,{style:{color:"#4078F2","--shiki-dark":"#61AFEF"},children:" f"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"("}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"s"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:")"})]}),"\n",(0,l.jsxs)(e.span,{className:"line",children:[(0,l.jsx)(e.span,{style:{color:"#4078F2","--shiki-dark":"#61AFEF"},children:"println"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:"("}),(0,l.jsx)(e.span,{style:{color:"#E45649","--shiki-dark":"#E06C75"},children:"r"}),(0,l.jsx)(e.span,{style:{color:"#383A42","--shiki-dark":"#ABB2BF"},children:") "}),(0,l.jsx)(e.span,{style:{color:"#A0A1A7",fontStyle:"italic","--shiki-dark":"#7F848E","--shiki-dark-font-style":"italic"},children:"// Some((b'\\x68', b\"\\x65\\x6c\\x6c\\x6f\"))"})]})]})})}),"\n",(0,l.jsxs)(e.ol,{start:"3",children:["\n",(0,l.jsxs)(e.li,{children:["The ",(0,l.jsx)(e.code,{children:"as"})," keyword in array patterns is now optional. ",(0,l.jsx)(e.code,{children:"[a, ..rest, b]"})," is valid, and the formatter will automatically omit ",(0,l.jsx)(e.code,{children:"as"})," from ",(0,l.jsx)(e.code,{children:"[a, ..as rest, b]"}),"."]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"ide-updates",children:"IDE Updates"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsx)(e.li,{children:"Added a command to toggle multi-line strings."}),"\n"]}
1),"\n",(0,l.jsx)("video",{autoPlay:!0,loop:!0,muted:!0,playsInline:!0,src:a.A,style:{width:"100%"}}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsx)(e.li,{children:"Added more detailed information to workspace symbols, making it easier to search for specific functions and types."}),"\n"]}),"\n",(0,l.jsx)("video",{autoPlay:!0,loop:!0,muted:!0,playsInline:!0,src:d.A,style:{width:"100%"}}),"\n",(0,l.jsx)(e.h2,{id:"build-system-updates",children:"Build System Updates"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsx)(e.li,{children:"Fixed a bug in doc tests affecting multi-line string test results."}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"documentation-updates",children:"Documentation Updates"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:[(0,l.jsx)(e.a,{href:"https://tour.moonbitlang.com",children:"MoonBit Tour"})," now supports debug codelens with value tracking enabled by default."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Launch ",(0,l.jsx)(e.a,{href:"https://oj.moonbitlang.com",children:"Moonbit Online Judge"}),", a platform for users to learn MoonBit by solving problems."]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{alt:"oj.png",src:n(53762).A+"",width:"2125",height:"1113"})}),"\n",(0,l.jsx)(e.h2,{id:"standard-library-updates",children:"Standard Library Updates"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Updated the behavior of ",(0,l.jsx)(e.code,{children:"Int64"})," to ",(0,l.jsx)(e.code,{children:"JSON"})," conversions. Precision is no longer lost through ",(0,l.jsx)(e.code,{children:"Double"})," conversion; values are now preserved as strings."]}),"\n"]})]})}function p(s={}){const{wrapper:e}={...(0,r.R)(),...s.components};return e?(0,l.jsx)(e,{...s,children:(0,l.jsx)(x,{...s})}):x(s)}},98968:(s,e,n)=>{n.d(e,{A:()=>i});const i=n.p+"assets/medias/command-6b4b2163825ff40082cb5cac8e84b443.webm"},8764:(s,e,n)=>{n.d(e,{A:()=>i});const i=n.p+"assets/medias/workspace-e5806b4fe0189bc55117dd7178242c0f.webm"},53762:(s,e,n)=>{n.d(e,{A:()=>i});const i=n.p+"assets/images/oj-efdc51d2dc651655f310f3c838488db8.png"},98703:(s,e,n)=>{n.d(e,{R:()=>a,x:()=>d});var i=n(79474);const l={},r=i.createContext(l);function a(s){const e=i.useContext(r);return i.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function d(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(l):s.components||l:a(s.components),i.createElement(r.Provider,{value:e},s.children)}},63947:s=>{s.exports=JSON.parse('{"permalink":"/updates/2025/01/13/index","source":"@site/updates/2025-01-13/index.md","title":"2025-01-13","description":"Language Updates","date":"2025-01-13T00:00:00.000Z","tags":[],"readingTime":2.72,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"unlisted":false,"prevItem":{"title":"2025-02-10","permalink":"/updates/2025/02/10/index"},"nextItem":{"title":"2024-12-30","permalink":"/updates/2024/12/30/index"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.