- 강의 영상에 대한 질문이 있으시면, 상세히 문의를 작성해주시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 (이외의 문의는 평생 강의이므로 양해를 부탁드립니다.) - 강의 답변이 도움이 안되셨다면, dream@fun-coding.org 로 메일 주시면 24시간 내에 재검토하겠습니다. - 괜찮으시면 질문전에 챗GPT 와 구글 검색을 꼭 활용해보세요~ - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요 좋은 강의 재밌게 잘 시청하고 있습니다 V8에서 undefined, null 그리고 string을 어떻게 관리할까? 강의를 보다가 V8 문서를 찾아보게 되었습니다 영어로 된 문서를 번역을 해서 질문하는 글 이기에 번역이 어색하거나 틀릴 수 있으며, 전체 내용을 담지는 않았습니다! 강의 4분 26초에 LOAD_ROOT 함수 부분을 설명하시면서 힙 상수를 찾고 있다고 설명해주셨습니다 그 후 다음 단계에서 캐시를 하고 힙 상수를 찾고, 만약 해당 위치가 존재한다면 해당 위치를 반환하고, 그 위치가 없다면 새로운 힙 상수를 생성하고 캐싱을 한다고 해주셨습니다 그래서 실제로 저희가 자바스크립트에서 undefined를 사용할 때마다 캐싱해두었던 그 값을 찾기 때문에 해당 위치에 접근하여 사용할 수 있다 라고 이해를 했습니다 여기서 추가적으로 궁금했던것이 V8 문서를 보면, undefined , true 등 자바스크립트의 핵심 객체들은 반드시 먼저 존재해야 하고, read-only heap에 존재한다고 합니다 V8은 이들을 immovable immutable roots 라고 부른다고 합니다 정의되지 않은 객체의 주소를 참조하기 위해 찾아볼 필요 없이, 포인터가 0x61 이런식으로 끝나는지만 확인한다면, 정의가 되었는지, 되지 않았는지 알 수 있다면 좋을 것 같다 이것이 V8의 static root 를 달성하는 것이다 라고 설명되어 있습니다 지속적으로 사용되는 것들이기에 빠른 접근이 필수적이며, V8은 컴파일 시점에 이들을 생성한다고 나와있습니다 읽기 전용 힙을 모든 포인터 compression cage의 시작 부분에 배치하여 알려진 위치를 제공하며, 예를 들어 V8의 힙에 있는 모든 객체 중에서 undefined는 항상 가장 작은 압축 주소를 가지며, 0x61 바이트에서 시작한다고 합니다 V8을 컴파일 하기 위해서는 먼저 mksnapshot 이라는 V8 바이너리를 컴파일을 진행을 하고, 결과물로는 read-only heap 내의 모든 객체의 cage base 주소를 포함한다고 합니다 두 번째 단계로 libv8을 다시 컴파일하여, 플래그를 통해서 undefined를 참조할 때마다 문자 그대로 cage_base + StaticRoot::kUndefined 을 사용하도록 보장한다고 나와있습니다 d8이 실행되면 모든 read-only 객체는 메모리에서 고정된 위치를 가지며, 절대 이동하지 않는다고 합니다 이를 통해 d8 바이너리에서 undefined의 압축 주소가 0x61로 하드코딩되도록 만든다고 합니다 이 글을 읽으면서 들었던 생각은 위 과정을 통해 "undefined 같은 기본 객체들의 cage base로부터의 오프셋이 컴파일 시점에 결정 되어 있어서, 런타임에 배열에서 찾아볼 필요 없이 cage_base + 0x61 같은 계산식으로 바로 접근 할 수 있다" 라고 이해를 했습니다 여기서 컴파일 시점에 결정된 주소 라는 것이 4분 26초부터 말씀해주신 캐시 과정이 포함되는 것이 맞을까요? 아니면 강의 내용과는 상관이 없는 내용일까요? 참고한 글 링크는 아래에 걸어두겠습니다! https://v8.dev/blog/static-roots
ESLint server is starting. 2025-10-31 16:07:45.117 [info] ESLint server running in node v22.19.0 2025-10-31 16:07:45.120 [info] ESLint server is running. 2025-10-31 16:07:46.021 [info] ESLint library loaded from: /Users/ijinseob/learn-typescript/node_modules/eslint/lib/api.js 2025-10-31 16:07:46.026 [error] An unexpected error occurred: 2025-10-31 16:07:46.026 [error] Error: Could not find config file. at assertConfigurationExists (/Users/ijinseob/learn-typescript/node_modules/eslint/lib/config/config-loader.js:80:17) at LegacyConfigLoader.loadConfigArrayForFile (/Users/ijinseob/learn-typescript/node_modules/eslint/lib/config/config-loader.js:414:3) at async ESLint.lintText (/Users/ijinseob/learn-typescript/node_modules/eslint/lib/eslint/eslint.js:1123:4) at async /Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:189380 at async O (/Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:182146) at async /Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:29208 at async /Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:11102 2025-10-31 16:07:55.052 [error] An unexpected error occurred: 2025-10-31 16:07:55.053 [error] Error: Could not find config file. at assertConfigurationExists (/Users/ijinseob/learn-typescript/node_modules/eslint/lib/config/config-loader.js:80:17) at LegacyConfigLoader.loadConfigArrayForFile (/Users/ijinseob/learn-typescript/node_modules/eslint/lib/config/config-loader.js:414:3) at async ESLint.lintText (/Users/ijinseob/learn-typescript/node_modules/eslint/lib/eslint/eslint.js:1123:4) at async /Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:189380 at async O (/Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:182146) at async /Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:29208 at async /Users/ijinseob/.vscode/extensions/dbaeumer.vscode-eslint-3.0.16/server/out/eslintServer.js:1:11102 extension 설치는 했는데 config 설정에서 계속 뭔가 안되네요ㅠ
map과 filter 내장 API에 대해 설명하시면서, 전자는 원본 배열을 바꾸지 않고 후자는 원본 배열을 바꾼다고 하셨습니다. const arry = [10,20,30] 배열이 있는 상태에서 20을 꺼내오고 싶어서 코드를 작성했습니다. arry.filter( (item) => { if (item === 20) { return true} } ) 리턴값으로 20은 나왔지만, 원본(?) 배열 arry의 값은 [10,20,30] 으로 그대로 입니다. pop,push, spilice는 원본 배열의 값이 바뀐걸 그 자리에서 확인할 수 있는데 flilter 는 아닌 것 같아서요. 혹시 강의 설명을 잘못하신걸까요?
제가 총 모니터가 3개입니다. 해당 영상 이전의 영상들의 화면은 모두 정상적으로 잘 나왔으나, 기본타입- 튜플, 객체, 진위값 섹션의 강의 영상 이후부터는 화면이 모두 나오질 않습니다. 모니터 3개 중 한개를 끄면 또 정상적으로 잘 나옵니다. 혹시, 원인을 알수 있을까요?
- 강의 영상에 대한 질문이 있으시면, 상세히 문의를 작성해주시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 (이외의 문의는 평생 강의이므로 양해를 부탁드립니다.) - 강의 답변이 도움이 안되셨다면, dream@fun-coding.org 로 메일 주시면 재검토하겠습니다. - 괜찮으시면 질문전에 챗GPT 와 구글 검색을 꼭 활용해보세요~ - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 14강 72, 73번 강의 영상이 동일한거 같습니다. 72강 23초 화면 73강 23초 화면 확인 요청드립니다..ㅠㅠ