L4 fn

1. def vs fn

def (🔥, 🐍)

  • python의 def는 다이나믹하고 유동성이 강한 함수를 정의하는 방법으로 속도에서 한계를 지닌다.
  • def는 모든 인자를 복사하여 받기 때문에 자유롭게 사용할 수 있으나, 외부에 영향을 주지 않는다. (Mojo, Python 동일 개념)

    fn (🐍)

  • 이를 보완하기 위해 Mojo에서는 fn를 사용하는데, 이는 유동성과 다이나믹함을 일부 포기하고 속도를 높이는 방법이다.
  • fn의 내부로 전달되는 인자는 기본적으로 immutable(불변)이기 때문에, 외부의 변수를 그대로 가져오나 기본적으론 immutable type이다.
  • immutable함의 강점을 살리기 위해 Ownership 개념([[L5 Ownership 🔥]])을 사용한다.
그러므로, Mojo의 강점을 살리기 위해서는 fn을 사용하는 것이 좋다. 그러나, 파이썬과의 높은 호환성을 위해 def를 사용할 수도 있다.
fn func1():
	print("func1")

@strict
def func2():
	# fn이 이 표현방식을 Mojo에서 간단하게 변경한 것
	print("func2")

def func3():
	print("func3")

2. 기능 차이

  1. def는 fn이 제공하는 모든 기능을 지원함 (높은 호환성)
  2. fn은 def에 비해 가지는 제약사항이 있음 (높은 속도)
    • 제약1. fn은 기본적으로 immutable(변경 불가능, borrowed)를 통해 데이터를 받아 높은 속도와 메모리 효율을 보장함. 실수를 방지하기 위해 immutable을 사용함.
    • 제약2. self를 제외한 모든 인자의 타입을 명시해야함. return의 경우, ->를 통해 명시하지 않으면 None으로 자동으로 처리함.
    • 제약 3. fn 내부에서 정의되는 모든 변수들은 let, var를 통해 mutable여부를 명시해야함.
    • 제약 4. fn, def 모두 exception을 지원하나, fn의 경우 raises를 통해 명시해야함.
      이러한 제약이 불편함에도 불구하고 빠른 속도와 메모리 효율성, 파이썬의 다양한 프로그래밍 패턴으로 인한 실수 및 협업의 어려움을 방지하기 위해 제약을 두고 있음.

Copyright © 2023 Junseo Ko. 본 내용은 모두 제가 작성한 도큐먼트입니다. 무단 퍼가기와 재생산을 금지합니다. 문의: piglets.frizzle0v@icloud.com