æéãçµã€ã«ã€ããŠããã®ããŒã¯ãŒãã¯ãŸããŸãç§ãæ©ãŸããŠããŸããã ããã€ãã®åé¡ããããŸãïŒ
type
ã¯éåžžã«äžè¬çãªåèªã§ãããå€æ°åïŒããã³ããŒã¯ãŒãåŒæ°ïŒã§äœ¿çšã§ããããã«ããŠãããŸããtype
ã䜿çšããŠãå
·äœçã§å€æŽå¯èœãªæ§é äœã®ãããªåã®ã¿ãåç
§ããã®ã¯å¥åŠã«æããŸããtype
ã¯æãæçœãªã¿ã€ãå®çŸ©ããŒã¯ãŒãã§ãããéåžžã¯immutable
ãæšå¥šãããæšå¥šãããŸããããã«ããã€ãã®ä»£æ¿ããŒã¯ãŒãã®ææ¡ããããŸãïŒ
mutable
- immutable
å察ã§ãïŒstruct
-å°ãªããšããããã©ã®ãããªã¿ã€ãã§ãããã«ã€ããŠäœããèšããŸãreftype
-ãåç
§åãã®å Žåãäž»èŠãªããããã£ã®äžéšãäŒéããŸãtype
ãšããåèªãä»ã®ã³ã³ããã¹ãã§äœ¿çšã§ããããã«ãããšããã§ãããã
ç§ã¯äžè²«æ§ã®ããã«mutable
ã奜ãã§ãã
ãããè¡ãå Žåã¯ã 0.6
å«ããããšãã§ããããã«ãã§ããã ãæ©ãè¡ãå¿
èŠããããŸãã
ãããçºçããå Žåã¯ãèããåã«èª°ããèªèããŠãããã®ã䜿çšãããããã struct
ãŸãã type
ã¯å°ãåä»ã ãšæããŸãã ä»ã®äººã«èª¬æãããšãã¯ãéåžžãæ§é äœã®ããã«ããšèšãã®ã§ã+ 1ããŸãã
ãããçºçããå Žåã¯ãèããåã«èª°ããèªèããŠãããã®ã䜿çšãããããã
struct
immutable
ã¯æ§é äœã®ãããªãã®ã ãšæããŸãããïŒ
mutable
+1
immutable
ã¯ãCæ§é äœã®ã¡ã¢ãªã¬ã€ã¢ãŠãããããŸã
type
ã¯Cæ§é äœã®å¯å€æ§ããããŸã
ãããã£ãŠãæ§é äœã¯äž¡æ¹ã«é¢é£ããŠããŸãã ãããæ確ã«ããã«ã¯ã struct
ã§ã¯ãªãmutable
æ¹ãè¯ããšæããŸãã
ãã¹ãŠã®å€æ°ã¯å€æŽå¯èœã§ãã ãã®ã©ãã«ãåºãèªèãããŠããååïŒ struct
ïŒã«å²ãåœãŠããšãç§ã«ã¯ã»ãšãã©ããããŸããã
Fortranããæ¥ãŠãã人ã«ãšã£ãŠãããŒã¯ãŒãtype
ã¯ãã§ã«èªç¶ã§ãã
Cããæ¥ã人ã«ãšã£ãŠãããŒã¯ãŒãstruct
ã¯èªç¶ãªããšã§ãã
immutable
é »ç¹ã«äœ¿çšãã人ã«ãšã£ãŠã¯ãå察ã®ããŒã¯ãŒãmutable
ãèªç¶ã§ãã
ã ããå€åç§ãã¡ã¯ããããã®ãŸãŸã«ããŠããã¹ãã§ãã
struct{mutable}
struct{immutable}
ãŸãã¯
record{mutable}
record{immutable}
ãã説æçãªåœ¢åŒãå¿ èŠãªå Žåã
struct
ã䜿çšããå Žåãäžå€ã®æ§æã¯immutable struct
ããããšãã§ããŸãïŒ struct
éšåã¯å°ãªããšãæåã¯ãªãã·ã§ã³ã§ãïŒã
Fortranããã°ã©ããŒã¯ãæ§é äœããšããçšèªã«ç²ŸéããŠãããšæããŸãã
äžè²«æ§ãããããã mutable
å Žåstruct
ãéžæãããå Žåãäžè²«æ§ã«ãããäžå€ãconst struct
ãããªãã®ã«å€æŽããå¿
èŠããããŸãããïŒ ;ïŒ
struct
ãšimmutable struct
ã¯å®éã«ã¯ããªãè¯ããšæããŸãã struct
ã¯éåžžã«ããç¥ãããçšèªã§ãããæ°ããããŒã¯ãŒãã1ã€è¿œå ããã ãã§æžã¿ãŸãã å³å¯ã«å¿
é ã§ã¯ãããŸãããã mutable struct
ãèš±å¯ããããšãçã«ããªã£ãŠããŸãã
struct
ãåè©ã§ããããšã¯å©ç¹ã ãšæãããšãæ確ã«ããå¿
èŠããããŸãã ãããã«ååãä»ããããã«åœ¢å®¹è©ã ãã䜿çšããªãæ¹ãããã§ãããã
struct
ãimmutable struct
è¿œå ããå¿
èŠããããšãäžèŠãªã©ã€ã³ãã€ãºãè¿œå ããããããå
¥åããå¿
èŠããªãããšã«æ
£ããŠããŸããã
é³ãFortranã«ã¯type
ããŒã¯ãŒãããããç§ãã¡ãšéåžžã«ãã䌌ãæ©èœãæãããŠãããšæããŸãã ããããç§ã¯ãããå€ããããšãå«ãã§ã¯ãããŸããã
äžèšã®@KristofferCã¯æ£ããã§ãããããäœã§ãããã説æãããšãã«ããæ§é äœããšèšã£ãŠããããšãããããŸãã å
éšã®è°è«ã«ãããŠããã type
ã¯åé¡ã§ããã 誰ããã x
ãåã ãšæãããšèšãã§ããããããããã type
ããŒã¯ãŒãã§å®£èšããããã®ããæå³ããã®ããå¥ã®æå³ã§ãåããæå³ããã®ãã¯æ確ã§ã¯ãããŸããã
ãããã®ååãå®éã«ããŒãã«ã«ããå ŽåïŒ s/type/new name/
ã¯å°ãäžå¿«ã«æããŸãïŒããã®æ©äŒãæ倧éã«æŽ»çšããŠãããã©ã«ãã®å®£èšãäžå€ã«ããããšããå§ãããŸãã
ãããã£ãŠã struct
ã¯immutable
ã mutable [struct]
ã¯type.
èãããšãããå¯å€ã®å¥ã®å¯èœãªçšèªãRef
ã§ããå¯èœæ§ããããŸãã
ããã®äžè¬çãªCSçšèªã¯è€ååã§ãããããå¥ã®å¯èœãªååã¯composite
ã«ãªããŸãã ããããç§ã¯ãŸã mutable struct Foo
ãšimmutable struct Foo
ãããmutable Foo
ãšimmutable Foo
ã奜ã¿ãŸãâ struct
ïŒãŸãã¯composite
ããŸãã¯class
ããŸãã¯äœã§ãïŒã¯äžèŠã®ããã§ãã
ïŒ+1ïŒåè©ãž
Juliaã®ããŒã¿åã¯éåžžã«åŒ·åã§åŸ®åŠã§ããããæ§é äœãã¯å°ãåçŽãããããªãã®ã§ãç§ã¯ãã€ãJuliaã®struct
type
ãããtype
ïŒç§ã®èæ¯ã¯_C_ã§ããïŒã¢ã€ãã¢ã®ããã«ã ãŸããããã¯æ°ããèšèªãªã®ã§ãããã©ã³ã®ããã°ã©ããŒãæ
£ããŠããæ
£ç¿ã«çžãããã¹ãã§ã¯ãªãããã«æããŸãããããã第äžèšèªã§ãã人ã«èª¬æããã®ã«æé©ãªèšèã¯ãžã¥ãªã¢ã§ãããæ€èšããå¿
èŠããããŸãã
ãŸãããããäœã§ãããã説æãããšãã«ãæ§é äœããšèšã£ãŠããããšã«æ°ã¥ããŸã
ãžã¥ãªã¢ã®ã匷åãªåã·ã¹ãã ãã説æããªããã struct T
ã玹ä»ãã T::DataType
ãšäŒãããšã ::Type{T}
ã䜿çšããŠãã£ã¹ãããã§ãããšæ³åããŠã¿ãŠãã ããã ããã¯ããã±ããããã«å
ã«è¹Žã£ãŠããã ãã ãšæããŸãã
åè©ã§ããããšã¯å©ç¹ã§ã
ïŒ+1ïŒåè©ãž
ãå¯å€ãã®ãããªã©ãã³èªãã¡ããªãŒã®åœ¢å®¹è©ã¯ãææ³çã«ãèªåœèªã®åè©ãšããŠèš±å¯ãããŠããããšã«æ³šæããŠãã ããã ãã®ããããå¯å€ã®åè©åœ¢ã¯äœã§ããããšå°ãããšãè©ãããããŸãã ããããç§ãã¡ã¯åžžã«ãå€æ°ããšèšãããžã¥ãªã¢ãšèšãã°ãããã«äžå€ã®ãã®ãå°å ¥ããŸãããããšèšããŸãã æ®å¿µãªãããæåã¯è±èªã®ææ³ã®ã²ã«ãã³èªã®ã«ãŒãã®ããã«ããã¡ãªãæããŸã-ããããããã¯è±èªã§éåžžã«é »ç¹ã«èµ·ãããŸãïŒç§ãã¡ã¯ãã©ã³ã¹èªãšã©ãã³èªã«ãåºã¥ããŠããããïŒããæéãšãšãã«ããã«æ £ããŸãã
æåŸã«ããããã¯ã¯ãã¯ã¬ã€ãžãŒãªã¢ã€ãã¢ããªã®ã§ããããã®ããŒã¯ãŒãã¯å€ããå°ãªããæ°ããDataType
æ§ç¯ããŸããããŒã¯ãŒããå®å
šã«åé€ããŠãã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããã ãã§ããã§ããããã
# Similar-ish to current
MyType = DataType(
a::Int,
b::Float64
)
# A DataFrame-like constructor
MyType = DataType(a = Int, b = Float64)
ãããã¯ccall
ããã«ç¹å¥ã«ïŒéçã«ïŒè§£æããå¿
èŠããããçŸæç¹ã§ã¯ãããã¬ãã«ã§ã®ã¿åŒã³åºãããšãã§ãããšæããŸãã ïŒãŸãããã¹ãŠã®å¯èœæ§ãã«ããŒããããã«Mutable <: DataType
ãšImmutable <: DataType
ãšBitsType <: DataType
ãå¿
èŠãã©ããããããŠãããããã€ã³ãã£ã³ã°ã®ããã«const
ãå¿
èŠãã©ããã¯ããããŸããïŒã
äžå€ã¯æ§é äœã®ãããªãã®ã ãšæããŸãããïŒ
ã€ãã¥ãŒã¿ãã«ã¯Cæ§é äœã®ã¡ã¢ãªã¬ã€ã¢ãŠããæã£ãŠããŸã
ã¿ã€ãã¯Cæ§é äœã®å¯å€æ§ãæã£ãŠããŸã
ããã§ã...ç§ã¯Swiftã«ã€ããŠèããŠãããšæããŸãã
ãããæ§é äœãšã¯ã©ã¹ã®æ倧ã®éãã§ãã æ§é äœãã³ããŒãããã¯ã©ã¹ãåç §ãããŸãã ...ãããã£ãŠã倧ããªãªããžã§ã¯ãã®å Žåãåç §ãšããŠã§ã¯ãªãå€ãšããŠæž¡ãããŸãã
ããã¯immutable
察type
ããã«èãããŸãããããã¯Juliaãã€ã³ãã£ã³ã°ã®ã»ãã³ãã£ã¯ã¹ã®ã³ã³ããã¹ãã§å€æŽå¯èœã«ããããã®åç
§ã«ãããŸããã
DataType
ã¯ããã¹ãŠã®å矩åãå«ãŸããŸãïŒ abstract
ããããåãäžå€ããã³å¯å€æ§é äœã ãããã£ãŠã type
ãDataType
ã«çœ®ãæããããšã¯ããŸãæ確ã§ã¯ãããŸããã ãŸãããæ°äººãã®ã·ããªãªãšã¯ç°ãªãçµè«ãå°ãåºããŸãã ::Type
ãš::DataType
ã¯ã type T
ã§å®çŸ©ããããã®ã®ã¹ãŒããŒã»ãããéžæãããããååãç°ãªãããšã¯ããããªããšã§ã¯ãããŸããã ã ã struct
ã¯Type
äžçš®ã§ããã¯ã type
ã¯Type
äžçš®ã§ãããããæå³ããããŸãã
ç§ã¯åœ¢å®¹è©ãå®éã«åè©ãšããŠåœ¹ç«ã€ããšãã§ããããšã«åæããŸãã ããšãã°ããããã¯äžå€ã§ãããšèšãããšãã§ããŸãã ç§ã¯ããããäžååã«èª¬æçã§ãããšæããŸãã äœã_ã§ããããäŒããã®ã§ã¯ãªãããããäœã§ããããããå€æŽã§ãã/ã§ããªãããšãéç¥ããã ãã§ãã
ã¿ã€ãã«ã¯structure
ãšmutable structure
ã奜ãã§ãã å€åa = 1
ãšmutable a = 1
å€æ°ã®å²ãåœãŠã§ãã ããã©ã«ãã§ã¯ãäžè²«æ§ãçç¥åœ¢ãªããããã³äžå€æ§ãå¿
èŠã§ãããšããèããæšãŠãŸãã
ç·šéïŒããã©ã«ãã®å Žåã®å¯å€æ§ã§ã¯ã const
ã§ã¯ãªãconstant
ãããããŸãã
ãŸãã¯ãããŒã¯ãŒãã®æ°ãå°ãªãããŒãžã§ã³ã¯ã struct
察const struct
ãŸãã ããã©ã«ãã§ãã¹ãŠã®å€æ°ãconstã«ããããšã¯ãçŸæç¹ã§ã¯æ··ä¹±ãæãããããšæããŸãã
ç§ã¯ããããäžååã«èª¬æçã§ãããšæããŸãã ãããäœã§ããããããªãã«äŒããã®ã§ã¯ãªãããããäœã§ãããããªãã¯ãããå€ç°ãããããšãã§ãã/ã§ããªãããšãããªãã«äŒããã ãã§ãã
ããã¯è¯ãç¹ã§ãããåç
§åäœãšãå€ãåäœã¯ããæ§é äœãªã®ããããã¿ã€ããªã®ãããããã¯ããã«éèŠã§èå³æ·±ããã®ã ãšæããŸãã ïŒäž»ã«bitstype
ãããŸãé »ç¹ã«è¡šç€ºãããªããããç§ãäœæãããã¹ãŠã®Juliaã¿ã€ãã¯æ§é äœã§ãïŒã äžå€æ§ã¯ããã€ã³ãã£ã³ã°ã»ãã³ãã£ã¯ã¹ãšå€æž¡ãã®çµæã«ãããŸããã
struct
ãšbitstype
ã®å¿
èŠæ§ãå®å
šã«ãªããããã«ã @ quinnjããã®ãã®ã¢ã€ãã¢ãå«ããããšãã§ããŸãã
immutable 32 Int32 <: Integer
ãŸãã¯ããããæ°ãšããŠè£ 食ãããŠããªããã£ãŒã«ããæã€ããšãã§ããŸã
immutable Int32 <: Integer
32
end
ããã¯ïŒäžè¬ã«ååä»ããã£ãŒã«ããšæ··åããå ŽåïŒãå¿ èŠã«å¿ããŠããã£ã³ã°ãæ¿å ¥ããã®ã«ã圹ç«ã¡ãŸãã
次ã«ãå€åïŒçŸåšã¯äžå€ïŒãšåç
§åïŒçŸåšã¯å¯å€ã§ãããå°æ¥çã«ã¯const
ãã£ãŒã«ããå«ãŸããå¯èœæ§ããããŸããããã¯ã mutable
ãšåŒã°ãªããã1ã€ã®çç±ã§ãïŒã®ã©ã¡ãããéžæããã ãã§ãã å€åç
§åã«struct
ã䜿çšãããšãSwiftããã°ã©ããŒãæ··ä¹±ããŸã...
immutable
ãå°å
¥ãããŠä»¥æ¥ã bitstype
ãã»ãšãã©å§¿ãæ¶ããã®ã¯äºå®ã§ãã ããããæ§é äœãšããããããåºå¥ããããšããããããããŸããæœè±¡åãã¿ãã«ïŒãããäžå€ïŒããããŠå°æ¥çã«ã¯äžå€ã«ãªãå¯èœæ§ã®ããã¬ã³ãŒãããããŸãã
immutable
ãæåã«éžãã ã®ã¯ããããæãç®ç«ã€ç¹åŸŽã§ãããšæããããã§ããä»ã®ãªããžã§ã¯ããšã¯ç°ãªããããããå€æŽããããšã¯ã§ããŸããã å®éããããã¯åžžã«å€ã«ãã£ãŠæž¡ãããããã§ã¯ãããŸããã äžå€æ§ãšã¯ãéããããããªãããšãæå³ããŸãã äžéšã®immutable
ã¯ãé
åããã®ä»ã®ãªããžã§ã¯ãã«ã€ã³ã©ã€ã³åãããŸãããããã§ãªããã®ããããŸãã äžå€æ§ãšã¯ãéããåçŽãªjuliaã³ãŒãã«åé¡ãåŒãèµ·ãããªãããšãæå³ããŸãã ããã¯ãCçžäºéçšãªã©ãã¡ã¢ãªã¬ã€ã¢ãŠããæ¬åœã«éèŠãªå Žåã«ã®ã¿åé¡ã«ãªããŸãã
å®éããããã¯åžžã«å€ã«ãã£ãŠæž¡ãããããã§ã¯ãããŸãã
ããèŠç¹ãïŒ ã§ãããããå€ããèšç»ã¯ãããŸãããïŒ
1.0ã«è¿ã¥ããŠããã®ã§ãããã€ãã®å°æ¥æ§ã®ããæŠå¿µãåæ ããå°æ¥æ§ã®ããããŒã¯ãŒãã®ã»ãããå¿ èŠã«ãªããšèšã£ãŠãããšæããŸãã äžå€ãã€ã³ã©ã€ã³åãããŠããå Žåãçµæã®ã»ãã³ãã£ã¯ã¹ã«é¢ããŠåœ¹ç«ã€ååã«ååãå€æŽããã®ã劥åœãªææã§ããããã«æãããŸãïŒãããŠããããã®ã»ãã³ãã£ã¯ã¹ãFFIã«åœ¹ç«ã€å Žåã¯ãããã«è¯ãã§ãããïŒã
abstract
ã Tuple
ãããã³ãã¬ã³ãŒããïŒãã£ãŒã«ãåã§ææ¡ãããã¿ãã«ã®ãããªãã®ãæå³ããå ŽåïŒãšæ··åãããæ°ããå
·äœçãªåå®çŸ©ããŒã¯ãŒãã人ã
ãååŸãããšã¯æããªã以åããæ§é äœããšåŒã°ããããšãèããããšããããŸã...ïŒã
ãå€æž¡ããã®æŠå¿µã®æ¬åœã®ç®çã¯ã f(x)
ïŒããæå³ã§ïŒ x
å€æŽãããšãã«äœãèµ·ããããšãã質åã«çããããšã§ãïŒåãx
åŒã³åºãå
ãæž¡ãããŸãããããããšãå€æŽã¯ããŒã«ã«ã®ã¿ã§ããïŒ Juliaã¯ããã®åäœã«é¢ããŠç°ãªãåãåŒæ°ããŸãã¯é¢æ°ãæã£ãããšã¯ãªããä»åŸãæã€ããšã¯ãããŸããïŒç§ã¯é¡ã£ãŠããŸãïŒã ãã¹ãŠããå
±æã«ãããã¹ãã§ãã ç§ãã¡ã«ãšã£ãŠãå€æž¡ãã¯ABIã¬ãã«ã§ã®ã¿ååšããŸããããã®è°è«ã¯ããã¥ã¢ã«ã®FFIã»ã¯ã·ã§ã³ã«ã®ã¿å±ããŸãã 倧ããªãªããžã§ã¯ãã§ã¯ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããããåžžã«å€ã§æž¡ãããããŸãã¯åžžã«ã€ã³ã©ã€ã³åãããçš®é¡ã®åããããã©ããã¯ããããŸããã
ãšã«ããã immutable
ãšmutable
ã¯ããŒã¯ãŒãã®å®è¡å¯èœãªãªãã·ã§ã³ã ãšæããŸãã
äžå€ãå°å ¥ãããŠä»¥æ¥ããããã¿ã€ããã»ãšãã©ãªããªã£ãã®ã¯äºå®ã§ãã
å人ã¯éåžžãæ°ãããããã¿ã€ããäœæããå¿ èŠã¯ãããŸããããæ¢åã®ãããã¿ã€ããšäžè¬çãªäžå€ã®éãã¯ããããã®ABIãéåžžã«ç°ãªããããããªããã£ãã¬ãã«ã§éåžžã«éèŠã§ãã æ°ããå ·è±¡ããŒã¿åãå®çŸ©ãããšãã«ãã»ãšãã©ã®å ŽåããŠãŒã¶ãŒã¯ãããåã§ã¯ãªãäžå€ã®æ§é äœãå¿ èŠãšããŸãã
FWIWãç©äºãå€ããªããšãããµããŒãã¯type
ãšimmutable
ã¯ãã®ãŸãŸã§åé¡ãªããšæããŸãã
ïŒ do
æ§æã¯ç§ãæ©ãŸããŸãã... ;-)
ãã¹ãŠããå ±æã«ãããã¹ãã§ãã
ç§ã¯ãããå°éããããšãã§ããŸã-ãããŠè°è«ã«æè¬ããŸãã
ãã¹ãŠããå ±æã«ãããã¹ãã§ãã
ãã®ç¹ã«ã€ããŠã¯ã芳å¯ã ãã§ããå宣èšã«const
ããŒã¯ãŒããå«ãŸããŠããå Žåã immutable
ã¯å®å
šã«äžèŠã«ãªããŸãã
type Complex{T}
const re::T
const im::T
end
ïŒã³ã³ãã€ã©ãŒã¯ãã®åãèªåçã«äžå€ã§ãããšå€æã§ãããŠãŒã¶ãŒã¯const
åã䜿çšãããšããé«éãªã³ãŒãã«ã³ã³ãã€ã«ã§ããããšãç解ã§ããŸãïŒã 次ã«ã type
ãŸãã¯struct
ãæå³ããªããŸãã æ··åã®å Žåã setfield!
ã¯const
ãã£ãŒã«ãã§ç¡å¹ã«ã§ããŸãã
type
ãšconst type
ã©ãã§ããïŒ --typeããŒã¯ãŒãã¯ãstructããããšã¬ã¬ã³ãã«èãããŸããstructãšã¯ãå
éšã³ã³ã¹ãã©ã¯ã¿ãŒãªã©ãæã€ãªããžã§ã¯ãã§ã¯ãªããæè¡çãªã¡ã¢ãªã¬ã€ã¢ãŠããé¢é£ä»ããŸãã è€ååã¯ã... Juliaã§æãäžè¬çã«äœ¿çšãããŠãããŠãŒã¶ãŒå®çŸ©å...ãã§ããããããåã1çš®é¡ã®åãã§ããã°ãããã»ã©æªãã¯ãªãã§ããããã ãè€ååãã䜿çšããéä¿¡ã§ã¯ããæœè±¡åããšåãããã«æ確ã«ããå¿
èŠããããŸãã ã©ã€ã³ãã€ãºã«é¢ããŠã¯ããconsttypeãã¯ãimmutableãããæªããããŸããã
å€æ°ãšåã®const
ã®æå³ã®ïŒããããªïŒéãã«ã€ããŠã¯ããããããŸããã -ãããã«ãããã¿ã€ããšäžå€ã¯åžžã«ç§ã«å°ããªç²Ÿç¥çãªããã£ãããäžããŸããã ããã§ãã®åé¡ãèŠãŠè¯ãã£ãã§ãïŒ
struct
ã䜿çšããéã®äž»ãªåé¡ã¯ãC / C ++ããæ
£ããŠãããšèªç¶ã«ä»®å®ããå¯èœæ§ãããããšã§ããããã¯ãJuliaã§ã¯å¿
ãããåœãŠã¯ãŸããŸãããããšãã°ãå¯å€è€ååã¯å€ã«ãã£ãŠé
åã«æ ŒçŽãããŸããããäžå€ã§ãã
immutable
ã¯type
ããããšã¬ã¬ã³ãã«è¡šããã©ãã€ã ã¯äœã§ããïŒ ããšãã°ãåæããªããã£ããå¿
èŠãšããã«ãç®çã®ãã£ãŒã«ããæŽæ°ããŠå
ã®ãã£ãŒã«ãããæ°ããäžå€ãã€ã³ã¹ã¿ã³ã¹åããããšã«ãããè€æ°ã®ãã£ãŒã«ãã®ç¶æ
ãåæã«ã¢ãããã¯ã«ãé·ç§»ããããŸãã
ãã£ã¹ããã/䜿çšã®ãã€ã³ãã§ã¯ãªããå®çŸ©ã®ãã€ã³ãã§ã¿ã€ãã2ã€ã®ç°ãªãã«ããŽãªã«åå²ããå¿
èŠãããã®ã¯ãªãã§ããïŒC ++ã®const
ã«ïŒïŒ type
/ struct
/ composite
ã䜿çšããŠè€ååãå®çŸ©ãã Immutable{T}
æ§é ãå°å
¥ããŠå¯å€ããäžå€ã«ææ Œããããšã次ã®ããã«ãªããŸãã
type CompositeType end
f(x::Immutable{CompositeType}) = x
a = f(CompositeType())
b = f(a)
ãŸããããã§abstract
ãšbitstype
ãžã®å€æŽãæ€èšã§ããŸããïŒ AFAICTãabstractãã®äœ¿çšæ³ã¯åœ¢å®¹è©ã§ãããåè©ã§ã¯ãããŸããã ãã¹ãŠã®åè©ããã¹ãŠã®åœ¢å®¹è©ãªã©ãã¿ã€ãããŒã¯ãŒãå
šäœã§å°ãªããšãèšèªã®äžè²«æ§ãå¿
èŠã§ãã bitstype
ã¯ã bits
ãŸãã¯primitive
ãšè¡šçŸããæ¹ãããå ŽåããããŸãã
JuliaããŒã¯ãŒãã®ã¹ãã«ïŒãŸãã¯ã»ãã³ãã£ã¯ã¹ïŒïŒã®å€æŽã«ã€ããŠè°è«ããããã«ãããããªãŒãã³ã¹ã¬ããã«å€ããªãã§ãã ããã ãã®æç¹ã§ãè¹ã¯type
ãšimmutable
ã®åºæ¬çãª_åäœ_ã§èªæµ·ããŸããã ããã§æèµ·ãããå¯äžã®è³ªåã¯ã type
ãšimmutable
ã¹ãã«ãããããã®é¡äŒŒæ§ãããé©åã«åæ ã§ãããã©ããã§ãã
çŸæç¹ã§æãåççãª2ã€ã®ãªãã·ã§ã³ãšããŠãåŒãç¶ãmutable
ãšimmutable
ããµããŒããããããã®ãŸãŸã«ããŠãããŸãã ãã以å€ã®ãã®ã¯ç¡æå³ã«ç Žå£çã§ãã
@andyferrisç§ã¯ãã®ã¢ã€ãã¢ãæ¬åœã«å¥œãã§ãã struct
ãšconst
çµã¿åãããè¯ãã§ãããã ãã®ããã«ããã°ããã¹ãŠã®ãã£ãŒã«ãã«const
ãæžã蟌ãå¿
èŠããªãããã«ãïŒ1ïŒ const struct
ãŸãã¯const type
ãšèšãããšãã§ããŸãïŒ2 ïŒãããã£ãŠããã£ãŒã«ãããšã®äžå€æ§ã®æ°æ©èœãããã«è¿œå ããå¿
èŠã¯ãããŸããã ãã®æ©èœãè¿œå ãããå Žåã¯ãäžè²«ããèªåœãå©çšã§ããããã«ããŠãããšããã§ãããã
ãã³ã³ããžããã¿ã€ããã䜿çšããã³ãã¥ãã±ãŒã·ã§ã³ã§ã¯ãæ確ã«ããå¿ èŠããããŸã
ååãä»ããããã®ç§ãã¡ã®ãæ°ã«å
¥ãã®ãã¯ããã¯ã®1ã€ã¯ã誰ãã«1ã€ã®æã§èª¬æãã次ã«1ã€ã2ã€ã®åèªãæãå¹æçã§ãããšæãããåèªãéžæããããšã§ãã ã ããç§ã«ãšã£ãŠãããã¯composite
æ祚ã«ãªããŸãã
ãã£ã¹ããã/䜿çšã®ãã€ã³ãã§ã¯ãªããå®çŸ©ã®ãã€ã³ãã§ã¿ã€ãã2ã€ã®ç°ãªãã«ããŽãªã«åå²ããå¿ èŠãããã®ã¯ãªãã§ããïŒC ++ã®constã®ããã«ïŒïŒ
ããã¯ç°¡åã§ããã°ããŒãã«ãªä¿èšŒãæäŸããããšã§ãã C ++ã§ã¯ã誰ããconst以å€ã®åç §ãæã£ãŠããå Žåã§ãããconstããªããžã§ã¯ããå€æŽã§ããŸãã
ãŸããæœè±¡åãšãããã¿ã€ããžã®å€æŽãããã§æ€èšã§ããŸããïŒ
ææ¡ããã bitstype
ã«é¢ããŠã¯ãããŒã¯ãŒãã䜿çšãããããšã¯ãã£ãã«ãªãã®ã§ã bits
ãããªå°ããªæçšãªåèªãçã¿ãããããŸããã
immutable
-> const type
ãç§ã«ã¯å€§äžå€«ã®ããã§ãã çµã¿åãããããšã§type
> - composite
ãŸãã¯struct
ç§ãã¡ã¯æ¬åœã«è§£æŸãããå Žåã¯ã type
ã
ãã ããããã«ãã£ãŠçºçãããã¹ãŠã®ã³ãŒããã£ãŒã³ã«ã€ããŠã¯ãç¹ã«@compat
ã§ãµããŒãã§ããªããããããŸãæºè¶³ããŠããŸããã ãããè¡ãå¿
èŠãããå Žåãã¢ããã°ã¬ãŒããã¹ã¯ïŒ1ïŒ0.6ã§æ°ããããŒã¯ãŒãã®å矩èªãå°å
¥ããããå€ããã®ãéæšå¥šã«ããªãïŒ @compat
ããªãããïŒãïŒ2ïŒéæšå¥šã®ãããªãã®ã«ããå¿
èŠããããšæããŸã0.7ã®å€ããã®ã
bitstype
å Žåããããprimitive
ã¿ã€ããšåŒãã§ã¯ã©ãã§ããããã çŸåšã®ååã¯an isbits composite type
é¡äŒŒããŠãããããå°ãé¢åã§ãã
Juliaãä»ã®èšèªã®ãdef / func / elifãã¹ã¿ã€ã«ã®ç¥èªã®ããã€ãããã°ãã°é¿ããŠããæ¹æ³ã奜ãã§ãã ïŒDn w abbrevsãkthxãïŒã€ãŸãã mutable
ãstruct
ã«åã¡ãŸãã
FWIWãOCamlã¯ã¬ã³ãŒããšããªã¢ã³ãïŒæ§é äœãšãŠããªã³ïŒãšãšã€ãªã¢ã¹ã«type
ã䜿çšããŸãã æšæºMLã¯datatype
ã䜿çšããŠãããšæããŸãã
察称æ§ã¯çŽ æŽãããã§ããã mutable
説æãäžååã ãšæããŸãã immutable
ãããã®ããšã«ã€ããŠã¯ïŒç§ã¯const type
ã®ã¢ã€ãã¢ã奜ãã§ãïŒã
ã¹ãã£ãŒããææããããã«ãããã¯ã³ãã¥ããã£å šäœã§ããªãæªãã³ãŒããã£ãŒã³ãåŒãèµ·ãããŸãã ãããŠããã®å©ç¹ã¯çãããã§ãã
ç§ã¯ééããªãconst type
ã®ã±ãŒã¹ãèŠãŠããŸã; ããã¯net-1ããŒã¯ãŒãã§ãããã¿ã€ããšäžå€ã®é¢ä¿ãæ確ã«ããŸãã ãã ããä»ã®æ¹æ³ã§type
ã䜿çšã§ãããšäŸ¿å©ã§ãã ãã®å©ç¹ããªããã°ãå€æŽãæ£åœåããããšã¯ã¯ããã«å°é£ã§ãã ãã ãããã®ããã®ã³ãŒãã®æŽæ°ã¯éåžžã«ç°¡åã§ãã type
ã®æ§æã¯ãåºæ¬çã«ä»ã®ã³ã³ããã¹ãã§ã¯äœ¿çšã§ããªããããªãã®ã§ãã
composite
/ const composite
+1ã
primitive
ãšcomposite
ã¯ãå¿
èŠã«å¿ããŠconst
ããŒã¯ãŒããè¿œå ããããåªããå·®å¥åèŠå ã ãšæããŠããŸãã
å€æŽãããå¯èœæ§ã®ããããã€ãã®ããããšåºå¥ããããã«ïŒãããŠäžè²«æ§ã®ããã«ïŒ const primitive
ãå¿
èŠã§ããïŒ å¯Ÿç§°çã«
primitive # something new...
const primitive # bitstype
composite # type
const composite # immutable
å¯å€ããªããã£ãåã§ãããšããåé¡ã¯å®è£
ããå¿
èŠããããŸã...ïŒãã¡ãããããã¯åŸæ¥ã«ãªãå¯èœæ§ããããŸããããããèµ·ãã£ãŠããå Žåã¯bitstype
-> const primitive
_ now_ãå¿
èŠã§ãåçŽã§ãããããã¹ã¿ãã¯ã«ãã¥ãŒã¿ãã«ãæã¡èŸŒãããã®åªãããå®è·µãã¿ãŒã²ããã«ãªãå¯èœæ§ããããŸãããç§ã¯ãã®å°é家ã§ã¯ãããŸããïŒã
åæ§ã«ãã³ã³ããžããã®åã
ã®ãã£ãŒã«ãã«const
ãè¿œå ãããšããã¢ã€ãã¢ã¯ãåŸæ¥ç°¡åã«å®è£
ã§ããŸããããã«è¯ãããšã«ãããã¯é倧ãªå€æŽã§ã¯ãããŸããã
ãã®ããã«ããã°ãïŒ1ïŒãã¹ãŠã®ãã£ãŒã«ãã«constãæžã蟌ãå¿ èŠããªãããã«ãïŒ2ïŒã®æ°æ©èœãè¿œå ããå¿ èŠããªãããã«ãconststructãŸãã¯consttypeãèšãããšãã§ããããã«ããããšæããŸããããã«ãã£ãŒã«ãããšã®äžå€æ§ã ãã®æ©èœãè¿œå ãããå Žåã¯ãäžè²«ããèªåœãå©çšã§ããããã«ããŠãããšããã§ãããã
ç§ã«ã¯å®å šã«çã«ããªã£ãŠããŸãã
composite
ããŒã¿åã調ã¹ããšãããå°ãªããšãAdaãšVisualBasicããã®äžã«é
ååãå
å«ããŠããããšãããããŸããã ïŒãã以å€ã®å Žåãå°ãã©ã³ãã ã«èŠã€ãããŸããïŒHaskellïŒãªã¹ããšã¿ãã«ïŒãã ããå®çŸ©ãèŠæ±ãããŠããŸãïŒ; PythonïŒãªã¹ããã¿ãã«ãdicts; LispïŒãªã¹ãããã¯ãã«ãããã·ã¥ããŒãã«ããŠãŒã¶ãŒå®çŸ©ã¯ã©ã¹ãæ§é ïŒã
ãããã£ãŠã type
ãããªæ§é ã«å¯ŸããŠãåæãã©ãã»ã©æ£ç¢ºã§ãããçåã«æããŸãã ïŒããããç§ã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ãã£ã¹ãã§ã¯ãªãã®ã§ãèªåœãåºç¯ãªèŠéãäžè¶³ããŠããŸãïŒã
ããŒãããããããããŸããããã®ç¹å®ã®çš®é¡ã®ã¿ã€ãã¯ãåžžã«æ§é äœãæ§ââé äœãã¬ã³ãŒãïŒãŸãã¯ã¯ã©ã¹ãŸãã¯ãªããžã§ã¯ãïŒãšåŒã°ããŠããããã§ãããè€åãã¯ããåºãçšèªã§ãã http://rosettacode.org/wiki/Compound_data_typeã«ã¯å€ãã®äŸããããŸã
type
ãèå¥åãšããŠåŸ©å
ããããå
·äœçãªååã䜿çšãããšäŸ¿å©ã§ãã ã0.6ããåã«æžãããã»ãšãã©ãã¹ãŠã®äºçŽ°ãªããã±ãŒãžã®ç Žæã¯éåžžã«æ®å¿µãªããšã§ãããããã©ã®ããã«è©äŸ¡ãããã¯ããããŸããã
const
ããŒã¯ãŒããåå©çšãããšããã¢ã€ãã¢ã¯ãã°ããŒãã«ã¹ã³ãŒãã§ã®const
å€æ°ãã€ã³ãã£ã³ã°ãšãäžå€å
éšã®ãã£ãŒã«ãã®const
ãã€ã³ãã£ã³ã°ãšã®åçæ§ã匷調ããŠãããããéåžžã«èª¬åŸåããããŸãã ããã¯ã immutable
ãããåªããçµ±äžæ§ãšåªããåœåã®ããã§ãã
type
ã眮ãæããååã«ã€ããŠstruct
ã¯ãããŸãããããªãåé¿ããŠããããã§ãïŒãå¯å€åããšãäžå€åããšãããã¬ãŒãºã¯ãã䌌ãŠããããã§ãïŒã
以äžã¯ç§ãæšæž¬ããããªãããããã«èŠããŸãïŒ
struct A
a::Float64
end
const struct B
b::Float64
end
ã¿ã€ããèå¥åãšããŠå埩ããããå ·äœçãªååã䜿çšãããšäŸ¿å©ã§ãã
ç§ã¯ãã®ææ ãç¹°ãè¿ããŸãã
ååãå€æŽããå Žåãéæšå¥šã¯ã©ã®ããã«åŠçãããŸããïŒ type
ãšimmutable
ã¯ã0.6ããããã1.0ã§ãæå¹ã§ãããèŠåã衚瀺ãããŸããïŒ Compat.jl
ãããééçã«åŠçã§ããŸããã ãããäžã®ããªãã®éã®æç®ïŒããã°æçš¿ããã¥ãŒããªã¢ã«ãªã©ïŒã«ã¯ãèŠåã衚瀺ãããŸããããã¯ãåå¿è
ã«ãšã£ãŠã¯ã¡ãã£ãšããç
©ãããã§ãã
移è¡ã容æã«ããããã«ãéåžžãããé·ãtype
ãšimmutable
ãäºçŽããããšãã§ããŸãã
ç§ãã¡ã¯1.0ããåã§ãïŒãããå€æŽããææã¯ä»ãŸãã¯æ±ºããŠãããŸããã å€ãããŒã¯ãŒããé·ãå©çšã§ããããã«ããããšã¯ãã¹ã ãŒãºãªç§»è¡ã確å®ã«ããããã«ç¢ºãã«è¯ãããšã§ãã å®éã®åœåã«é¢ããè°è«ãšã移è¡ãæå³ããèŠçãæ··åããããšã¯ããŸããã
å人çã«ç§ã¯ãããstruct
ãšåŒãã§ããŸãã ããã¯èšã£ãŠã
å®éã®åœåã«é¢ããè°è«ãšã移è¡ãæå³ããèŠçãæ··åããããšã¯ããŸããã
å€æŽãããŸãã«ãçãå Žåãç§ã¯å€æŽã«å察祚ãæããŸãã 1.0ããåã®å€æŽã¯æ£åœãªãã®ã§ãããçºçããæ··ä¹±ãšæ¯èŒããããšã¯IMOãæ£ããããšã§ãã
@stevengjã¯ãéæšå¥šãè¡ãæ¹æ³ã«ã€ããŠè¯ãææ¡ãããŸããã @ amitmurthyãåãçµè«ã«éãããã
å
ã«é²ã¿ã struct
æ祚ããŸãã ããã¯å€ãã®è©±é¡ãèŠæ
ãçã¿åºãå€æŽã®1ã€ã ãšæããŸãããå®éã«ã¯ããã±ãŒãž/ãŠãŒã¶ãŒã³ãŒããä¿®æ£ããã®ã¯ããã»ã©é£ãããããŸãã...ãããè¡ãã ãã§ã人ã
ã¯ãããç解ããã§ãããã
immutable
-> const type
ã¯æãæµæã®å°ãªãéã®ããã§ãããIMOã¯ééããªãè¡ãããã¹ãã§ãã ããã¯ç©äºãããè¯ã説æãããšæããŸãã
type
-> composite
ã¯type
ãããæ£ç¢ºã§ããã struct
ãããæ£ç¢ºã§ã¯ãããŸãããã struct
ãããå°éçšèªã¯å°ãªããªããŸãïŒæ°ããããã°ã©ããŒïŒã ãžã§ãã®ãåå¿è
ã«èª¬æããæãæžãããã¹ãã«åæ Œãã type
ããŒã¯ãŒããå埩ããŸããæ¬ ç¹ãšããŠã composite
ãä»ã®èšèªã§è¡šç€ºããããšã¯æããªãã®ã§ãäžäººã§è¡ãããšã
type
-> struct
ãæãæ£ç¢ºã§ãããããããstructure
ã¯ç¥èªããããããã§ãïŒç¥èªãstruct
ããã«éããšèããããšããŠããŸãïŒ eye()
ã¯ãè±èªã®èŠ³ç¹ããã¯ããªãå«ãªäŒçµ±ã ãšæããŸãïŒã
bitstype -> primitive
ã¯ã type
ãå€æŽãããå Žåã«æå³ããããŸãã
@tbreloffã¯æ£ããã§ã-ã³ã¢
æ瀺çã«å€æŽããå¿
èŠããªãéãã immutable
ãæšæºã«ããå¿
èŠãããã®ã§ãååãå€æŽããå¿
èŠããããã©ããçåã«æããŸãã
immutable
-> struct
type
-> mutable
次ã«ãå ±é/äºæ³ãããååããã¹ããã©ã¯ãã£ã¹ã§ãããå¯å€æ§ãèŠæ±ããããã®æ瀺çã§æ確ãªååããããŸãã
bitstype
-> primitive
ã奜ãã§ã...
const
ãããã©ã«ãã«ããã¹ãã§ã¯ãªããšæããŸãã æ©èœãæžããæé©åãããã©ã«ãã«ããã¹ãã§ã¯ãããŸããã
struct
ããã³const struct
+1ã
composite
ãšããçšèªã¯å°ãããããããã§ããã struct
ã¯çããéåžžã«äžè¬çã«è€ååãšããŠç¥ãããŠããŸãã
bitstype
ããã«ãã£ãã«äœ¿çšãããªããã®ã«ã€ããŠãå®éã®åèªãçãããšã¯ããããããŸããã ãã¶ãprimtype
ãŸãã¯primitivetype
ïŒ
bitstype
ãprimitive
ãããªæããã«é©åãªååã«å€æŽããªãå Žåã¯ããã®ãŸãŸã«ããŠããæ¹ããããšæããŸãã
-1ããstruct
ã Cããã°ã©ããŒãšè©±ãããŠããå Žåãé€ããŠããã®çšèªã䜿çšããŠåå®çŸ©ãšã¯äœãã説æããããšã¯ããŸããã次ã«ãã¬ã€ã¢ãŠãã«äºææ§ãããããšãšããããã®ããããã£ãæ¯èŒ/察æ¯ããããšã ãã説æããŸãã
-1ããconst
ã Cã¯ãããŒã¯ãŒããæå°éã«ãããšãããã®æ¹åã«é²ã¿ãŸãããçŸåšãç¶æ³äŸåã®æå³ãæã€å€ãã®ããŒã¯ãŒãã§ç«ã¡åŸçããŠããŸãã const
ããããã®åã®éèŠãªããããã£ã§ãããšã¯æããŸããããïŒåç
§åã§ã¯ãªãïŒå€åã§ãããšæããŸãã
å¥ã®æ¹åã«é²ãã§ãããŒã¯ãŒãnew
ãŸãããïŒ
new abstract Abstract
new value Value <: Abstract
Value() = new()
end
new primitive 8 BitsByte <: Abstract
new record Object <: Abstract
Object() = new()
end
new function WhyNot # equivalent to `function WhyNot end`
ãå€åãã®åé¡ç¹ã¯ãèšèªã«ç²ŸéããŠãã人ã ããç解ã§ããããšã§ãã æ°èŠãŠãŒã¶ãŒã®å Žåããã£ãŒã«ããäžå€ã§ãããšããäºå®ã¯ããã£ãŒã«ããããã«çŽé¢ãã_æå³è«ç_äºå®ã§ãã ä»ã®ãã¹ãŠã¯å®è£
ã®è©³çŽ°ã§ãã ã ããç§ã¯const
ã奜ã¿ãŸãã
ã¬ã³ãŒããã©ãã«äœ¿çšãããã¯ããããŸãããæ£çŽãªãšããããã®çšèªã¯struct
ãããäžè¬çã§ã¯ãªããšæããŸãïŒãrecordtyperubyããšãstructtyperubyããã°ãŒã°ã«ã§æ€çŽ¢ããããpythonãperlãªã©ã«çœ®ãæãããããŠãä»ã®éCèšèªïŒã record
ã¯éåžžã«äŸ¿å©ãªè±èªã®åèªã§ãããããŒã¯ãŒããšããŠäºçŽããã®ã¯æ¥ãã¹ãããšã§ããã struct
ã¯ããã°ã©ã å
ã®ä»ã®åèªã«ã¯å¿
èŠãªãå¯èœæ§ãé«ããšããåé¡ããããŸãã
struct
ã¯éåžžã«äžè¬çã«äœ¿çšãããŠããŸãã ããã䜿çšãããããŒãã¿ã³ãŒããèŠæž¡ãïŒ
algolãCãCïŒãC ++ãlispãDãelixirãforthãgoãmaximaãracketãrustãseed7ãswiftãvisual basicïŒ structure
ïŒ
record
ã¯æ¬¡ã®ãŠãŒã¶ãŒã«ãã£ãŠäœ¿çšãããŸãã
adaãclojureãdelphiãpascalãerlangãiconãmodula-2ãããã€ãã®ã¹ããŒã
record
ã¯å€ãèšèªã§å¥œãŸããŠããããã§ãã æè¿ãé¢æ°åããã°ã©ãã³ã°ã®äººæ°ãé«ãŸãã«ã€ããæ§é çã«åä»ããããã¬ã³ãŒããåç
§ããåŸåããããŸãã
èå³æ·±ãããšã«ãseed7ã¯new struct
ãŸãã
Aã¯èŠãŠæ²ãããããstruct
ãããŸã§æã£ãŠããèšèªã«ãããäœãïŒæªãïŒãšããæ¬åœã«èšèãå®äºããããã«äœåãª3ã€ã®æåã§ãïŒ function
ã®ä»£ããã«func
ã çã
ã ããã¯èª°ããèšèªãæåŠããããšããŠãããã®ã§ã¯ãããŸããããããã§ã...
structure
ã¯ãå®éã«ã¯PL / Iããã³VisualBasicã§äœ¿çšãããŸãã VBã«ãstructure immutable
ãŸãã ãããã struct
ã¯éåžžã«äžè¬çã§ãããããèªäœãã»ãšãã©æ°ããèšèã«ãªã£ãŠãããšæããŠããŸãã
ããã«ããã€ãã£ãã¹ããŒãã³ã°ã®åé¡ãããã®ã ãããã ç§ã«ãšã£ãŠããã®æèã§struct
ãšããèšèã«éåžžã«æ
£ããŠããã®ã¯ã structure
ãããã¯ãã£ãšå¥åŠã«æããŸãã åãçç±ã§ã func
ã¯ã²ã©ãèããã function
èªç¶ã«èãããŸãã
struct
ã¯ãããŸããŸãªããã°ã©ãã³ã°èšèªã§äœ¿çšãããŠãããããèªå·±å®çµåã®çšèªã«ãªããŸããstructure
ãšããåèªã¯ïŒå°ãªããšããã€ãèªã®ãã€ãã£ããšããŠã®ç§ã«ãšã£ãŠã¯ïŒã¯ããã«æœè±¡çãªãã®ã§ãã ããšãã°ããã®åéå±€ã«ã¯ç¹å®ã®ãæ§é ãããããŸãã
func
ã¯ãç§ã«ãšã£ãŠã¯èªå·±å®çµåã®çšèªã§ã¯ãªããåãªãç¥èªã§ãã
funcã¯ç§ã«ãšã£ãŠèªå·±å®çµåã®çšèªã§ã¯ãªããåãªãç¥èªã§ãã
æ§é äœã¯åãªãç¥èªã§ã¯ãããŸãããïŒ ããã¯æåéãæ§é ã®ç¥ã§ã¯ãããŸãããããããšãç§ã¯åã«çšèªã誀解ããŸãããïŒ ããªãã¯func
ãããããã«æ
£ããŠããŸãã å€ãã®ããšã¯ãèªå·±å®çµåã®çšèªãã§ãããå€ãã®èšèªã«å
±éããŠããŸãããããã¯å¿
ããããžã¥ãªã¢ãäŒçµ±ã«åŸãã¹ãã§ãããšããæå³ã§ã¯ãããŸããã ãããããããã¯äœãè¯ããæªããäºãã ãã§ãããããã¯ã»ãšãã©å¥œã¿ã®åé¡ã§ãã
ãšã«ãããç§ã¯mutable
ã奜ãã®ã§ããããæ§é äœã§ãããæ§é äœã§ãããã¯ããŸãæ°ã«ããŸããã ãã¥ãŒã¿ãã«ã¯ãçŸåšã®immutable
ã«å¯ŸããŠåžžã«const
æžã蟌ãããšãåé¿ããŸãã
ããããæçµçã«struct
ãããã«ã¯strct
ã stct
ã strctr
ãªã£ããšããŠããJuliaãä»ã®èšèªã«å€æŽããå¯èœæ§ã¯ã»ãšãã©ãããŸãããç§ã®ä»äºãªã®ã§... :)
ãããè±èªã§æå³ããªããªãå Žåã¯ç³ãèš³ãããŸãããã struct
ã¯construct
ç¥èªã§ã¯ãããŸããã å°ãªããšããã€ãèªã§ã¯ã Konstrukt
ãšããåèªã¯ãè€ååãšã¯äœãã説æããã®ã«ã¯ããã«æå³ããããŸãã
è±èªã§ã¯ã construct
ãåè©ãªã®ãåè©ãªã®ããããããªããããè±èªããŒã¹ã®ããã°ã©ãã³ã°èšèªã§ã®äœ¿çšããããã劚ããããŠããŸã:)ãã€ãèªã§å€§æåã䜿çšãããšäŸ¿å©ã§ãã
struct
ã¯ãTVãASAPãLOLãåèªã§ããã®ãšåãããã«ãç¬èªã®åèªã§ãã ãæ§é ããšèšãããããšã¯ãã£ãã«ãããŸããã ç§ã®çµéšã§ã¯ããã®åèªã¯è©±ãèšèãšæžãèšèã®äž¡æ¹ã§ãæ§é äœãã§ãã
ãšããã§ïŒMatlabã¯struct
ãšããåèªã䜿çšããŠããŸããããããéããçãå Žåã¯ã
äžèšã®ããã«ãOTOHã¯CïŒããã³Swiftã§ã¯struct
ãå€åã«å¯Ÿå¿ããŸãïŒ class
struct
ïŒã ãããã£ãŠãå¯å€åãšäžå€åã®äž¡æ¹ã«åæ§ã®çšèªã䜿çšããŠãããããã®èšèªã«ç²ŸéããŠãã人ã
ã«ã¯å®éã«ã¯åœ¹ç«ã¡ãŸããã ããã決å®çãªãã€ã³ããã©ããããããªãâŠã
mutable
/ immutable
ã¯æãæ確ãªéžæã®ããã«èãããŸãããããã¯åå¿è
ã«ãšã£ãŠã¯éåžžã«æçœãªã¯ãã§ãã
struct
ã䜿çšããèšèªãå€æ°ããããšãèãããšããã®ååã䜿çšããããã«åãã»ãã³ãã£ã¯ã¹ãæã€å¿
èŠã¯ãªããšæããŸãã
ç§ã¯type
ãšconst type
ãäžçªå¥œãã§ãããããã§ãtype
ããŒã¯ãŒãã解æŸãããããã§ã¯ãããŸããã type
ã®äºå®ãããããªãã®ã§ãã©ããããã®è²»çšããããã®ãããããŸããã
ãã ãã type
éšåã¯ãã§ã«abstract
ãããããmutable
ãšimmutable
ãåç¬ã§äœ¿çšããã®ãæãçã«ããªã£ãŠããŸãã ãããŠã immutable struct
ãããã¿ã€ãã³ã°ãå°ãªããå°ããªå€æŽããããŸãïŒã¿ã€ã->å¯å€ïŒã
åèªã®æ§é ã¯ïŒå°ãªããšããã€ãèªã®ãã€ãã£ããšããŠã®ç§ã«ãšã£ãŠã¯ïŒã¯ããã«æœè±¡çãªãã®ã§ãã
èšèªã«ã€ããŠè°è«ããŠããéã誰ããstruct
ãšããç¥èªã®éãéå°è©äŸ¡ããŠããŸãã ãããŒã¿æ§é ãã®ç¥ã§ãã åæ§ã«ã type
ã¯ãããŒã¿åãã®ç¥ã§ãã ãªã³ã¯ãªã¹ããªã©ã®ããã«ãé
åãŸãã¯ãããã¡ãããŒã¿æ§é ã§ãããšãããŠèšããŸããã struct
ã¯ãæåã®äžè¬çãªããŒã¿æ§é ã®1ã€ãšããŠåæã®ã«ãŒããæã¡ãã³ã³ãã¥ãŒãã£ã³ã°å
ã§ãããæã€ããã«ãªããŸãããããèªäœã®ããå
·äœçãªæå³ïŒãããã£ãŠãè±èªãŸãã¯ãã®ä»ã®ãã€ãã£ãã®ããã°ã©ããŒã«ãšã£ãŠã¯ã structure
ã»ã©æœè±¡çã§ã¯ãããŸããïŒã
-1ãã
struct
ã Cããã°ã©ããŒãšè©±ãããŠããå Žåãé€ããŠããã®çšèªã䜿çšããŠåå®çŸ©ãšã¯äœãã説æããããšã¯ããŸããã次ã«ãã¬ã€ã¢ãŠãã«äºææ§ãããããšãšããããã®ããããã£ãæ¯èŒ/察æ¯ããããšã ãã説æããŸãã
ç§ã¯struct
ã«ã€ããŠãŸãã«ãã®ããã«æããŠããŸãã ç¹å¥ãªçç±ããªãããžã¥ãªã¢ã«æ°ããçšèªãå°å
¥ããã€ããã ãšæããŸãã
-1ãã
const
ã Cã¯ãããŒã¯ãŒããæå°éã«ãããšãããã®æ¹åã«é²ã¿ãŸãããçŸåšãç¶æ³äŸåã®æå³ãæã€å€ãã®ããŒã¯ãŒãã§ç«ã¡åŸçããŠããŸãã constããããã®åã®éèŠãªããããã£ã§ãããšã¯æããŸããããïŒåç §åã§ã¯ãªãïŒå€åã§ãããšæããŸãã
ãžã§ãã¯äžèšã§ïŒéåžžã«èŠªåã«ïŒèª¬æããŸããããæå³çã«ã¯å€ãåç §ãªã©ã¯é¢ä¿ãããŸããããããã¯å®è£ ã®è©³çŽ°ã§ãããæå³ã§ã¯ãªããå°æ¥ã®é»éæ代ã«ã¯_ç§ãã¡ã¯æ°ã«ããŸãã_ã ã³ã³ãã€ã©ãŒãæãæ¹æ³ã§ç©äºã¯ãå ±æã«ãã£ãŠæž¡ããããïŒå¿ èŠã«å¿ããŠããã€ãã®FFIä¿èšŒä»ãïŒã éå»æ°æ¥éãç§ã¯ãã§ã«ããããéæ³ã«ããå ±æããšåŒã¶ããã«ãªããŸãããããã¯ç§ã«ãšã£ãŠå瀺ã§ãããïŒçæ³çã«ã¯ïŒèããå¿ èŠã®ãªã粟ç¥çãªãã¬ãã·ã£ãŒãåãããŠãããšæããŠããŸãïŒ @vtjnashã¯ãç§ãå€ãšåç §ã«ã©ã®ããã«èŠåŽããŠãããããããŠããããã³ã³ãã€ã©ãGCãªã©ã«ãã£ãŠä»ã®ããã±ãŒãžãã¹ã¬ããã«ã©ã®ããã«å®è£ ãããŠããããèŠãŠããŸããã
ãã€ã³ãã£ã³ã°ã¯å€æŽããããšãäžå®ã«ããããšãã§ããŸãïŒ const
ã䜿çšããŸããã constant
ãããªãããããã§ãïŒã åæ§ã«ãè€åããŒã¿åå
ã®ãã£ãŒã«ãã®ãã€ã³ãã£ã³ã°ã¯ãå€æŽãããããäžå®ã«ãªããŸãã ãããã以åã«const
ãåãã£ãŒã«ãã«æ瀺çã«æ·»ä»ããããšãææ¡ããçç±ã§ããããã«ãããã»ãã³ãã£ã¯ã¹ãæ確ã«ãªããŸããïŒå°ãªããšãç§ã«ãšã£ãŠã¯ïŒã
IMOã¯ããã®ããšã«ã€ããŠè©±ãããã«ãå¯å€æ§ãããäžå€ããªã©ã®æŽŸæãªèšèã䜿çšããå¿
èŠã¯ãããŸããã äœããæ°ãããªããžã§ã¯ãã«ãªããŠã³ããããããããã§ãªããã°ããã¯äžå®ã§ãã struct
ãimmutable
ãããªè€éãªè±èªã®åèªã®å¿
èŠæ§ããïŒã³ãŒãã ãã§ãªãïŒJuliaã«ã€ããŠã®è«è©±ããå®å
šã«åãé€ãããšã¯ãè¯ãããšïŒç®æšã§ããïŒãšèŠãªãããã¹ãã§ãã
ãŸãããstructãã¯ããèªäœã®åèªïŒCã§ã®æå³ïŒã§ããã®ã«å¯Ÿãããstructureãã¯ãããããããŒã¿æ§é ãã§ããããã«æããŸããã¬ã³ãŒãã¿ã€ããæå³ããå Žåã¯ããstructããšèšãããã§ãã ããããããã§ã¯Cã®ã«ãŒãã瀺ããŠããŸãã
ããã¯äžè¬çãªLispã§ããããŸãã defstruct
ã
ããã«ããä»ã®ã»ãšãã©ã®ãã€ã³ããããããããäºçŽ°ãªããšã§ããããã€ã¯ã·ã§ãã£ã³ã°ãããŠããéãã声ã«åºããŠè©±ããšã immutable object
ãša mutable object
ãšãããã¬ãŒãºimmutable object
ãã£ãšãããã»ã©äŒŒãŠããŸãã ããã¯ããžã¥ãªã¢ã®åã·ã¹ãã ã«ã€ããŠã®äŒè©±ãå¿
èŠä»¥äžã«é£ããããã§ãããã ç·šéïŒããã¯ãã§ã«ãã®ã¹ã¬ããã§åãäžããããŠããããã§ãã
+1ããtype
-> struct
ããã³immutable
-> const struct
ã ç¹ã«å€§éæãªèª¬æã®åŸã§ãããã«æ··ä¹±ãã人ã«äŒã£ãããšã¯ãªããšæããŸãã
type
眮ãæãã¯ãv0.6ã§ã¯çŸå®çã§ãããv0.8ã§ã¯éçŸå®çã§ãã ãããè¡ãå¿
èŠããããŸãã æ確ãªã³ãã¥ãã±ãŒã·ã§ã³ãšè¡šçŸã®éãã®ããã«ããžã¥ãªã¢ã®èªç¶ãªæèœãããã¹ã ãŒãºã«ããåäžãããæ©äŒã§ãã ã¿ã€ãã¯ãæ©èœãããœãããŠã§ã¢ãäœæããäžã§éåžžã«ããŸãæ©èœããŸãã å
žåçãªãã®ã®ããè¯ãåœåã¯åŒ·åã«å
±é³Žãããžã¥ãªã¢ã«ãšã£ãŠããåé«ãæªæ¥ãããããã§ãããã
struct
æªäœ¿çšã®ãŸãŸã«ããŠããããšããå§ãããŸãã Cã§ã¯ãæ§é äœã¯ãåãåºå®ããããã£ãŒã«ãã®åºå®ã·ãŒã±ã³ã¹ã®æ§æã³ã³ãããŒã§ãã ãžã¥ãªã¢ã¯Cã§ã¯ãªããC䞻矩ããžã¥ãªã¢ã³ã®èšèª¬ã«åŒã蟌ãããšã¯ããžã¥ãªã¢ã®åŽé¢ãæŠå¿µåããããã®æè¯ã®äœ¿çšæ³ãšããè¯ãæ¹æ³ã«ã€ããŠã®çå£ãªè°è«ã®å€ã«ãžã¥ãªã¢ã®åãæ§è³ªãæŒãããã§ãããã
ãŸãããäžå€ããšãå¯å€ãã¯èŠèŠçã«äžèŽããããŠããŸãã ç§ãã¡ã¯ãã£ãšããŸããããã
immutable ComplexNumber ... end
alterable MethodTable ... end
@JeffreySarnoffäœè«ã§ãããã³ãã¥ããã£ã®åºæºã«ããã°ããžã¥ãªã¢ããããããšåŒã¶ããšã奜ãŸããã§ãã ç§ãããã«ã€ããŠèšåãããšæã£ãã ãã§ãã ð
@ararslan Juliaã«é¢ããã³ãã¥ããã£ã®æšæºã¬ã€ãã³ã¹ãå€æŽãããããã§ãçŸåšã¯æåŠä»£åè©ã®é©çšãé¿ããŠããŸãã ãããç§ã«ç¥ãããŠãããŠããããšãã ïŒã¯ãªã±ããïŒ
ãã§ããã³ãªä»£åè©ã䜿çšããããšèªäœã¯æªããããŸããïŒãããŠå€ãã®èšèªã§é¿ããããŸããïŒããå€ãã®äººãã圌女ããšããçšèªã®äœ¿çšãããžã¥ãªã¢ãæãæ¥ãšããŠè©±ãããšãžãšãžã£ã³ãããã®ã¯é åçã ãšæããŠããããã§ããèªæãã§ããã ãé¿ããŠãã ããã
THX
16:29ã®æšã2016幎11æ3æ¥ã«ã¯ãã¹ããã¡ã³Karpinski [email protected]
æžããŸããïŒ
女æ§ã®ä»£åè©ã䜿çšããããšèªäœã¯æªããããŸããïŒãããŠå€ãã®å Žåé¿ããããŸãã
èšèªïŒããããå€ãã®äººã䜿çšãããžã£ã³ãããã®ã¯é åçã ãšæããŠããããã§ã
ãžã¥ãªã¢ãæãæ¥ãšããŠè©±ãããã®ã圌女ããšããçšèªã¯ã
èªæãã§ããã ãé¿ããŠãã ãããâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/19157#issuecomment -258264451ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ABmqxopTX8oWKbwnLxfCBtIv-Ih7l-nXks5q6kRFgaJpZM4KkN_g
ã
åœé¢ã®åé¡ã«é¢ããŠãç§ã¯å人çã«äœãæåã®å€æŽã§ãããšèãããã«ã€ããŠæ±ºå®ããŠããŸããã ããããããã¯ãžã¥ãªã¢ã®çŽ æŽããã_type_ã·ã¹ãã ã«ã€ããŠè©±ããŠãããŒã¯ãŒãã¯ã¿ã€ããæ§ç¯ããããã«äœ¿çšããããšãæå®ããã«ã¯ãç§ã«ã¯å¥åŠã«æãããå®éã«ã¯struct
ã§ã¯ãªãtype
ã 代ããã«æ§é äœãšããŠåã«ã€ããŠè©±ãããšã人ã
ã«å¥šå±ãããããããªããšæããŸããæçµçã«ã¯ããžã¥ãªã¢ã®é©ãã¹ã_struct_ã·ã¹ãã ã«ã€ããŠè°è«ãããªã©ããžã¥ãªã¢ã説æããããã«äœ¿çšãããèšèªã®å€åã«ã€ãªãããŸãã
ã¿ã€ãã®äœæã«äœ¿çšãããããŒã¯ãŒãã¯ãå®éã«ã¯ã¿ã€ãã§ã¯ãªãæ§é äœã§ãã
ããããããŒã¯ãŒãã¯å®éã«ã¯åãæ§ç¯ããããšã§ã¯ãããŸãã---ããšãã°ãåŒTuple{Int}
ãåãæ§ç¯ããŸãã çŸåštype
å®çŸ©ãããŠãããã®ãåžžã«struct
ãšåŒã°ãããšã Real
ãåã§ãããã©ããã«ã€ããŠæ··ä¹±ãçããããšã¯ãªãã Union{Int8,Int16}
ã¯ã¿ã€ããªã©ã§ãã
ã¯ããç§ã¯ä»¥åã®ã¡ã¢ãç·šéããŠããŠãä»ããã«ã€ããŠæžããŠããŸãã ããã¯ãã®ããã«ãªããŸã
ãžã¥ãªã¢ãšã®ãäžè©±ãšçµŠé€ãã«åºãæ害
è¡šçŸåãšç°¡æœãã®å°æ¥ã®çºå±ã ãã¢ã¯
ãžã¥ãªã¢ã®åã·ã¹ãã ã®èæ
®ãæ£åœåããããã«éãããŸãã
Cæ§é äœã®è¶³å ŽãæŠäºã¯å€±ãããŸãã
4æ38åPMã«æšã2016幎11æ3æ¥ã«ã¯ãã¢ã¬ãã¯ã¹ã»ã¢ã«ã¹ã©ãŒã³[email protected]
æžããŸããïŒ
åœé¢ã®åé¡ã«é¢ããŠã¯ãç§ã¯å人çã«äœã決ããŠããŸããã
æè¯ã®å€æŽãæ€èšããŸãã ããããç§ã話ãã®ã¯å¥åŠã«æããŸã
ãžã¥ãªã¢ã®é©ãã¹ã_type_ã·ã¹ãã ãããŠãããŒã¯ãŒãã
åã®æ§ç¯ã¯ãå®éã«ã¯åã§ã¯ãªãæ§é äœã§ãã ç§ã¯ããããããããªããšæããŸã
代ããã«æ§é äœãšããŠåã«ã€ããŠè©±ãããã«äººã ãä¿ããæçµçã«ã¯
ãžã¥ãªã¢ã説æããããã«äœ¿çšãããèšèªã®å€åãžãäŸãã°ãžã¥ãªã¢ã®è°è«
çŽ æŽããã_struct_ã·ã¹ãã ãâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/19157#issuecomment -258266857ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ABmqxsZ_rXkn6GpVFxhd6TZnkkao9plWks5q6kZggaJpZM4KkN_g
ã
çŸåš
type
å®çŸ©ãããŠãããã®ãåžžã«struct
sãšåŒã°ããŠããã°ãReal
ãåã§ãããã©ããã«ã€ããŠæ··ä¹±ãçããããšã¯ãªããUnion{Int8,Int16}
ã¯ã¿ã€ããªã©ã§ãã
çŸåšãããã«é¢ããŠæ··ä¹±ã¯ãããŸããïŒ ããããç§ã¯ããã«ã€ããŠã®è°è«ãéãããããããŸããããç§ã«ã¯å€ããæçœã«æãããšæããŸãã
@ararslan ïŒ type
ãšããçšèªã¯ãçŸåšæ§ç¯ãããŠãããã®ã®ç·ç§°ã§ãã çŸåštype
ããŒã¯ãŒãã䜿çšããŠæ§ç¯ããŠããã®ã¯ãè€ååã§æ§æãããæ§é ã§ãã ããããJuliaã«ã¯ã type
ããŒã¯ãŒãã䜿çšããŠæ§ç¯ãããŠããªãä»ã®å€ãã®ã¿ã€ãããããŸãã
ããããçŸæç¹ã§ã¯ããã»ã©æ··ä¹±ããŠãããšã¯æããŸããããããŒã¯ãŒãstruct
ã䜿çšããå Žåããã¹ãŠã®ãžã¥ãªã¢ã¿ã€ããæ§é äœã§ãããšã¯èª°ããæããŸããã
ããŠãè¯ãç¹ã§ãã
Union {Int8ãInt16}ã¯ã¿ã€ãã§ã
ããã Union
ãååšããããšãå¿ããŠããŸããã ããã«ããã struct
ïŒ Struct
ïŒïŒã®è°è«ããã説åŸåã®ããIMOã«ãªããŸãã ããã§ãmutable
ãšimmutable
ã¯å¥œãã§ã¯ãããŸããã
ç§ã¯_struct_ãç¡ç¥ã§ããããšã«æ°ã¥ãããžã¥ãªã¢ãããã«éã¶ããšã¯ãæéã®çµéãšãšãã«ãé²åããæ代粟ç¥ãåŒãäžããã ãããšæ¬åœã«ä¿¡ããŠããŸãã åçã¯ãåããŠãããããã®èª¬æãšãé«æ¬¡ã®èåããã³ããæ·±ãã²ã·ã¥ã¿ã«ããšããŠã®èšç®ã®å€åè¡šçŸãšã®éã®æ®æäœçšã§ãã struct
ã䜿çšããŠããæ§é äœãéèŠã§ã¯ãªãã¿ã€ãã«ã€ããŠèª°ããèããããã«ãªãããã§ã¯ãããŸããã ...ç§ã«èªåŒµãããŠãã ãã...
ã¢ã€ã³ã·ã¥ã¿ã€ã³ã«ã€ããŠç¹èš±ä¿å¡ãšããŠæžãããšã¯ã圌ã®è²¢ç®ã«å¯Ÿããè©äŸ¡ã匱ãããšã¯èšããŸããã ã¢ã«ããŒãã»ã¢ã€ã³ã·ã¥ã¿ã€ã³ãžã®èšåãç¹èš±ä¿å¡ãšããŠã®åœŒã®æéã®éèŠæ§ã匷調ããã³ãŒã¹ã§ã¯ãæ°äººä»¥äžã®åŠçãå°æ¥ã®äŒè©±ã§ãã®æèŠãæ±ãã§ããããšããããšã«ã¯ãªããŸããã so
ãããšããããšã¯ãæ°ããåŠæ ¡ã«åŒã£è¶ããåŸããããso
ã ãã§åäœããããšãä¿èšŒãããã®ã§ã¯ãããŸããã
_struct_ã䜿çšããããã®èª¬åŸåã®ããã±ãŒã¹ãããå Žåã¯ã次ã®ããããã®ããè¯ãã±ãŒã¹ãããã¯ãã§ãã
structure
ã¯ãããŒãã®æå³ã®ããçžäºé¢ä¿ã§ãããæ
å ±ã«åºã¥ããæ§æã§ãã
construct
ã¯ãé¢é£æ§ã®äŸ¿å©ãªæ§é åã§ããã䟡å€ãé«ããèšèšã§ãã
äžå€ã®structure
ã¯æ°žç¶çãªã³ã³ããžããã§ã
å¯å€ã®structure
ã¯ãåºå®ãããŠããªãäºåéžæã§ã
äžå€ã®construct
ã¯ç¢ºç«ãããå¶ç¶æ§ã§ã
å€æŽå¯èœãªconstruct
ã¯ãã³ã³ããã¹ãã«å¯Ÿããæå³çãªå¶çŽã§ã
ããããã€ã³ãã¬ãŒã¹ã¢ã³ãã¹ã«ãŒã²ãŒããã®è©±ãæ¹ãšãããŒã¿æ§é åã«ãããªã³ãããžãŒæ å ±ãæããã«ãªããã®äž¡æ¹ãå¿ èŠã§ããããããå€æ修食åã®è©±ãæ¹ãšããŠå©çšã§ããããã«ããããšãã§ããŸãã CSã®æèœã§ããã³ãã¥ããã£åå è ãã倧èŠæš¡ãªããã°ã©ãã³ã°ãè¡ãä»ã®ã»ãšãã©ã®ãã¡ã€ã³ãšãã¹ããŒãã¯ããã€ããã¡ã¢ãªãããžãã¯ãæ瀺ãããæäœãªã©ã培åºçã«åŠçããŸãã欲æ±ãåµé æ§ãå¯èœæ§ãæ³ååãçã¿åºããã1ã€ã®æ¹æ³ã¯ãããŸãæ©èœãããœãããŠã§ã¢ã«ãªããŸããä»äºã®äŸ¡å€ã¯ååã«ãããŸã-ããã¯ããŸãå ±æãããŠããŸããã çšèªã®åœåã«é¢ãã決å®ã¯ããã®è©±ã奚å±ããããã«å°éããå¿ èŠããããŸãã
class
ãšimmutable
ã©ãã§ããïŒ
Delphiã®ã¯ã©ã¹ãç¥ã£ãŠããŠãããã§ã¯ç¡çã ãšæã£ãŠããŸãããããã«ãã¡ãœããã®ããããŒã¹èšèªã§ã¯ããŒã¯ãŒãïŒ link ïŒãšããŠäœ¿ãããŠããŸãã ãããŠ-ç§ãããã¥ã¢ã«ãæ£ããèªãã ã-HaskellãšDylanã§ãã ããã¯ãã¯ã©ã¹ã¯ã¿ã€ãã®äžçš®ã§ãããã¹ãã«åæ ŒããŸãããããã§ãããªããããŸãã§ãïŒä»æ¥ã®ãã¿ã€ãããšããŠïŒãç§ã奜ããªãã®ã§ãã 15ïŒ00ã15ïŒ20åã®ãé åãšå埩ã®æŠèŠããããªã§ãTim Holyã¯ïŒå¶ç¶ã«ïŒãã¯ã©ã¹ããšèšã£ãŠããŸããããã¯éèŠã§ã¯ãããŸããããããã§ãããžã¥ãªã¢ã®ã³ã³ããã¹ãã§ã¯ã¯ã©ã¹ãå®å šã«ç°è³ªã§ã¯ãªãããšã瀺ããŠããŸãã
ãã以å€ã®å Žåã reftype
ãšimmutable
ïŒ reftypeã®çšèªã¯æåã®ã³ã¡ã³ãã§èšåãããŠããããã以éç¡èŠãããŠããŸãã ã©ãããŠïŒ ç§ã«ãšã£ãŠãããã¯éåžžã«ããé³ã§ãã¿ã€ãã解æŸããåç
§ã®æå³ãäŒããŸãã
ïŒãnewãããŒã¯ãŒãã®ç®çãããããŸããã§ããããnewããå€æŽããã«ãã¹ãŠã®è¡ã§çç¥ã§ããŸããã§ãããïŒãvalueãããã³ãrecordããšããçšèªã¯ããŒã¯ãŒãã§ãããçŸåšäœ¿çšãããŠãããimmutableãã眮ãæããŸãããšãã¿ã€ãããããã§ããïŒïŒ
@swissrããã2ã€ã®ã¿ã€ãã®å¯äžã®éãïŒã»ãšãã©ã®ãŠãŒã¶ãŒãç¥ã£ãŠããã¹ãïŒã¯ãäžæ¹ã®ãã£ãŒã«ãã¯å€æŽã§ããããäžæ¹ã®ãã£ãŒã«ãã¯å€æŽã§ããªãããšã§ãã ãããã®ååããããã®å¯äžã®æå³äžã®åºå¥ã瀺ããŠããã°è«ççã§ãã ïŒåè¿°ã®ããã«ãå€ãšåç
§ã䜿çšããå®è£
ã¯æµåçã§ããããšãã°ãæ¹è¯ãããã³ã³ãã€ã©ã¯ãæé©åãšããŠåç
§ã«ãã£ãŠå€§ããªisbits
åãèªåçã«æž¡ãå¯èœæ§ããããéã«ãç¹å®ã®ç¶æ³ã§ã¯å°ããªå¯å€å€æ°ãã¹ã¿ãã¯ã«ç§»åããå¯èœæ§ããããŸãïŒã
type
ãšstruct
ã«ã€ããŠã¯ã abstract
ã Union{}
ã typealias
ãªã©ã®æœè±¡ããŒã¿åãäœæã§ããããšãããããŸãïŒ Tuple{}
ã®å Žåããããæ°ããåã§ãããããã©ã¡ãŒã¿ãŒåãããåã§ãããã¯è°è«ã®äœå°ããããŸãïŒããå®éã«ã¯_ãŠãŒã¶ãŒå®çŸ©ã®å
·è±¡å_ã®ã¿ãbitstype
ã type
ããã³immutable
ã ãããã®æ§æã¯ãããããäœããã®åœ¢ã§å«ãããŒã¿ãå®çŸ©ãããšããç¹ã§æœè±¡çãªå®çŸ©ãšçŽãããªããã®ã§ãããæœè±¡çãªå®çŸ©ã¯ããã§ã¯ãããŸããã immutable
ãconst type
ã«å€æŽãããšãç¶æ³ãæ確ã«ãªããŸãã
çŽ äººã®èšèã§è°è«ãããããã°ã©ãã³ã°èšèªãäœæããæ©äŒããããšããç§ã¯èšèªãšå°éçšèªstruct
äŒæã«ã€ããŠå¿é
ããŸãããå¯äžã®çç±ã¯äŒçµ±ã§ãã ããã圹ã«ç«ããªããšæãäŸã¯ã Symmetric{Matrix{T}}
ãããªã©ãããŒã¿ã€ããäœæããå Žåã§ããããã®struct
ã1ã€ã®ãã£ãŒã«ãã ãã§äœæããŸããã ãç§ãèšãããšãã§ãããšãã«"ããã¯...ç§ãäœã£Symmetric
ã©ãããŒtype
ã®ããã«Matrix
"ïŒãã®æã®ååã¯ãå®éã®æ§æã§ããããšãã¡ã¢ããŠãã ããïŒã ãã©ãããŒæ§é äœãïŒ ã¡ãã£ãšã°ãããŠããããã«èãããŸããã1ã€ã®ãã£ãŒã«ãã§æ§é äœãäœæããã®ã¯èª°ã§ããïŒ ããã«èšãã°ããã£ãŒã«ãã®ãªãã·ã³ã°ã«ãã³ã¯ã©ãã§ããïŒ types
ãšimmutables
ã®ããªãã®éšåã¯ãïŒéèŠãªïŒããŒã¿æ§é ãäœæããããã«å®çŸ©ãããŠããã®ã§ã¯ãªããã©ãããŒãšã·ã³ã°ã«ãã³ãåãã匷åãªåãšãã£ã¹ãããã·ã¹ãã ã䜿çšãããšããæ確ãªç®çã§å®çŸ©ãããŠããŸãã IMOããã¯ããžã¥ãªã¢ã®æãèå³æ·±ãã匷åã§è¡šçŸåè±ããªåŽé¢ã§ãïŒããã_éã_ãšããäºå®ãšçµã¿åããããŠããŸãïŒã
struct
ã¯ãæ§é äœã䜿çšããŠç¹æ§ãªã©ãå®è£
ã§ããããšãç¥ã£ãŠããçµéšè±å¯ãªãã³ãã¬ãŒãC ++ã¡ã¿ããã°ã©ããŒã«ããã«æããã«ãªããšæããŸãããããã¯å°ãæ®å¿µã§ãã
ãçš®é¡ãã¯åçè«ã«ãããŠããªãç¹å®ã®æè¡çæå³ãæã£ãŠããŸãã
ç®æš/å©ç¹ãtype
ã解æŸããããšã§ããå Žåãã©ãã§ããããã
const datatype # immutable
datatype # type
ãããã¯å
·è±¡åã§ãããããããããããŒã¿ãå«ãŸããŠããŸããããã¯ã DataType
ãäœæããïŒå€ãã®ïŒæ¹æ³ã®1ã€ã§ãã
ãçš®é¡ãã¯åçè«ã«ãããŠããªãç¹å®ã®æè¡çæå³ãæã£ãŠããŸãã
ãŠã£ãã®çŽ¹ä»ã¯Type{}
ïŒ DataType
ãšTypeConstructor
ã Union
ãªã©ãåãå
¥ããïŒãšãŸã£ããåãããã«èãããŸãïŒç·šéïŒãã®ãããªå€æŽã ãšã¯æããŸããæ··ä¹±ããã䟡å€ããããŸãïŒ
kind
ã¯ããã§ã¯æ£ããèšèã§ã¯ãããŸããã
ã»ãšãã©ã®å Žåãæåã®ã¢ãããŒãã¯åã«ãã£ãŒã«ããåŠã¶ããšã ãšæããŸã
ããªãã®ãã®ã«çœ®ãæããããšããã®ã§ã¯ãªããæšæºçãªèªåœ
æšæž¬ãç°¡åã«ãªããŸãã
ãã®æ±ºå®ã¯éå
¬åŒã®ã¹ããŒãã«ã¯åœ±é¿ããŸããã ããªãã¯ãŸã è³¢æã«ãç§ã¯
ã¿ã€ããå®çŸ©ããŸããããããå
·äœçãªããŒã¯ãŒãã䜿çšãããšã次ã®å Žåã«ç°¡åã«ãªããŸãã
ããªãã¯æ£ç¢ºã§ããå¿
èŠããããŸãã
ãã§ã¢ãã€ã³ãããžã§ãã const struct
ãšstruct
ã¯immutable
察type
ãããæ¹åããããšç§ã¯_do_ãšæãããšã«æ³šæããŠãã ããïŒããããããã¯ç§ãã¡ãæ€çŽ¢ãã¹ãã§ã¯ãªããšããæå³ã§ã¯ãããŸããããã«è¯ããã®ïŒã
æ§é äœã¯ãæ§é äœãŸãã¯æ§ææŠå¿µãšããŠãã©ã¡ãã§ããªããããŸãã¯äž¡æ¹ãšããŠèªèããããšæããŸããïŒ
@andyferrisã®ãclassããšãreftypeãã®ã³ã¡ã³ãã¯ããconst typeããæ°ã«å
¥ããªãããŸãã¯const struct
ãšstruct
ãæ¹åãããããšããµããŒãããªããšããæå³ã§ã¯ãããŸããã§ããã 'const'ãåé¿ãã 'immutable'ãä¿æãã 'struct'ãé€å€ãããå Žåã«ãèããããçšèªãæ¢ããã1ã€ã®è©Šã¿ã§ããïŒèšåãããå®è£
ãèªèããŠããŸãããã80plusïŒ
ã®å Žåã¯åé¡ãªããšèããŸããïŒ ã
fieldtype
ïŒãŸãã¯fieldstype
ïŒã¯ã©ãã§ããïŒ ããã¯bitstype
ãšäžŠè¡ããŠããã fieldnames()
ãšäžèŽããŠããŸãã
ã°ã¬ã³ã
ç§ã¯çå®ãããã奜ãã§ãã äœããåæ°åœ¢ãŸãã¯è€æ°åœ¢ã«ãªãå¯èœæ§ãããè€æ°åœ¢ã䜿çšããããšãé©åã§ãããããfieldstypeã®æ¹ãé©ããŠããŸãã
-ãžã§ããªãŒ
class
ã¯å€§äžå€«ãããããŸããã ãªããžã§ã¯ãå
ã®ã¡ãœãããæã€ã¯ã©ã¹ããŒã¹ã®OOãšé¢é£ä»ããããŠãããããåœåã¯æåŠããŸããã struct
æ¹ãæ£ç¢ºã ãšæããŸãã
struct
ã¯äœãããçããšã¯æããŸããã ããã¯ããã®æç¹ã§ãããã®çš®é¡ã®ããŒã¿æ§é ãšåŒã°ããŠãããã®ã§ãã ããããããªããšã«ãlispã«ã¯cons
ããããŸããããã¯å
ã
construct
çç¥åœ¢ã ã£ããããããŸãããã人ã
ã¯ãããããã«å¿ããŠããconscellsãã«ã€ããŠè©±ãå§ããŸããã
class
ãæåŠãç¶ããã¹ãã ãšæããŸãã ãã®çšèªã䜿çšãããšããžã¥ãªã¢ã¹ã¿ã€ã«ã«åããå€ãã®OOPæåŸ
ãçãŸããŸãã
struct
ã¯äœã®ç¥èªã§ããããŸããããCã®æ§é äœãžã®æé»ã®åç
§ããJuliaã®å€åã§ããããšãæ瀺ããŠããã®ã§ã¯ãªãããšå¿é
ããŠããŸãããã¡ããããã§ã¯ãããŸããã ãã®ããã«ãç§ã¯çŸåšrecord
å°ãåŸããŠããŸããããã¯ãçŽæ¥çãªæå³åããã¯ããã«å°ãªãããã§ãã
æ確ã§ã¯ãªããããããªãç¹ãæ確ã«ããããã«ã const record
ãŸãã¯const struct
ã¯ããã¹ãŠã®ãã£ãŒã«ãã«const
ããããã³ã°ããããã®çãæå³ã§è§£éãããå Žåã«ã®ã¿å®è¡å¯èœã ãšæããŸããåã
ã®ãã£ãŒã«ããconst
ãšããŠããŒã¯ããããšããµããŒããããããšãæå³ããŸãã ã ããç§ãèšã£ãŠããã®ã¯ãç§ãã¡ã¯ããããæã€ããšãã§ãããšããããšã§ãïŒ
record T0
f::A
g::B
end
record T1
const f::A
g::B
end
record T2
f::A
const g::B
end
record T3
const f::A
const g::B
end
const record T4
f::A
g::B
end
ããã§ãT3ãšT4ã¯å®éã«ã¯åçã®ã¿ã€ããèšè¿°ããŠããŸããã€ãŸãã const record
ãšæžãããšã¯ããã¹ãŠã®ãã£ãŒã«ããconst
ããšã®çç¥åœ¢ã§ãã ããã解éã§ãªãå Žåãããã¯ãã§ã«æŠå¿µã®æ··ä¹±ã®äžè¬çãªåå ã§ããããã®çšèªã®æ··ä¹±ã«è¿œå ãããšãåé¡ã解決ããããšã¯ã§ããªããããäžå€æ§ãšæåžžæ§ã®æ··åã¯äžçš®ã®å±éºã ãšæããŸãã
ããã§ãT3ãšT4ã¯å®éã«ã¯åçã®ã¿ã€ããèšè¿°ããŠããŸããã€ãŸããconstã¬ã³ãŒãã®æžã蟌ã¿ã¯ãconstã§ãããã¹ãŠã®ãã£ãŒã«ãã®çç¥åœ¢ã«ãããŸããã
const record
immutable
æå³ãæå³ããããã«ãããšãããã¯æ£ãããªãå¯èœæ§ããããŸãã const record
ã¯ãã©ã®ãã£ãŒã«ããå€æŽã§ããªãåç
§åãèšè¿°ããŸãã äžæ¹ãçŸåšã®immutable
ã¯å€åã§ãã
record
説æã«ã€ããŠã¯ã httpsïŒ //github.com/JuliaLang/julia/issues/19157#issuecomment-257942059ãšæ¬¡ã®ã³ã¡ã³ããåç
§ããŠ
@vtjnashããã¯è¯ãç¹ã§ããã immutable
åç
§ãå«ãŸããŠããå Žåã
record
ãããŸãäžè¬çã§ã¯ãªããšããäºå®ã¯åé¡ãªããšæããŸããåè©ãšåè©ã®äž¡æ¹ãšããŠæçšãªåèªã§ãããšããäºå®ã¯ãããåé¡ããããŸãã
nuple
ã©ãã§ããïŒ ãã¡ããããååä»ãã¿ãã«ãã®ç¥ã§ãã
ç§ã¯äžèšã®ææ¡ã奜ãã§ã
const datatype # immutable
datatype # type
ãããŸã§ã§æé«ã ããã¯æŽå²çãªè·ç©ã§å€ãèšèãæã¡èŸŒãããšãé¿ããç§ã«ã¯å®å šã«æçœã«æããŸãã 確ãã«ãjuliaã®ããŒã¿åã¯ããã ãã§ã¯ãããŸããããéåžžã®ãŠãŒã¶ãŒã«ãã£ãŠå®çŸ©ãããæãäžè¬çãªããŒã¿åã§ãã
ããã¥ã¡ã³ãã§ããã説æããããã®çšèªãå€æŽããäºå®ã¯ãããŸããïŒããã«ããã®ãããªç« ã®ã¿ã€ãã«ãå€æŽããäºå®ã¯ãããŸããïŒ ããã§ãªãå Žåã¯ã composite
ãšimmutable composite
ãŸãã¯const composite
äžçªå¥œãã ãšæããŸãã const
ã¯ã°ããŒãã«å®æ°ã«ã䜿çšããããããäž¡æ¹ã«const
ãŸãã¯immutable
ãããããéžæããŸããã const
å°ãåªå
ããŸããçãã å°ãªããšããcompositeãšããåèªã¯ã»ãšãã©ã®åå¿è
ã«ã¯ãªãã¿ããªããããã¥ã¡ã³ãã確èªããå¿
èŠããããCåãšã®é¡äŒŒæ§ã«ãã誀ã£ãä»®å®ãåé¿ããŸãã const
ã«é¢ãã誀ã£ãä»®å®ã¯ãC ++ã§ããã«æ
£ããŠãã人ã¯äœãä»®å®ããªãããšãç¥ã£ãŠããã®ã§ãããŸãèµ·ããããã«ãããŸããã
ãŸããäžå€æ§ã瀺ãããã«2ã€ã®åèªã䜿çšããå©ç¹ã«ãããå¿
èŠãçããå Žåã«ãå°æ¥ã®const abstract
ãšconst bitstype
å¯èœæ§ã解æŸãããŸãã
constã¬ã³ãŒãã«äžå€ãä»æå³ããããšãæå³ãããå Žåãããã¯çå®ã§ã¯ãªããããããŸããã constã¬ã³ãŒãã¯ãã©ã®ãã£ãŒã«ããå€æŽã§ããªãåç §ã¿ã€ããèšè¿°ããŸãã äžæ¹ãçŸåšã®äžå€ã¯å€åã§ãã
ãããšããã immutable
ã®äŸ¡å€ã¯å®è£
ã¬ãã«ã§å®çŸ©ãããŠãããšæããŸããããŠãŒã¶ãŒãèæ
®ãã¹ãããšã¯ããã£ãŒã«ãããªããŠã³ãã§ããªãããšã ãã§ãã ãã®å Žåãå€ãæž¡ãïŒãŸãã¯æž¡ããªãïŒããšã¯çŽç²ãªABIã®åé¡ã§ãããã³ã³ãã€ã©ãŒã¯ååãšããŠãããå¹ççãªãã®ãèªç±ã«éžæã§ããå¿
èŠããããŸãã ç§ã«ã¯ãäžå€ã®ãŠãŒã¶ãŒã«è¡šç€ºãããã»ãã³ãã£ã¯ã¹ã¯ãã¿ã€ãã®ãã¹ãŠã®ãã£ãŒã«ãã«const
ã®çŸåšã®ã»ãã³ãã£ã¯ã¹ãé©çšããããšãšãŸã£ããåãããã«èŠããŸãã
äžå€ã®æå³ããããŠãŒã¶ãŒã¬ãã«ã®ã»ãã³ãã£ã¯ã¹ã«ã€ããŠãŸã æ··ä¹±ããŠããŸããããããšãããã§å®è£ ã®è©³çŽ°ã«ã€ããŠè©±ããŠããã®ã§ããïŒ
ããã«ã¯ã©ãã§ããïŒ ãã¡ããããååä»ãã¿ãã«ãã®ç¥ã§ãã
record
ãšäžç·ã«è¡ãããšãã§ããŸãããïŒ ããšãã°ãååä»ãã¿ãã«ã¯ãErlangã®record
ã§ãã ãããŠãããŒã¿ããŒã¹ã®äžçã§ãããæããŸãã
ãããããžã¥ãªã¢ãC
ãç¥ã£ãŠãã人ã
ãšéè€ããŠããå Žåã¯ã struct
ãããé©åãªå€æŽã§ãã
ç§ã¯å人çã«record
ãããªå¥åŠã§äžæçã ãšæããŠããŸãã ããŒã¿ããŒã¹ã®äžçã§ã¯ãã¬ã³ãŒãã¯ããŒãã«ã®è¡ã§ãã ããã¯ãJuliaã¿ã€ãïŒäžå€ãŸãã¯ãã®ä»ïŒãšåããããäžè¬çãªãã®ãšã®çŽãããã競åã®ããã§ãã
ãã®ã¹ã¬ãããèªã¿çŽããåŸãç§ã¯type
composite
ã«åŸããŠããŸãã ããã¯ãžã§ãã¹ã®ãäžæã«ãŒã«ããä¿æããŠãããããã«å¯Ÿããå察祚ã¯ããã»ã©å€ããããŸããã ãã®çšèªãä»ã®èšèªã§ã¯ããŸã䜿çšãããŠããªããšããããšã¯ãç§ã®æèŠã§ã¯åé¡ã§ã¯ãããŸããã ãããŠã composite
ã¯ãå®éã«ãã®ããã«èŠã€ããããšãã§ããæã説æçãªåèªã§ãã ããããããã¥ã¡ã³ãã§ãããã®ãã®ãcomposite types
ãšåŒãã§ããçç±ã§ãã
Fortranããæ¥ãŠãç§ã¯ãŸã ããŒã¯ãŒãtype
ã¯ã¡ããã©ãããšæããŸãã
æå°ã®è³¢æãªå€æŽã¯immutable
-> const type
ã§ãã
ãããã type
æ¬åœã«è¡ããªããã°ãªããªãå Žåã
composite
ãšconst composite
ã次åã®éžæã®ããã§ãã
immutable
-> const type
確ãã«å®è¡å¯èœã®ããã§ããåæã«ãæ··ä¹±ãé¿ããããŒã¯ãŒããåé€ããèšèªãæ確ã«ããŸãã
type
ã䜿ããªãã®ã¯æ²ãããããããŸããããæ£çŽèšã£ãŠç§ã䜿ãããã®ã¯Type
ã§ãã 10åã®ãã¡9åãç§ã®åå€æ°ã¯éçãã£ã¹ãããã®ãã©ã¡ãŒã¿ãŒã§ãããåçååæã®DataType
å€æ°ã§ã¯ãããŸããïŒçæãããé¢æ°ã¯äŸå€ã§ãïŒã inference.jlãæžã人ã«ã¯åœãŠã¯ãŸããŸããããããªããããããã®ã§ããã°ã圌ãã¯å®éã«ã¯ãã®èšèªã®ãã¿ãŒã²ãããªãŒãã£ãšã³ã¹ãã§ã¯ãããŸããã
é¢é£ãã質åïŒãããã¬ãã«ã§type
ã䜿çšããããšã¯ãŸã£ããå®è¡å¯èœã§ãããé¢æ°å
ïŒçŸåšã¯åžžã«ç¡å¹ã§ãïŒã§å€æ°åã«ããããšãã§ããŸããïŒ ãŸãã¯ããã«ãåå®çŸ©ã®æ§é ã¯ããªãå
·äœçã§ã...ã°ããŒãã«å€æ°ïŒãŸãã¯é¢æ°ïŒã§ããtype
ãã€ã³ãã§ããããã«ããªãããåå®çŸ©ãç¹å®ã®æ§æãšããŠæ€åºã§ããŸããïŒ
ã€ãŸããåãå®çŸ©ããããã®æ§æãç¶æããªãããããŒã¯ãŒãã®åäœãåãé€ãããšãã§ããŸããïŒ
ïŒããããimoïŒåŒ·ããªã¹ã¯ã䌎ããŸãïŒç¹ç°ãªèŸæžç·šéãæ°ãæ£ããã®ã¯ç°¡åã«ãªããããŸãã ãããŠããããã®æ¬ ããŠãããã€ã¯ãé£ç¶æ§ã¯ãã³ã©ãã¬ãŒã·ã§ã³ãšæ確ãªã³ãã¥ãã±ãŒã·ã§ã³ã容æã«ããããã«ç Žå£çã§ãã
@ c42f ïŒ
äžå€ã®æå³ããããŠãŒã¶ãŒã¬ãã«ã®ã»ãã³ãã£ã¯ã¹ã«ã€ããŠãŸã æ··ä¹±ããŠããŸããããããšãããã§å®è£ ã®è©³çŽ°ã«ã€ããŠè©±ããŠããã®ã§ããïŒ
ããããããªãã¯éããŸãâç§ã¯ãããã§ããã äžå€ã¯å®éã«ã¯å€åã§ã¯ãããŸããããå¯å€ã¯ç¢ºãã«ããã§ã¯ãªããCãšåãçšèªã䜿çšããããšã¯ããããããã§ããããšã瀺åãããããããªããšæããŸããã
Cã¯å€æž¡ãèšèªã§ãããšããã®ãå®éã®ç¶æ³ã§ãããããCã®ã³ã³ããã¹ãã§ã¯ãæ§é äœããå€åããšåŒã¶ããšãçã«ããªã£ãŠãããã©ãããæ確ã§ãªãããšã«æ°ã¥ããŸããã ãããã£ãŠãééããªããããŒã¿åèªäœã§ã¯ãªããåãæž¡ããšå²ãåœãŠã®èŠåãç°ãªããŸãã
ç§ã¯ããã®åé¡ãéãå€æŽãå¶å®ããããšã«å šé¢çã«è³æã§ãã æçšæ§ã¯ãåè£çšèªã®1ã€ã§ã¯ãªã1ã€ã䜿çšãããšããå èã®å¥œã¿ãããéèŠã§ãã
_ããã_
å®éã®ç¶æ³ã¯ãã®Cãªã®ã§
åè£çšèªã®äžã§ã
struct
ãç§ã®æãå«ãããŠããçç±ãããŸãæããŠããŸã
ç§ã販売ããŠããã¹ããŒãªãŒã¯æ¬¡ã®ãšããã§ãããCãšjuliaã®äž¡æ¹ã§ã struct
ã¯ããã£ãŒã«ãåã®åºå®ã»ãããããŸããŸãªã¿ã€ãã®å€ã«ãããããããŒã¿æ§é ã§ããããããããããæž¡ããšãCã¯æž¡ãããŸãã -å€ã«ãããšãžã¥ãªã¢ã¯ãã¹ãã€ã·ã§ã¢ãªã³ã°ã§ããã
ãã®ã¢ã«ãŠã³ãã¯ãé¢åã§ã¯ãªããå®å šã«æ£ç¢ºã§ãã ãã®äžã®ãã¹ãŠãæ£åžžã«ã°ãŒã°ã«ã§æ€çŽ¢ã§ããŸãã PLçè«å®¶ã¯ããã«ã€ããŠäžå¹³ãèšãããšã¯ãªããéPLçè«å®¶ã¯ãããèããŠäœããåŠã¶ã§ãããã
ç§ã¯ãã®è©±ãè²·ããŸãã çåã«æããŸãããããã§PLçè«å®¶ãäžæºãèšãçšèªã¯ãããŸããïŒ ãžã¥ãªã¢ã¯ãPLçè«å®¶ãšéçè«å®¶ã®äž¡æ¹ãæºè¶³ããããããã«ãŽã£ããåã£ãŠãããšæãã®ã§ãããã§æ£ç¢ºããšäžè¬çãªæå¿«ãã®ãã©ã³ã¹ããšãããšãéèŠã ãšæãããŸãã
ãããšãç§ã¯èª°ã®å£ã«ãèšèãå
¥ããããããŸããã æ§é äœããå€åãã§ããããã«struct
ãæ··ä¹±ããå¯èœæ§ããããšããèãã«å¯ŸåŠãããã£ãã ãã§ãã
immutable
ã¯1èªã®ããŒã¯ãŒãã®ãŸãŸã«ããŠããã¹ãã ãšæããŸãã const type
ãŸãã¯const struct
ãŸãã¯immutable struct
奜ãã§ã¯ãããŸããã ç§ã¯immutable
ããã䜿çšããŸãããä»ã®ã»ãšãã©ãã¹ãŠã1èªã§ããã®ã«ããããã®å®£èšã2èªã«ãªãã®ã¯éåžžã«åä»ã ãšæããŸãã ã¿ã€ãã³ã°ã®æå³ã§ã¯ãããŸãããããã¯æ¬åœã®åé¡ã§ã¯ãªãããã§ãã ãããããã¿ã°ãã®ããã«äžå€ã§ãããšããæå³ã§ã¯ãããã¯äºæµã®ããã«æããŸãã
@TotalVerbããã¯ããšããäºå®ãšããŸãäºææ§ããªããšæããŸã
type MyType
const field::Int
end
ãŸã£ããåãããã«åäœããå¿ èŠããããŸã
immutable MyType
field::Int
end
ä»ããŸãã
ãããèãããšã const type
ïŒãŸãã¯const struct
ã const composite
ãªã©ïŒãã·ã§ãŒãã«ãããšããŠåãã£ãŒã«ãã«const
ããããŒããã£ã¹ãããããšã¯äŸ¿å©ãªããã§ãïŒãã ãå³å¯ã«ã¯å¿
èŠãããŸããïŒæ©èœã å°æ¥ãã³ã³ãã€ã©ãã©ã¡ããå
¥åãããããããããªãããšãé¡ã£ãŠããŸãïŒåãã£ãŒã«ãã®åã«const type
ãŸãã¯const
-åè
ã¯ããŒãµãŒã«ãã£ãŠåŸè
ã«å€æãããå¯èœæ§ããããŸãïŒã ãã®æç¹ã§ããªãimmutable
ã§ããïŒ
ãã¿ã°ãã®ããã«äžå€ã§ãããšãäºæµã®æ°åã«ãªããŸãã
JeffãšStefanãæ£ããç解ããŠããã°ãããã§ãã immutable
ã¯ãåã®ãã£ãŒã«ããå®æ°ãã€ã³ãã£ã³ã°ã§ããããšã瀺ãåãªãã¿ã°ã§ãã å®æ°ïŒCãšã¯ç°ãªãã_really_å®æ°ïŒã§ãããšãã³ã³ãã€ã©ãŒãæé©åãè¡ãã®ã«åœ¹ç«ã¡ãŸãããã£ãŒã«ãèªäœãå®æ°ãŸãã¯ããªããã£ãã§ããå ŽåïŒã€ãŸãã isbits
ïŒãããã«æé©åãè¡ãã®ã«åœ¹ç«ã¡ãŸãã ããã¯ç¥ã£ãŠãããšäŸ¿å©ã§ãããæå³çã«ã¯éèŠã§ã¯ãããŸããã ã»ãã³ãã£ã¯ã¹ãçŸåšã®åäœã«é¢é£ä»ãããšãå°æ¥ãã®åäœãæ¹åããããšãããå°é£ã«ãªãå¯èœæ§ããããŸãã
ããããéèŠãªæå³äžã®éãããããŸããäžå€ã®åã¯å€ã§ããããããªããžã§ã¯ãã®IDã¯ãã®ãã£ãŒã«ãã«ãã£ãŠæå®ãããŠãããšå®å šã«æ³å®ã§ããŸãã äžå€åã®ãªããžã§ã¯ãã«ã¯ããŠãŒã¶ãŒã®èŠ³ç¹ããããã®ãã£ãŒã«ãããã¢ã¯ã»ã¹ã§ããªãç¹å¥ãªãèå¥æ©èœãã¯ãããŸããã äžæ¹ãã·ã³ã°ã«ãã³ä»¥å€ã®å¯å€ã¿ã€ãã®ãªããžã§ã¯ãã«ã¯ãæããã«ãã®ç®ã«èŠããªããã¢ã€ãã³ãã£ãã£ãããããŸãã å€ãã®äžå€åãããã¯ã¹åããããªããžã§ã¯ããšããŠæ ŒçŽããããããã£ãŠå®éã«å éšã§ãã®è¿œå ã®IDãæã£ãŠãããšããäºå®ã¯ãã»ãã³ãã£ã¯ã¹ãšã¯ç¡é¢ä¿ã§ãã
ç§ã®æèŠã§ã¯ãããã¯åãªã_æé©å_ã§ã¯ãããŸãã
immutable Complex{T} ... end
ã®ä»£ããã«
type Complex{T} ... end
ãŠãŒã¶ãŒã«èŠããåäœã®å€ãã®åŽé¢ãå€åããããã§ãïŒ ===
ãããã©ã«ãã®==
ã objectid
ã hash
ãªã©ããããèšãã®ã¯åã«æ£ãããããŸãããäžå€åã¯ãå¯å€åã®æ©èœã®ãµãã»ãããæäŸããŸãã ããã©ããããããããäžå€ã§ãããšããäºå®èªäœããäžå€åããã匷åã«ããããšãå¯èœã«ããéèŠãªä¿èšŒãæäŸããŸãã
ã³ãã¥ããã£ãconst
ãšstruct
ã«èœã¡çãåã«ã constant
ãšstructure
çšã«ãã1ã€ã®ãã©ã°ãäœãããã£ãã ãã§ãã
1ïŒå®éã®åèªã«3æåè¿œå ããã ãã§ãïŒ
2ïŒ struct
ãæ
£çšçã«ãªã£ãŠãããšãã䞻匵ã«ãããããã
2aïŒRãã移è¡ããŠãã人ïŒç§ã®ããã«ïŒã¯æ··ä¹±ãããããããŸãã
2bïŒããã°ã©ãã³ã°ã«äžæ
£ããªäººïŒæãå©ããå¿
èŠãªäººïŒã¯æ··ä¹±ãããããããŸãã
ãã 楜ãã¿ã®ããã«ãæ§é äœãæ··ä¹±ãããããããªãæããªèšèïŒ
äžæ»
éå¡ç
ãã¹ãæ§é 䞻矩
äžéšæ§é ïŒããããã«ã¯ã¹ïŒ
ããã³constïŒ
ã³ã³ã¹ã¿ã³ãã£ããŒãã«
æ座
ãã¢ã³ã³ã¹ããªã¯ã¿ãŒ
éæ²
ãã®çš®ã®ãã«ãã³ã³ããã¹ãäžå€ããã³constã«ãã£ãŠåŸãããPLã®çŸãã/åã¯ãããŸããïŒäžå€ã¯ã解決ãããæ瀺察象ãä»ããŠ/å éšã§ãããŒããã£ã¹ãããïŒãã®æ§è³ªãæ圱ïŒãäžå€ã§ã¯ãªãåã蟌ã¿æ瀺察象ãä»ããŠconstãããŒããã£ã¹ãããå¯è©ãŸãã¯ååè©ã§ãããã®ããã«è¡ããŸããïŒ
åã質åãèšãæããã°ïŒ
ä»ã®ãšãããã°ããŒãã«ã¹ã³ãŒãã§å€æ°ã䜿çšããããšã«ã¯åé¡ããããåé¿ããããã®trick
ã¯ãåäžã®ãšã³ããªãæã€constãã¯ãã«ã§å€åããå€ãã©ããããããšã§ãã ãã®å Žåã const
ã¯ãããŒããã£ã¹ããããŸããã const
ã®ãããŒããã£ã¹ãããŒãžã§ã³ã¯ããã¯ãã«å
ã®ãšã³ããªã®å€ãšãã¯ãã«ã«æé»çã«äžå®æ§ãé©çšããŸãã åæ§ã«ãä»ã®çš®é¡ã®å€ãã©ãããŸãã¯å²ãå€ãä¿æã§ãããã£ãŒã«ããæã€å宣èšã äžå€åã¯ããã®ãã£ãŒã«ãã®å€ã«äžå€æ§ãäžããªãããã«ãªããŸããïŒãŸãããã®ãã£ãŒã«ããä»ããŠéæ¥çã«å°éããå¯èœæ§ã®ããå€ãäžããããŸããïŒã ããã®ã¢ã€ãã [ãŸãã¯ãã®ã¿ã€ãã®ã¢ã€ãã ]ã«å²ãåœãŠãããå€ã¯ãäžåºŠæ§ç¯/åæåãããŠãå€æŽãããªã[å€æŽã¯èš±å¯ãããªã]ããšããæå³ã®ããŒã¯ãŒãã®ãããŒããã£ã¹ãããŒãžã§ã³ã«ä»å±ããåªé
ããšæçšãªå®¹éããããŸãã ã
å³æïŒéãããŒããã£ã¹ãïŒãœãŒãã¯åºã䜿çšãããŠãããJuliaã§è¡ãããšã®äžéšããJuliaã®äºåã³ã³ãã€ã«ã§ã¯ããã«ç°¡åã«ãªããå°å ¥ããããããŒããã£ã¹ãå¯èœãªconstnessã䜿çšããããä¿¡é Œãããã§ããããã«ãªããšä»®å®ãããšããããåçããå¿ èŠããããŸããå³æãœãŒãã§ããŸããããŸãã ãããè¿œå ã®_çè«çãªããã°ã©ãã³ã°èšèªã®è¯ã_ïŒè¡šçŸã®ãããããè¡šçŸåãªã©ïŒãããããæ¹æ³ã§ãããã©ããçåã«æããŸãïŒãããŒããã£ã¹ãã®æåžžæ§ã¯ãåç §åãåã蟌ãŸããŠãããããã³/ãŸãã¯éæ¥çã«å«ãŸããŠããåã®å€ãä»ããŠãããŒããã£ã¹ãããŸãïŒaïŒå éšåã蟌ã¿ãŸãã¯ã³ã³ãããŒãæããªãå€ã«å°éããããšããŸãã¯ïŒbïŒå€ã«å°éããããšèªäœãïŒç¬ç«ããŠãŸãã¯ãã®ä»ã®æ¹æ³ã§ïŒéãããŒããã£ã¹ãã®æåžžæ§ãæã€ã¿ã€ãã§ãã
ããã«ã€ããŠãã£ãšèããŠã¿ããšãç§ãæ¬åœã«å£ã䟡å€ããããšæãå¯äžã®å€æŽã¯bitstype
-> primitive
ãäž»ã«äœããisbits
ãšåŒã¶ã®ãããã«é¢åããšããããšã§ãã
ãã®è°è«ã®æ¬åœã®ãã€ã³ãã§ããtype
ãšimmutable
ã«ã€ããŠã¯ããã®æç¹ã§ç§ãæãæ°ã«å
¥ã£ãŠãããªãã·ã§ã³ã¯ãŸã£ããå€æŽãããŠããŸããã åãæ§ç¯ããããã®type
ã¯æ確ã§ãããäžå€ã®åãæ§ç¯ããããã®immutable
ã¯æ確ã§ãã ããããç§ã¯ç§ãã¡ã®æé«ã®å€§åäž»ãç§ãã¡ã«äžããŠããããã®ã¯äœã§ãåãã§åãå
¥ããŸããç§ã¯æé»ã®ãã¡ã«ãä»åŸã®èšèªã«æé©ãªãã®ã«ã€ããŠã®åœŒãã®å€æãä¿¡é ŒããŠããããã§ãã
constãconstantã§ã¯ãªãfixedã䜿çšããªãçç±ã¯ãããŸããïŒ å°ãªããšãç§ã«ã¯ãã¯ããã«æ確ãªèª¬æã®ããã§ãã
@JeffreySarnoffåç
§ïŒã€ãŸããã€ã³ã¿ïŒãååŸã§ãããã®ã«const
ããšãæ瀺ããããšconst type
ïŒ immutable
ïŒã®ãã£ãŒã«ãã«ãã€ã³ããããšããã®åç
§ãä»ã®å Žæã«ååšããªããšãã蚌æ ããªããããåç
§ãããããŒã¿ãäžå®ã§ãããšãã蚌æ ããããŸããã
ãã®æ¯ãèããå€ããããšã¯ãJuliaèšèªã«ãšã£ãŠæ¬åœã«æ ¹æ¬çãªå€åã«ãªããšæããŸãã
@andyferrisãã®æ確ãªçããããããšãã
const
ãconstant
ã§ã¯ãªãfixed
ã䜿çšããªãçç±ã¯ãããŸããïŒ å°ãªããšãç§ã«ã¯ãã¯ããã«æ確ãªèª¬æã®ããã§ãã
const
ãŸãã¯constant
ãããåªãããã®ããããã©ããçåã«æã£ãŠããŸãããããã¯ãæ°žç¶çãªãã€ã³ãã£ã³ã°ã§ããããã€ã³ãããããªããžã§ã¯ãå
ã®ããŒã¿ãå€æŽã§ããªãããšã§ã¯ãªãããšãåæ ããŠããŸãã fixed
ã¯ããã«åãã£ãŠããããé²ãã§ããŸãããä»ã®èšèªã§ã¯ãããèŠãŠããŸããïŒãŸããä»ã®èšèªã§ã®Juliaã®ãã€ã³ãã£ã³ã°/å
±æã»ââãã³ãã£ã¯ã¹ã«ãæ°ã¥ããŠããŸããïŒã
ãã¶ãbind
ãããªãã®ïŒäŸïŒ bind x = 2
ïŒ...ã·ãœãŒã©ã¹ã¯glue
瀺åããŠããŸã...ããã¯ããªãæšæž¬çã«ãªã£ãŠããŸã...
const
ãããæ£ç¢ºãªãã®ã«çœ®ãæãããšããã¢ã€ãã¢ã¯é
åçã§ãã ãã ããå宣èšãšåã
ã®å€æ°ã®ä»£å
¥ã®äž¡æ¹ã«é©åã«é©çšããå¿
èŠããããŸãã fixed struct
ã¯ããçšåºŠæå³ããããŸãããå宣èšã§ã¯ãªããæ§é äœã®ãã£ãŒã«ããåºå®ãããŠããŸãã æ®å¿µãªããã bound struct
ïŒ tied struct
ïŒïŒã¯ããªãäžæ確ã«æããŸãã äœããã®çç±ã§ã const
åã«é©çšãããšãããæ確ã«èŠããŸãã
å宣èšãšåã ã®å€æ°ã®ä»£å ¥ã®äž¡æ¹ã«é©åã«é©çšããå¿ èŠããããŸãã
ãããç®æãã®ã¯çç£çã ãšæããŸã
type A
const x::Int # fixed, bind, bound, tied, glue
end
çã«ããªã£ãŠããŸãã type
ã struct
ãªã©ã®åã«ã·ã§ãŒãã«ããããããšãäžèšãæå³ããã·ã§ãŒãã«ããã«ãªããŸãã
@generated
ãªã©ãç©ã®æ§è³ªãå€ããä»ã®éèŠãªè£
食ã®ããã«ãããããã¯ãã«ããããšã¯çã«ããªã£ãŠããŸãã ããã¯ããã«å¥ã®ããŒã¯ãŒããåé€ããŸã...
type
+ composite
> type
ããã®å€æŽã¯çŽ æŽããããšæããŸãã
ã¹ã¬ããã«æ°ããã³ã¡ã³ããè¿œå ããã«GitHubã®åé¡ã«æ祚ã§ããã°ããã®ã§ãã...ç§ã®æ祚ã¯mutable
ãšimmutable
ãããªããããã§ãã struct
ã¯äœ¿ãããã§ãå¯å€æ§ã®éšåã匷調ããŠããŸããã
PSïŒGitHubãç¥ã£ãŠããããŸãã¯è²¢ç®ããŠæ祚æ©èœãè¿œå ã§ãã人ã¯ããŸããïŒ ããåãåãããããŒãžã§èããã®ã§ãããã¡ãŒã«ãçŽå€±ããå¯èœæ§ããããŸãã
æè¿ãä»ã®å€ãã®èšèªã®ããã¯ã°ã©ãŠã³ããæã€Juliaã«åãæ¿ããã®ã§ãJuliaãCã¹ã¿ã€ã«ã®åœåãæ¡çšããC / C ++ã®çŽããããconst-nessã®åé¡ããã¹ãŠåãå ¥ããããšãæãã§ããŸããã 代ããã«ãããŒã¿å宣èšã«ãå€åãŸãã¯å ±æåç §åã§ãããšããæå³ãäœããã®åœ¢ã§åæ ããæŠå¿µãäžããããšã¯ãåã«å¯å€æ§ãåç §ããã®ã§ã¯ãªããç§ã倧ãã«å©ããã§ãããã
Juliaã§ã®ç§ã®æåã®æåŸ
ã¯ãåçŽãªtype
ããäžå€ã®Cã¹ã¿ã€ã«ã®struct
ãŸãã¯Pythonãªããžã§ã¯ããšåæ§ã«åäœããããštype
ã¯ãJuliaãé¢æ°åããã°ã©ãã³ã°ã®ã¹ã¿ã€ã«ãšé床ã«éç¹ã眮ããŠããããã«èŠããããã§ãã
type ...
ãšimmutable...
è¡šçŸã®é察称æ§ã«ãŸã æ··ä¹±ããŠããŸããã DataType
ããtypeof(SomeType)
DataType
ãååŸãããã 'ãããã¿ã€ãã®å®éã®æå³ãååŸããŸã'ãããã³åçŽãªAlias = DataType
ã¹ããŒãã¡ã³ãã®ä»£ããã«typealias
ããŒã¯ãŒãã®å¿
èŠæ§ã
ãããã£ãŠãç§ã¯datatype
ã«æ祚ããŸããããã¯ã typeof(SomeType) == DataType
ãšäžèŽãã ::Type{}
ãšã®èç«ãããé¡äŒŒæ§ãå£ããŸãã å¯å€åãcomposite [datatype]
è£
食ãããšãåºæ¬çãªããããåããšæ¯èŒããŠããã®ç¹å¥ã§ããããããé«äŸ¡ãªæ§è³ªã匷調ããããšãã§ããŸãã
C / C ++ã®çŽããããconst-nessã®åé¡ããã¹ãŠåŒã蟌ã
ãã®ããŒã¯ãŒãã®ååãå€æŽããŠããããã¯ã§ããŸããã ãããã®åé¡ã¯ãéçãã§ãã¯ãšãã£ã¹ãã«é¢ä¿ããŠããŸãããããã§ã¯ãŸã£ããé¢ä¿ãããŸããã
åã«å¯å€æ§ãåç §ããã®ã§ã¯ãªããå€åãŸãã¯å ±æåç §åã§ãããšããæå³ã¯ãç§ã倧ãã«å©ããŠãããã§ãããã
ç§ã¯ãããå®å šã«ã¯ç解ããŠããŸããã ãªããžã§ã¯ããäžå€ã§ããå Žåããããå€ã«ãã£ãŠæž¡ãããã®ãåç §ã«ãã£ãŠæž¡ãããã®ããå€æããæ¹æ³ã¯ãããŸãããããã§ã¯ãå€ãšåç §ã®åºå¥ã¯ã©ã®ããã«åºæ¬çãªã®ã§ããããã
datatype
ã¯æªãéžæã§ã¯ãããŸããã ãããã datatype
ãšcomposite datatype
ã¯ãå¯å€æ§ã®éããäŒããè¯ãæ¹æ³ã§ã¯ãªããšæããŸãã
@ JeffBezanson ãCã®ãããªå®æ°ã䜿çšãããšãJuliaåãC / C ++ãšåãåäœããããšããæé»ã®æåŸ
ãæå³ããŸãããæ§ç¯åŸã«ã®ã¿äžå€ã§ããããã£ã¹ããéããŠå€æŽå¯èœã§ãããé¢æ°ã®åŒæ°ã«å¯ŸããŠãŸã£ããå¹æããªãå ŽåããããŸããæ»ãå€ã®åã ãããã£ãŠãããããC / C ++ãåç
§ããŠããªãããŒã¯ãŒããéžæããå Žåã¯ãé©åãªéžæã§ãããããã£ãŠã const struct
ã¯äœ¿çšããªãã§ãã ããã
ãå€ãšåç
§ãã«ã€ããŠïŒäžå€åãã¡ã³ããŒãçŽæ¥åã蟌ã¿ãåªããã³ã³ãã¯ããªé«éã¢ã»ã³ãã©ã³ãŒããçæããçç±ãç解ããã®ã«ããªãã®æéãããããŸãããããtypeãã«ã¯ãªããžã§ã¯ããžã®ãã¹ãŠã®åŒã³åºããå«ãŸããŠããŸããã§ããã èšãæããã°ãã¹ããŒããç®æããšãã«ããªãç§ãéåžžNTupleã䜿çšãããã®ããšããããšã§ãã ãããã£ãŠããäžå€ããšãå¯å€ããèªããšããFortranã®ããã©ã¡ãŒã¿ãŒããšããŠã®æå³ãæåŸ
ããŠããŸããããå®éã®ããŒã¿åã®ã¬ã€ã¢ãŠããå®è£
ã®çš®é¡ã®å€æŽãæåŸ
ããŠããŸããã§ããã
ãããããã»ãšãã©ã®å ŽåãComplexã®ãããªå°ããªè€ååã«ã¯ãäžå€ã®å€ãã®ã»ãã³ãã£ã¯ã¹ãå¿
èŠã§ãããé
åãªã©ã®å€§ããªããŒã¿ã»ããã«ã¯ãå¯å€ã§åç
§/éã³ããŒããå¿
èŠã§ãã
ãã®å Žåãæ ¹æ¬çãªæå³ã¯ããããå¯å€æ§ã§ã¯ãªããããŒã¿ã®ã³ããŒãåé¿ããããšã§ãã
ããããããã¯é«éã¢ã»ã³ãã©ã³ãŒããååŸããããã«Juliaã®äœã¬ãã«ã®æ©æ¢°ãåŠãã ãšãã®ç§ã®çµéšã§ããããããŒã¯ãŒãã®åœåã«ãããããé©åã«åæ ããæ¹æ³ãšããããå¯å€æ§ã ãã§çµã¿åããããè¡šçŸãããããæ¹æ³ãããããŸããã
ç§ã¯ããªãã@mjwããæ¥ãŠãããšãããç¥ã£ãŠããŸããç§ã¯ããã«è¡ã£ãããšããããŸãããC / C ++ã«ã€ããŠç¥ã£ãŠããããšããã¹ãŠåŠã°ãªãã»ãããããšæããŸãã ããã§ãäžå€ã§ããã®ã¯const
ã§ãããäœããã¹ã¿ãã¯ã§ãããåçã«å²ãåœãŠãããããããã³åç
§ãŸãã¯å€ã§æž¡ããããã©ããã¯èªç±ã«å€æŽã§ããã³ã³ãã€ã©ãŒã®æé©åã®éžæè¢ã«ãªããŸãã ãã¹ãŠãåçã«å²ãåœãŠãããåç
§ã«ãã£ãŠæž¡ãããèšèªãäœæã§ããŸããããã¯Juliaã®ããã©ã«ãã®æ¹æ³ã§ãïŒããã¯ã¹åãããå€ã®å Žåãã¿ã€ããäžæãªå Žåã§ããå
±æã«ããåãæž¡ãããå®è£
ããŸãïŒã ããªãïŒãããŠç§ãã¡ã®æ®ãã®éšåïŒã¯ãæé©åãçŸåšå®è£
ãããŠããå Žæã§ãããããå°ããªäžå€ãéåžžã«é«éã§ããããšã«æ°ã¥ããŸãã ããã¯ãæé©åã容æã«ããimmutable
ã®ã»ãã³ãã£ã¯ã¹ã®çµæã§ãã
ããããå®éã«ã¯ã倧ããªäžå€å€æ°ãåç
§ã«ãã£ãŠæž¡ããïŒããããããããçã«ããªã£ãŠããå Žåã¯ã¹ã¿ãã¯ãã€ã³ã¿ãŒã«ãã£ãŠæž¡ãããŸããã NTuple{1_000_000}
ãããŒãå²ãåœãŠããã®ãããããæåã§ãïŒãæ¢ç¥ã®ãµã€ãºã®å°ããªå¯å€å€æ°ãã¹ã¿ãã¯å²ãåœãŠãããããšããå§ãããŸãïŒç¹°ãè¿ããŸãããå¯èœãªå ŽåïŒã å Žåã«ãã£ãŠã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã§ããéçã«æ±ºå®ãããå¯èœæ§ããããããšãã°ãããŒãã¹ããŒã¹ãã«ãŒãå
ã§åå©çšã§ããŸãã ç§ã¯ãããããšã¹ã±ãŒãåæãå¿
èŠãšããå°æ¥ã®æé©åã®æ©äŒãšããŠæããŠããŸãïŒãããŠãããã¯ã©ããèšèªã®ã»ãã³ãã£ã¯ã¹ã«åœ±é¿ãäžãããããã©ãŒãã³ã¹ã ãã«åœ±é¿ãäžããŸãïŒã
ç§ãèšã£ãŠããã®ã¯ãããŒã¯ãŒãã¯ãæ°å¹Žã§å€æŽãããå®è£ ã®è©³çŽ°ïŒã€ãŸããå¹ççãªå°ããªäžå€ãšå¹ççãªå€§ããªäžå€ïŒã§ã¯ãªãã10幎ã2幎ã®éäžå®ã®ãŸãŸã§ããã»ãã³ãã£ã¯ã¹ãåæ ããå¿ èŠããããšããããšã§ãã
ç§ã¯ãJuliaã¿ã€ããC / C ++ãšåãåäœããããšããæé»ã®æåŸ ãæå³ããŸãã
ããã¯ãæ£çŽã«èšããšã const
-> constant
ãæ€èšããã®ã«ååãªçç±ãããããŸããã const
ã¯çŸæç¹ã§å¯äžã®çç¥ããŒã¯ãŒãã§ããããšã«ããå¥åŠãªãã®ã«ãªã£ãŠãããšæããŸãã
åçŽãª
Alias = DataType
ã¹ããŒãã¡ã³ãã
ããã¯çã«ããªã£ãŠããå Žåã¯çµ¶å¯Ÿã«åé¡ãªããšç¢ºä¿¡ããŠããŸããã typealias RealMatrix{T<:Real} Matrix{T}
ãªã©ã®ããè€éãªã¿ã€ãã®å€æŽã¯èš±å¯ãããŸããããŸããæ°ããType
äœæããªãåçŽãªãã€ã³ãã£ã³ã°ã§ãã TypeVar
sïŒã éã«å®çŸ©ãããå Žåãé€ããŠïŒ RealMatrix = Matrix{T <: Real}
ãããŠapply
ãTypeVar
ã«å¯ŸããŠäœãããããäžè¬åããïŒã€ãŸãTypeConstructor
äœãïŒ...å®éã«ã¯ããã¯èå³æ·±ãã¢ã€ãã¢ã§ãïŒãã ããæ§æã®åé¡ãããããã typealias
ã䟿å©ã§ã...ïŒã
@andyferris ãç§ã¯ãã§ã«ãæªåŠç¿ãã§ãããä»ã®æ°ãããŠãŒã¶ãŒã«ãšã£ãŠã¯ããã³ã³ãã€ã«ã«ãããããããžã¥ãªã¢ããšãŠãé ãã®ã¯ãªããããšãã段éãä¹ãè¶ããæ¹ãç°¡åãããããŸããã ãããã®è©³çŽ°ã®ã¡ã³ã¿ã«ã¢ãã«ã®è¿ éãªéçºããµããŒãããããŒã¯ãŒããéžæããããšã¯ãã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã®ããã¯ã°ã©ãŠã³ããããŸããªãæ°èŠãŠãŒã¶ãŒã«ãšã£ãŠå€§ããªã»ãŒã«ã¹ãã€ã³ãã«ãªãå¯èœæ§ããããŸãã ä»ã®è©±ãèšèã®å£ãé¿ããããã«ããåçŽãªãããŒã¯ãŒããå¿ããªãã§ãã ããã
@mjwãã°ãããããããŠç§ã¯ãã®ãã¹ãŠã«åæããŸãã :)
äœãæããŠãã ãããGitHubã®æé«ã®æ©èœã§ãããªã¢ã¯ã·ã§ã³çµµæåã䜿çšããŠãæ祚ã«æãè¿ããã®ãè©ŠããŠã¿ãŸãããã
ããã§ã¯ã_é äžåã§_ãæãæ¯æãããŠãããšæãããææ¡ãè¡šã«ãŸãšããŸããã æå®ãããçµµæåã䜿çšããŠåå¿ãããã®ææ¡ã«æ祚ããŸãã ããã«ã¯ããã¹ã¯ããããã©ãŠã¶ããGitHubã«ã¢ã¯ã»ã¹ããå¿ èŠããããšæããŸãã AFAIKãªã¢ã¯ã·ã§ã³çµµæåã¯ã¢ãã€ã«ã€ã³ã¿ãŒãã§ãŒã¹ã«å®è£ ãããŠããŸããã ãã®æçš¿ã®å³äžé ã«ããé¡ãã¯ãªãã¯ããŠãçµµæåã®ã¡ãã¥ãŒã«ã¢ã¯ã»ã¹ããŸãã
| type
| immutable
| ãšåå¿ãã|
| ïŒ-ïŒ| ïŒ-ïŒ| ïŒ-ïŒ|
| struct
| const struct
| ðïŒ+1ïŒ|
| mutable
| immutable
| ðïŒ-1ïŒ|
| type
| immutable
| ðïŒç¬ïŒ|
| composite
| const composite
| ïŒtada :(ãã£ããŒïŒ|
| datatype
| const datatype
| ðïŒæ··ä¹±ïŒ|
| type
| const type
| â€ïžïŒããŒãïŒ|
ãã¡ãããæ祚ã®å€±æã¯nuple
æé»ã®æ祚ã«å¯Ÿå¿ããŸãã ïŒãã€é¡ïŒ
ç§ã¯ããã®ãããªè«äºã®çãšãªã決å®ããæ°äž»çã«ãè¡ãããšã®å€§ãã¡ã³ã§ã¯ãªããšèšããããåŸãŸããã ã³ã³ã»ã³ãµã¹ãªãã§è°è«ãè¡ãããå Žåãç§ã¯BDFLã®æ±ºå®ã«åŸãã ãã§ãã
ãã§ã¢ãã€ã³ãã@ TotalVerbã åã«ãèšã£ãããã«ã圌ããæåã ãšæããã®ã¯äœã§ãç§ãã¡ã«äžããåãæã£ãŠããã°ãç§ã¯ãŸã£ããåé¡ãããŸããã ã¹ã¬ãããå°ãæ²ããããã£ãŠããããã«èŠããæ祚ã«é¢ãã@juliohmã®ãã€ã³ãã¯åŠ¥åœãªããã«æãããã®ã§ãããã
å人çã«ã¯ãçŸçã«2ã€ã®åèªã䜿çšããã®ã¯å¥œãã§ã¯ãªããšæããŸãïŒ const type
ïŒã ãŸããæå³çã«å°ãäžååé³ãæããŸãã const x = 1
ãšèšããšãã x
ãäžå®ã§ããããšãæå³ããŸãã const type; x; end
ãšèšããšãããã®ã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ã¯æ§ç¯åŸã«å€æŽãããªãããšãæå³ããŸãã ã¹ãã¬ãŒãè£éãããäœããå®æ°åã§ãããšèšãããšã¯ãåèªäœãå€æŽãããªãããšãæå³ããããã«æããŸãïŒããã¯ãã§ã«åœãŠã¯ãŸããŸãïŒã åç
§ïŒ
type foo
end
const bar = foo
ãããã£ãŠã bar
ã¯constã§ãããåžžã«fooã§ãããããã§ãconst type
ã¯ãããŸããã const
ïŒãã€ã³ãã£ã³ã°ã«é©çšïŒã®æ¢åã®ã»ãã³ãã£ã¯ã¹ã«äŒŒãŠããããã«æããŸããåã®ååã¯ãã§ã«constã§ãã
ç°¡æœã§ãæå³ãããã»ãã³ãã£ã¯ã¹ãäŒããå€æ°åãšããŠæãŸãããšã¯æãããªãããŒã¯ãŒãã¯ãªããšæããŸãã ãããã®ç®æšã«æãè¿ããšæãçšèªã¯ã3çš®é¡ã®å®£èšãããã¿ã€ãã®mutable datatype
ã immutable datatype
ãããã³abstract datatype
ã§ãã
type
ãšimmutable
ã«å ããŠãè¿œå ã®å¯å€å€ã¿ã€ãããã£ããããã®ã«ãšæããŸãã
åé¡ã®ã©ããã§ããã€ãã®è°è«ãèŠãŠããŸããããåºæ¬çã«çŸæç¹ã§ã¯ããã®ãããªã·ããªãªãå¹ççã«åŠçããããšã¯äžå¯èœã§ãïŒäœããèŠéããå Žåã¯ä¿®æ£ããŠãã ããïŒã
immutable T
a::Int
b::Float64
...
end
t = Vector{T}(10)
t[2].a = 5 # error here
# instead
c = t[2]
t[2] = T(5, c.b, ...) # works
ã³ãŒãã¯å€åsizeof(T) * 10
ãã¡ããšããé
åãäœæããŸãããäžéšã®ãã£ãŒã«ããå€æŽããã«ã¯ã T(...)
å
šäœãåå²ãåœãŠããå¿
èŠããããŸããããã¯éåžž3ã5ãã£ãŒã«ãã®é·ãã§ãã
ã ããåºæ¬çã«ç§ã®5ã»ã³ãïŒ
type
-GCãåç
§ãåé
immutable
-å€æŽã§ããªãå€ïŒã¹ã¿ãã¯å²ãåœãŠïŒã¿ã€ã
mutable
-ç¹ã«é
åã§å€æŽå¯èœãªå€å
å€æŽå¯èœãªå€å
å€æŽãèš±å¯ããããšããªããžã§ã¯ãã®ã¢ã€ãã³ãã£ãã£ãäžãããã®ã§ãããããããã¯éæäžå¯èœãªç®æšã ãšæããŸãã
ããããã代ããã«ãã®ã¢ãããŒããå¿ èŠã§ãïŒïŒ11902
å¯å€ãšäžå€ãåé¢ããããšãé€ããŠãå€ãšåç §ãåå²ããæ¹ãè¯ãã¯ãã§ãã
abstract Node{T}
immutable Link{T} <: Node{T}
value :: T
next :: ref{Link{T}} # next :: Link{T} will be an error: Recursive type
end
å€ãšåç §ã人çºçã«åºå¥ããŠèšèªãé床ã«è€éã«ããå¿ èŠã¯ãããŸããã å¯å€åãšäžå€åã¯æå³çã«ã¯ããã«åçŽã§ãã åãå€åã§ãããšããäºå®ã¯ãåãªãæé©åã§ãã
@Kenoã¯è¯ãç¹ãäœããŸã
å人çã«ã¯ãçŸçã«2ã€ã®åèªïŒconstã¿ã€ãïŒãæã€ã®ã¯å¥œãã§ã¯ãªããšæããŸãã ãŸããæå³çã«å°ãäžååé³ãæããŸãã const x = 1ãšèšããšããxãå®æ°ã§ããããšãæå³ããŸãã conståãšèšããšã; ãã; ã€ãŸãããã®ã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ã¯æ§ç¯åŸã«å€æŽãããªããšããããšã§ãã ã¹ãã¬ãŒãè£éãããäœããå®æ°åã§ãããšèšãããšã¯ãåèªäœãå€æŽãããªãããšãæå³ããããã«æããŸãïŒããã¯ãã§ã«åœãŠã¯ãŸããŸãïŒ
åã«è¿°ã¹ãããã«ããæ£ãããã»ãã³ãã£ã¯ã¹ã¯ã«ãã£ãŠäžãããããšæããŸã
type Complex{T}
const re::T
const im::T
end
z = Complex(1,2)
ããã§ã z.re
ã¯ã const z.re = 1
ã«äŒŒããã®ãå
¥åãããšããšåãããã«åäœãããããã©ã®ãã€ã³ãã£ã³ã°ãconst
ãããã«ã€ããŠæå³äžã®æ··ä¹±ã¯ãããŸããã
@JeffBezansonãè¿°ã¹ãŠããããã«ãããã¯å€æ°ã®ãã£ãŒã«ãã«ã¯ããŸã䟿å©ã§ã¯ãªããçŸåšã®åã®å®è£ ãšã¯äºææ§ããããŸããã éšåçã«å€æŽå¯èœã§ãéšåçã«äžå®ã®æ§é äœã¯ãå°æ¥å®è£ ãããå Žåãšãããªãå ŽåããããŸãã ãã ããçŸåšãšå°æ¥ã®äž¡æ¹ã§æå³ã®ããæ§æããããŸãã
<strong i="19">@const</strong> type Complex{T}
re::T
im::T
end
ãããå®è£
ãããŠããçŸåšã®æ¹æ³ã§ã¯ããã¯ãã¯ASTã§type
ããimmutable
ã«å€æŽã§ããŸãã å°æ¥çã«ã¯ãéšåçã«äžå®ã®æ§é äœãå®è£
ãããŠããå Žåã§ãããã¯ãã¯åãã£ãŒã«ãã«const
ãè¿œå ããããšã§ãASTã«å¯ŸããŠæäœãå®è¡ã§ããŸããããã¯ããã£ãŒã«ããã€ã³ãã£ã³ã°ã§ããããšã¯ããã¹ãŠã®äººã«ãšã£ãŠæããã§ããäžå®ã§ãã çŸçã«ã¯ã2ã€ã®ããŒã¯ãŒããç¶ããŠäœ¿çšãããããåªããŠããŸããé¢æ°ã«å¯ŸããŠåæ§ã®ããšãè¡ããŸãïŒ @generated
ã @inline
ã @proagate_inbounds
ãªã©ïŒã
@const
ã¯ç°¡åã«@immutable
ãŸãã¯ããã«é¡äŒŒãããã®ã«ãªãïŒ <strong i="31">@immutable</strong> type Val{T}; end
OKãIMOãèªã¿åããŸãïŒããã¯ãã®ã¢ã€ãã¢ã¯struct
ã composite
ãšäºææ§ããããŸãã çã
ã
@ be5invisã¯ããããã¯å€ãã®èšèªã§éåžžã®æ¹æ³ã§ããããšãã°ãCïŒã«ã¯struct
ãããã¯immutable
ãšããŠããŸããŸãªæ¹æ³ã§åäœããŸããã³ããŒã«ãã£ãŠé¢æ°ã«æž¡ãããæ瀺çã«å²ãåœãŠãããŸããé
åïŒ class
| type
ã®å Žåã®ããã«GC管ç察象ãªããžã§ã¯ããžã®åç
§ã§ã¯ãããŸããïŒã ãã ããããã¯_mutable_ã§ãããé
åå
ã§ã¯åäžã®ãã£ãŒã«ãã§å€æŽã§ããŸãã
immutable
å Žåã2ã€ã®ããããã£ãæ··åšããŠãããšç§ã¯ä¿¡ããŠããŸãã
ãããã£ãŠãåºæ¬çã«ã¯ãããããã£2ã®ã¿ã®åã®å°å
¥ãæãã§ããŸããããã«ãããæ¢åã®ã³ãŒãããŒã¹ãäžæãããããšã¯ãããŸããïŒ immutable
ãæ®ããŸãïŒããGCã®é¢äžãæå°éã«æããŠé«éã«äœããäœæããå Žåã¯ã䟡å€ããããŸãã ã
@ johnmyleswhite ïŒ
@wgreenråè¿°ã®ããã«ããããŠäœåºŠãè°è«ãããŠããŸããããããã¯äžå¯èœã§ãã ãŸãããã®å·ã®è°è«ãšã¯ããŸãé¢ä¿ããããŸããã
äœã§ãå¯èœã§ãããå¯å€å€åãå°å ¥ããããšã¯éåžžã«ç Žå£çã§ãããéåžžã«æªãèãã§ãã ãªããããäžèŠã·ã³ãã«ã§é åçãªã¢ã€ãã¢ãªã®ãã¯ç解ã§ããŸããããŸã£ããç°ãªãçš®é¡ã®æ°ãããªããžã§ã¯ãã»ãã³ãã£ã¯ã¹ãè¿œå ããã¿ã€ãã°ã©ããåç §ã»ãã³ãã£ã¯ã¹ãšå€ã»ãã³ãã£ã¯ã¹ã«åå²ããŠããèšèªã¯æ¹åãããŸããã åãã³ãŒãã¯æªç¥ã®ã»ãã³ãã£ã¯ã¹ã«å¿ããŠéåžžã«ç°ãªãããšãè¡ãããããããéæããããšã¯ããžã§ããªãã¯ã³ãŒããå®å šã«æžãããšãäžå¯èœã«ããããšã§ãã ããã«äŸãå«ãåºç¯ãªè°è«ããã
ãããèšåãã䟡å€ããããã©ããã¯ããããŸããã ããããC / C ++ã§ã¯ããstructãã¯ããŒã¿ã®ã¬ã€ã¢ãŠãã«ã€ããŠãæå³ããŸãã äžæ¹ãããè¯ãã¡ã¢ãªã¬ã€ã¢ãŠããåŸãããã«ãæ§é äœã¡ã³ããŒãåé 眮ããããšã¯ãã°ãã°äŸ¡å€ããããŸãã æ§æã®é倧ãªå€æŽãæ€èšããŠããå Žåã¯ããæ§é äœãïŒé åºä»ã-> CçžäºéçšïŒãšãäžå€ãïŒäœããã®æ¹æ³ã§é åºä»ããããå¯èœæ§ãããïŒãäœããã®æ¹æ³ã§åºå¥ããã¡ã«ããºã ãçšæãã䟡å€ããããŸãã
ç§ã¯ãžã¥ãªã¢ã«ããªãæ £ããŠããªãã®ã§ãäœãæãããªããšãèŠéããŠããŸã£ããããããªããã
ç§ã¯å人çã«ååã«ã€ããŠæ¬åœã®å¥œã¿ã¯ãããŸããã ãããããã§ã«ãæœè±¡çããååšããããšãèãããšã誰ããå ·äœçããææ¡ããŠããªãããã«æãããããšã«é©ããŠããŸãã
ããã«å¥ã®ææ¡ãè¿œå ããã«ã¯ã次ã®ããšãç§ã«ã¯æåã®ããã§ãã
䜿çšstruct
ã®ä»£ããã«immutable
ã
struct!
代ããã«type
ãŸãã è±èªã話ããšããããã¯ãå¯å€æ§é äœããšåŒã°ããã¹ãã§ãã
struct!
å
ã®ããã€ãã®ãã£ãŒã«ããconst
ãšããŠããŒã¯ã§ããããã«ããŸããããã€ãã®æ£åœåãšèãïŒ
1ïŒæãããªããšãèŠéããŠããªãéãã !
é¢æ°ã䜿çšããŠäžå€åã®å€ãæäœããããšã¯çµ¶å¯Ÿã«é¿ããŠãã ããã ãããééã£ãŠããå ŽåïŒããšãã°ãäžå€åãå¯å€åãåç
§ãã !
ã®é¢æ°ããããå€æŽãããšããéèŠãªã±ãŒã¹ãããå ŽåïŒããã®ææ¡ã¯é©åã§ã¯ãªãå¯èœæ§ããããŸãã
2ïŒäžå€åã¯ãããå€ãã®æé©åã®å¯Ÿè±¡ã§ãããããã°ã©ããŒã«ãšã£ãŠããäºæž¬å¯èœãªåäœããããããäžè¬çã«ã¯å¯å€åãããåªå ãããã¹ãã ãšæããŸãã
3ïŒãããæ©èœããããã«ã¯ãã»ãšãã©ãã¹ãŠã®å Žåã«ãäžå€åãå°ãªããšãå¯å€åãšåããããå¹ççã«ããããã®æé©åãå®è£ ããããšãããããåææ¡ä»¶ã§ãã ç¹ã«ãã³ã³ãã€ã©ãŒã¯ãåç §ã«ãã£ãŠå€§ããªäžå€åãæž¡ãããšã«ã€ããŠè³¢ããªããã°ãªããŸããã
UPDATEïŒç§record
ã®ä»£ããã«struct
ãã record!
ããŸãã«ãå€ãã®åè©ã®ãããªãã®ã§ãã é ã«æµ®ãã¶ä»ã®ããã€ãã®ãªãã·ã§ã³ïŒ newtype
ã typedef
ïŒCããã°ã©ããŒã10ç§éæ··ä¹±ãããïŒã composite
ããŸãã¯äžèšã®èª°ããææ¡ããconcrete
ã
v0.6ã®æ©èœãããªãŒãºããåã«ããã®ã¹ããŒã¹ã§äœããçºçããå¯èœæ§ã¯ãããŸããïŒ
ïŒå°ãªããšãå ¬çã«ã¯ïŒæ±ºå®ãäžãããŠããããåçµããããã10æ¥ããé¢ããŠããªãããšãèãããšãããããããã§ã¯ãããŸããã
ç§ã¯ããã«æ³šææ·±ãåŸã£ãŠããŸãããã1ã€ã®ã³ã¡ã³ãã¯ããããå€æŽãããå Žåãåé¡ã®ãããã¡ã€ã«/è¡çªå·ã®é©åãªå ±åãæåã«è¡ãããšãèŠæ±ããããšããããšã§ãã ãŸãã¯å°ãªããšãã¢ãžã¥ãŒã«ã 0.5ã§ã¯ãã©ã®ããã±ãŒãžã«@deprecate
d _binding
ãããããææ¡ããããšããé£ããå ŽåããããŸãã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯äžè²«æ§ã®ããã«
mutable
ã奜ãã§ãã