Go 1.26ã§è¿œå ãããnew(expr)ã¯ãªããã®åœ¢ãªã®ã ããã«ã¡ã¯ãéçº1éšã® @uho-wq ã§ãã æ¬èšäºã§ã¯Go 1.26ã§è¿œå ããã new(expr) ãã©ã®ãããªè°è«ã®æ«ã«ãã®åœ¢ã«èœã¡çããã®ãã説æããããšæããŸãã go.dev new(expr) Go 1.26ã§ãçµã¿èŸŒã¿é¢æ° new ãåŒ(expression)ãåãåããããã«ãªããŸããã p := new ( 42 ) // *int, å€ã¯42 s := new ( "hello" ) // *string, å€ã¯"hello" b := new ( true ) // *bool, å€ã¯true ãšãŠãã·ã³ãã«ãªæ§æè¿œå ã«æããŸãããå®ã¯ãã®çµè«ã«è³ããŸã§2014幎ãã2025幎ãŸã§ã® 11幎 ãããããŸããã ãã®èšäºã§ã¯ã以äžã®2ã€ã®issueãããšã«è°è«ã®æµãã远ã£ãŠãããŸãã github.com github.com â» ãã®èšäºãäœæããã«ãããããããã®issueã«ä»ããã³ã¡ã³ããã¹ãŠã«ç®ãéããŸããã11幎åã®è°è«ã¯éåžžã«èšå€§ãªããæ¬èšäºã§ã¯èŠç¹ãçµã£ãŠç޹ä»ããŠãããè§£éã®éããæãæŒããããå¯èœæ§ããããŸãããäºæ¿ãã ããã ããããäœãåé¡ã ã£ãã®ã Goã§ã¯composite literalã¯çŽæ¥ãã€ã³ã¿ãååŸã§ããŸãããããªããã£ãåã¯å®£èšæã«ãã€ã³ã¿ãåŸãããšãã§ããŸããã p := &Point{X: 1 , Y: 2 } // OK: composite literalã¯&ãåãã p := & 42 // ã³ã³ãã€ã«ãšã©ãŒ: cannot take address of 42 ãã£ãŠåŸæ¥ã§ã¯ä»¥äžã®ããã«äžåºŠå€æ°ã«ä»£å
¥ããŠãã€ã³ã¿ãåŸãæžãæ¹ããããããã«ããŒé¢æ°ãå®çŸ©ãããããããŸããã§ããã v := 42 p := &v // ãã«ããŒé¢æ° func IntPtr(v int ) * int { return &v } äŸãã°ãAWS SDK for Goã§ã¯ aws.String() ã aws.Int64() ãšãã£ã ãã«ããŒé¢æ° ã倧éã«å®çŸ©ãããŠããŸããæ§é äœã®å€ãaws.String()ã§å²ããšãã£ãäœæ¥ã¯AWS SDK for Goã䜿ã£ãããšãããæ¹ã¯çµéšæžã¿ãªã®ããªãšæããŸãã Go 1.18ã§Genericsãå°å
¥ãããããšã«ãã£ãŠããã«ããŒé¢æ°ãæ±çšçã«èšè¿°ããããšãã§ããããã«ãªããŸããã func Ptr[T any](v T) *T { return &v } ãããããããcomposite literalã®ã¿çŽæ¥ãã€ã³ã¿ãåãããšããåé¡ã®åé¿çã«ã¯ãªããŸããããæ ¹æ¬è§£æ±ºã«ã¯è³ããŸããã§ããã ããããèæ¯ãããèšèªã¬ãã«ã§ã®è§£æ±ºçãé·å¹Žã«ããã£ãŠè°è«ãããŠããŸããã以éã§ã¯ããã®è°è«ããªãæçµçã« new(expr) ãšãã圢ã«èœã¡çããã®ããæç³»åã§è¿œã£ãŠãããŸãã proposal: spec: add &T(v) to allocate variable of type T, set to v, and return address #9097 2014幎11æã«chai2010æ°ã«ããæåã®ææ¡ãè¡ãããŸããã ææ¡ã¯ã以äžã®2ã€ã®æ§æã远å ããããšãããã®ã§ããã new 颿°ã®æ¡åŒµ: func new(Type, value ...Type) *Type &Type(value) æ§æã®è¿œå äŸïŒ px := new ( int , 9527 ) px := & int ( 9527 ) åœåã¯å€§ããªåé¿ããªãissueã¯æŸçœ®ãããŠããŸãããã2018幎ã«Ian Lance Tayloræ°ã ææ¡ã«å床èšå ããŸããã &int(5) ãèš±ããªã new(int, 5) ã¯äžèŠã§ããã new ãå®å
šã«åé€ããããšããæ€èšãã¹ã ã ãšè¿°ã¹ãŸããããããŠä»»æã®åŒã« & ãé©çšããéã®åé¡ç¹ã2ã€ææããŠããŸãã 1ã€ç®ã¯ä»»æã®åŒ v ã«å¯Ÿã㊠&v ãåãããšããå Žåãè«ççã«ã¯ã¢ãã¬ã¹ã®ã¢ãã¬ã¹ &&v ãåããã¹ãã ãã && ã¯ç°ãªãæå³ãæã€æŒç®åãªã®ã§åäœããªã 2ã€ç®ã¯ &var ã¯ã«ãŒãå
ã§åŒã³åºããŠãæ¯ååãå€ã«è§£æ±ºããããã &expr ã¯æ¯åæ°ããã€ã³ã¹ã¿ã³ã¹ã確ä¿ããã®ã§ç°ãªãå€ã«è§£æ±ºããã ãŸã2020幎ã«ã¯ãIan Lance Tayloræ°èªèº«ãããžã§ããªã¯ã¹ãå
¥ãã°æ°ããèšèªæ©èœãå¿
èŠãšããªãã®ã§ããžã§ããªã¯ã¹ãåŸããŸã§åŸ
ã£ãŠããã®ãããªã¢ãããŒããååãã©ãããèŠãããšæãããšã è¿°ã¹ãŠããŸã ã çµå±#9097ã¯2023幎8æã«#45624ãåªå
ãã圢ã§ã¯ããŒãºãããŸããã9幎éã§40ä»¶ã®ã³ã¡ã³ããå¯ããããIan Lance Tayloræ°ãæç€ºããè«ç¹ã¯#45624ã§ãç¶ç¶ããŠè°è«ãããŸãã spec: expression to create pointer to simple types #45624 2021幎4æã«Rob Pikeæ°ã«ãã£ãŠissueãç«ãŠãããŸããã Pikeæ°ã¯issueãåãªãŒãã³ãã代ããã«ãæ°ãã«2ã€ã®éžæè¢ãæç€ºããŸããã Option 1: new ã«ç¬¬2åŒæ°ã远å ãã p1 := new ( int , 3 ) p2 := new ( rune , 10 ) p3 := new (Weekday, Tuesday) Option 2: å倿ã®çµæãã¢ãã¬ã¹å¯èœã«ãã p1 := & int ( 3 ) p2 := & rune ( 10 ) p3 := &Weekday(Tuesday) Pikeæ°ã¯ãäž¡æ¹å
¥ããŠããããããããªãããšãè¿°ã¹ãŠããŸãã æ³šç®ãã¹ãã¯ããã®æç¹ã§ã¯æçµåœ¢ãšãªã new(expr) ã¯ãŸã ææ¡ãããŠããªãã£ããšããããšã§ããPikeæ°ã®ææ¡ã¯ãããŸã§ new(T, v) ïŒåãšå€ã®2åŒæ°ïŒãš &T(v) ã®2æã§ããã new(1) ã®ææ¡ (2021幎4æ) Pikeæ°ã®ææ¡ããæ°æ¥åŸãGo Teamã® Russ Coxæ°ã®ã³ã¡ã³ã ãå€ãã®è³åãåŸãŸããã The overloading of & for "take address of existing value" and "allocate copy of composite literal" has always been unfortunate. An alternative to expanding the overloading of & would be to overload new instead, so that it is the generic ptrTo function as well as the original new(T), as in new(1). Then &T{...} can be explained retroactively as mere syntactic sugar for new(T{...}). & æŒç®åã¯æ¢ã«ãæ¢åã®å€ã®ã¢ãã¬ã¹ãååŸãã &v ããšãcomposite literalã®ã³ããŒãå²ãåœãŠã &T{...} ããšãã2ã€ã®ç°ãªãæå³ãæã£ãŠããŸããããã«ããã«æå³ã远å ããã®ã§ã¯ãªãã new ãæ¡åŒµã㊠new(1) ã®ããã«æžããããã«ãã¹ãã§ã¯ãªãããããããã° &T{...} 㯠new(T{...}) ã®ç³è¡£æ§æãšããŠèª¬æã§ããããšãã䞻匵ã§ãã ãããæçµåœ¢ new(expr) ã®ååã§ããã ãžã§ããªã¯ã¹ã®ææ¡ (2021幎4æ) äžæ¹ã§Roger Peppeæ°ã¯ èšèªå€æŽãã®ãã®ã«ç°ãå±ããŸãã ã Given this possibility, I don't see that there's any need to change new or the language syntax itself to accommodate this functionality. Goã®ãžã§ããªã¯ã¹ã䜿ãã°ä»¥äžã®ããã«æžããã®ã ãããnewãèšèªä»æ§èªäœãå€ããå¿
èŠã¯ãªãã®ã§ã¯ããšãããã®ã§ãã // ref returns a pointer to the value of t. func ref[T any](t T) *T { return &t } ãã®ãžã§ããªã¯ã¹æ¡ã¯ããã®åŸ4幎ã«ããã£ãŠç¹°ãè¿ãããåè«ã®ååãšãªããŸããã è çç¶æ
(2021幎9æ) 2021幎9æãBen Hoytæ°ã è°è«ã®åæ»ãææ ãã忀èšãæ±ããŸããã Looks like this was last discussed in the proposal review meeting on May 5. While there's no clear consensus here, there are a number of good options. It seems like there's a fair bit of enthusiasm for Russ's simple new(1) form, and a decent amount of support for a new builtin generic function like Roger Peppe's ptr(1) suggestion. My vote would be for ptr(1) as it just uses "ordinary" generics, but I like new(1) too. Could this be discussed at the review meetings again? ãã®æç¹ã§æ¯æãéãŸã£ãŠããã®ã¯newã®æ¡åŒµã§ãã new(1) ãšãžã§ããªã¯ã¹ã䜿çšãã ptr(1) ã®2æ¡ã§ããããã³ã³ã»ã³ãµã¹ã«ã¯è³ããŸããã§ããããžã§ããªã¯ã¹ã®æ£åŒãªãªãŒã¹ïŒGo 1.18ã2022幎3æïŒãåŸ
ã€åœ¢ã§ãè°è«ã¯äžæäŒæ¢ã«å
¥ããŸãã PtrTo[T any] vs &T(v) vs new ã®æ¡åŒµ (2023幎6æ) 2023幎6æãGo Teamã®Ian Lance Tayloræ°ãissueã«æ»ãã éžæè¢ã3ã€ã«çµããŸãã ã PtrTo[T any] ã®ãããªæšæºã©ã€ãã©ãªé¢æ° &T(v) æ§æ new(v) / new(T, v) ã®æ¡åŒµ ãããŠGo Teamã®ç«å Žãæç¢ºã«ããŸããã @griesemer, @bradfitz, and @ianlancetaylor prefer permitting both new(v) and new(T, v) . ãã®æç¹ã§ã¯ãGo Teamã®äž»èŠã¡ã³ããŒ3人ã new æ¡åŒµãæ¯æããŠããŸããã ãã ã new(v) ãš new(T, v) ã® äž¡æ¹ ãèš±å¯ããæ¡ã§ããã new(v) åç¬ã§ã¯ãããŸããã§ããã ãŸããäŸç¶ãšã㊠&T(v) ãæ¯æãã声ã¯ãã£ããã®ã®ãæ¹å€çãªæèŠãæ¯æãããããã«ãªã£ãŠããŸãããBen Hoytæ°ã® 䞻匵 ã端çã«ç€ºããŠããŸãã I slightly prefer new(v) over &T(v) because it eliminates stuttering in cases like new(time.Now()) -- that would be &time.Time(time.Now()) with the other syntax. If new(T, v) is supported in addition for clarity in certain cases, that's fine. new() is also a bit clearer that it always creates a "new" thing. new(time.Now()) ã®ãããªã±ãŒã¹ã ãšåé·ãªç¹°ãè¿ãããªããªããŸããã&T(v)ã®æ§æã ãš &time.Time(time.Now()) ã«ãªã£ãŠããŸããŸããæç¢ºããå¿
èŠãªå Žåã« new(T, v) ã远å ã§ãµããŒããããã®ã¯åé¡ã«ã¯ãªãããnew() ã¯åžžã«ãæ°ããããã®ãäœæããããšãããæç¢ºã§ããããšäž»åŒµããŠããŸãã ããã«Hoytæ°ã &æŒç®åãæŠå¿µçã«åçã§ãªãããš ãææããŠããŸãã When you do &Struct{} Go creates a new value every time and returns its address, but when you do &s Go returns the address of that same variable each time. &Struct{}ãè¡ããšãGoã¯æ¯åæ°ããå€ãäœæããŠãã®ã¢ãã¬ã¹ãè¿ããŸããã&sãè¡ããšGoã¯æ¯åãã®åã倿°ã®ã¢ãã¬ã¹ãè¿ããŸãã ãã®åŸã &T(v) æ¡ã¯äŸç¶ãšããŠæ¯æããããã®ã®ãè°è«ã®çŠç¹ã¯newã®æ¡åŒµæ¹æ³ãšãžã§ããªã¯ã¹ã®æŽ»çšã«ç§»ã£ãŠãããŸãã new(T, v) vs new(v) (2023幎7æ) GoããŒã ãæ¯æããŠããnewã®æ¡åŒµæ¹æ³ã¯ new(T, v) ãš new(v) ã®2ãã¿ãŒã³ãããŸããã 2023幎7æãIan Lance Tayloræ°ã æ¹é転æãå ±å ããŸãããRob Pikeæ°ãšRoger Peppeæ°ãªã©ããã new(v) ãš new(T, v) ã®äž¡æ¹ã§ã¯ãªãã new(T, v) ã®ã¿ã«ãã¹ãããšããæèŠãåºãŸããã ãŸãååãé·ããªãã±ãŒã¹ã®å€§åã¯æ§é äœã§ãããæ§é äœã«ã¯æ¢ã« &S{} 衚èšããããŸããåçŽãªå€ v ã«å¯ŸããŠè€éãªå T ãæžã new(T, v) ã®ã±ãŒã¹ã¯ããããã»ãšãã©çºçããªããšèãã new(T, v) ã§ãæ··ä¹±ãæãããšã¯å°ãªãã ããããšããèŠè§£ã瀺ããŠããŸãã ããã«å¯ŸããŠMeroviusæ°ã å
·äœäŸ ã§åãè¿ããŸããã new(int64(42)) isn't any more to type or read than new(int64, 42), but new(time.Second) is significantly better than new(time.Duration, time.Second). I don't think having the type in there really adds anything. We are already kind of used to inferring the type from a constant literal. new(int64(42)) 㯠new(int64, 42) ãšæ¯ã¹ãŠã¿ã€ãéãèªãéãå€ãããŸãããã new(time.Second) 㯠new(time.Duration, time.Second) ãããã¯ããã«è¯ãã§ãããšè¿°ã¹ãŠããŸãã ãã®ã³ã¡ã³ããè³åãéããäžæ¹ã§ã new(v) ãèŠããšãã« v ãåãªã®ãå€ãªã®ããèªè
ãææ¡ããŠããå¿
èŠãããã®ã§new(v)ã奜ãŸãªãããšããæèŠãè€æ°ãããŸããã new(T, v) ã¯æžãæ¹ãšããŠåé·ã§ããäžæ¹ã§æç¢ºã«èšè¿°ã§ãã new(v) ã¯æžãæ¹ãšããŠç°¡æœã§ããäžæ¹ã§è¡šçŸãšããŠææ§ã§ãããšãããã®æç¹ã§ã¯ã³ã³ã»ã³ãµã¹ã«ã¯è³ããŸããã§ããã ãžã§ããªã¯ã¹ã®éç (2023幎 - 2024幎) ããžã§ããªã¯ã¹ã§ Ptr[T] ãæžããããšããåè«ã¯äŸç¶ãšããŠäž»åŒµãããŠããŸããã ããã2023幎12æãRob Pikeæ°ã æ¹ããŠãã®åé¡ã®æ¬è³ªãèšãçŽããŠããŸã ã it's easier to build a pointer to a complex thing than to a simple one. ãè€éãªæ§é äœãžã®ãã€ã³ã¿ã¯ &T{...} ã§ç°¡åã«äœããã®ã«ãåçŽãª int ãžã®ãã€ã³ã¿ã¯é¢åã ãžã§ããªã¯ã¹ãçšãããã«ããŒé¢æ°ãæžãããšã¯ããã®é察称æ§ã®åé¡ã®æ ¹æ¬çãªè§£æ±ºã«ã¯ãªã£ãŠããªããšèšåããŠããŸãã ãžã§ããªã¯ã¹ãæ ¹æ¬ã®è§£æ±ºã«ãªã£ãŠããªããšãããšããœãŒããšããŠãperjæ°ã® äœéšè« ã象城çã§ããã I appear to be writing this function about once every second month, when I need it in a new package. It's not very annoying, but does feel a bit like I'm littering my packages with this function, so not having to write it would be welcome. I do realise I can put it in a package I import, but that also seems overkill for a one-liner. 2ã¶æã«1åºŠãæ°ããããã±ãŒãžã§ãã®ãã«ããŒé¢æ°ãæžããŠãã ããã±ãŒãžããã®é¢æ°ã§æ£ããããŠãããããªæããããã®ã§ãæžããªããŠæžããªãæè¿ importããããã±ãŒãžã«å
¥ããããšãã§ãããããã£ã1è¡ã®ã³ãŒãã®ããã«ãããããã®ã¯ãããããªæ°ããã ãã®ã³ã¡ã³ãã¯20ãã®Goodè©äŸ¡ãéããŠããããžã§ããªã¯ã¹æ¡ã®éçã端çã«ç€ºããŠãããšãããŸãã new(T, v) ã¯è§£æ±ºçã«ãªããªã (2025幎3æ-8æ) 2025幎3æããã€ãŠããžã§ããªã¯ã¹ã§ååããšäž»åŒµããŠããRoger Peppeæ°ãã new(T, v) æ¡ã«å¯Ÿã㊠æ¹å€ ãæããŸããã Replacing, for example, ref(someMap[x]) with new(SomeType, someMap[x]) would be a net loss because it makes the code more verbose and a little bit more fragile, requiring update should the type of the map's values change. ref(someMap[x]) ã new(SomeType, someMap[x]) ã«æžãæããã®ã¯ã³ãŒããåé·ã«ãªãã ãã§ãªããmapã®å€ã®åãå€ãããã³ã«ä¿®æ£ãå¿
èŠã«ãªãã åã2åæžã new(T, v) ã§ã¯ããžã§ããªã¯ã¹ã®ãã«ããŒé¢æ°ããã®ç§»è¡ã¡ãªããããªãããšããææã§ãã ãã®åŸã2025幎8æã«Go Teamã®Alan Donovanæ°ã 決ããŠãšãªãã³ã¡ã³ã ãæããŸããã it is important not to have to redundantly state the type and the value, making new(T, v) a non-solution. åãšå€ãåé·ã«äžŠã¹ãå¿
èŠããªãããšãéèŠã§ããã new(T, v) ã¯è§£æ±ºçã«ãªããªãããšäž»åŒµããDonovanæ°ã¯3æã®Peppeæ°ã®ã³ã¡ã³ãã«çŽåŸã㊠new(value) ãæ¯æããç«å Žã衚æããŸããã ããã©ã«ãã®åãåããªãå Žå㯠new(T(v)) ãšãã£ã¹ããçµã¿åãããã°ããã new(T, v) ã®ãããªè€éãªã«ãŒã«ã¯äžèŠã ããšããŠããŸãã The proposal committeeã®æ¿èª (2025幎8æ) 2025幎8æ15æ¥ãThe proposal committeeã代衚ããŠAustin Clementsæ°ã å®£èš ããŸããã The proposal committee is happy with new(expr) . new(T) ïŒåãæž¡ãïŒãš new(expr) ïŒåŒãæž¡ãïŒã¯åäœãç°ãªããæ§æçãªææ§ããæ¬ ç¹ãšããŠæã€ãã®ã®ãã©ã¡ãããæ°ããã¹ãã¬ãŒãžã確ä¿ããŠè¿ããç¹ã§äžè²«ããŠããŸãã ãããŠDonovanæ°ã åéããããŒã¿ ãæ±ºãæãšãªããŸããã the data @adonovan collected indicates that, while this can be written as a generic function, there are so many instances that it seems well-worth a standardized built-in. ãžã§ããªã¯ã¹ãçšãã颿°ãšããŠèšè¿°ããããšãå¯èœã§ããããã®å©çšç®æãéåžžã«å€ããããæšæºåãããçµã¿èŸŒã¿é¢æ°ãšããŠå®è£
ãã䟡å€ã¯ååã«ããããšããŠããŸãã Accepted (2025幎9æ) 2025幎9æ17æ¥ãAustin Clementsæ°ã æ£åŒã«æ¡æãå®£èš ããŸããã ãããŠ2025幎10æ27æ¥ãå®è£
ãå®äºããAlan Donovanæ°ã issueãç· ãããããŸãã ã All done, in only eleven years since #9097. ;-) Go 1.26ã§ã®ä»æ§ The Go Programming Language Specification ã§ã¯ã new ã¯ä»¥äžã®ããã«å®çŸ©ãããŠããŸãã The built-in function new creates a new, initialized variable and returns a pointer to it. It accepts a single argument, which may be either an expression or a type. åŒæ°ãå T ã®åŒïŒãŸãã¯ãããã©ã«ãåã T ã®untyped宿°åŒïŒã§ããå Žåã new(expr) ã¯å T ã®å€æ°ã確ä¿ãã expr ã®å€ã§åæåãããã®ã¢ãã¬ã¹ïŒå *T ã®å€ïŒãè¿ããŸãã type Config struct { Timeout *time.Duration Retries * int Verbose * bool } cfg := Config{ Timeout: new ( 30 * time.Second), Retries: new ( 3 ), Verbose: new ( true ), } 颿°ã®æ»ãå€ãæž¡ããŸãã p := new (time.Now()) // *time.Time q := new (strconv.Itoa( 42 )) // *string 泚æç¹: untyped constantã®æå ãã ã1ã€æ³šæç¹ããããŸãã new() ã«å®æ°ãæž¡ããå Žåãdefault typeã䜿ãããŸãã var ui uint = 10 // OK: untyped constant 10ã¯uintã«æé»å€æããã // ããã... uip := new ( 10 ) // *intïŒ10ã®default typeãintïŒ var ui2 uint = *uip // ã³ã³ãã€ã«ãšã©ãŒ: cannot use *uip (type int) as type uint 宿° 10 ããã®ãŸãŸå€æ°å®£èšã§äœ¿ãããå Žåã¯untyped constantãšããŠæè»ã«åæšè«ãããŸããã new(10) ã®æç¹ã§ *int ã«ç¢ºå®ããŠããŸããŸããæç€ºçãªåãå¿
èŠãªå Žåã¯å倿ãçµã¿åãããŸãããã uip := new ( uint ( 10 )) // *uint ãŸãšã æåŸã«ã11幎ã®è°è«ã§ç»å Žããåææ¡ã®çµè«ã«ã€ããŠãŸãšããŸãã ææ¡ çµè« &T(v) & æŒç®åã®æå³ã®äžé£ç¶æ§ã &2 ã¯æ¯åæ°ããã¢ãã¬ã¹ãè¿ãã &v ã¯åãã¢ãã¬ã¹ãè¿ããæ··ä¹±ãæã ref(v) / ptr(v) ãžã§ããªã¯ã¹ã§1è¡ã§æžãããã ãéã«ãå
šå¡ãæžããŠããããçµã¿èŸŒã¿ãšããŠæšæºåããæ¹ãåçç new(T, v) åé·ã new(time.Duration, time.Second) ã¯ãžã§ããªã¯ã¹ã® ref(time.Second) ããåŸéãã new(expr) æ¡çšã & ã®ã»ãã³ãã£ã¯ã¹ãå€ãããæ¢åã® new 颿°ã®èªç¶ãªæ¡åŒµ å人çã«ã¯ãè°è«å
šäœãéã㊠new(expr) ãšããçµè«ã«è³ã£ãããšããšãŠãè
ã«èœã¡ãŸããããžã§ããªã¯ã¹ã®å°å
¥ãèŠè¶ããŠäžåºŠè°è«ãæ¢ããå°å
¥åŸã䟿å©ãã«é£ã³ã€ããå®éçšã®èª²é¡ãåžãäžããäžã§ãæ¬è³ªçãªè§£æ±ºçã«èŸ¿ãçããŠããŸãã æçµåœ¢ã® new(expr) ã¯ã2021幎ã«Russ Coxæ°ãæãã new(1) ã®çºæ³ãã®ãã®ã§ããã4幎ã®éã« &T(v) ã new(T, v) ãæ€èšãããçµå±æãã·ã³ãã«ãªæ¡ã«æ»ã£ãŠããã®ãé¢çœããªãšæããŸããã