우선, 이것은 TJ의 Farewell Node.js에서 번역 된 기사입니다. 나는이 기사를 읽은 후에 실제로 약간의 영향을 받았지만 저자의 견해에 동의하지 않습니다. 예를 들어, Node.js의 패키지 레지스터는 많은 장점 중 하나라고 생각하지만 GO는 이와 관련하여 약간 부족합니다. 개인 수준으로 인해 번역 할 때 많은 것을 이해하지 못합니다. 또한 저자의 블로그와 stackoverflow에 가서 답을 얻기 위해 몇 가지 질문을했습니다. 번역에는 여전히 많은 것들이 있으며, 나는 관점을 얻기를 희망합니다.
추신. Node.js 초보자로서 TJ에게 감사의 말을 전하고 끝까지 가십시오.
텍스트:
node.js에 작별 인사를하십시오
Node.js Realm을 떠납니다
나는 Onde.js와 충분히 오랫동안 제작에서 싸우고 있었고 불행히도 더 이상이 일을하는 것을 좋아하지 않았기 때문에 적어도이 순간에는 공식적인 작별 인사입니다. 더 중요한 것은 관리자가 필요합니다.
노드는 어떤면에서는 정말 훌륭하지만 최근에 관심이있는 소프트웨어 유형에 적합한 도구는 아닙니다. 나는 여전히 Node를 웹 사이트로 사용할 계획이지만 프로젝트를 유지 관리하는 데 관심이 있다면 Github 사용자 이름, NPM 사용자 이름 및 프로젝트 이름을 작성하여 알려주는 메시지를 남겨주세요. 일반적으로 내가 요구하는 것은 기존 API를 완전히 변경하지 않는다는 것입니다. 정말로이 작업을 원한다면 새로운 프로젝트를 시작하는 것이 좋습니다.
KOA는 계속 유지할 프로젝트입니다. (공동 및 친구와 함께)
성배의 이야기
나는 항상 C를 사랑했지만 C 개발에서 일하는 모든 사람들은 그것이 가치가 있지만 오류가 발생하기 쉬운 것을 알고 있습니다. 정확히 가장 빠른 직업이 아니기 때문에 매일 작업에서 언어 선택을 증명하는 것은 어렵습니다. 단순성은 또한 항상 칭찬을받은 이유이지만 템플릿이 많지 않으면 멀지 않을 것입니다.
더 많은 사람들이 분산 시스템의 개발에 참여함에 따라, 유용성과 견고성에 대한 노드 성능의 개발 추세는 나를 더욱 좌절시켰다. 지난 주 동안 GO에서 비교적 큰 분산 시스템을 다시 작성합니다.이 시스템은 강력하고 성능이 뛰어나고 유지하기 쉬우 며 일반적인 아름다움으로 인해 더 나은 테스트 가능한 적용 범위를 가지고 있으며 동기 코드를 쉽게 개발할 수 있습니다.
나는 Go가 거룩한 성배라고 말하는 것이 아닙니다. 완벽하지는 않지만 Go는 오늘날 존재하는 많은 언어들에게 훌륭한 대답입니다. Rust와 Julia와 같은 이러한 "차세대"언어가 점점 더 많은 자리를 찾고 성숙함에 따라 더 훌륭한 솔루션을 가질 것이라고 확신합니다.
개인적으로, 나는 반복 속도로 인해 Go에 대해 매우 기쁘게 생각합니다. 나는 그들이 버전 2.0에 도달하기를 간절히 원한다는 것을 알게되어 매우 기쁩니다. 그리고 내가 들었던 뉴스에 따르면, 그들은 독창적 인 위대한 것들을 깨는 것을 두려워하지 않습니다. 그것이 사실이라면, 나는 행복합니다. 나는 그것이이 언어에 실제로 도움이된다면 이미 거기에있는 것을 빨리 분해해야한다고 믿기 때문에 더 행복합니다. 그러나 나는 많은 시스템을 실행하는 소프트웨어 거인이 아닙니다. :디
편집 : 나는 일부 제출 메일 링리스트를 잘못 해석해야했으며 언제든지 파괴적인 변경을 열망하지 않습니다. @enneff
왜 간다?
노드가 당신을 위해 작동하고 걱정할 것이 없다면 여전히 훌륭한 도구입니다. 그러나 무언가가 당신을 귀찮게한다면, 상자 밖으로 뛰어 내려 상자 밖에 무엇이 있는지 보는 것을 잊지 마십시오. 처음에는 제품을 만들기 위해 몇 시간 안에 그에 끌 렸습니다.
다시 말하지만, 나는 Go가 확실히 최고의 언어라고 말할 수 없으며 당신은 그것과 함께 가야합니다. 그러나 그 시대에는 매우 성숙하고 강력합니다. (노드와 거의 같은 나이에). 유형 재건은 재미 있고 간단하며 GO가 제공하는 숙제 및 디버깅 도구는 훌륭하며 커뮤니티는 문서, 형식, 벤치 마크 및 API 디자인에 대한 매우 강력한 규정을 가지고 있습니다.
매우 모듈 식 노드에 익숙해지고 Ruby의 썩은 표준 라이브러리를 경험했지만 Go에 대해 처음 들었을 때 표준 라이브러리가 끔찍하다고 생각했습니다. 이 언어로 뛰어난 후, 압축, JSON, IO, 버퍼링 된 IO, 스트링 작업 등과 같은이 단계에서 대부분의 표준 라이브러리가 필요하다는 것을 깨달았습니다.이 API의 대부분은 잘 정의되고 강력합니다. 이러한 표준 라이브러리를 사용하여 전체 프로그램을 작성하는 것은 쉽습니다.
타사 Go 패키지
대부분의 GO 라이브러리는 비슷하게 보이며, 지금까지 사용한 대부분의 타사 코드는 고품질이며 JavaScript가 다른 기술 수준의 개발자를 끌어 들이기 때문에 노드에서 찾기가 어렵습니다.
GO 패키지에 대한 레지스트리는 없으므로 일반적으로 동시에 5 개 또는 6 개의 동일한 패키지가 표시됩니다. 어느 시점에서 이것은 약간의 혼란을 유발할 수 있지만 흥미로운 부작용이 있으며 각 패키지를주의 깊게 검토하여 어떤 선택이 가장 적합한 지 결정해야합니다. 노드를 통해 일반적으로 "redis", "mongodb-native"또는 "zeromq"와 같은 사양 패키지가 있으므로 거기에 멈추고 그들이 가장 좋은 것으로 추론합니다.
분산 작업을 수행하는 경우 GO의 인상적인 동시 기본 데이터 유형이 매우 도움이 될 수 있습니다. 우리는 노드의 발전기에서 비슷한 것을 얻을 수 있지만 내 의견으로는 생성기가 절반에 불과합니다. 독립적 인 오류 처리가 없으면보고 스택은 최상의 경우에도 여전히 평범합니다. 이 솔루션이 잘 작동하면 커뮤니티가 3 년 동안 재구성 될 때까지 기다리고 싶지 않습니다.
제 생각에는 GO의 오류 처리가 미결제입니다. 노드는 모든 실수에 대해 생각하고 수행하는 방법을 결정 해야하는 측면에서 훌륭합니다. 그러나 노드는 다음과 같습니다.
콜백을 반복 할 수 있습니다
콜백을 전혀하지 않고 불안정한 상태에서 길을 잃을 수 있습니다 (예 : 콜백을 처리하기 위해 오류를 전달하는 것을 잊어 버립니다. 오류가 발생하면 노드가 피드백없이 오류를 삼켜줍니다).
테이크 아웃 오류가 발생할 수 있습니다
에미터는 여러 가지 잘못된 사건을 얻을 수 있습니다
다루는 잘못된 사건을 잊어 버렸습니다.
종종 오류를 처리하는 데 필요한 것이 확실하지 않습니다
오류 처리는 매우 중복됩니다
콜백은 끔찍합니다
이동 중에 내 코드가 종료되면 종료되고 문서에서 다시 실행할 수 없습니다. 이것은 노드에서 불확실합니다. 라이브러리가 예기치 않게 콜백을 여러 번 호출 할 때까지 프로그램이 완전히 실행되거나 핸들러를 올바르게 지우지 못한 다음 코드를 다시 실행합니다. 실제 생산 코드에서 이러한 이유를 찾는 것은 매우 어렵습니다. 왜 이들을 귀찮게합니까? 다른 언어로 인해 이러한 고통을 경험할 수 없습니다.
미래의 노드
나는 여전히 노드가 좋은 일을하기를 희망하고, 많은 사람들이 그에게 큰 투자를하고, 그 잠재력을 가지고 있습니다. Joyent와 팀은 유용성에 집중해야한다고 생각합니다. 응용 프로그램이 깨지기 쉽고 디버깅, 리팩터 및 개발이 어려운 경우 성능은 의미가 없습니다.
4-5 년 안에 우리는 여전히이 모호한 오류 "오류 : getAddrinfo eaddrinfo"를 가질 것이며,이 사실은 노드의 개발 우선 순위가 어디에 있는지 알려줍니다. 당연히 시스템의 핵심을 구축하는 데 집중할 때 이러한 것들을 놓치기 쉽습니다. 사용자는 그런 것들에 대한 의견을 계속해서 표현했지만 결과를 보지 못했다고 생각합니다. 우리는 보통 우리가 가진 것이 이미 완벽하다고 주장하는 것에 대한 몇 가지 응답을 얻습니다. 실제로, 이것은 사실이 아닙니다.
스트림이 중단되고, 콜백은 사용하기 쉽고, 오류가 불분명하며, 도구를 사용하기 쉽지 않으며, 커뮤니티 규정이 존재하지만, GO에 비해 부족한 것 같습니다. 그럼에도 불구하고 웹 페이지 만들기 또는 일부 조각난 API 또는 프로토 타입과 같은 특정 작업에 노드를 계속 사용할 수 있습니다. 노드가 기본 문제 중 일부를 고칠 수 있다면 관련성을 유지할 수 있지만 성능이 높고 가용성이 높은 인수가 너무 멀지 않을 때 가용성보다 높은 성능을 발휘할 수있는 다른 솔루션이있을 때.
노드 커뮤니티가 생성기를 수용하고 매우 핵심 노드로 구현하고 오류를 적절하게 전달하기로 결정한 경우이 참조를 가능하게 할 수 있습니다. 이것은 노드의 유용성과 견고성을 완전히 향상시킬 것입니다.
좋은 소식은 얼마 전까지 만해도 강력한 루프에서 핵심 코드를 기고 한 위대하고 재능있는 사람과 이야기했다는 것입니다. 이들은 플랫폼에 대한 개발자의 응답을 듣고 이러한 문제를 해결하는 올바른 방법을 찾을 수 있도록 미래의 노드를보다 쉽게 작업 할 수 있도록 이러한 문제를 해결하기위한 올바른 방법을 명시 적으로 채택하고 있습니다. 핵심 부분의 동시 개발에 대한 여러 회사 간의 갈등이 어떻게 끝날지 잘 모르겠지만 개발자 드라이버가 이길 수 있기를 바랍니다.
그렇다고해서 개인에 대한 공격이 아니라 실제로 재능있는 많은 사람들이 노드와 함께 일하거나 일하는 많은 사람들이 더 이상 관심있는 것이 아닙니다. 노드 커뮤니티에서 즐거운 시간을 보냈고 정말 흥미로운 사람들을 만났습니다.
이야기의 의미는 자신의 서클에 의해 제한되어서는 안된다는 것입니다! 다른 곳에서 무엇을 보면 다시 프로그래밍을 즐길 수 있습니다. 이 외부에는 많은 놀라운 해결책이 있으며, 내가 저지른 실수는 내가 그들과 놀기에는 너무 오래 기다렸다는 것입니다!