표준 브라우저 가상 머신이 아닌 왜 JavaScript입니까?


167

특수 언어 (실제로 특수 패러다임)를 사용하지 않고 브라우저에서 호스팅되는 표준화 된 가상 머신을 통해 언어 세트 (Java, Python, Ruby 등)를 지원하는 것이 합리적이지 않습니까? 클라이언트 스크립팅 전용?

제안을 명확히하기 위해 웹 페이지에는 JavaScript와 같은 고급 언어 대신 바이트 코드가 포함됩니다.

나는 진화론 적 이유 때문에 JavaScript가 우리가 지금해야 할 일이라는 실제적인 현실을 이해하지만, 장기적으로 더 생각하고 있습니다. 이전 버전과의 호환성과 관련하여 일정 기간 동안 인라인 JavaScript를 동시에 지원할 수 없었으며 JavaScript는 브라우저 가상 머신에서 지원하는 언어 중 하나 일 수 있습니다.


17
왜 이것이 투표에 참여하는지 모르겠습니다. 나는 그것이 좋은 질문이라고 생각했다!

11
질문보다 불만이 많기 때문입니다.
Dustman

6
자바 스크립트는 실제 언어가 아니거나 다른 언어만큼 좋지 않다는 아이디어 때문입니다. 초기부터이 둘 중 어느 것도 사실이 아니었지만 '더러운'지각은 현재까지 지속되고 있습니다.
Adam Davis

43
와우, 나는 SO 공동체가 완전히 실패하는 것을 본 적이 없다. 여기에 제안 된 아이디어를 다루는 유일한 답변은 맨 아래까지 내려 가며 하향 조정되는 반면, 불필요하게 "방어 JS"는 모든 사랑을 얻고 있습니다. 이 질문은 JS를 공격하는 것이 아니라 단지 선택을 옹호하는 것입니다. "JS에 대해 어떻게 생각하든, 원하는 다른 언어를 사용할 수 있다면 좋지 않을까요?"라고 말합니다. 무슨 일이야?
Jordi

4
이것은 몇 가지 답변이 제공된 후 지금까지 편집 할 수있는 StackOverflow의 주요 문제입니다. 원래 질문은 상위 답변과 더 관련이 있고 나머지 질문은 편집 후 질문의 "새로운 정신"을 다룹니다.

답변:


28

그래 확실히 우리가 타임머신을 가지고 있다면, 돌아가서 많은 자바 스크립트 기능이 다르게 설계되었는지를 확인하는 것이 중요한 취미가 될 것입니다. 그러나 그것은 일어나지 않을 것이고, 우리는 지금 그것에 붙어 있습니다.

시간이 지나면 웹에 대한 "기계 언어"가 될 것으로 의심되며, 더 잘 설계된 다른 언어와 API가 컴파일되어 다른 런타임 엔진 foible을 충족시킵니다.

그러나 이러한 "더 나은 디자인 언어"는 Java, Python 또는 Ruby 일 것이라고 생각하지 않습니다. Javascript는 다른 곳에서도 사용할 수 있지만 웹 응용 프로그램 스크립팅 언어입니다. 그러한 유스 케이스를 감안할 때, 우리는 그 어떤 언어보다 더 잘할 수 있습니다.


54
IE CSS 팀 설명의 경우 -1입니다. IE6는 출시 될 때 나쁘지 않았습니다. 주요 경쟁자는 지금까지 작성된 버그 소프트웨어 중 가장 버그가 많았습니다. 비록 사람들이 때로는 재미 있기는하지만 세상을 더 나은 곳으로 만들지는 않습니다.
erikkallen

5
JavaScript에 대한 평가에 "... 웹 응용 프로그램 스크립팅 언어 ..."이하로 동의하지 않았습니다. 그것보다 훨씬 더 적용 성이 뛰어나고 유연하고 훌륭한 언어입니다.
TJ Crowder

2
@TJ Crowder : ITYM "[...] 더 이상 동의하지 않았습니다."?
Christoffer Hammarström

2
@Jaroslaw Szpilewski 뻔뻔한 JS 열성? 다른 게시물로 생각하여 이것에 대해 오해 했습니까? 또한 @erikkallen의 경우 IE CSS 팀의 의견은 일반적으로 "농담"입니다.
Adam Wright

2
이 답변의 일부 "투시": 이제 CoffeeScript가 있습니다.
andref

19

JavaScript는 좋은 언어라고 생각하지만 클라이언트 측 웹 응용 프로그램을 개발할 때 선택하고 싶습니다. 레거시 이유로 우리는 JavaScript를 고수하고 있지만 해당 시나리오를 변경하려는 프로젝트와 아이디어가 있습니다.

  1. Google Native Client : 브라우저에서 기본 코드를 실행하기위한 기술
  2. Emscripten : 자바 스크립트로 LLVM 바이트 코드 컴파일러. 브라우저에서 LLVM 언어를 실행할 수 있습니다.
  3. 아이디어 : Mono를 만든 브라우저의 .NET CLI : http://tirania.org/blog/archive/2010/May-03.html

우리는 오랫동안 JavaScript를 가질 것이라고 생각하지만 조만간 변경 될 것입니다. 브라우저에서 다른 언어를 사용하려는 개발자가 너무 많습니다.


LLVM은이 모든 것에 대한 해답이 될 수 있습니다. LLVM으로의 컴파일을 지원하는 많은 언어 (Python, Ruby, 심지어 Java)가 이미 있으며 LLVM은 Javascript로 컴파일 할 수 있으므로 최소한 JS로 컴파일하여 브라우저에서 자동 LLVM 지원을 얻을 수 있습니다. 물론 LLVM을 모든 프로그래밍 패러다임 및 특정 언어에 최적화 할 수는 없으므로 성능은 100 % 네이티브와 동일하지는 않지만 Javascript의 JIT / 인터프리터는 최근의 진보를 고려하더라도 항상 네이티브에 비해 느려졌습니다. .
facuq

18

응답 질문을 - 아니, 그것은 의미가 없다.

현재 다국어 VM에 가장 가까운 것은 JVM과 CLR입니다. 이것들은 정확히 가벼운 짐승은 아니며 브라우저 에이 크기와 복잡성을 가진 무언가를 포함시키고 시도하는 것은 의미가 없습니다.

기존 솔루션보다 나은 새로운 다국어 VM을 작성할 수 있다는 아이디어를 살펴 보겠습니다.

  • 당신은 안정성에 뒤쳐져 있습니다.
  • 복잡성 뒤에 있습니다 (여러 언어를 일반화하려고하기 때문에 길, 방법, 뒤에 있습니다)
  • 당신은 입양에있어

따라서 아닙니다. 말이되지 않습니다.

이러한 언어를 지원하기 위해서는 브라우저 스크립트와 관련이없는 부분을 잘라내어 API를 맹렬하게 제거해야합니다. 여기에는 수많은 디자인 결정이 있으며 오류가 발생할 수있는 큰 기회가 있습니다.

기능면에서 우리는 어쨌든 DOM을 실제로 사용 하고있을 것 입니다. 따라서 이것은 실제로 구문 및 언어 idom의 문제입니다.이 시점에서 "정말 가치가 있습니까?"

서버 측 스크립팅은 이미 원하는 언어로 제공되므로 클라이언트 측 스크립팅 유념해야 합니다. 상대적으로 작은 프로그래밍 분야이므로 여러 언어를 사용하는 이점은 의문의 여지가 있습니다.

어떤 언어를 도입하는 것이 이치에 맞습니까? (주의, 주관적인 자료는 다음과 같습니다)

C와 같은 언어로 가져 오는 것은 금속 작업을 위해 만들어 졌기 때문에 의미가 없으며 브라우저에는 실제로 사용할 수있는 금속이 많지 않습니다.

Java와 같은 언어로 가져 오는 것은 어쨌든 API이기 때문에 의미가 없습니다.

JavaScript는 Scheme과 매우 유사한 강력한 동적 언어이므로 Ruby 또는 Lisp와 같은 언어로 가져 오는 것은 의미가 없습니다.

마지막으로 어떤 브라우저 제작자가 실제로 여러 언어에 대한 DOM 통합을 지원하고자합니까? 각 구현에는 고유 한 버그가 있습니다. 우리는 이미 MS Javascript와 Mozilla Javascript의 차이점을 다루면서 화재를 겪어 왔으며 이제 그 고통을 5-6 배로 늘리고 싶습니까?

말이되지 않습니다.


꽤 주관적인 답변이지만 좋은 점수를 올리면 투표하고 싶지 않았습니다 (원래 답변은 토론 시작과 비슷합니다).
Gerbrand

2
브라우저의 VM이 무겁게 필요하다고 생각하지 않습니다. 물론 그것은 이미 실버 라이트와 애플릿으로 존재합니다. 후자는 인기를 얻지 못했습니다. 주로 해결 된 나쁜 타이밍과 기술적 인 어리 석음 때문에 대부분 생각합니다. 스크립트 태그 (제한이있는) 사이에 언어를 허용하는 것은 꽤 멋지고 불가능하거나 실용적이지 않을 것입니다.
Gerbrand

2
무거움 (MB)? 아마 괜찮아 무거움 (복잡함)? 방법 이 너무 무거운. 모든 다국어 VM의 경우 언어 구현 (예 : JRuby / IronRuby, Clojure, Jython / IronPython 등) 등이 있습니다. JVM이 복잡하거나 언어 구현자가하는 일입니다.
happy moron

여러 새로운 플랫폼 (IE / Firefox / Safari ...)에 대해 여러 언어를 다시 구현하려면 엄청난 양의 작업이 필요합니다. 그리고 언어도 변합니다. "이 페이지는 Ruby 1.9 브라우저에서만 볼 수 있습니까?" 안돼
happy moron

4
나는 당신이 질문에 올바르게 대답하고 있다고 생각하지 않으며, 당신은 왜 당신이 다른 언어가 현재 브라우저에서 자바 스크립트에 적합하지 않다고 생각 하는지를 말하고 있습니다. 웹에 적합한 범용 바이트 코드는 다른 언어로 컴파일되는 것입니다. 해당 언어가 웹 바이트 코드가 아닌 작성자에게 달려 있다면 많은 언어가 이미 자바 스크립트 (예 : 다트)로 컴파일 하여이 btw를 수행합니다.
Timotheus

14

Windows에서는 스크립팅 호스트에 다른 언어를 등록하여 IE에서 사용할 수 있습니다. 예를 들어 VBScript는 기본적으로 지원되지만 (대부분의 경우 JavaScript보다 훨씬 인기가 높지 않지만) 인기가 없습니다.

Python win32 확장을 사용하면 이와 같이 IE에 Python을 쉽게 추가 할 수 있었지만 Python은 샌드 박스하기가 매우 어려우므로 실제로 좋은 생각이 아닙니다. .

일반적으로 브라우저와 같은 네트워크 응용 프로그램에 복잡성을 더 많이 추가할수록 보안 문제가 발생할 가능성이 높습니다. 많은 새로운 언어들이 그 설명에 확실히 들어 맞을 것이며, 이들은 여전히 ​​빠르게 발전하고있는 새로운 언어들입니다.

JavaScript는 추악한 언어이지만 선택적인 기능의 하위 집합을 신중하게 사용하고 적절한 객체 라이브러리를 지원함으로써 일반적으로 상당히 견딜 수 있습니다. 웹 스크립팅이 발전 할 수있는 유일한 방법은 JavaScript에 점진적이고 실용적으로 추가하는 것 같습니다.


12

브라우저에서 표준 언어 독립 VM을 환영합니다 (정적으로 유형이 지정된 언어로 코딩하는 것을 선호합니다).

(기술적으로) 점진적으로 수행 할 수 있습니다. 첫 번째 주요 브라우저가 지원하며 서버는 현재 요청이 호환되는 브라우저에서 온 경우 바이트 코드를 보내거나 코드를 JavaScript로 변환하고 일반 텍스트 JavaScript를 보낼 수 있습니다.

JavaScript로 컴파일되는 몇 가지 실험 언어가 이미 존재하지만 VM을 정의하면 성능이 향상 될 수 있습니다.

그러나 "표준"부분은 매우 까다로울 것입니다. 또한 라이브러리와 관련된 언어 기능 (예 : 정적 대 동적 입력) 사이에 충돌이있을 수 있습니다 (새로운 것이 동일한 라이브러리를 사용한다고 가정). 따라서 나는 그것이 일어날 것이라고 생각하지 않습니다 (곧).


10

손이 더러워진 것 같은 느낌이 든다면 세뇌를 받았거나 여전히 "DHTML 연도"의 영향을 느끼고있는 것입니다. JavaScript는 매우 강력하며 대화 형 클라이언트 쪽을 스크립팅하는 목적에 적합합니다. 이것이 JavaScript 2.0이 나쁜 랩을 얻은 이유입니다. 패키지, 인터페이스, 클래스 등이 서버 측 언어의 분명한 측면 인 이유는 무엇입니까? JavaScript는 완전한 객체 지향적이지 않은 프로토 타입 기반 언어로 적합합니다.

서버 쪽과 클라이언트 쪽이 제대로 통신하지 않아서 응용 프로그램이 원활하지 않으면 응용 프로그램을 설계하는 방법을 다시 고려할 수 있습니다. 저는 매우 강력한 웹 사이트 및 웹 응용 프로그램을 사용해 왔으며 "음, JavaScript가 (xyz)를 할 수 있으면 좋겠다"고 한 번도 말한 적이 없습니다. 그렇게 할 수 있다면 JavaScript가 아니라 ActionScript 또는 AIR 또는 Silverlight가됩니다. 나는 그것을 필요로하지 않으며 대부분의 개발자도 마찬가지입니다. 그것들은 훌륭한 기술이지만, 해결책이 아닌 기술 문제를 해결하려고 노력합니다.


13
자바 스크립트가 완전한 객체 지향적이지 않다고 어떻게 말할 수 있습니까? 내가 아는 가장 객체 지향 언어 중 하나입니다. JavaScript의 모든 것은 객체이며 심지어 함수입니다. JavaScript의 OOP는 다른 많은 언어에서는 OOP처럼 보이지 않습니다.
르네 자르 수

2
OOP는 JavaScript에 고유하지 않습니다. 패키지, 인터페이스, 추상 클래스 또는 메서드 오버로딩이 코어에 내장되어 있지 않으며 개체의 프로토 타입만으로 개체를 확장 할 수 없으므로 OOP 기반이 아닌 기술적으로 프로토 타입 기반이됩니다.

3
저것에 틀렸다. "프로 타입"은 디자인 패턴이다 (Gamma et al., pp 117-126). 디자인 패턴은 Object Oriented Programming에서 일반적인 디자인을 중심으로 진행됩니다. 언어에 다른 OOP 언어와 동일한 기능이 없기 때문에 OOP가 아니라는 의미는 아닙니다.
Dustman

13
당신은 틀리지 않았습니다. 나는 그것을 넣는 가장 좋은 방법은 JS가 클래스 기반 OO가 아니라 프로토 타입 OO라는 것입니다.
Juan Mendes

14
1. 자바 스크립트는 완전히 OOP입니다. OOP는 클래스가 아니라 객체에 관한 것입니다. 2. Prototypal 객체 지향 프로그래밍의 요점 인 JavaScript로 객체를 확장 할 수 있습니다. 3. 당신은 질문에 대답하지 않고, 질문은 JS를 공격하지 않고, 단지 선택을 요구하고 있습니다. JS는 훌륭한 언어라고 생각하지만 브라우저에서 프로그래밍 할 때 다른 선택을하고 싶습니다.
Manuel Ceron

7

표준 웹 VM이 상상할 수 없다고 생각하지 않습니다. 사용하는 모든 VM 바이트 코드 형식을 자바 스크립트로 빠르게 디 컴파일 할 수 있고 결과 출력이 합리적으로 효율적으로 유지되는 한, 새로운 웹 VM 표준을 우아하고 완벽하게 레거시 지원할 수있는 여러 가지 방법이 있습니다. 심지어 스마트 디 컴파일러가 아마도 인간이 스스로 생성 할 수있는 자바 스크립트보다 더 나은 자바 스크립트를 생성 할 것이라고 생각하기까지합니다.

이 속성을 사용하면 모든 웹 VM 형식을 서버 (빠른), 클라이언트 (느리지 만 서버에 대한 제어가 제한적인 경우 가능)에서 쉽게 디 컴파일하거나 사전에 생성하여 동적으로로드 할 수 있습니다 새로운 표준을 기본적으로 지원하지 않는 브라우저의 경우 클라이언트 또는 서버 (가장 빠름)

새로운 표준을 기본적으로 지원하는 브라우저는 웹 vm 기반 앱의 런타임 속도가 향상되는 이점이 있습니다. 또한 브라우저가 웹 vm 표준을 기반으로 기존 자바 스크립트 엔진을 기반으로하는 경우 (예 : 자바 스크립트를 웹 vm 표준으로 구문 분석 한 후 실행) 두 개의 런타임을 관리 할 필요는 없지만 브라우저 공급 업체에 달려 있습니다. .


6

Javascript는 페이지를 직접 제어 할 수있는 유일하게 지원되는 스크립팅 언어이지만 Flash에는 더 큰 프로그램을위한 매우 유용한 기능이 있습니다. 최근에는 JIT가 있으며 즉시 바이트 코드를 생성 할 수 있습니다 ( 플래시를 사용하여 사용자 입력 수학 표현식을 원시 이진으로 컴파일하는 예제는 런타임 표현식 평가 를 확인하십시오 ). Haxe 언어는 추론과 바이트 코드 생성 기능을 사용하여 원하는 타이핑 시스템을 거의 구현할 수있는 정적 타이핑을 제공합니다.


질문에서 무엇을 놓치고 있습니까? 플래시가 원하는 것을 정확하게 할 것 같습니다. 우리는 다른 모국어에 대해 이야기하고 있지 않습니다. 그는 VM을 원합니다. 좋은 대답입니다.
mwilcox

6

이 오래된 질문에 대한 빠른 업데이트.

"웹 페이지에 JavaScript와 같은 고급 언어 대신 바이트 코드가 포함되어있을 것"이라고 확인한 사람은 "발생하지 않습니다".

2015 년 6 월 W3C웹 어셈블리 를 발표했습니다.

웹으로 컴파일하기에 적합한 새로운 휴대용, 크기 및로드 시간 효율적인 형식.

이것은 여전히 ​​실험적이지만 Firefox 야간 및 Chrome Canary에는 이미 프로토 타입 구현이 있으며 이미 데모가 진행 중 입니다.

현재 WebAssembly는 주로 C / C ++에서 생성되도록 설계되었습니다.

WebAssembly가 발전함에 따라 C / C ++보다 더 많은 언어를 지원할 것이며 다른 컴파일러에서도 지원할 수 있기를 바랍니다 .

프로젝트 의 공식 페이지 를 자세히 살펴보면 정말 흥미 롭습니다!


5

이 질문은 정기적으로 다시 나타납니다. 이것에 대한 나의 입장은 다음과 같습니다.

A) 일어나지 않으며 B)는 이미 여기 있습니다.

사면, 뭐? 설명하겠습니다 :

광고 A

VM은 일종의 보편적 인 마법 장치가 아닙니다. 대부분의 VM은 특정 언어 및 특정 언어 기능에 최적화되어 있습니다. 정적 타이핑에 최적화 된 JRE / Java (또는 LLVM)를 사용하십시오. 동적 타이핑을 구현할 때 또는 Java가 처음에는 지원하지 않는 기타 사항이있을 때 분명히 문제와 단점이 있습니다.

따라서 많은 언어 기능 (꼬리 호출 최적화, 정적 및 동적 입력, foo bar boo 등)을 지원하는 "일반 다용도 VM"은 거대하고 구현하기 어려우며 성능을 향상시키기 위해 최적화하기가 어려울 수 있습니다. 그것. 하지만 저는 언어 디자이너 나 VM 전문가가 아닙니다. 어쩌면 내가 틀렸을 수도 있습니다. 실제로는 꽤 쉽습니다. 아직 아무도 아이디어가 없었습니까? 으르렁

광고 B

이미 여기 : 바이트 코드 컴파일러 / vm이 없을 수도 있지만 실제로는 필요하지 않습니다. afaik 자바 스크립트가 완료되었으므로 다음 중 하나를 수행 할 수 있습니다.

  1. 언어 X에서 자바 스크립트로 번역기 만들기 (예 : 커피 스크립트)
  2. 언어 X를 해석하는 인터프리터를 자바 스크립트로 작성하십시오 (예 : brainfuck ). 예, 성능은 끔찍하지만 모든 것을 다 가질 수는 없습니다.

광고 C

뭐? 처음에는 포인트 C가 없었습니다!? 아직 없기 때문에 ... 구글 NACL. 누구나 할 수 있다면 구글입니다. Google이 작동하면 문제가 해결됩니다. 오직, 어, 그것은 작동하지 않을 수도 있습니다. 내가 마지막으로 읽었을 때 정말 까다로운 종류 의 해결되지 않은 보안 문제가있었습니다 .


그 외에도:

  • 자바 스크립트는 ~ 1995 = 15 년 이래로 존재했습니다. 여전히 브라우저 구현은 오늘날과 다릅니다 (적어도 더 이상 견딜 수는 없지만). 따라서 아직 새로운 것을 시작하면 2035 년경에 브라우저에서 작동하는 버전이있을 수 있습니다. 최소한 작동하는 하위 집합입니다. 미묘하게 다릅니다. 호환성 라이브러리와 레이어가 필요합니다. 그래도 일을 개선하려고하지는 않습니다.

  • 또한 읽을 수있는 소스 코드는 어떻습니까? 많은 회사에서 "종류"오픈 소스로 코드를 제공하지 않는 것을 선호합니다. 개인적으로, 나는 비린내가 뭔가 의심되거나 그것에 대해 배우고 싶다면 소스를 읽을 수있어서 매우 기쁩니다. 소스 코드를위한 hooray!


4

과연. Silverlight는 사실상 클라이언트 측 .Net 기반 VM입니다.


4

추론에 오류가 있습니다.

  1. 표준 브라우저의 표준 가상 머신은 절대 표준이 아닙니다. 우리는 4 개의 브라우저를 가지고 있으며 IE는 '표준'과 관련하여 상충됩니다. 다른 세 가지는 빠르게 발전하고 있지만 새로운 기술의 채택 속도는 느립니다. 휴대 전화, 소형 기기 등의 브라우저는 어떻습니까?

  2. 다른 브라우저에 JS를 통합하고 과거 기록을 사용하면 JS의 성능을 과소 평가할 수 있습니다. 표준은 서약했지만 표준은 초기에 작동하지 않았기 때문에 JS를 승인하지 않습니다.

  3. 다른 사람들이 말했듯이 JS는 AIR / .NET / ... 등과 같지 않습니다. 현재 화신의 JS는 목표에 완벽하게 부합합니다.

장기적으로 Perl과 Ruby는 자바 스크립트를 대체 할 수 있습니다. 그러나 이러한 언어의 채택은 느리고 JS를 절대 인수하지 않는 것으로 알려져 있습니다.


3

최선을 어떻게 정의합니까? 브라우저 나 개발자에게 가장 적합합니까? (플러스 ECMAScript는 Javascript와 다르지만 기술입니다.)

JavaScript는 동시에 강력하고 우아 할 수 있습니다. 불행히도 내가 만난 대부분의 개발자는 실제 프로그래밍 언어 대신 필요한 악으로 취급합니다.

내가 즐기는 기능 중 일부는 다음과 같습니다.

  • 일등 시민으로서의 기능 취급
  • 언제든지 객체에 기능을 추가하고 제거 할 수 있습니다 (별로 유용하지는 않지만 마음이 부는 경우)
  • 역동적 인 언어입니다.

다루는 것이 재미 있고 설립되었습니다. 클라이언트 스크립팅에 "최고"가 아닐 수도 있지만 확실히 즐겁기 때문에 주변에서 즐기십시오.

브라우저 비 호환성으로 인해 동적 페이지를 만들 때 실망 스럽지만 UI 라이브러리로 완화 할 수 있다는 데 동의합니다. Swing을 Java에 대항하여 개최하는 것 이상으로 JavaScript 자체에 대항해서는 안됩니다.


+1-언어 문제를 코드의 브라우저 해석과 혼동하지 않습니다.
JL.

바이트 코드 선택을 요구했을 때 왜 JS를 방어해야합니까?
Milind R

3

JavaScript는 브라우저의 표준 가상 머신입니다. 예를 들어, OCaml과 Haskell에는 이제 JavaScript를 출력 할 수있는 컴파일러가 있습니다. 제한 사항은 JavaScript 언어가 아니라 JavaScript를 통해 액세스 할 수있는 브라우저 개체 및 시스템을 손상시키지 않고 안전하게 JavaScript를 실행할 수 있도록하는 액세스 제어 모델입니다. 현재 액세스 제어가 너무 열악하여 안전상의 이유로 JavaScript는 브라우저 객체에 대한 액세스가 매우 제한되어 있습니다. 하모니 프로젝트가이를 해결하려고합니다.


3

멋진 생각입니다. 한 걸음 더 나아 가지 않겠습니까?

  • 동일한 VM 언어로 HTML 파서 및 레이아웃 엔진 (브라우저의 모든 복잡한 비트) 작성
  • 엔진을 웹에 게시
  • 사용할 레이아웃 엔진 선언 및 URL이 포함 된 페이지 제공

그런 다음 새 브라우저를 모든 클라이언트에 푸시하지 않고도 브라우저에 기능을 추가 할 수 있습니다. 웹에서 관련 새 비트가 동적으로로드됩니다. 또한 브라우저에서 작동하는 모든 것과의 하위 호환성을 유지하는 데있어 어리석은 복잡성없이 HTML의 새 버전을 게시 할 수도 있습니다. 호환성은 페이지 작성자의 책임입니다. 또한 HTML 이외의 마크 업 언어를 실험 해 볼 수 있습니다. 물론 멋진 JIT 컴파일러를 엔진에 작성하여 원하는 언어로 웹 페이지를 스크립팅 할 수 있습니다.


농담인지는 모르겠지만 아이디어는 정말 멋지다.
Milind R

3

가능한 스크립팅 언어로 javascript 이외의 언어를 환영합니다.

멋진 것은 Javascript가 아닌 다른 언어를 사용하는 것입니다. Java는 아마도 태그 사이에 적합하지는 않지만 Haskell, Clojure, Scala, Ruby, Groovy와 같은 언어가 유리할 것입니다.

나는 얼마 전에 십자가 루비 스크립트를 왔습니다 ... http://almaer.com/blog/running-ruby-in-the-browser-via-script-typetextrubyhttp://code.google.com/p/ruby- 브라우저 내장 /
여전히 실험적이고 진행 중이지만 유망한 것으로 보입니다.
.Net의 경우 다음을 발견했습니다. http://www.silverlight.net/learn/dynamic-languages/ 방금 사이트를 찾았지만 흥미로워 보입니다. 내 Apple Mac 에서도 작동합니다 .

Javascript의 대안을 제공하는 데 위의 작업이 얼마나 잘되는지 모르지만 언뜻보기에는 꽤 멋져 보입니다. 잠재적으로 이것은 브라우저의 샌드 박스 내에서 브라우저에서 기본적으로 Java 또는 .Net 프레임 워크를 사용할 수있게합니다.

안전에 관해서는, 언어가 JVM (또는 그 문제에 대한 .Net 엔진) 내에서 실행되면 VM은 보안을 관리하므로 적어도 걱정하지 않아도됩니다. 브라우저 내부.


2

아마도 그렇게하기 위해서는 주요 브라우저가이를 지원해야합니다. IE 지원은 가장 어려울 것입니다. JavaScript는 사용 가능한 것으로 믿을 수있는 유일한 것이므로 사용됩니다.


2

ECMAScript et.에 대해 이야기 한 대다수의 개발자들. 알. 결국 문제는 스크립팅 언어가 아니라는 것이 인정하는 것이죠. DOM과 스크립팅 언어를 통합하는 것은 ECMAScript와 관련하여 고통과 좌절의 일반적인 원인입니다. 또한 IIS는 서버 측 스크립팅에 JScript를 사용할 수 있으며 Rhino와 같은 기능을 통해 ECMAScript에서 독립 실행 형 앱을 구축 할 수 있습니다. ECMAScript를 사용하여 이러한 환경 중 하나에서 잠시 작업하고 의견이 변경되는지 확인하십시오.

이런 종류의 절망은 한동안 계속되었습니다. 특정 문제를 포함하거나 다시 게시하기 위해이 내용을 수정하시기 바랍니다. 당신이 얻는 구호에 놀랍게도 놀라실 것입니다.

오래된 사이트이지만 여전히 시작하기에 좋은 곳 : Douglas Crockford 's site .


"HTML DOM"이 왜 고통
Alex Moore-Niemi

2

글쎄, 우리는 이미 VBScript를 가지고 있습니까? 잠깐, IE 만 지원합니다!
VM에 대한 좋은 아이디어도 마찬가지입니다. Lua를 사용하여 페이지를 스크립팅하고 브라우저에 파서가 없어서 바이트 코드로 변환하면 어떻게됩니까? 물론 우리는 바이트 코드 파일을 받아들이는 스크립트 태그를 상상할 수 있습니다.
그러나 경험에 의하면 웹에 새로운 것을 가져 오는 것이 어렵다는 것을 알 수 있습니다. 이와 같이 급진적 인 새로운 변화를 채택하려면 몇 년이 걸릴 것입니다. SVG 또는 CSS3를 지원하는 브라우저는 몇 개입니까?

게다가, 당신이 JS에서 "더러운"을 발견 한 것을 보지 못했습니다. 아마추어에 의해 코딩되어 다른 곳에서 복사 된 나쁜 관행을 전파하는 것은 추악 할 수 있지만, 마스터는이 언어가 우아한 언어 일 수도 있음을 보여주었습니다. Perl과 비슷합니다 : 종종 난독 화 된 언어처럼 보이지만 완벽하게 읽을 수 있습니다.


2

http://www.visitmix.com/Labs/Gestalt/를 확인 하십시오 .-사용자가 silverlight를 설치 한 경우 파이썬 또는 루비를 사용할 수 있습니다.


"사용자가 silverlight를 설치 한 한." 글쎄, 나는 이것의 결함을 볼 수 있습니다.
Origamiguy

솔직히 말해서 루비를 ie6 / 7 / 8 / 9 / ff / chrome / safari에 포함시키는 것보다 그렇게하는 것이 더 쉽습니다. Heck Chrome에는 이미 플래시가 포함되어 있습니다. SL은 어떻습니까?
mcintyre321

2

이것은 매우 좋은 질문입니다.

JS에서 더 큰 프로그램을 개발하기위한 좋은 무료 IDE가 없기 때문에 JS에서만 문제가되지는 않습니다. 무료 인 Eclipse 만 알고 있습니다. 다른 좋은 방법은 Microsoft의 Visual Studio이지만 무료는 아닙니다.

왜 무료입니까? 웹 브라우저 공급 업체가 데스크톱 앱을 온라인 앱으로 바꾸고 싶은 경우 (그들이 원하는 경우) 프로그래머에게 훌륭한 개발 도구를 제공해야합니다. 간단한 텍스트 편집기, JSLint 및 내장 된 Chrome 디버거를 사용하여 50,000 줄의 JavaScript를 만들 수 없습니다. 당신이 마코 히 스트가 아니라면.

1987 년 Borland가 Turbo Pascal 4.0 용 IDE를 만들었을 때 프로그래밍의 혁명이었습니다. 그로부터 24 년이 지났다. 안타깝게도 2011 년에 많은 프로그래머들이 여전히 코드 완성, 구문 검사 및 적절한 디버거를 사용하지 않습니다. 아마도 좋은 IDE가 거의 없기 때문일 것입니다.

웹 브라우저 공급 업체는 프로그래머가 Windows, Linux, MacOS, iOS, Symbian 등에 맞서 싸울 수있는 응용 프로그램을 만들고자하는 경우 적절한 무료 도구를 만드는 것이 좋습니다.


비주얼 스튜디오는 무료이며, 당신은 또한 코드, 아톰, 그리고 다른 훌륭한 IDE를 대 가지고, 나는 그냥 열심히보고되지 않은 생각
GideonMax

1

현실적으로 Javascript는 모든 브라우저에서 오랫동안 사용할 수있는 유일한 언어이므로 다른 언어를 사용하는 것이 좋지만 그 일이 일어나지 않습니다.

이 "표준화 된 VM"은 매우 커서 모든 주요 브라우저에서 채택해야하며 대부분의 사이트는 다른 많은 브라우저보다 웹 사이트에 더 적합하기 때문에 Javascript를 계속 사용합니다.

이 VM에서 각 프로그래밍 언어를 샌드 박스로 작성하고 각 언어가 시스템에 액세스하는 양을 줄이려면 언어를 많이 변경하고 많은 기능을 제거하거나 다시 구현해야합니다. Javascript는 이미 이것을 염두에두고 오랜 시간 동안 해왔습니다.



1

어떤 의미에서, 자바 바이트 코드와 같은 일반적인 것이 아니라 브라우저에서 Javascript와 같은 표현 언어가 더 개방적 인 웹을 의미합니다.


0

나는 이것이 쉽지 않은 문제 라고 생각합니다 . 우리는 JS에 갇혀 있다고 말할 수 있지만 jQuery, Prototype, scriptaculous, MooTools 및 모든 환상적인 라이브러리에서 실제로 그렇게 나쁜가?

JS는 최신 브라우저에서 사용되는 새로운 Javascript 엔진 인 V8, TraceMonkey, SquirrelFish를 사용하면 훨씬 가볍습니다 .

그것은 또한 입증 - 그래, 우리는 문제가 알지만, 우리는이 많은 초기 보안 문제와 같이 정리합니다. 브라우저가 루비 코드 또는 다른 것을 실행할 수있는 이미징. 보안 샌드 박스는 처음부터 완료해야합니다. 그리고 당신은 무엇을 알고 있습니까? 파이썬 사람들은 이미 두 번 실패 했습니다.

Javascript는 HTML 및 CSS와 마찬가지로 시간이 지남 에 따라 수정되고 개선 될 것이라고 생각 합니다. 프로세스는 길지만이 세상에서 모든 것이 가능한 것은 아닙니다.


글쎄, JS 샌드 박스에 대해 수행 된 모든 보안 검사는 바이트 코드에서 권한을 확인하는 것으로 수행 할 수 있으며 일반적으로 많은 텍스트를 보면서 이러한 작업을 수행하는 것은 어렵습니다. 표준 JS 대신 클라이언트에 바이트 코드를 전송하면 변경되지 않아야합니다.
GideonMax

0

"자바 스크립트가 현재 우리가 다루어야 할 실질적인 문제를 이해하고 있지 않다"고 생각합니다. 실제로 그것은 매우 강력한 언어입니다. 몇 년 동안 브라우저에 Java 애플릿이 있었으며 현재 어디에 있습니까?

어쨌든 클라이언트에서 작업하기 위해 "더러워 질"필요는 없습니다. 예를 들어 GWT를 사용해보십시오.


0

... 네 말 뜻은...

Java 및 Java 애플릿 플래시 및 Adobe AIR 등

일반적으로 모든 RIA 프레임 워크는 귀하의 요구를 충족시킬 수 있습니다. 그러나 모든 사람에게는 그것을 사용하기 위해 지불해야 할 가격이 있습니다 (브라우저에서 사용 가능한 런타임 또는 / 또는 독점 데스크탑 또는 순수한 데스크탑보다 적은 옵션) http://en.wikipedia.org/wiki/List_of_rich_internet_application_frameworks

웹 이외의 언어로 웹을 개발하려면 GWT가 있습니다 : Java 개발, Javascript로 컴파일


1
따라서 VM을 표준화하라는 제안은 어디에나있을 수 있습니다. JavaScript를 "웹용 기계 언어"로 사용하는 것은 엄청나게 비효율적이며 비효율적입니다.
newdayrising

원래 포스터는 브라우저가 다른 언어를 지원해야한다고 제안하지 않으며 Java를 js로 컴파일하는 대신 java를 VM으로 컴파일한다고 제안합니다.
기드온 맥스

0

그들은 모두 바이트 코드 인터프리터가있는 VM을 가지고 있기 때문에 바이트 코드도 다릅니다. {Chakra (IE), Firefox (SpiderMonkey), Safari (SquirrelFish), Opera (Carakan).

죄송합니다. Chrome (V8)은 IA32 머신 코드로 컴파일됩니다.


0

글쎄, 모든 브라우저가 이미 VM을 사용하고 있다고 생각하면 웹에서 VM 언어를 만드는 것이 그렇게 어려울 것이라고 생각하지 않습니다.
몇 가지 이유로 크게 도움이 될 것이라고 생각합니다.
1. 서버가 코드를 컴파일하기 때문에 전송되는 데이터의 양이 적고 클라이언트가 코드를 컴파일하는 데 시간을 허비하지 않습니다.
2. 서버가 코드를 준비하여 컴파일하고 저장할 수 있기 때문에 JS를 빠르게 컴파일하는 데 약간의 시간을 허비하려고하는 클라이언트와 달리 코드 최적화가 더 좋습니다.
3. 언어를 바이트 코드로 컴파일하는 것은 JS로 변환하는 것이 훨씬 쉽습니다.

마지막 메모 (누군가가 다른 의견에서 이미 말했듯이), HTML 및 CSS는 바이트 코드로 계산되는지 확실하지 않지만 더 간단한 언어로 컴파일되지만 서버에서 클라이언트로 컴파일 된 html 및 CSS를 보낼 수도 있습니다 파싱 ​​및 페치 시간 단축


-1

언어 인 IMO, JavaScript는 문제가되지 않습니다. JavaScript는 실제로 표현력이 뛰어나고 강력한 언어입니다. 고전적인 OO 기능이 없기 때문에 나쁜 평판을 얻는다고 생각하지만 프로토 타입 그루브가 많을수록 더 좋아합니다.

내가 본 것처럼 문제는 우리가 웹에서 지원 해야하는 많은 브라우저에서 비정상적이고 일관되지 않은 구현입니다. jQuery와 같은 JavaScript 라이브러리는 더러운 느낌을 완화하는 데 먼 길을 가고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.