나만의 JavaScript 런타임 생성 경험 - #1

안녕하세요 여러분, 한동안(몇 달 동안) 저는 Jint를 사용하여 C#으로 작성된 저만의 JavaScript 런타임을 개발하는 아이디어를 생각해 냈습니다. 처음에는 실행 불가능하거나 적어도 충분히 어려운 것처럼 보였지만 저는 이미 Electron과 동일한 작업을 수행하는 데 중점을 둔 자체 JavaScript 엔진HTAPPS을 사용하여 프로젝트(이와 같은 취미용)를 조립하려고 시도했습니다. 그러나 가벼운 방식으로 실행됩니다(실행에 표준 IE 프레임을 사용하므로 Windows에만 해당).

현재 개발 저장소는 여기accessed일 수 있습니다.

하지만 왜? 나는 순수한 취미로 이 프로젝트를 시작하기로 결정했으며, 프로젝트를 시작한 주된 이유는 다음과 같습니다.
  • 처음에 Node.js가 어떻게 만들어졌는지 생각했는데, 제 전문 분야인 CSharp에서 비슷한 것을 빌드할 수 있는 기회였습니다
  • .
  • 나만의 자동화 도구가 필요했습니다. 저는 Python에 익숙하지 않지만 TypeScript/JavaScript가 완벽한 도구가 될 것입니다. 노드가 처리할 수 있지만 매우 불편하게 만드는 일부 "원시"사항이 있습니다
  • .
  • 대학 졸업 프로젝트로 발표할 것이 필요합니다(예)

  • 첫 번째 단계



    MelonRuntime은 Microsoft ASP.NET 팀의 소프트웨어 개발자인 Sébastien Ros가 만든 JavaScript 인터프리터인 Jint을 기반으로 합니다. Melon은 외부 입력(명령npx melon new으로 생성된 기본 프로젝트와 함께 제공되는 다른 패키지에서 제공) 및 내장 도구와 함께 이 인터프리터에 삽입된 바인딩 및 기능에서 작동합니다.

    첫날은 매우 즐거웠습니다. 엔진에 기능을 주입하는 방법(C#과 JavaScript 바인딩)과 코드 내에서 기능을 호출하는 방법을 배워야 했습니다. 이를 위해 CLI.NET 이라는 직접 만든 라이브러리를 사용하여 명령 인터페이스를 빠르게 만들 수 있었습니다.

  • 팁: 프로덕션에 CLI.NET을 사용하는 것을 권장하지 않습니다. Nuget 패키지가 없으며 몇 가지 최적화를 수행해야 했습니다. 원래 리포지토리에 주의가 필요합니다
  • .

    첫 번째 바인딩은 기본console 도구를 구현하는 것이었고 첫 번째 기능은 분명히log였습니다.



    구현이 엉망이었지만(여전히 생각합니다) 마음에 들었고 점점 더 개선해야 합니다. 현재 구현이 있습니다.

    public static void Write(object obj, int color)
    {
        CLNConsole.Write("< ", ConsoleColor.Red);
    
        try
        {
            JsonSerializerOptions options = new()
            {
                ReferenceHandler = ReferenceHandler.IgnoreCycles,
                WriteIndented = true
            };
    
            var serialized = JsonSerializer.Serialize(obj, options);
            CLNConsole.Write(serialized, color);
        }
        catch
        {
            CLNConsole.Write(obj.ToString() ?? "null", color);
        }
    
        Console.WriteLine();
    }
    


    그 후 다음과 같이 오류를 더 읽기 쉽게 만드는 데 집중했습니다.



    아직 갈 길이 멀다.

    좋은 웹페이지 즐겨찾기