추상 위키백과/업데이트/2021-01-21
◀ | 추상 위키백과 업데이트 | ▶ |
- 이번 주 뉴스 레터는 다른 뉴스보다 좀 더 기술적인 내용입니다.
- 주요 콘텐츠로 이동하기 전에 알립니다: 로고 개념 제출이 현재 열려 있습니다! 이미 6개의 로고 제안이 이루어졌고, 각각 볼만한 가치가 있습니다. 더 많은 제안이 나오기를 바랍니다. 제출 마감일은 2월 16일입니다.
현재 작성된 공식적인 함수 모델은 전체 함수 모델이 이미 구현되어 있다고 가정합니다. 특히, 일반적으로 다른 유형에 의해 매개 변수화된 유형을 의미하는 제너릭 유형에 의존합니다.
파라메트릭 유형의 예는 무엇인가요? 목록 유형을 살펴 보겠습니다.
목록은 정렬된 일련의 요소입니다. 이러한 요소의 유형은 무엇입니까? 무엇이든 될 수 있습니다! 목록에 있는 요소의 유형을 알 필요없이 수행 할 수 있는 많은 작업이 목록에 있습니다. 목록의 첫 번째 요소를 가져 오거나 목록의 요소 순서를 반대로 하거나 목록에서 모든 두 번째 요소를 가져 오거나 훨씬 더 많이 가져올 수 있습니다.
이러한 목록의 첫 번째 요소를 출력하는 함수가 반환하는 항목의 유형은 무엇입니까? 당신은 알 수 없습니다. 목록의 요소는 모든 유형이 될 수 있으므로 첫 번째 요소를 출력하는 함수의 반환 유형도 모든 유형이 될 수 있습니다.
이제 "목록"이라는 단일 유형을 갖는 대신 "문자열 목록", "숫자 목록" 또는 "불리언 목록"과 같은 유형을 가질 수도 있습니다. 또는 더 복잡한 "문자열 목록"입니다. 모든 종류의 요소 목록을 가질 수도 있고 한 번에 여러 종류를 가질 수도 있습니다. 이제 "문자열 목록"의 첫 번째 요소를 반환하는 함수가 있는 경우 해당 함수의 반환 유형이 항상 문자열이라는 것을 알고 있습니다. 형식 안전성이 더 높고 문자열이 있어야한다는 것을 알고 있기 때문에 코드 작성 도구가 함수 및 함수 호출을 작성할 때 훨씬 더 나은 지침을 제공하도록 할 수 있습니다. 다른 유형의 요소가 팝업되는 경우를 확인할 필요가 없기 때문에 함수를 작성하는 것이 더 쉽습니다.
그러나 다른 한편으로는 갑자기 더 많은 새로운 유형이 필요합니다.
이론적으로는 무한한 수의 특수 유형입니다. 그리고 이러한 각 유형에 대해 해당 유형을 처리하는 모든 특수 함수가 필요하여 함수 수가 폭발적으로 증가합니다. 확인하고 작성해야 할 코드가 너무 많고 모든 것이 매우 유사하기 때문에 유지 관리 작업은 악몽이 될 것입니다.
이를 피하기 위해 필요한 유형과 함수를 생성하고 목록의 요소 유형을 인수로 취하는 함수를 작성할 수 있습니다. 따라서 "문자열 목록" 유형을 갖는 대신 단일 인수가 있는
list(string)
이라고 하는 함수를 사용하고list(string)
을 호출할 수 있으며 즉석에서 목록인 유형이 됩니다. 그 요소는 문자열입니다. 또는list(integer)
을 호출하면 요소가 정수인 목록을 얻을 수 있습니다.
함수도 마찬가지입니다: 문자열 목록에서만 작동하고 문자열을 반환하는 함수 "first"를 갖는 대신 "string" 유형을 인수로 취하고 문자열 목록에서 문자열 목록에서 작동하고 문자열을 반환하는 함수를 반환하는 함수가 있습니다. 모든 종류의 목록에 대해 "first" 함수를 작성하는 대신 이러한 함수를 만든 다음 필요할 때 호출하는 함수를 작성합니다.
조작해야하는 입력된 입력의 차원이 유형이 아닌 숫자에 의해 제한되는 상황도 있습니다.
더 복잡한 예를 들어, 행렬 곱셈을 수행하는 방법이 있다면 첫 번째 입력 행렬의 열 수와 두 번째 입력 행렬의 행 수가 일치해야합니다. 거기에서 행렬을 만들기 위해 유형(예를 들어, 부동 소수점 숫자)을 사용하는 대신, 최상위 유형 함수는 행과 열의 수로 두 개의 정수를 사용합니다. 그런 다음이 메서드를
matrix(float, 4, 3)
로 호출 할 수 있습니다.유사하게, 지구 기반 지상 위치 정보는 일반적으로 2차원 각도와 선택적으로 고도 중 하나에 의해 전달됩니다. 전자의 경우
tuple(float, 2)
, 후자의 경우tuple(float, 3)
가 있을 수 있습니다.위키함수 공동체가 위치 유형을 모델링하기로 결정하는 정확한 방법은 그들에게 달려 있습니다 – 유형을 결정할 때 행성체와 데이텀, 각 차원의 정확도 또는 기타 데이터를 명시적으로 지정할 수도 있습니다. 편집자들이 필요하거나 원하는 것을 표현할 수있는 유연성을 제공할 수 있도록 하기만 하면됩니다. 지리 좌표와 같은 일반적인 유형은 위키에서 이름이 지정된 유형으로 생성될 가능성이 높지만 구조는 항상 즉석에서 생성 될 수 있습니다.
이 아이디어는 틀과 개념, 매개변수 다형성, 제네릭 함수 및 데이터 유형 등과 같은 다양한 프로그래밍 언어에서 다양한 이름과 구체적인 실현을 가지고 있습니다. 우리의 목적을 위해 이것을 제네릭이라고 부르며, 현재 제타(ζ) 단계에서 구현될 예정입니다.
이제 문제는 현재 설명된 함수 모델이 제네릭에 크게 의존한다는 것입니다. 하지만 제자리에 놓이기 전까지는 실제로 사용할 수 없습니다. 그래서 우리는 지금 우리가 구현하고 있는 정확한 함수 모델이 어디에도 지정되어 있지 않고, 현재 구현 상태와 최종적으로 끝나고자 하는 위치를 기반으로 즉석에서 조정하는 일종의 림보에 있습니다.
이를 지원하기 위해 명시적인 프리-제네릭 함수 모델을 게시하고 있습니다. 이것은 또한 현재의 모델을 설명하는 것이 아니라 감마(γ) 단계의 끝까지 대부분 구현할 모델이므로 현재 위키에서 설명한 최종 함수 모델보다 훨씬 더 즉시 유용합니다. 그런 다음 제네릭을 지원하기 위해 돌아 다니면 사전 제네릭 함수 모델에서 전체 함수 모델로 전환할 것입니다. 프리-제네릭 함수 모델과 여기에 제시된 계획에 대한 의견과 제안은 언제나처럼 환영합니다.
위키백과의 배경 문서:
그리고 진행중인 로고 개념 제안 콘테스트를 기억하세요!