Skip to content

load28/awesome_rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

105b4e9 Β· May 8, 2024

History

11 Commits
Feb 20, 2021
May 8, 2024
Oct 26, 2020
Apr 27, 2024
Apr 27, 2024
Oct 26, 2020
Oct 31, 2020

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

Languages