추상 위키백과/업데이트/2023-09-27
◀ | 추상 위키백과 업데이트 | ▶ |
유형에 대한 직렬 변환기 및 역직렬 변환기
지난 주에 우리는 유형에 대한 렌더러와 파서를 추가하려는 계획에 대해 논의했습니다. 이번 주에는 직렬 변환기와 역직렬 변환기 및 위키함수에서의 역할에 대해 논의하여 유형을 더 쉽게 사용하는 방법에 대한 주제를 계속할 것입니다.
적절한 유형이 있으면 네이티브 코드 함수를 작성하는 것이 정말 쉬울 수 있습니다. 예를 들어, 불리언과 문자열에 대한 유형이 이미 있으므로 그리고 우리는 이를 시스템에서 파이썬 및 자바스크립트의 불리언 및 문자열의 기본 개념으로 변환합니다. 즉, 불 논리곱(and) 또는 문자열 결합과 같은 함수에 대한 코드 구현을 작성하는 것이 다소 간단하며 함수에 패키지된 코드 한 줄이면 됩니다.
- 그리고 파이썬에서는
- 그리고 자바스크립트에서는
- 파이썬에서 문자열 결합
- 자바스크립트에서 문자열 결합 (그리고 concat 또는 join을 사용하는 대안)
위키함수 베타에서 우리는 이미 숫자나 날짜와 같은 몇 가지 유형의 생성을 확인했습니다. 그러나 숫자 덧셈이나 제곱과 같은 유사한 기본 함수에 대한 구현은 결코 간단하지 않으며 한 줄의 코드보다 훨씬 더 많습니다:
왜 그렇게 되죠?
베타 클러스터 버전에서 파이썬의 추가 기능 구현은 다음과 같습니다:
def Z10118(Z10118K1, Z10118K2):
def deserialize(x):
return int(x.Z10015K1)
def serialize(x):
return ZObject({"Z1K1":"Z9", "Z9K1":"Z10015"}, Z10015K1=str(x))
left = deserialize(Z10118K1)
right = deserialize(Z10118K2)
result = left + right
return serialize(result)
구현은 다음과 같습니다:
def Z10118(Z10118K1, Z10118K2):
return Z10118K1 + Z10118K2
위 구현의 핵심이 바로 그 일입니다. 11행에서 파이썬 + 연산자가 호출되는 것을 볼 수 있습니다. 하지만 그 외에도 입력 인수를 역직렬화하고 출력을 직렬화하는 코드도 필요합니다. 즉, 위키함수가 작동하는 ZObject를 파이썬의 int 유형 값(3행에서 발생)으로 바꾸고 다시 ZObject(6행에서 발생)로 전환해야 합니다.
위키함수가 양의 정수 유형이 파이썬 3의 int 유형으로 완전히 표현될 수 있다는 것을 알았다면 시스템 내부에서 해당 변환을 자동으로 수행할 수 있었을 것입니다. 그러나 우리는 유형이 유연하고 궁극적으로 위키에서 커뮤니티가 완전히 제어할 수 있기를 원합니다. 그리고 이는 또한 그러한 변환을 수행하거나 시스템이 유형을 알아야 하는 위키함수 시스템에 어떤 마법도 내장해서는 안 된다는 것을 의미합니다.
이 문제를 해결하기 위한 계획 방법은 다음과 같습니다(지금이 의견을 제시할 적절한 시기입니다):
우리는 두 가지 새로운 유형의 특수 객체인 직렬 변환기와 역직렬 변환기를 소개합니다. 역직렬 변환기는 특정 프로그래밍 언어 및 위키함수 소스 유형에 연결되며, 소스 유형의 ZObject를 가져와 해당 프로그래밍 언어의 대상 기본 유형 값으로 변환하는 코드가 연결되어 있습니다. 직렬 변환기는 그 반대입니다.
예를 들어, 파이썬과 함께 사용할 때 위키함수 정수 유형을 기본 BigNum으로 변환하는 역직렬 변환기가 있을 수 있습니다(int에 맞더라도). 그리고 파이썬의 직렬 변환기는 기본 파이썬 int와 BigNum을 모두 위키함수 정수 유형 인스턴스로 변환하는 방법을 이해합니다.
이제 네이티브 코드를 실행하려고 할 때마다 네이티브 코드 실행을 담당하는 코드 조각인 평가자는 직렬 변환기 및 역직렬 변환기와 관련된 코드도 실행해야 합니다. 즉, 위의 두 구현 간의 차이를 구성하는 모든 추가 코드는 위키함수에 의해 자동으로 처리됩니다.
각 유형과 언어에 대해 정확히 하나의 역직렬 변환기와 직렬 변환기가 있습니다. 그런 다음 함수에 대한 기본 구현을 작성할 때 함수의 유형을 조회하고 해당 프로그래밍 언어에서 해당 유형에 적합한 직렬 변환기 및 역직렬 변환기를 찾습니다.
이 계획에 대한 아이디어나 의견이 있으면 알려주십시오!
10월 자원봉사 코너
다음달 자원봉사 코너는 다음주 10월 2일 월요일입니다. 우리는 다양한 사람들이 참석할 수 있도록 시대에 따라 조금씩 플레이하고 있습니다. 또한 Jit.si의 반복적인 문제로 인해 현재 다시 구글 미트로 전환하고 있습니다.
지속적인 개선을 위해 시간과 플랫폼에 대한 피드백을 보내주세요.
우리는 2023년 10월 2일 13:30 UTC에 구글 미트에서 회의를 가질 예정입니다.
회의 안건은 발생하는 모든 질문을 처리한 후 함께 함수를 수행하는 것입니다.
9월 자원봉사코너 녹화
또한 9월 자원봉사코너 녹화본을 공용에 업로드했습니다. 우리는 c문자열이 유효한 양의 정수인지 확인하는 함수를 함께 작업하고 있었습니다. 위키함수에서 함께 함수를 구축하고, 사람들이 테스터를 만들도록 하고, 함수와 그 한계에 대해 실시간으로 논의하는 것은 정말 즐거웠습니다!