Skip to content

load28/awesome_rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Rustλ₯Ό κ³΅λΆ€ν•˜λŠ” 이유

Rustλ₯Ό κ³΅λΆ€ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

  1. κ°•λ ₯ν•œ νƒ€μž… μ‹œμŠ€ν…œμ— λŒ€ν•œ 탐ꡬ (Some, Option)
  • rustλŠ” Some, Option ν‚€μ›Œλ“œμ—μ„œ 보듯이 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž¨μ„ μ§€μ›ν•˜λŠ” κ°•λ ₯ν•œ νƒ€μž…μ‹œμŠ€ν…œμ„ κ°€μ§€κ³  μžˆλ‹€, 이λ₯Ό ν†΅ν•΄μ„œ λŸ°νƒ€μž„μ— μ•ˆμ „ν•œ λ™μž‘μ„ 보μž₯ν•œλ‹€
  1. λ©”λͺ¨λ¦¬ 접근에 λŒ€ν•œ 탐ꡬ (stack, heap)
  • Cμ–Έμ–΄ λ³΄λ‹€λŠ” νŽΈλ¦¬ν•˜μ§€λ§Œ, μžλ°”μŠ€ν¬λ¦½νŠΈ λ³΄λ‹€λŠ” μ§μ ‘μ μœΌλ‘œ λ©”λͺ¨λ¦¬μ— μ ‘κ·Ό ν•  수 μžˆλ‹€. 예둜 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적인 λ²‘ν„°λ§Œ μ§€μ›ν•˜λŠ”λ° λ°˜ν•΄, RustλŠ” 동적과 정적 μ‚¬μ΄μ¦ˆμ˜ νƒ€μž…λ„ 같이 μ§€μ›ν•œλ‹€.
  1. λͺ¨λ“ˆν™”에 λŒ€ν•œ 탐ꡬ (mod)
  • RustλŠ” 기본적으둜 λͺ¨λ“ˆν™”λ₯Ό ꡬ성을 μ „μ œλ‘œ μ„€κ³„λ˜μ—ˆλ‹€. modλΌλŠ” 파일이 λͺ¨λ“ˆμ˜ μ§„μž…μ μœΌλ‘œμ„œ μ—¬λŸ¬ λͺ¨λ“ˆλ“€μ„ λ§Œλ“€κ³  메인 λͺ¨λ“ˆμ—μ„œ μ‚¬μš© ν•  수 μžˆλ„λ‘ λͺ¨λ“ˆ μ‹œμŠ€ν…œμ΄ κ°–μ³μ€˜ μžˆλ‹€

μŠ€νƒκ³Ό νž™μ— λŒ€ν•œ 러슀트 곡식 자료

λ„ˆλ¬΄λ‚˜ μ€‘μš”ν•˜λ‹€. 항상 κΈ°μ–΅ν•˜μž

μŠ€νƒκ³Ό νž™ λ§Žμ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ“€ μ•ˆμ—μ„œ, μš°λ¦¬λŠ” κ·Έλ ‡κ²Œ 자주 μŠ€νƒκ³Ό νž™μ— λŒ€ν•œ 생각을 ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. κ·Έλ ‡μ§€λ§Œ λŸ¬μŠ€νŠΈμ™€ 같은 μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ”, 값이 μŠ€νƒμ— μžˆλŠ”μ§€ νž™μ— μžˆλŠ”μ§€μ˜ μ—¬λΆ€κ°€ μ–Έμ–΄μ˜ λ™μž‘ 방식과 우리의 결단에 더 큰 영ν–₯을 μ€λ‹ˆλ‹€. μš°λ¦¬λŠ” 이 μž₯의 λ’€μͺ½μ—μ„œ μŠ€νƒκ³Ό νž™μ— κ΄€κ³„λœ μ†Œμœ κΆŒμ˜ 일뢀뢄을 κΈ°μˆ ν•  것이기에, μ—¬κΈ°μ„œλŠ” μ€€λΉ„ μ‚Όμ•„ κ°„λž΅ν•œ μ„€λͺ…λ§Œ ν•˜κ² μŠ΅λ‹ˆλ‹€.

μŠ€νƒκ³Ό νž™ λ‘˜λ‹€ μ—¬λŸ¬λΆ„μ˜ μ½”λ“œμƒμ—μ„œ λŸ°νƒ€μž„μ— μ‚¬μš©ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬μ˜ λΆ€λΆ„μž…λ‹ˆλ‹€λ§Œ, 이듀은 각기 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ ꡬ쑰화 λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μŠ€νƒμ€ 값을 받아듀인 μˆœμ„œλŒ€λ‘œ 값을 μ €μž₯ν•˜κ³  λ°˜λŒ€ λ°©ν–₯으둜 값을 μ§€μ›λ‹ˆλ‹€. 이것을 last in, first out이라고 ν•˜μ£ . μŒ“μ—¬μžˆλŠ” μ ‘μ‹œλ₯Ό μƒκ°ν•΄λ³΄μ„Έμš”; μ—¬λŸ¬λΆ„μ΄ μ ‘μ‹œλ₯Ό 더 μΆ”κ°€ν•˜λ €λ©΄ μ ‘μ‹œλ”λ―Έμ˜ κΌ­λŒ€κΈ°μ— μŒ“μ•„μ˜¬λ¦¬κ³ , μ—¬λŸ¬λΆ„μ΄ μ ‘μ‹œκ°€ ν•„μš”ν•΄μ§€λ©΄ κΌ­λŒ€κΈ°μ—μ„œλΆ€ν„° ν•œμž₯ κΊΌλ‚΄κ²Œ λ©λ‹ˆλ‹€. μ€‘κ°„μ΄λ‚˜ λ°‘μ—μ„œλΆ€ν„° μ ‘μ‹œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜λŠ” 건 잘 μ•ˆλ κ²λ‹ˆλ‹€! 데이터λ₯Ό μΆ”κ°€ν•˜λŠ” 것을 μŠ€νƒμ— ν‘Έμ‹œν•˜κΈ° (pushing on the stack)라고 λΆ€λ₯΄κ³ , 데이터λ₯Ό μ œκ±°ν•˜λŠ” 것을 μŠ€νƒμ„ νŒν•˜κΈ° (popping off the stack)라고 λΆ€λ¦…λ‹ˆλ‹€.

μŠ€νƒμ€ 데이터에 μ ‘κ·Όν•˜λŠ” 방식 덕택에 λΉ λ¦…λ‹ˆλ‹€: 이 방식은 μƒˆλ‘œμš΄ 데이터λ₯Ό 넣어두기 μœ„ν•œ 곡간 ν˜Ήμ€ 데이터λ₯Ό κ°€μ Έμ˜¬ 곡간을 검색할 ν•„μš”κ°€ μ „ν˜€ μ—†λŠ”λ°, λ°”λ‘œ κ·Έ 곡간이 항상 μŠ€νƒμ˜ κΌ­λŒ€κΈ°(top)이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μŠ€νƒμ„ λΉ λ₯΄κ²Œ ν•΄μ£ΌλŠ” λ˜λ‹€λ₯Έ νŠΉμ„±μ€ μŠ€νƒμ— λ‹΄κΈ΄ λͺ¨λ“  데이터가 κ²°μ •λ˜μ–΄ μžˆλŠ” κ³ μ •λœ 크기λ₯Ό κ°–κ³  μžˆμ–΄μ•Ό ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€.

컴파일 νƒ€μž„μ— 크기가 κ²°μ •λ˜μ–΄ μžˆμ§€ μ•Šκ±°λ‚˜ 크기가 변경될 수 μžˆλŠ” 데이터λ₯Ό μœ„ν•΄μ„œλŠ”, νž™μ— 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νž™μ€ 쑰금 더 λ³΅μž‘ν•©λ‹ˆλ‹€: 데이터λ₯Ό νž™μ— λ„£μ„λ•Œ, λ¨Όμ € μ €μž₯ν•  곡간이 μžˆλŠ”μ§€ λ¬Όμ–΄λ΄…λ‹ˆλ‹€. 그러면 μš΄μ˜μ²΄μ œκ°€ μΆ©λΆ„νžˆ μ»€λ‹€λž€ νž™ μ•ˆμ˜ 빈 μ–΄λ–€ 지점을 μ°Ύμ•„μ„œ 이 곳을 μ‚¬μš©μ€‘μ΄λΌκ³  ν‘œμ‹œν•˜κ³ , ν•΄λ‹Ή μ§€μ μ˜ 포인터λ₯Ό μš°λ¦¬μ—κ²Œ 돌렀주죠. 이 절차λ₯Ό νž™ 곡간 ν• λ‹Ήν•˜κΈ°(allocating on the heap)라고 λΆ€λ₯΄κ³ , μ’…μ’… κ·Έλƒ₯ "ν• λ‹Ή(allocating)"으둜 쀄여 λΆ€λ¦…λ‹ˆλ‹€. μŠ€νƒμ— 포인터λ₯Ό ν‘Έμ‹±ν•˜λŠ” 것은 할당에 ν•΄λ‹Ήλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν¬μΈν„°λŠ” κ²°μ •λ˜μ–΄ μžˆλŠ” κ³ μ •λœ 크기의 κ°’μ΄λ―€λ‘œ, μš°λ¦¬λŠ” μŠ€νƒμ— 포인터λ₯Ό μ €μž₯ν•  수 μžˆμ§€λ§Œ, μ‹€μ œ 데이터λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•  λ•ŒλŠ” 포인터λ₯Ό 따라가야 ν•©λ‹ˆλ‹€.

νž™μ— μ €μž₯된 데이터에 μ ‘κ·Όν•˜λŠ” 것은 μŠ€νƒμ— μ €μž₯된 데이터에 μ ‘κ·Όν•˜λŠ” 것보닀 느린데, κ·Έ μ΄μœ λŠ” 포인터가 가리킨 곳을 따라가야 ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ν˜„λŒ€ ν”„λ‘œμ„Έμ„œλ“€μ€ λ©”λͺ¨λ¦¬ λ‚΄λΆ€λ₯Ό 덜 뛰어닀닐 λ•Œ 더 λΉ¨λΌμ§‘λ‹ˆλ‹€. μœ μ‚¬ν•œ 예둜, μ—¬λŸ¬ ν…Œμ΄λΈ”λ‘œλΆ€ν„° 주문을 λ°›λŠ” λ ˆμŠ€ν† λž‘μ˜ 웨이터λ₯Ό μƒκ°ν•΄λ³΄μ„Έμš”. λ‹€μŒ ν…Œμ΄λΈ”λ‘œ 움직이기 전에 μ§€κΈˆ ν…Œμ΄λΈ”μ—μ„œ λͺ¨λ“  주문을 λ‹€ λ°›λŠ” 것이 κ°€μž₯ 효율적이겠죠. A ν…Œμ΄λΈ”μ—μ„œ ν•˜λ‚˜ μ£Όλ¬Έ λ°›κ³ , λ‹€μ‹œ B ν…Œμ΄λΈ”λ‘œ κ°€μ„œ ν•˜λ‚˜ μ£Όλ¬Έ λ°›κ³ , λ‹€μ‹œ A둜, λ‹€μ‹œ B둜 κ°€λ©° ν•˜λ‚˜μ”© 주문을 λ°›μœΌλ©΄ 훨씬 느렀질 κ²λ‹ˆλ‹€. 이와 λ§ˆμ°¬κ°€μ§€λ‘œ, ν”„λ‘œμ„Έμ„œλŠ” (νž™μ— μžˆλŠ” 데이터와 같이) 멀리 λ–¨μ–΄μ Έ μžˆλŠ” 데이터듀 λ³΄λ‹€λŠ” (μŠ€νƒμ— μžˆλŠ” 것과 같이) λΆ™μ–΄μžˆλŠ” 데이터듀에 λŒ€ν•œ μž‘μ—…μ„ ν•˜λ©΄ 더 λΉ¨λΌμ§‘λ‹ˆλ‹€. νž™μœΌλ‘œλΆ€ν„° 큰 곡간을 ν• λ‹Ήλ°›λŠ”κ²ƒ λ˜ν•œ μ‹œκ°„μ΄ 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œμ˜ μ–΄λŠ 뢀뢄이 νž™μ˜ μ–΄λ–€ 데이터λ₯Ό μ‚¬μš©ν•˜λŠ”μ§€ μΆ”μ ν•˜λŠ” 것, νž™μ˜ μ€‘λ³΅λœ λ°μ΄ν„°μ˜ 양을 μ΅œμ†Œν™”ν•˜λŠ” 것, 그리고 νž™ 내에 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 데이터λ₯Ό μ œκ±°ν•˜μ—¬ 곡간이 λͺ¨μžλΌμ§€ μ•Šκ²Œ ν•˜λŠ” 것은 λͺ¨λ‘ μ†Œμœ κΆŒκ³Ό κ΄€κ³„λœ λ¬Έμ œλ“€μž…λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ΄ μ†Œμœ κΆŒμ„ μ΄ν•΄ν•˜κ³  λ‚˜λ©΄, μ—¬λŸ¬λΆ„μ€ 더이상 μŠ€νƒκ³Ό νž™μ— λŒ€ν•œ 생각이 자주 ν•„μš”μΉ˜ μ•Šκ²Œ λ κ²λ‹ˆλ‹€λ§Œ, νž™ 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” 것이 κ³§ μ†Œμœ κΆŒμ˜ 쑴재 μ΄μœ μž„μ„ μ•Œκ²Œ λ˜λŠ” 것은 이것이 μ–΄λ–€ λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ μ„€λͺ…ν•˜λŠ”λ° 도움을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages