Julia: ๋ชจ๋“ˆ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ์•จ๋ฆฌ์–ด์‹ฑ

์— ๋งŒ๋“  2012๋…„ 09์›” 05์ผ  ยท  96์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

๋ชจ๋“ˆ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์  ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import ArgParse
... 
    ArgParse.add_argument(p, "--opt1") 
...

์ด๊ฒƒ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ค์—ผ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“ˆ ์ด๋ฆ„์˜ ์žฅํ™ฉํ•จ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ ๋ณ„์นญ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

import ArgParse as ap 
... 
    ap.add_argument(p, "--opt1") 
...
design modules speculative

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ๋Š” ์˜ค๋žซ๋™์•ˆ ์กด์žฌํ•ด ์™”์ง€๋งŒ ์ผ๋ถ€ ํ™•์žฅ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋…ผ์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

import LongPackage as longpkg

์ž์ฒด๋Š” ๊ฝค ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  96 ๋Œ“๊ธ€

๋‚˜๋Š” ๋‹น์‹ ์ด ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช‡ ๋ถ„ ์ „์— ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

import ArgParse
ap = ArgParse

ap.add_argument(...)

๋‚˜๋Š” ์—ฌ์ „ํžˆ "import as" ํ‘œ๊ธฐ๋ฒ•์„ ๊ตฌ๋ฌธ ์„คํƒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์—ฌ๊ธฐ ์žˆ๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๋™์•ˆ @JeffreySarnoff ์˜ ํฌ๋Ÿผ ๊ฒŒ์‹œ๋ฌผ ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋™์ผํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ผ์ธ์—์„œ ์—ฌ๋Ÿฌ ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ ์•„์ง ๊ทธ๋Ÿฌํ•œ ์š”์ฒญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๊ฒƒ

# from the forum post
import Module.(export1,export2,export3)
# or
import Module.[export1,export2,export3]
# or maybe
import Module.{export1,export2,export3}

์ด ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ๋ฌธ์ œ์ด์ง€๋งŒ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ

  1. ์ด ๋ฌธ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜
  2. ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๋‹ค

(์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์œ ์šฉ์„ฑ์€ ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ ...)

ํŽธ์ง‘ : ์ด๊ฒƒ์€ ์ด์ œ import Module: export1, export2, export3 ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋˜ํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด ์ง€์›ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

import ArgParse.add_argument as addarg

๊ฐ€์ ธ์˜ฌ ๋•Œ ๋ชจ๋“ˆ ๋ฉค๋ฒ„์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์ด ๋ฐ”๋€ ํ•จ์ˆ˜ ์ด๋ฆ„์ด ๋””์ŠคํŒจ์น˜์— ์–ด๋–ป๊ฒŒ ์ฐธ์—ฌํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹ญ๋‹ˆ๊นŒ?

๊ธฐ๋ณธ์ ์œผ๋กœ const foo = Base.bar ์— ํ•ด๋‹นํ•˜๋Š” ๋ณ„์นญ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ const foo =์™€ ๋™์ผํ•œ ๋ณ„์นญ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฒ ์ด์Šค.๋ฐ”.

ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์žฌ์ •์˜ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„
์œ„์™€ ๊ฐ™์ด

Base.bar๋ฅผ foo๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ

ํ™•์‹คํžˆ foo๋ฅผ Base.bar๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ foo๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋„ ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค.
๋ฒ ์ด์Šค๋ฐ”? ๊ทธ๋ž˜์•ผ ํ• ๊นŒ์š”?

์ด๊ฒƒ์€ ์˜ค๋ž˜๋œ ๋ฌธ์ œ์ด์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ 0.2์— ์ ‘๊ทผํ•จ์— ๋”ฐ๋ผ ์ด๊ฒƒ์„ ๋‹ค์‹œ ๊ฒ€ํ† ํ•ด์•ผ ํ•  ๋•Œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ•ญ์ƒ import NumericExtensions as ne ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์—ˆ๊ณ  ์ด๊ฒƒ์ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์Šค์Šค๋กœ์—๊ฒŒ ์ƒ๊ธฐ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€๋„ ์•Š๊ณ , ์ œ ์ƒ๊ฐ์—๋Š” ์ด๊ฒŒ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์š”.

import NumericExtensions
const ne = NumericExtensions

+1

+1

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋ชจ๋“ˆ ์•จ๋ฆฌ์–ด์‹ฑ์„ ์œ„ํ•ด ์ถ”๊ฐ€ foo = Foo ๋ฅผ ํ•˜๋Š” ๊ฒƒ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์ง€๋งŒ, ์Šˆ๊ฑฐ โ€‹โ€‹์•จ๋ฆฌ์–ด์‹ฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ํ•ฉ์˜๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํžˆ ๊ฐ•ํ•˜๊ฒŒ ๋Š๋ผ๋Š” ์‚ฌ๋žŒ์€ ์Šค์Šค๋กœ PR์„ ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ x as y ๋Š” #1470์—์„œ ์–ธ๊ธ‰๋œ convert(y,x) ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ฒฝ์Ÿ์ž ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ๋‘˜์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ฐธ๊ณ ๋งŒ ํ•˜์„ธ์š”.

์ด ๊ธฐ๋Šฅ์˜ ๊ฐ€์น˜๋Š” ์›๋ž˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1
์ด ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1

์ƒˆ ํ‚ค์›Œ๋“œ as ๋ฅผ ๋„์ž…ํ•˜๋Š” ๋Œ€์‹  => ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

import Tlahuixcalpantecuhtli => Venus: xxxxxxxxx => x9, yyyyyyyy => y8, zzz

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™์ผํ•œ ๊ตฌ๋ฌธ์—์„œ ๋ชจ๋“ˆ ๋ฐ ๋ณ€์ˆ˜์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์˜ ๋ณ„์นญ์„ ์ˆ˜์ง์œผ๋กœ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด, ๊ทธ๊ฑด ๋‚ด๊ฐ€ ๋ณด๊ธฐ์—” ์ •๋ง ๋ชป์ƒ๊ฒผ์–ด.

import Tlahuixcalpantecuhtli as Venus: xxxxxxxxx as x9, yyyyyyyy as y8, zzz

๊ทธ๊ฒŒ ๋” ๋‚˜์•„? ๊ฐ€๋…์„ฑ์ด ํ›จ์”ฌ ๋–จ์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ as ์ด => ๋ณด๋‹ค ๋” ์ž๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ „์ฒด ๊ณต๊ฐœ: ํŒŒ์ด์ฌ ํŽธํ–ฅ.

๋‚˜๋Š” as => ๊ตฌ๋ฌธ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด์‰ฌ ๊ท ํ˜•์— ๊ฐ‡ํžŒ ์ž์ „๊ฑฐ ๋ณด๊ด€์†Œ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์˜ ๋‚ด๋ถ€ ๊ธฐํ˜ธ๋ฅผ ๋‹ค์‹œ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹น์‹ ์ด ์ •๋ง๋กœ ๊ทธ๋ ‡๊ฒŒํ•ด์„œ๋Š” ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” Haskell์˜ import ๋ฌธ๋ฒ•์„ ์ข‹์•„ ํ•œ๋‹ค. ๋‚˜๋Š” Python์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ Julia์˜ ๋ชจ๋“ˆ๋ณด๋‹ค ๋” ์„ธ๋ถ„ํ™”๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Julia์˜ ๋ชจ๋“ˆ์€ Haskell์˜ ๋ชจ๋“ˆ์— ๋น„ํ•ด ์ •์‹ ์ด ๋” ๊ฐ•ํ•˜๋ฏ€๋กœ ์˜๊ฐ์„ ์–ป๊ธฐ ์œ„ํ•ด ๊ทธ๊ณณ์—์„œ ์ฐพ์•„์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ssfrr ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. as ํ‚ค์›Œ๋“œ๋Š” ํ›จ์”ฌ ๋” ์ž๋ช…ํ•˜๋ฉฐ Python/Haskell ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ ์นœ์ˆ™ํ•ฉ๋‹ˆ๋‹ค. @StefanKarpinski ๋ฌธ์ œ๋ฅผ ๊ฐ€๋…์„ฑ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํŒŒ์ด์ฌ๊ณผ ์œ ์‚ฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

from Tlahuixcalpantecuhtli as Venus import xxxxxxxxx as x9, yyyyyyyy as y8, zzz

REPL๊ณผ ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ œ์•ˆ์€ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

from Tlahuixcalpantecuhtli as Venus import xxxxxxxxx as x9, yyyyyyyy as y8, zzz

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ Python์—์„œ ๊ฐ€์žฅ ์„ ํ˜ธํ•˜์ง€ ์•Š๋Š” ๊ตฌ๋ฌธ ์„ ํƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์˜๋ฏธ๋ฅผ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์ดˆ๊ธฐ ํ‚ค์›Œ๋“œ์™€ ๋ชจ๋“  ๊ฒƒ์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ „์ฒด ํ–‰์„ ๊ทผ๋ณธ์ ์œผ๋กœ ์žฌ๋ฐฐ์—ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ˆ˜์ž…ํ’ˆ๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ๊ฑฐ์˜ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”ผ์ƒ์ ์œผ๋กœ ์˜์–ด์™€ ๊ฐ™์€ ๊ฒƒ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋น„์ค‘์„ ๋‘๋Š” ๋”์ฐํ•œ ๊ตฌ๋ฌธ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.

:+1: as , :-1: from

import a => b: c => d, e => f ๋Š” ๋‚˜์—๊ฒŒ ๋„ˆ๋ฌด ํŽ„๋Ÿญ์ด๋Š” ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด์‰ฌ ๊ท ํ˜•์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์—†์œผ๋ฉฐ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ฝ์€ ํ›„์— ์ด๊ฒƒ์ด ๊ท ํ˜•์„ ๊ตฌ์„ฑํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์žฌ๋ฏธ์žˆ๋Š” ์ ์€ ์ด ์ž์ „๊ฑฐ ๋ณด๊ด€์†Œ๊ฐ€ 1์‹œ๊ฐ„์— 10๊ฐœ์˜ ์‘๋‹ต์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ˜๋ฉด, ์ €์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•˜์ง€๋งŒ ๋” ์–ด๋ ค์šด ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜๋Š” #6984์˜ ์ œ์•ˆ์ด 4์‹œ๊ฐ„ ๋™์•ˆ ์•„๋ฌด๋Ÿฐ ๋…ผํ‰๋„ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!

as vs. => ์˜ ๊ฒฝ์šฐ : ์–ด๋Š ์ชฝ์ด๋“  ํ˜„์žฌ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ข‹์€ ๊ฐœ์„ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์ง€์  @BobPortmann #6984.

=> ๊ฐ€ FWIW์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์žฌ๋ฏธ์žˆ๋Š” ์ ์€ ์ด ์ž์ „๊ฑฐ ๋ณด๊ด€์†Œ๊ฐ€ 1์‹œ๊ฐ„์— 10๊ฐœ์˜ ์‘๋‹ต์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ˜๋ฉด, ์ €์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•˜์ง€๋งŒ ๋” ์–ด๋ ค์šด ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜๋Š” #6984์˜ ์ œ์•ˆ์ด 4์‹œ๊ฐ„ ๋™์•ˆ ์•„๋ฌด๋Ÿฐ ๋…ผํ‰๋„ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!

Parkinson์˜ ์›๋ž˜ ๋น„์œ ์—์„œ ์ด ๋ฌธ์ œ๋Š” ์ž์ „๊ฑฐ ์ฐฝ๊ณ ์ด๊ณ  #6984๋Š” ์›์ž๋กœ์ž…๋‹ˆ๋‹ค.

:)

๋‚˜๋Š” ์ด ๋ƒ„๋น„๋ฅผ ํœ˜์ “๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•˜์ง€๋งŒ ๋‚˜๋Š” as ์„ ์„ ํ˜ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. => ๋Š” ์•ฝ๊ฐ„ ๋ชจํ˜ธํ•˜๊ณ  ์‚ฌ์ „๊ณผ ๊ตฌ๋ฌธ์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ = ๊ฐ€ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. import Foo: x = y , ์ง€๊ธˆ ํ•˜๋Š” const x = Foo.y ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋Š” Haskell ๋ฌธ์„œ์˜ ํ•ด๋‹น ํ‘œ๊ฐ€ ์ •๋ง ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ข…์ข… (ํŠนํžˆ julia๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ) import / using / require ๋˜๋Š” import Mod.thing vs. import Mod: thing . ์‹ค์ œ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ์ฝœ๋ก  ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ฐพ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

@jakebolewski Julia์˜ using ๋Š” Haskell์˜ (ํ•œ์ •๋˜์ง€ ์•Š์€) import ์™€ ๊ฐ™๊ณ  Julia์˜ import ๋Š” Haskell์˜ import qualified ์™€ ๊ฐ™์œผ๋ฉฐ Haskell ๊ตฌ๋ฌธ์ด ๊ฝค ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


์ถœ๋ฐœ์ ์œผ๋กœ ๋” ์ž˜ ์•„๋Š” ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์ด ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ/์‚ฌ์šฉ ๊ตฌ๋ฌธ์˜ ์ข‹์€ ์š”์•ฝ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? x ๋ฐ y ํ•จ์ˆ˜๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  p ๋ฐ q ํ•จ์ˆ˜๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” Mod ๋ชจ๋“ˆ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

import Mod ๋Š” Mod.x , Mod.y , Mod.p ๋ฐ Mod.q $ ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜จ ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ ๋ฉ”์„œ๋“œ ํ™•์žฅ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

using Mod ๋Š” x , y , Mod.x , Mod.y , Mod.p ๋ฐ Mod.q $๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. . x ๋ฐ y ๋Š” ๋ฉ”์„œ๋“œ ํ™•์žฅ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ Mod.* ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import Mod.x, Mod.p ๋Š” x , p , Mod.x , Mod.y , Mod.p ๋ฐ Mod.q $๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. . ๋ฉ”์„œ๋“œ ํ™•์žฅ์— ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import Mod: x, p ์€ import Mod.x, Mod.p ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

using Mod.x, Mod.p ๋Š” x , p , Mod.x , Mod.y , Mod.p ๋ฐ Mod.q $๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. . x ๋ฐ p ๋Š” ๋ฉ”์„œ๋“œ ํ™•์žฅ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ Mod.* ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

using Mod: x, p ๋Š” using Mod.x, Mod.p ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ using Mod ์€ Mod ๋‚ด๋ณด๋‚ธ ๊ฒƒ์„ ์‹ ๊ฒฝ ์“ฐ๋Š” ์œ ์ผํ•œ ์‚ฌ์šฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

Module์˜ ๋ฌธ์„œ์— ์ด ์š”์•ฝ์ด ์žˆ์œผ๋ฉด ์ •๋ง ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ PR์„ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import Tlahuixcalpantecuhtli as Venus: xxxxxxxxx as x9, yyyyyyyy as y8, zzz

๋‚˜๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ• ๋‹น ๋ฒ„์ „์€ ํฅ๋ฏธ๋กญ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

import Venus = Tlahuixcalpantecuhtli: x9 = xxxxxxxxx, y8 = yyyyyyyy, zzz

์‹ซ์–ดํ•  ์ค„ ์•Œ์•˜๋Š”๋ฐ ์ •๋ง ์ด์˜๋„ค์š”. ์ด ๋ชจ๋“ˆ์— ์†Œ๊ฐœ๋œ ์ด๋ฆ„์ด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๊ณ  ๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ๊ฒƒ์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฉด์—์„œ ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jakebolewski : ์™œ ๋ชจ๋“ˆ์˜ ๋‚ด๋ถ€ ๊ธฐํ˜ธ๋ฅผ ๋‹ค์‹œ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๊นŒ? ๋‹น์‹ ์ด ์ •๋ง๋กœ ๊ทธ๋ ‡๊ฒŒํ•ด์„œ๋Š” ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๋ชจ๋“ˆ์—์„œ ์ด๋ฆ„์ด ์ถฉ๋Œํ•˜๋Š” ๋ฐ”์ธ๋”ฉ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์™„์ „ํžˆ ์ž๊ฒฉ์„ ๋ถ€์—ฌํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์•จ๋ฆฌ์–ด์‹ฑ์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ๋„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜ ๋ฐฐ์น˜ ๋œ ์ผ๋ถ€ ์ค„ ๋ฐ”๊ฟˆ์€ IMO๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

import Tlahuixcalpantecuhtli as Venus:
    xxxxxxxxx as x9, 
    yyyyyyyy as y8,
    zzz

๋˜๋Š”

import Venus = Tlahuixcalpantecuhtli: 
    x9 = xxxxxxxxx, 
    y8 = yyyyyyyy, 
    zzz

๋‚˜๋Š” ํ• ๋‹น ๋ฒ„์ „์„ ์ƒ๋‹นํžˆ ์„ ํ˜ธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ๊ฒฐ๊ตญ ํ• ๋‹น์˜ ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

Module์˜ ๋ฌธ์„œ์— ์ด ์š”์•ฝ์ด ์žˆ์œผ๋ฉด ์ •๋ง ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ PR์„ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@brk00 , ๊ฐ€์„ธ์š”!

@kmsquire ์˜ค๋Š˜ ์ž‘์—…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

ํ•˜์ง€๋งŒ ๊ทธ ์ „์— ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. @ssfrr ์˜ˆ์—์„œ ๋‚ด๊ฐ€ REPL์— ์žˆ๊ณ  using Mod ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜จ ํ•จ์ˆ˜ x ๋ฐ y ๋Š” ๋ฉ”์„œ๋“œ ํ™•์žฅ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ x ๋ฐ y ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ํ•œ ๋ฒˆ ๊ฐ€์ ธ์˜จ Mod ์˜ ๋ฉ”์„œ๋“œ์— ๋” ์ด์ƒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ƒˆ ๋ฉ”์„œ๋“œ์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ํ™•์žฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.

julia> module Mod

       export x, y

       x() = "x"
       y() = "y"
       p() = "p"
       q() = "q"

       end

julia> using Mod

julia> x()
"x"

julia> p()
ERROR: p not defined

julia> x(n) = n
ERROR: error in method definition: function Mod.x must be explicitly imported to be extended

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

julia> import Mod: x # or import Mod.x

julia> x(n) = n
x (generic function with 2 methods)

julia> methods(x)
# 2 methods for generic function "x":
x() at none:5
x(n) at none:1

๊ธ€์Ž„, ๋‚˜๋Š” ์ด๋ฆ„ ํ•ด๊ฒฐ ํ–‰๋™์— ํ˜ผ๋ž€ ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.

julia> module Mod

       export x, y

       x() = "x"
       y() = "y"
       p() = "p"
       q() = "q"

       end

julia> using Mod

julia> x(n) = n
x (generic function with 1 method)

using Mod ๋กœ ๋ฐฉ๊ธˆ ๊ฐ€์ ธ์˜จ ํ•จ์ˆ˜๋ฅผ _using_ํ•˜๊ธฐ ์ „์— x ์— ์ƒˆ ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ ํ• ๋‹น ์ „์— x() ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด(๊ท€ํ•˜์˜ ์˜ˆ์—์„œ์™€ ๊ฐ™์ด) ์˜ค๋ฅ˜๊ฐ€ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•„, ํฅ๋ฏธ๋กญ๋‹ค! ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ชฐ๋ž๋‹ค. ๋ฐฉ๊ธˆ using ๋’ค์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด x ๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ด ์•ฝ๊ฐ„์˜ ๋น›์„ ๋น„์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. x ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๋„ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

์œ„์—์„œ @carlobaldassi ๊ฐ€ ์ œ์•ˆํ•œ ์•จ๋ฆฌ์–ด์‹ฑ์ด ์‹ค์ œ๋กœ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

import ๊ฐ€ ๋ชจ๋“ˆ ๊ฐœ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ const ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์—†๋Š” ํ• ๋‹น์œผ๋กœ ์ง์ ‘ ๋ณ„์นญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ

const Shortname = import ModuleWithLongName

๋Œ€์‹ ์—

import ModuleWithLongName
const Shortname = ModuleWithLongName

์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ธฐ์กด ๊ตฌ๋ฌธ ์š”์†Œ์˜ ์กฐํ•ฉ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ˜„์žฌ import ๊ฐ€ ์ˆœ์ „ํžˆ ๋ถ€์ž‘์šฉ์„ ์œ„ํ•ด ํ˜ธ์ถœ๋œ "๋ฌธ์žฅ"์ด๋ฉฐ ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์„œ๊ฐ€ ์ด๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋‚˜๋Š” import("Module") ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์„ ํ˜ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์— ๋ณ„์นญ์„ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด ์ข‹์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์•„๋ฌด๋„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์€ ๋‹จ์ ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ƒ๋‹นํžˆ ๊ฐ€๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฆฌ๋”์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ์ด๋ฆ„์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ์ฐพ์•„๋ณด๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‚˜์š”? ๋‹จ์ถ•๋œ ํ˜•์‹์€ np for numpy ์™€ ๊ฐ™์€ ์ธ๊ธฐ ์žˆ๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด์„œ๋„ ํ‘œ์ค€ํ™”๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ numpy ์„ ํ‘œ์ค€ํ™”๋œ np ๋ณด๋‹ค๋Š” $ Arrays ๋ฅผ numpy ๋กœ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. numpy ๋Š” 1950๋…„๋Œ€ ๋Œ„์Šค ๋™์ž‘๊ณผ ์น˜๋ช…์ ์ธ ์ „์—ผ๋ณ‘ ์‚ฌ์ด์˜ ๊ต์ฐจ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Base.require("ArgParse")
const ap = Main.ArgParse

์ด๊ฒƒ์€ 1.0์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์ด์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, require ๋ฐ const ํ• ๋‹น์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ ์—†์ด๋„ ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ require ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฝค ์ถ”ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๊ตฌ๋ฌธ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฆ„์„ ๋ฐ”๊พธ์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ์›ํ•˜๋Š”/ํ•„์š”ํ•œ ๋Œ€๋กœ.

const ์‰ฌ์šด ํŠธ๋ฆญ์€ ๋งคํฌ๋กœ์— ๋ณ„์นญ์„ ์ง€์ •ํ•ด์•ผ ํ•  ๋•Œ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ ์•Œ์•„๋‚ด๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

julia> macro foo(a, b, c)                                  
           a, b, c                                         
       end                                                 
<strong i="8">@foo</strong> (macro with 1 method)                                 

julia> macro f(args...)                                    
           Expr(:macrocall, Symbol("@foo"), args...) |> esc
       end                                                 
<strong i="9">@f</strong> (macro with 1 method)                                   

julia> <strong i="10">@f</strong> 1 2 3                                            
(1,2,3)                                                    

ImportMacros.jl์—์„œ ๋‹ค์Œ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • <strong i="15">@from</strong> Foo.Bar use foo as f
  • <strong i="18">@from</strong> Foo.Bar use <strong i="19">@foo</strong> as @f

์ฐธ์กฐ: https://github.com/fredrikekre/ImportMacros.jl/pull/3

@Ismael-VC

๋…ธ๋ ฅํ•˜๋‹ค

<strong i="7">@eval</strong> const $(Symbol("@foo")) = $(Symbol("@bar"))

์ด๊ฒƒ์€ ๋” ๋ชป์ƒ๊ฒผ์ง€๋งŒ, ๋งคํฌ๋กœ๋ฅผ ๋กœ์ปฌ์—์„œ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์งง๊ณ  ๋” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

@TotalVerb ๋„์›€์„ ์ฃผ์…”์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

Julia + ImportMacros์—์„œ ๋ˆ„๋ฝ๋œ ์œ ์ผํ•œ ๊ธฐ๋Šฅ์€ ๋ชจ๋“ˆ์— ๋ณ„์นญ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์—์„œ ๊ฐ€๋ณ€ ์ˆ˜์˜ ๊ฐœ์ฒด์— ๋ณ„์นญ์„ ์ง€์ •ํ•˜๊ณ  ๋ณ„์นญ ์—†์ด ๋‹ค๋ฅธ ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • <strong i="9">@from</strong> Foo.Bar as B use foo as f, <strong i="10">@bar</strong> as <strong i="11">@b</strong>, baz

๋˜๋Š” from ์—†์ด :

  • import Foo.Bar as B: foo as f, <strong i="17">@bar</strong> as <strong i="18">@b</strong>, baz
  • import B = Foo.Bar: f = foo, <strong i="21">@b</strong> = <strong i="22">@bar</strong>, baz

๋งˆ์ง€๋ง‰ ๊ฒƒ์€ ๋งคํฌ๋กœ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค:

julia> parse("<strong i="26">@from</strong> Foo.Bar as B use foo as f, <strong i="27">@bar</strong> as <strong i="28">@b</strong>, baz")
:(<strong i="29">@from</strong> Foo.Bar as B use foo as (f,@bar(as,(@b(),baz))))

julia> parse("<strong i="30">@import</strong> Foo.Bar as B: foo as f, <strong i="31">@bar</strong> as <strong i="32">@b</strong>, baz")
:(<strong i="33">@import</strong> Foo.Bar as B:foo as (f,@bar(as,(@b(),baz))))

julia> parse("<strong i="34">@import</strong> B = Foo.Bar: f = foo, <strong i="35">@b</strong> = <strong i="36">@bar</strong>, baz")
ERROR: ParseError("unexpected \"=\"")
 in #parse#310(::Bool, ::Bool, ::Function, ::String, ::Int64) at .\parse.jl:184
 in (::Base.#kw##parse)(::Array{Any,1}, ::Base.#parse, ::String, ::Int64) at .\<missing>:0
 in #parse#311(::Bool, ::Function, ::String) at .\parse.jl:194
 in parse(::String) at .\parse.jl:194

์ œ์•ˆ๋œ ๋ชจ๋“  ๊ตฌ๋ฌธ์ด ์˜ค๋ฅ˜์ด๊ฑฐ๋‚˜ ์™„์ „ํžˆ ๋„Œ์„ผ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ 1.0์— ๋Œ€ํ•ด ๊ฒฐ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์›๋ž˜ ๋ชจ๋“ˆ์ด REPL์—์„œ reload("...") ์™€ ๊ฐ™์ด ์žฌ์ •์˜๋˜๋ฉด ๋ชจ๋“ˆ ๋ณ„์นญ์€ ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? const M = MyModule ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด M ๋Š” ๋‹ค์‹œ ๋กœ๋“œํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ์ด์ „ ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ MyModule MyModule.name ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. M.name .

์ด ๊ฒฝ์šฐ ๋ณ„์นญ ๊ตฌ๋ฌธ์€ const M = Module ์— ๋Œ€ํ•œ ๋ฌธ๋ฒ•์  ์„คํƒ• ์ด์ƒ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ๋Œ€์‹  M ๊ฐ€ ํ•ญ์ƒ MyModule ์™€ ๋™์ผํ•œ ๊ฒƒ์„ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ ์ค‘์— ๋ชจ๋“ˆ์„ ๊ณ„์† import ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค๋ฒˆ ( const ๊ฐ€ ์•„๋‹Œ) ๋ณ„์นญ์„ ๋‹ค์‹œ ์„ค์ •ํ•  ํ•„์š” ์—†์ด ๋” ์งง์€ ๋ณ„์นญ์„ ํ†ตํ•ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— REPL ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋‹จ์ˆœํ™”๋ฉ๋‹ˆ๋‹ค. reload .

ํ˜„์žฌ reload ์ด ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋Š” ๋” ์ด์ƒ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ include ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“ˆ์„ ์žฌ์ •์˜ํ•  ๋•Œ import ed ๋ชจ๋“ˆ ์ด๋ฆ„์€ ์ƒˆ ์ •์˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ํ• ๋‹น์— ์˜ํ•ด ์ •์˜๋œ ๋ณ„์นญ์€ ์ด์ „ ์ •์˜๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ๊ทธ๊ฒƒ์€ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ import ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“ˆ์ด ์žฌ์ •์˜๋  ๋•Œ ๊ฐ€์ ธ์˜จ ์ด๋ฆ„์€ ์ ˆ๋Œ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์€ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ ๊ฐ€์ ธ์˜ฌ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜จ ๊ฒƒ์€ ํ•ญ์ƒ ๋ฐ”์ธ๋”ฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ง€ ๋ชปํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ test.jl ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ

module Tst
f() = 1
end

๋กœ๋“œํ•˜๊ณ  Tst ๊ฐ€์ ธ์˜ค๊ณ  $# Tst ๋ณ„์นญ์„ ์ •์˜ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

julia> include("test.jl")
Tst

julia> import Tst

julia> const Tst2 = Tst
Tst

julia> Tst.f()
1

julia> Tst2.f()
1

์ด์ œ test.jl ๋ฅผ ๋‹ค์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด

module Tst
f() = 2
end

REPL์—์„œ ๋‹ค์‹œ include ๋ชจ๋“ˆ๊ณผ ํ•ด๋‹น ๋ณ„์นญ์ด ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

julia> include("test.jl")
WARNING: replacing module Tst
Tst

julia> Tst.f()
2

julia> Tst2.f()
1

์ด๊ฒƒ์ด ์™œ ๊ทธ๋Ÿฐ์ง€ ์•Œ์ง€๋งŒ import Tst as Tst2 ์™€ ๊ฐ™์€ ๋ณ„์นญ์„ ๋งŒ๋“ค ๋•Œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ 0.6.2์—์„œ ํ…Œ์ŠคํŠธํ–ˆ๊ณ  ํ˜„์žฌ๋กœ์„œ๋Š” 0.7์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ์‚ฌ์‹ค์ด๋ผ๋ฉด ์ง€๊ธˆ์€ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ์ „ํ˜€ ์ˆ˜์ž…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํฌํ•จํ•˜๋Š” ๋ชจ๋“ˆ์€ ์ด๋ฏธ ๋ฒ”์œ„์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. import ์€(๋Š”) ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค์ด์ง€๋งŒ ์ด๊ฒƒ์ด ์š”์ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์š”์ ์€ ๊ฐ€์ƒ์˜ import Tst as Tst2 ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๋ช…๋ น๋ฌธ์€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณ„์นญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด ๋ณ„์นญ์ด const Tst2 = Tst ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ Tst ๋ชจ๋“ˆ์„ ์žฌ์ •์˜ํ•˜๋ฉด ๋ณ„์นญ์ด ๋ชจ๋“ˆ์˜ ์ด์ „ ๋ฒ„์ „์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ„์นญ์€ Tst ์˜ ์ƒˆ ๋ฒ„์ „๋„ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„์นญ์„ ๋‹ค์‹œ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ›„์ž์˜ ๊ฒฝ์šฐ ์žฌ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ด์ „ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด์ „ ๋ชจ๋“ˆ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์‹  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ์ „์ ์œผ๋กœ ์š”์ ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์ •์˜๊ฐ€ ์•„๋‹Œ import ์— ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ import ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ œ๊ฑฐํ•œ ํ›„ ์ฝ”๋“œ์— import ๋˜๋Š” using ๊ฐ€ ๋” ์ด์ƒ ์—†์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด import ์™€ ๋™์ผํ•œ ๋ฒ”์œ„์— ์ •์˜๋˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

import Tst as Tst2 ๋Š” ํ•ด๋‹น ์ด๋ฆ„์— ๋ฐ”์ธ๋”ฉ๋˜๋Š” ํ•ญ๋ชฉ์˜ ๊ด€์ ์—์„œ import Tst ์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ•ญ์ƒ ๋ฐ”์ธ๋”ฉ์ด๋ฉฐ ์›ํ•˜๋Š” ๋งˆ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋“ˆ์„ ์ •์˜ํ•  ๋•Œ ๋ณ„์นญ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค .

๋‹ค๋ฅธ ์‹์œผ๋กœ ๋งํ•˜๋ฉด ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ

a = Ref(1) # include
a = a # import
b = a # alias
a = Ref(2) # include again

๊ทธ๋ฆฌ๊ณ  a ๊ฐ€ a = a ์— ์˜ํ•ด ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— b = a ์˜ ๋™์ž‘์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๋ณด๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๋‚˜์œ ์˜ˆ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ์™€ ๊ฐ™์€ ๋ฒ”์œ„์—์„œ ๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๋Š” ๋ถ€์ž‘์šฉ(์˜ˆ: a = a ๋ฐ a = Ref(...) ๊ฐ™์€ ๋ฒ”์œ„)์ž…๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” ํ• ๋‹น์— ์˜ํ•ด ์ •์˜๋œ ๋ณ„์นญ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ๋‚˜์œ ์˜ˆ๋ฅผ ์„ ํƒํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๋ณ„์นญ์„ ์ƒ์„ฑํ•˜๋Š” ๊ตฌ๋ฌธ( import ๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€)์— ๋Œ€ํ•ด ์ด๊ฒƒ์ด ์ค‘์š”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์ง€๊ธˆ ๋‹น์žฅ์€ ์–ด๋””๊นŒ์ง€๋‚˜ ๊ฐ€์„ค์ž…๋‹ˆ๋‹ค. ์†Œ์Œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์˜ค๋žซ๋™์•ˆ ์กด์žฌํ•ด ์™”์ง€๋งŒ ์ผ๋ถ€ ํ™•์žฅ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋…ผ์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

import LongPackage as longpkg

์ž์ฒด๋Š” ๊ฝค ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ถฉ๋Œ. ํ˜„์žฌ๋กœ์„œ๋Š” ์ตœ๊ณ ์˜ ์†”๋ฃจ์…˜์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•˜๋Š” ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import LinearAlgebra
const linalg = LinearAlgebra

๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ์žˆ์œผ๋ฉด ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”!

๊ทธ๊ฒƒ์ด ํ˜„์žฌ์˜ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.

~ ๊ตฌ๋ฌธ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ฒฐ๊ณผ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ฉ‹์ง„ ๋ฏธํ•™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ~๋Š” ๊ทผ์‚ฌ์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

import LongPackage ~ lp

@JeffreySarnoff ์Šคํ…ŒํŒ ์ธ์šฉ

@StefanKarpinski

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ Python์—์„œ ๊ฐ€์žฅ ์„ ํ˜ธํ•˜์ง€ ์•Š๋Š” ๊ตฌ๋ฌธ ์„ ํƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์˜๋ฏธ๋ฅผ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์ดˆ๊ธฐ ํ‚ค์›Œ๋“œ์™€ ๋ชจ๋“  ๊ฒƒ์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ „์ฒด ํ–‰์„ ๊ทผ๋ณธ์ ์œผ๋กœ ์žฌ๋ฐฐ์—ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ˆ˜์ž…ํ’ˆ๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ๊ฑฐ์˜ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ๋ฆฌ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”ผ์ƒ์ ์œผ๋กœ ์˜์–ด์™€ ๊ฐ™์€ ๊ฒƒ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋น„์ค‘์„ ๋‘๋Š” ๋”์ฐํ•œ ๊ตฌ๋ฌธ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ~๋Š” Python ๊ตฌ๋ฌธ์˜ ์˜์–ด์™€ ๊ฐ™์€ ์ธก๋ฉด๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ~์„ ๋ณผ ๋•Œ ๋‚˜๋Š” ๊ทผ์‚ฌ์น˜์˜ ์ˆ˜ํ•™์  ๊ฐœ๋…์„ ์ธ์‹ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. 10.001 ~ 10.

๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ, ๋‚˜๋Š” ~๊ฐ€ ์‹ค์ œ๋กœ ๊ฝค ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

import LongPackage ~ lp
import HugePackage ~ hp
import MassivePackage ~ mp
import GiantPackage ~ gp

:-)

ok -- python์€ ์žŠ์–ด๋ฒ„๋ฆฌ์„ธ์š” -- ์ €๋Š” ๊ทธ ์ฃผ์„์„ ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

lp imports LongPlayingRecords
hp imports HewlettPackard
mp imports MilitaryPolice
gp imports PariForNumberTheory

์›๋ž˜ ๋งˆ์Œ์— ์•ˆ๋“ค์—ˆ๋Š”๋ฐ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ as ๋กœ ์“ฐ๊ณ  ์‹ถ์–ดํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™์•„์„œ ๋‹ค๋ฅธ ๊ฑธ ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์—‰๋šฑํ•œ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜๋„ค์š”. ์ด๊ฒƒ์€ ๋ช…ํ™•ํ•œ ๊ตฌ๋ฌธ ์ปจํ…์ŠคํŠธ์ด๋ฏ€๋กœ ํ‚ค์›Œ๋“œ ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์˜ˆ์•ฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ทธ ์˜๋ฏธ๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด _์‹œ๋„ํ•˜๋Š”_ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด !?!

@์ œํ”„๋ฆฌ์‚ฌ๋…ธํ”„

ํŒŒ์ด์ฌ๋ณด๋‹ค ๋” ์ž˜ํ•˜๋ ค๊ณ  ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด !!!

@neilpanchal Julia๋Š” ํ™•์‹คํžˆ ์—ฌ๋Ÿฌ ๋ฉด์—์„œ Python๋ณด๋‹ค ๋” ๋‚˜์€ ์–ธ์–ด๋ฅผ ์‹œ๋„ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ, ํŒŒ์ด์ฌ์ด ๋ญ”๊ฐ€๋ฅผ ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ๋Š” ํŒŒ์ด์ฌ๊ณผ _๋‹ค๋ฅด๊ฒŒ_ ๋˜๋Š” ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. Julia๋Š” Python ์™ผ์ชฝ ๋ฐ ์˜ค๋ฅธ์ชฝ์—์„œ ๊ตฌ๋ฌธ ๊ทœ์น™์„ ์ฐจ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ as ์„ ์ฑ„ํƒํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ๋งž์•˜๋‹ค.

julia> LightGraphs๋ฅผ lg๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
์˜ค๋ฅ˜: ๊ตฌ๋ฌธ: ํ‘œํ˜„์‹ ๋ ๋’ค์— ์ถ”๊ฐ€ ํ† ํฐ "as"

Python์—์„œ ๋ฒ—์–ด๋‚˜๋Š” as ์— ์ฐฌ์„ฑํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ $0.02 ์ฃผ์„์ž…๋‹ˆ๋‹ค. fwiw, ์ด์ œ Julia w/some regularity๋ฅผ โ€‹โ€‹๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์„ ๊ทธ๋ฆฌ์›Œํ•ฉ๋‹ˆ๋‹ค. Python์ด ์•„๋‹ˆ๋ผ Clojure( ์˜ˆ ์ฐธ์กฐ)์—์„œ์™€ ๊ฐ™์ด ํŒจํ‚ค์ง€ ๋ฒ”์œ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(๋ช…ํ™•์„ฑ์— ์ข‹์€)๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ›จ์”ฌ ๋” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. const gf = ํ–‰์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  import Gadlfy as gf ์— ์•ฝ๊ฐ„์˜ ๊ตฌ๋ฌธ ์„คํƒ•์„ ๊ฐ–๋Š” using (์˜ˆ: ์™€์ผ๋“œ์นด๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ)๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์—(ํ˜„์žฌ ๋‚ด๊ฐ€ ํ•˜๋Š” ์ผ) ํŽธ๋ฆฌํ•˜๋‹ค.

as ๊ตฌ๋ฌธ์„ ์ง€์›ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์˜๊ฒฌ :heart: ์•ž์œผ๋กœ์˜ Julia ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ์ •๋ง ์–ด๋ ค์šด ์ž‘์—…์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋„ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ธธ ๋ฐ”๋ž€๋‹ค. ํŠนํžˆ ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—(๋งž๋‚˜์š”?).

๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ด๋Š ์‹œ์ ์— ๊ตฌํ˜„๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ(์‹œ๊ฐ„์ด ํ—ˆ๋ฝํ•œ๋‹ค๋ฉด ์Šค์Šค๋กœ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค), ๊ทธ ๋™์•ˆ ImportMacros ํŒจํ‚ค์ง€ ์—๋Š” ์—ฌ๊ธฐ์—์„œ ์š”์ฒญํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ฌธ์„œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์ง€๋งŒ) :

<strong i="8">@import</strong> ModuleA as ma
<strong i="9">@using</strong> ModuleB as mb
<strong i="10">@from</strong> ModuleC use long_function_name as func
<strong i="11">@from</strong> Module use <strong i="12">@macroname</strong> as <strong i="13">@alias</strong>

ImportMacros .jl์— ๋Œ€ํ•ด ๋ชฐ๋ž๋Š”๋ฐ ์ง€์ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์ด ํŒจํ‚ค์ง€์— ์กด์žฌํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ ์–ธ์–ด๋กœ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ด๊ฒƒ์ด ์–ธ์–ด๋กœ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ๊ฑฐ์˜ _ํ•ญ์ƒ_ ๊ธฐ๋ณธ ์–ธ์–ด ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ๋งคํฌ๋กœ๋กœ ๋ž˜ํ•‘ํ•˜๊ฑฐ๋‚˜ ํŒจํ‚ค์ง€ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ ค๋Š” IMO์ž…๋‹ˆ๋‹ค. import ... const ๋Š” ๊ธฐ๋ณธ ์–ธ์–ด๊ฐ€ 2๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ™•์žฅ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ (ํŠนํžˆ) ํด๋ฐฑํ•˜๊ธฐ์— ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ๋ณด๊ธฐ์— ์ข€ ์ง•๊ทธ๋Ÿฝ๋‹ค.

using ImportMacros
<strong i="6">@using</strong> OtherPackage as ...
<strong i="7">@using</strong> ThirdPackage as ...

๋งคํฌ๋กœ๊ฐ€ ์•„๋‹Œ using ๊ฐ€ ํŠ€์–ด๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

import ๊ฐ€ ์‹ค์ œ๋กœ ๋ฒ”์œ„์— ๊ฐ€์ ธ์˜ค๋Š” ๋ชจ๋“ˆ/ํ•จ์ˆ˜/๋ฌด์—‡์ด๋“  ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
๊ทธ๋Ÿฌ๋ฉด ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
lg = import LightGraphs
baz = import foo.bar
baz, kit, kat = import foo : bar1, bar2, bar3
๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์œ ์ผํ•œ ๊ฒƒ์€ ๊ฐ€์ ธ์˜ค๊ธฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

@DhruvaSambrani ์˜ ์†”๋ฃจ์…˜์€ Julia์˜ ์ „๋ฐ˜์ ์ธ "๋ชจ๋“  ๊ฒƒ์ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค" ์ ‘๊ทผ ๋ฐฉ์‹์— ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

์œ ์ผํ•œ ๊ฒƒ์€ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๊ฐ€์ ธ์˜ค๊ธฐ ํ‘œํ˜„์‹์ด ์ „์ฒด ์ด๋ฆ„์„ ๋ฒ”์œ„๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ถ€์ž‘์šฉ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์žฌํ•ด๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ). ์ „์ฒด ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋„๋ก ํŠน์ˆ˜ ์ผ€์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํŠน์ˆ˜ ์ผ€์ด์Šค๋Š” ์ด์ฒด์ ์ž…๋‹ˆ๋‹ค.

OCaml(์ตœ๊ณ ์˜ ๋ชจ๋“ˆ์ด ์žˆ๋Š” ์–ธ์–ด!)์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

module LG = LightGraphs

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ OCaml ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ์˜ ์ •๊ทœํ™”๋œ ์ด๋ฆ„์ด ์ž๋™์œผ๋กœ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  import LightGraphs as LG ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "๋ชจ๋“  ์‚ฌ๋žŒ"์ด Python์—์„œ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ์ด์ ์ด ์žˆ์ง€๋งŒ, ๋‚ด ๊ฐœ์ธ์ ์ธ ์ทจํ–ฅ์€ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ํ• ๋‹น์ธ ๊ฒƒ์— ํ• ๋‹น ๊ตฌ๋ฌธ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜๋Š” ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ณ€๊ฒฝ์€ "๋„ค์ž„์ŠคํŽ˜์ด์Šค"๋ฅผ ์œ ํ˜•์œผ๋กœ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ด๋ฏธ ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ idk). ๊ทธ๋Ÿฐ ๋‹ค์Œ import ๋Š” ๋ชจ๋“ˆ/๋ฌด์—‡์ด๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ํ™•์žฅํ•˜๊ณ  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹จ์ˆœํžˆ import mod_name ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ „์—ญ ๋ฒ”์œ„์—์„œ mod_name ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  Julia ์ฝ”๋“œ๊ฐ€ ์†์ƒ๋ฉ๋‹ˆ๋‹ค. import๊ฐ€ ์„ ํ–‰ ํ• ๋‹น ์—†์ด ์‚ฌ์šฉ๋  ๋•Œ mod_name ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ๋‹จ์ผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋ชจ๋“  ํ•จ์ˆ˜/๋ชจ๋“ˆ ๋“ฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ๋  ์ƒˆ ํ•จ์ˆ˜ import_as_ns(mod_name) :: Namespace ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

Julia์˜ ์ „๋ฐ˜์ ์ธ "๋ชจ๋“  ๊ฒƒ์ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค" ์ ‘๊ทผ ๋ฐฉ์‹์— ๋งž์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ import ๋ฐ using ๋Š” ๋ถ€์ž‘์šฉ์— ๋Œ€ํ•ด์„œ๋งŒ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

๋ง๋ถ™์—ฌ์„œ, ์ด ๋ฌธ์ œ๊ฐ€ ์˜ค๋žซ๋™์•ˆ ๊ณต๊ฐœ๋˜์–ด ์™”๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ triage์—์„œ ๊ธฐ๊บผ์ด ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๊ณ  ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์˜ํ–ฅ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ์‡„๋ฅผ ์˜นํ˜ธํ•  ๊ฒƒ์ด๋‹ค.

  1. import Foo; const Bar = Foo ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ Foo ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ๋•Œ ์™„๋ฒฝํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2. ImportMacros.jl ์€ ๋‚˜๋จธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‘˜ ๋‹ค ํŠน๋ณ„ํ•œ ๊ตฌ๋ฌธ์„ ๋ณด์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ชจ๋“  ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ์ด๊ฒƒ์„ ๊ทธ๋ฆฌ์›Œํ•œ๋‹ค๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚ด ์ž์‹ ์˜ ์ฝ”๋“œ์—์„œ๋„ ImportMacros๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

๋‚˜๋Š” ๋‹น์‹ ์ด ์“ฐ๊ณ  ์žˆ๋Š” ์ปคํ”ผ์˜ ์Šคํƒ€์ผ์ด ์ด๊ฒƒ์— ๋Œ€ํ•œ ํ•„์š”(๋˜๋Š” ์š•๋ง)์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ML์ด๋‚˜ ๊ณผํ•™ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ทธ๊ฒƒ์„ ๊ทธ๋ฆฌ์›Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธด ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ImportMacros๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ImportMacros๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊นจ๋—ํ•ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํŽธ์ง‘๊ธฐ์—์„œ ์ž๋™ ํฌ๋งทํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ ์„ ๊ณ ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ @using ๋กœ ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ์ง€ ์•Œ ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์ด ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ImportMacros๋กœ ์ถฉ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค๋Š” @kmsquire ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ๋ฐฉ๋ฒ•์ด๋“  ๋‹ค์‹œ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋„๋ก ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ m=import Module ์„คํƒ•์ด ๋จน๊ณ ์‹ถ์ง€๋งŒ ๐Ÿ˜‚

๋‚ด ๋ฉ”์‹œ์ง€๊ฐ€ ์ด๊ฒƒ์ด ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•”์‹œํ•˜๋ ค๋Š” ์˜๋„๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

ImportMacros๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊นจ๋—ํ•ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋™์˜ํ•œ๋‹ค. ๋˜ํ•œ:

using ImportMacros
<strong i="8">@using</strong> OtherPackage as ...

์ฃผ์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ๋ฆ„์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ๊ฐ€๋ฅด์นจ์˜ ์ดˆ์ ์„ ์ด๋™์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์™œ ์ด๋Ÿฌํ•œ ๋ถˆ์ผ์น˜๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์‹ ๊ทœ ์ด๋ฏผ์ž๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดˆ๋ณด์ž์—๊ฒŒ ์–ธ์–ด๋ฅผ ์ œ์‹œํ•  ๋•Œ ์•ฝ๊ฐ„ ์งœ์ฆ์ด ๋‚ฉ๋‹ˆ๋‹ค.

๋‘˜ ๋‹ค ํŠน๋ณ„ํ•œ ๊ตฌ๋ฌธ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ ์ฝ”๋“œ์—์„œ ImportMacros๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์ ˆ์ถฉ์•ˆ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฑฐ์˜ ๋งค๋ฒˆ import ... as ... ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๋น„์šฉ์€ ๋“ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ข…์†์„ฑ ์ด์ƒ์œผ๋กœ "๋Š๋‚Œ" ์ธก๋ฉด์—์„œ๋„ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์ฝ”๋“œ๊ฐ€ ๋งค๋„๋Ÿฝ๊ฒŒ ๋ณด์ด๊ธฐ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค(ํŠนํžˆ python ๋˜๋Š” Julia์—์„œ) ๐Ÿคทโ€โ™‚๏ธ , ์ด using/@using ๋Š” ์˜คํžˆ๋ ค " hacky'์˜ ๋ถ„์œ„๊ธฐ๋ฅผ ์Šคํฌ๋ฆฝํŠธ ๋„์ž…์—).

์˜ˆ, "ImportMacros๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค". ์ •๋ง ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์„ ์œ„ํ•ด. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ ์—†์ด๋„ ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์–ธ์–ด์˜ ๊ตฌ๋ฌธ์ด ๊ณ ์ •๋˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ž‘์€ ๊ฒƒ๋“ค์ด๋ผ๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ดด๋ฌผ ์Šค๋ ˆ๋“œ๋Š” ๊ธฐ๋ณธ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

import ... as ... ๋Š” ํ™•์‹คํžˆ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ตฌ๋ฌธ์  ์„คํƒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ดํ•ดํ•˜๊ณ  ์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ์ •๋ง ์‰ฝ๊ณ  ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด ๋‹ค์†Œ ๊ธด Julia์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค(๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด using ... ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋Š” ๊ฐ€์ • ํ•˜์—์„œ๋งŒ).

๊ทธ๋ฆฌ๊ณ  ํŒŒ์ด์ฌ์ด ๊ทธ๊ฒƒ์„ ๋จผ์ € ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์‹ค์ œ๋กœ ๊ด€๋ จ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Julia๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฑฐ๋ฆฌ๋ฅผ ๋‘๊ฑฐ๋‚˜ ๊ณ ์œ ํ•œ ์ •์ฒด์„ฑ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์ „์— ์ตœ์ƒ์˜ ๊ตฌ๋ฌธ์„ ๊ฐ–๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ๊ณผ ์ธ๊ธฐ ์žˆ๋Š” ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ๊ฐ–๋Š” ๊ฒƒ(๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ•ญ์ƒ import numpy as np ๋ฐ import matplotlib.pyplot as plt ์ธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)์€ using SuchAndSuch ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  export ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•œ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@DominiqueMakowski :

์ฃผ์–ด์ง„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ถˆ์ผ์น˜๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์‹ ๊ทœ ์ด๋ฏผ์ž ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดˆ๋ณด์ž์—๊ฒŒ ์–ธ์–ด๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์™œ ๊ทธ๊ฒƒ์ด ๋ถˆ์ผ์น˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ์ผ ๋ฟ์ธ๋ฐ, ์ด๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ผ๋ฐ˜์ ์ธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“ˆ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ Julia๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์ผ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ์Šค์ผ€์ด์Šค๊ฐ€ ์—†๋‹ค๋Š” ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ, ์ž์‹ ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ •๋‹นํ™”ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค. ํ˜„์žฌ using ImportMacros ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด Github์—์„œ <10๊ฐœ์˜ ๊ณ ์œ ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฑฐ์˜ ๋งค๋ฒˆ import ... as ...๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๋น„์šฉ์€ ๋“ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๋ชจ๋‘ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค ImportMacros ๋˜๋Š” ์ถ”๊ฐ€ ๊ธฐํ˜ธ( import LongFoo; const Foo = LongFoo )์™€ ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋“œ๋Š” (๋งค์šฐ ์‚ฌ์†Œํ•œ) ๋น„์šฉ์ด ์ด์ ์„ ๋ˆ„๋ฆด ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๋ฉด ์ด์ ์€ ๊ทธ๋‹ค์ง€ ํฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

Julia๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฑฐ๋ฆฌ๋ฅผ ๋‘๊ฑฐ๋‚˜ ๊ณ ์œ ํ•œ ์ •์ฒด์„ฑ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์ „์— ์ตœ์ƒ์˜ ๊ตฌ๋ฌธ์„ ๊ฐ–๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ ์ด๊ฒƒ์ด ์ด ํ† ๋ก ์˜ ๋™๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

const ํ• ๋‹น์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ as ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

julia> using Distributed

julia> import Future; const future = Future
Future

julia> Future === Distributed.Future # oops, this is what we wanted
false

julia> Future === future # not what we wanted `Future` to mean
true

์˜ˆ, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์–ด์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ข…์ข… ํŽธ๋ฆฌํ•˜๊ณ  ๋•Œ๋•Œ๋กœ ํ•„์š”ํ•˜๊ณ  import FooBar as FB ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ "๊ฐ€์žฅ ๋†€๋ž์ง€ ์•Š์€" ๊ตฌ๋ฌธ์— ๋™์˜ํ•œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋ผ์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” PR์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ƒˆ๋กœ์šด Julia ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ €๋Š” Python๋„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๋กœ R ๋ฐฐ๊ฒฝ์—์„œ ์™”์Šต๋‹ˆ๋‹ค. using ์™€ ๊ฐ™์€ ๋กœ๋“œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ด๋„๋Š” ํŒจํ‚ค์ง€ ๊ณตํ†ต ์ด๋ฆ„ ๊ณต๊ฐ„์— ๋Œ€ํ•œ ๋‚˜์œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ถฉ๋Œ์˜ ์œ„ํ—˜์€ ํ•˜๋‚˜์ด์ง€๋งŒ ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ๊ฐ ๋ฉ”์„œ๋“œ์˜ ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ๋Š์ž„์—†์ด ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ์ •์‹ ์  ๋ถ€๋‹ด์ž…๋‹ˆ๋‹ค.

์ด ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‰ด๋น„๋„ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

์•„๋งˆ๋„ ์‰ฝ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Scheme์— ์ž‘์„ฑ๋œ ํŒŒ์„œ ์ฝ”๋“œ๋ฅผ ํ•ดํ‚นํ•˜๊ณ  AST๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ผ๋ถ€ C ์ฝ”๋“œ๋„ ๊ฑด๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ํ•จ์ˆ˜ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

slack์— ๋Œ€ํ•œ ํ† ๋ก ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์‚ฌ๋žŒ๋“ค์ด ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์„ ํƒํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ํ•จ์ˆ˜์— ๋ฉ”์†Œ๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์ฃผ์˜๋ฅผ ๋œ ๊ธฐ์šธ์ด๊ฒŒ ๋งŒ๋“ค์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,

numpy.sin
sympy.sin

๋‹ค๋ฅธ ํ•จ์ˆ˜๋Š” ์ˆซ์ž ๋ฐ ๊ธฐํ˜ธ ์ž…๋ ฅ ๋ชจ๋‘์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ julia์—์„œ๋„ ํŽธ์˜์„ฑ์œผ๋กœ ์ธํ•ด ๋ณดํŽธํ™”๋œ๋‹ค๋ฉด ๋งŽ์€ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ๋†“์น  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์š”? ์ฆ‰, Lyndon์ด https://www.oxinabox.net/2020/02/09/whycompositionaljulia.html ์— ๊ฒŒ์‹œํ•œ ๊ฒƒ์ฒ˜๋Ÿผ " ์ด๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ•จ๊ป˜ ์ผํ•˜๋„๋ก ์žฅ๋ คํ•ฉ๋‹ˆ๋‹ค "๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋œ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@baggepinnen ๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ทธ ์ ์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Julia์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๋Š” ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ๋™์ผํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๊ฐ€์ ธ์˜ด์œผ๋กœ์จ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

julia> module Foo
           export sin
           sin(s::String) = uppercase(s)
       end
Main.Foo

julia> sin(1)
0.8414709848078965

julia> using .Foo
WARNING: using Foo.sin in module Main conflicts with an existing identifier.

julia> sin("wat")
ERROR: MethodError: no method matching sin(::String)
Closest candidates are:
  sin(::BigFloat) at mpfr.jl:727
  sin(::Missing) at math.jl:1197
  sin(::Complex{Float16}) at math.jl:1145
  ...
Stacktrace:
 [1] top-level scope at REPL[4]:1
 [2] run_repl(::REPL.AbstractREPL, ::Any) at /build/julia/src/julia-1.5.1/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:288

julia> Foo.sin("wat")
"WAT"

์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ์›๋ž˜ ํ•จ์ˆ˜์— ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

julia> Base.sin(s::String) = Foo.sin(s)

julia> sin("wat")
"WAT"

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ๋ชจ๋“ˆ ์•จ๋ฆฌ์–ด์‹ฑ์ด ํ•จ์ˆ˜๊ฐ€ ๋””์ŠคํŒจ์น˜๋˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์†”์งํžˆ ๋งํ•ด์„œ, ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ผ๋ถ€ ํ•จ์ˆ˜๋Š” ๋ณ„๋„์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— _์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค_. ์ˆซ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ find_delta ํ•จ์ˆ˜๋Š” ํŒŒ์ผ diff ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ find_delta ์™€ ๊ด€๋ จ์ด ์—†๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋‹คํ˜•์„ฑ์ด ๋˜์–ด ์ž˜๋ชป๋œ ์ž…๋ ฅ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ฒŒ ๋˜๋ฉด JavaScript ์˜์—ญ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉฐ ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ninjaaron ์œ„์˜ ์šฐ๋ ค ์‚ฌํ•ญ์— ์•ฝ๊ฐ„์˜ ๋‰˜์•™์Šค๋ฅผ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๋ณ€ํ™”๊ฐ€ ์‚ฌ๋žŒ๋“ค์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์„ ํƒํ•˜๋Š” ์ „๋žต ์ด์™ธ์˜ ์–ด๋–ค ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค.
Foo ๊ตฌํ˜„ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๋ฅผ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค.

julia> using .Foo
WARNING: using Foo.sin in module Main conflicts with an existing identifier.

๋‹จ์ˆœํžˆ import .Foo.sin as sin2 ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ๋กœ Base.sin ์— ๋Œ€ํ•œ ์ƒˆ ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹์ œ๊ณตํ•˜๊ณ  ์‹ถ์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์š”์ ์€ ๊ทธ๊ฒƒ๋“ค์„ ๋‹จ์ˆœํžˆ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฌ์›Œ์ง€๋ฉด, ๊ฐ™์€ ๊ธฐ๋Šฅ์˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ๋„ ์ด๊ฒƒ์ด ๋„ˆ๋ฌด ๋„๋ฆฌ ํผ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ์–ด์ƒ‰ํ•œ ํ˜„์žฌ ์ƒํ™ฉ์€ ์‚ฌ๋žŒ๋“ค์ด ์„œ๋กœ ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ค์ œ๋กœ ๊ฐ™์€ ๊ธฐ๋Šฅ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜๋Š” ์ข‹์€ ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ฐ€์งˆ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ์šฐ๋ ค ์‚ฌํ•ญ์ด ์ค‘์š”ํ•œ์ง€ ์—ฌ๋ถ€์กฐ์ฐจ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๊ณ ๋ ค๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ธฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@baggepinnen ๊ทธ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ทธ๊ฒƒ์„ ์ œ๊ธฐํ•˜๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ํ•ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์•จ๋ฆฌ์–ด์‹ฑ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์•จ๋ฆฌ์–ด์‹ฑ์ด ๋” ์‰ฌ์›Œ์ง€๋ฉด ์ด๋ฆ„ ์ถฉ๋Œ์— ๋Œ€ํ•ด _๋ถˆํ‰ํ•˜๋Š”_ ์‚ฌ์šฉ์ž๊ฐ€ ์ค„์–ด๋“ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด API์— ์—„์ฒญ๋‚œ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋ฉด ๋†€๋ž„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ Base์˜ ํ•จ์ˆ˜์— ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹์ถ”๊ฐ€ํ• ์ง€ ์•„๋‹ˆ๋ฉด ๋ณ„๋„๋กœ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ๋„์„œ๊ด€ ์ €์ž๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ninjaaron ํ˜„์žฌ ๊ทœ์น™์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹์œ„ํ•ด ํŠน์ • ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

numpy.sin
sympy.sin

import numpy.sin as np_sin ๋ฅผ ์‚ฌ์šฉ์ž/๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์œ ์ผํ•œ ๊ด€์‹ฌ์‚ฌ๋Š” ๋…ธ์ถœ ๊ธฐ๋Šฅ/์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰