▲neo 8달전 | parent | favorite | on: GN⁺: 고대 세계에서의 서브루틴 호출: 컴퓨터가 스택이나 힙을 갖기 전(devblogs.microsoft.com)Hacker News 의견 "컴퓨터 프로그래밍의 예술" 책에 대한 긍정적인 평가 이 책은 오래되어 보이지만, 힙(heap)이나 스택(stack) 이전의 다양한 동적 배열이나 데이터 구조를 변경하는 알고리즘을 다룸. 책은 가비지 컬렉션과 Lisp 리스트 구현에 대해서도 설명하며, Knuth가 기대하게 만드는 백과사전 같은 지식을 제공함. 두 개의 배열이 하나의 공간을 동적으로 공유하는 방법에 대한 설명 하나의 배열은 위치 #0에서 정상적으로 성장하고, 다른 하나는 위치 #End에서 거꾸로 성장하게 함으로써, 두 배열이 정적으로 할당된 공간을 효율적으로 공유함. 이 방법은 여러 배열에 대해서 확장될 수 있지만, 그 지점에서는 Malloc과 Realloc을 사용하는 것이 더 나을 수 있음. ALGOL 언어에 재귀 함수를 도입하는 것이 논란의 여지가 있었던 재미있는 이야기 링크 제공 재귀가 프로그래밍 언어에 어떻게 도입되었는지에 대한 흥미로운 역사를 담은 이야기를 링크를 통해 공유함. SUBLEQ 머신과 비트-직렬 머신을 위한 Forth 인터프리터 작성 경험 공유 이 두 머신은 Forth의 필수 요소인 함수 호출 스택을 가지고 있지 않음. SUBLEQ는 간접 로딩과 저장을 허용하지 않으며, 비일상적인 작업을 수행하기 위해 자기 수정 코드가 필요함. 가상 머신을 구축하여 이러한 기능을 수행하고, 협력적 멀티스레딩을 지원함. 필요한 경우 힙은 Forth로 작성되며, 소프트웨어 함수로 구현된 부동 소수점 연산도 포함됨. PDP-8 프로세서의 서브루틴 호출과 관련된 기술적 진화에 대한 설명 초기에는 JMS 명령어가 함수의 첫 번째 단어에 반환 주소를 저장함. 후에는 자동 증가 위치를 사용하여 간단한 스택을 만들고, 함수 프롤로그/에필로그가 이 스택을 수동으로 관리하여 완전한 재귀를 가능하게 함. 나중에는 하드웨어 스택이 마이크로프로세서 구현에 추가되어 성능을 향상시킴. 함수형 프로그래밍 경험을 오랫동안 한 사용자의 재귀에 대한 선호도 공유 재귀 알고리즘을 반복 알고리즘으로 변환하는 방법을 알고 있지만, 재귀를 선호함. 대부분의 경우 재귀가 충분히 빠르며, 컴파일러가 꼬리 재귀를 지원하면 더욱 그러함. 커먼도어 64 게임을 해킹하면서 과거에 어떻게 프로그래밍이 이루어졌는지 배우려고 노력함. 1991년경 RS232 시리얼 멀티플렉서 설계 경험 공유 Z80 프로세서, EPROM, Z80-SIO 시리얼 장치를 사용한 하드웨어 설계. 스택이 없어서 함수 호출을 위해 레지스터 쌍에 반환 주소를 사전 로드하는 방식을 사용함. 힙이 확장 가능하기 전 프로그래머들이 입력의 가능한 분포를 고려하고 중간 저장소의 크기를 적절히 설정해야 했던 과거 상황에 대한 언급 이로 인해 "버그와 한계"가 발생했음. 재귀를 사용할 수 없었던 시절, 꼬리 재귀는 가능했던 점에 대한 설명 초기 호출에 사용된 branch_with_link 이외에는 일반 분기를 사용해야 했음. Enhanced GNU Awk에서 함수 외부에 있는 @let 블록에 대해 컴파일러가 비밀 글로벌 변수를 할당하는 방식 설명 이러한 변수들은 가능한 한 많이 재사용됨. "Goto considered harmful" 논문의 세계를 묘사하는 포스트에 대한 언급 대부분의 사람들은 제목만 알고 있으며, 논문은 서브루틴에 단일 진입점을 제공하는 것에 대해 주장함. 때때로 어셈블리 코드를 다른 서브루틴으로 넘어가게 작성하지만, 모든 어셈블리 코드가 그렇게 되길 원하지는 않음.
Hacker News 의견
"컴퓨터 프로그래밍의 예술" 책에 대한 긍정적인 평가
두 개의 배열이 하나의 공간을 동적으로 공유하는 방법에 대한 설명
ALGOL 언어에 재귀 함수를 도입하는 것이 논란의 여지가 있었던 재미있는 이야기 링크 제공
SUBLEQ 머신과 비트-직렬 머신을 위한 Forth 인터프리터 작성 경험 공유
PDP-8 프로세서의 서브루틴 호출과 관련된 기술적 진화에 대한 설명
함수형 프로그래밍 경험을 오랫동안 한 사용자의 재귀에 대한 선호도 공유
1991년경 RS232 시리얼 멀티플렉서 설계 경험 공유
힙이 확장 가능하기 전 프로그래머들이 입력의 가능한 분포를 고려하고 중간 저장소의 크기를 적절히 설정해야 했던 과거 상황에 대한 언급
재귀를 사용할 수 없었던 시절, 꼬리 재귀는 가능했던 점에 대한 설명
branch_with_link
이외에는 일반 분기를 사용해야 했음.Enhanced GNU Awk에서 함수 외부에 있는 @let 블록에 대해 컴파일러가 비밀 글로벌 변수를 할당하는 방식 설명
"Goto considered harmful" 논문의 세계를 묘사하는 포스트에 대한 언급