클라이언트 측 브라우저 코드를 원하는 언어로 코딩 할 수 있습니까? [닫은]


15

나는 잔인하게 정직 할 것이다 : 나는 JavaScript로 클라이언트 측 코드를 작성하는 것을 싫어한다. 나는이 언어의 팬이 아닙니다.

브라우저가 CIL이나 JVM과 같은 중간 가상 머신이 아닌 프로그래밍 언어를 지원한다는 것은 어리석은 것 같습니다 . 후자는 프로그래머가 하나의 고정 된 사전 설정 언어가 아닌 선택한 언어로 (어느 정도) 작성할 수 있습니다. 이 언어는 CIL / JVM /으로 변경하기 만하면 모든 주요 브라우저를 업그레이드하는 데 필요한 것만으로 더 빠르게 발전 할 수 있습니다. 오래된 브라우저 환경에 영향을주지 않고 언어 기능을 추가 할 수 있습니다.

중간 언어가 가져 오는 엄청난 노력의 절약 은 잘 알려져 있습니다. JavaScript 이외의 것, 특히 이미 설계, 개발 및 최적화 된 가상 머신에서 브라우저 "스크립트"를 홍보하려는 이니셔티브가 있습니까? 운동량이 있습니까?


답변:


11

귀하의 질문에 대답하기 위해 웹 스크립팅을위한보다 응집력있는 언어를 선호하여 Javascript를 더 이상 사용하지 않으려는 노력이 있습니다. 구글은 그들의 다트 언어에 많은 관심을 기울이고있다 . Dart에는 이미 Chrome에 내장 된 자체 VM이 있지만 다른 브라우저에서 아직 VM을 채택했는지는 확실하지 않습니다. CoffeeScript 라는 상당히 유망한 언어도 있습니다 .

HaXe 라는 매우 야심 찬 프로젝트도 있습니다.이 프로젝트 는 단일 언어로 전체 개발 플랫폼을 통합하는 것을 목표로합니다.

Javascript를 싫어하는 사람은 혼자가 아니라고 생각합니다.하지만 곧 갈 것 같지는 않습니다. 실제로 Windows 8 HTML5 / JS 앱 등으로 많은 추진력을 얻고있는 것 같습니다. 언급 시작 :)


9
모든 것을 단일 언어로 통합하는 것은 원하는 것과 정확히 반대입니다. JavaScript가 아닌 다른 언어를 사용하여 현재와 동일한 상황을 유지합니다. 요점은 기존의 노력을 기반으로해야한다는 것입니다. IL / CLR은 잘 정립되어 있으며 이미 대부분의 플랫폼에 대해 고성능 JITter가 있으며 여러 컴파일러가 이미 여러 언어를 컴파일합니다. 웹을 21 세기로 가져 오려면 브라우저는 지속적으로 자신의 새로운 것을 구워 내고 처음부터 시작하는 대신 웹 브라우저를 사용해야합니다.
Timwi

3
@Timwi, CIL은 너무 무겁고 관료주의가 너무 많습니다. 전용 클래스가있는 전체 부풀린 바이트 코드 파일과 모든 부피가 큰 메타 데이터를 각각의 모든 onSomething이벤트 핸들러 에 첨부하는 것은 의미가 없습니다 . 간단한 스크립팅 언어의 10-20 문자를 구문 분석하고 해석하는 것이 훨씬 더 효율적입니다.
SK-logic

1
@ SK-logic : 당신은 CIL과 일반적으로 바이트 코드에 대해 완전히 잘못된 그림을 가지고있는 것 같습니다. 바이너리 메타 데이터가 JavaScript와 같은 고급 구문과 비교할 때 무엇이 ​​불필요하다고 생각하는지 모르겠습니다. 무엇보다도, 왜“각각의 모든 onSomething 이벤트 핸들러”인지 모르겠습니다. C # 프로그램은 모든 이벤트 핸들러에 대해 여러 어셈블리로 컴파일되지 않습니다.
Timwi

1
@Timwi, 나는 아침 식사로 ECMA-335를 먹고 있으므로 CIL이 얼마나 부피가 큰지 잘 알고 있습니다. DOM 노드는 종종 동적으로 생성됩니다. CIL의 기존 모듈에 무언가를 추가 할 수있는 방법이 없습니다. 새 모듈을 정의해야합니다. 또한 클래스에 추가 할 수 없습니다. 대량의 메타 데이터가 첨부 된 새 클래스를 정의해야합니다. 그리고 읽기, JIT 및 CIL 실행 비용을 작은 텍스트 문자열을 구문 분석, 실행 및 즉시 버리는 것과 비교하십시오. 임시 해석이 어떤 종류의 편집보다 훨씬 효율적인 경우가 많이 있습니다.
SK-logic

2
@Timwi, 바이트 코드를 공통 분모 및 통신 형식으로 사용할 것을 제안하고 있습니까? 내 요점은 CIL의 현재 사양이 거의 쓸모가 없다는 것입니다. ExpandoObject는 관련이 없습니다. 그리고 구문 분석 복잡성에 대한 견해가 가려져 있습니다. CIL 모듈에는 자체 어셈블리 참조 테이블, 메타 데이터 토큰 테이블 및 클래스 및 메소드 만 포함됩니다. 사소한 고급 언어의 문자열을 해석 하여이 모든 부피가 큰 물건을 읽고 JIT하는 데 필요한 노력을 비교하십시오. 파싱 ​​비용은 거의 제로입니다. 두 가지 접근법을 모두 시도하고 자신을 비교하십시오.
SK-logic

5

Javascript 자체는 다른 언어를 컴파일 할 수있는 가상 머신을 정의하는 중간 언어로 볼 수 있습니다. GWT와 같은 프로젝트에서이 개념은 이미 시작되었습니다. 처음부터 디자인 한 것이 아닐 수도 있지만 이미 "좋아하는 언어"를 Javascript로 컴파일 할 수있는 현실이되고 있습니다.


5

본질적으로, 아닙니다. 당신은 Javascript에 거의 갇혀 있습니다.

과거에는 다른 언어 (자바 애플릿, vbscript 등)를 탑재하려는 노력이 있었지만, 이들 각각은 자바 스크립트가 통합 되어있어 자바 스크립트가 가진 매력을 얻지 못했습니다 .

참조하는 것을 빌드하는 유일한 방법은 가상 머신에서 실행되고 컴파일 된 클라이언트 측에서 실행 된 스크립트 언어를 작성하는 것입니다. 각 브라우저는 모든 코드가 모든 브라우저에서 실행되도록 가상 머신을 자체 코드베이스로 구현해야합니다. 그런 다음 모든 브라우저가 동일한 방식으로 명령을 실행하도록 일종의 표준이 있어야합니다. 물론 브라우저는 독립적으로 생성되므로 개발자가 염두에 두어야 할 단점이있을 수 있습니다.

그러나 지금 우리는 Javascript를 설명했습니다.

결국, 당신의 선택은 :

  1. 자바 스크립트에 익숙해지다
  2. Javascript로 컴파일되는 언어를 사용하십시오. (여전히 옵션 1로 돌아가는 Javascript를 확인하려고합니다.)
  3. actionscript (Flash), ActiveX, java applet, .Net (SilverLight)과 같이 브라우저에 플러그인으로 존재하는 언어를 사용하십시오. 이렇게하면 여러 공급 업체 / 언어 구현에서 문제가 발생하지 않지만 언어 는 통합 되지 않습니다 .

기본적으로 통합 언어를 원한다면 Javascript가 붙어 있습니다.


2
또 다른 선택은 자바 스크립트로 컴파일하고 사용하는 언어를 사용하는 것입니다.
Jetti

@Jetti CoffeeScript 를 생각하고 있습니까? "골든 규칙"이라고하는 모토는 "모토로라" 입니다. 그러나 본질적으로 Javascript 인 것을 작성하고 있다면 실제로 Javascript를 작성하고 있지 않습니까? jQuery는 더 깨끗하고 사용하기 쉽기 때문에 자바 스크립트가 아니라고 주장하는 것과 같습니다.
Richard


@Jetti 아마 그들은 잘 작동 할 것입니다. 그러나 브라우저 간 지원이 필요하기 때문에 그중 하나를 추천하고 실제로 생성 된 자바 스크립트를 확인하지 않는 것이 좋습니다.
Richard

1
Javascript는 완전히 끔찍한 중간 언어이며 일관되게 실행하기가 매우 어렵습니다.
Milind R

4

실제로 Ecma 표준에 설명 된대로 Javascript를 싫어하지는 않지만 다양한 브라우저 에서 엉뚱한 버그, 버그 및 wtfs와 함께 끔찍한 구현을 싫어 합니다 . 서버 측 자바 스크립트는 실제로 매우 즐겁습니다. 또한 DOM 모델은 클라이언트 측 자바 스크립트의 고통의 80 %의 원인입니다.

여전히 다른 언어를 사용하려면 기본적으로 Java를 작성하고 (추악한) javascript 또는 JS에 대한 구문 설탕 인 CoffeeScript ( JS로 컴파일)로 컴파일 하는 GWT 를 사용할 수 있습니다 .


9
나는 romkyns에 대해 말할 수는 없지만, (자바 스크립트 자체를 싫어 뿐만 아니라 당신이 언급 한 문제에 대한). 객체 지향적이지 않으며 정적 타이핑, 유용한 오류 처리 및 현대적인 기능의 유용한 프레임 워크가 없습니다. 또한 일관성이없고 다루기 힘들다. 그건 그렇고, JS, 세미콜론 삽입, 가장 미움 기능 이다 은 ECMA 표준에서.
Timwi

1
@Timwi는 함수 기반이며 원하는 경우 OO 코드를 작성할 수 있습니다. 정적 타이핑은 좋지만 코드가 제대로 작성되면 (작은 함수, 적절한 범위 지정) 문제가되지 않습니다. 세미콜론 삽입에 관해서는, 나는 가벼운 성가심이라고 생각합니다. {다른 라인에서 객체를 반환하고 열었 기 때문에 한 번만 물었습니다. 어떤 "현대 기능의 프레임 워크"가 빠져 있습니까?
CaffGeek

2
JavaScript 자체는 최고의 언어가 아닙니다 (정중하게 말하면). 나는 객체 지향적 인 것들 (더 적은 것-더 낫다), 동적 유형 시스템 (안타깝게도 이런 종류의 스크립팅 언어에 실제로 필요하다)에 대해서는 신경 쓰지 않지만, 진술 의 존재 와 적절한 부족 목록과 튜플은 성가시다. JavaScript로 작성하고 JavaScript를 대상으로하는 컴파일러를 구현하기위한 것입니다.
SK-logic

2
@Timwi : 당신이 항상 그런 것은 아니지만, 당신은 오브제 지향적 인 것을 나쁜 것으로 보지 않습니다. OOP를 개발 패러다임의 은탄으로 보지 마십시오. JS 나 스칼라와 같은 기능적 접근법도 훌륭합니다. JS에서 OOP를 가질 수 있지만 가장 큰 차이점은 클래스 기반 프로그래밍 대신 프로토 타입 기반 프로그래밍이라는 점입니다. OOP는 광범위한 이름이며 Java / C #으로 제한되지 않습니다. 프로토 타입 기반은 클래스 기반과 다르며 잘 사용되며 클래스 기반만큼 강력합니다.
Clement Herreman

2
@ClementHerreman : JavaScript는 클라이언트 측으로 제한되지 않지만 이 토론 은 클라이언트 측에 관한 것 입니다. JavaScript 프로토 타입 기반으로 제한되며 IL에 비해 단점으로, 거의 모든 언어를 사용할 수 있습니다.
Timwi

2

이 질문은 때때로 나타납니다.

Javascript 대신 스크립트 태그에 다른 언어가없는 이유는 무엇입니까?

당시 IE는 VB를 Javascript의 대안으로 소개했습니다. 나는 이것이 어떻게 표준 지옥으로 나아갈 수 있는지 이미 알 수 있다고 생각합니다 ...

그렇다면 일반적인 표준 중급 언어는 어떻습니까?

가까운 미래에 중간 바이트 코드 언어가 보이지 않는 이유를 설명하는 Brendan Eich의 오래된 팟 캐스트가 있습니다.

http://www.aminutewithbrendan.com/pages/20101122

http://news.ycombinator.com/item?id=1893686

기본적인 문제는 CIL 및 JVM 바이트 코드와 같은 중간 언어가 일반화되지만 대부분의 경우 너무 낮은 수준으로 컴파일되어 원래의 고급 언어에 바인딩되어 있다는 것입니다. 예를 들어 JVM에서 테일 재귀 함수를 실제로 구현할 수 없습니다. 저수준 바이트 코드 추상화에 너무 일찍 결합하면 구현할 수없는 다른 언어 기능이나 구현 선택 사항은 무엇입니까?

한편 자바 스크립트는 의미론을 구축하고 여러 가지 다른 효율적인 구현을 지원하는 유연한 고급 언어입니다. 미래에 우리가 볼 수있는 것은 Javascript 그 자체가 중간 언어입니다 . 불행히도 이것은 다소 미숙하고 오늘날 현재 JS로 컴파일되는 언어는 거의 없습니다.


그러나이 인수는 JVM 및 CIL에 적용되는만큼 JavaScript에도 적용됩니다. :) JavaScript의 유일한 방법은 모든 브라우저에서 이미 지원한다는 것입니다.
Roman Starkov

요점은 더 미묘합니다. Javascript는 대부분의 중간 언어보다 높은 수준으로 설명되므로 구현시해야 할 일을 더 많은 여유가있게됩니다. (물론 이것은 장미의 모든 바다가 아닙니다. 웹에 대한 IL에 대해 처음으로 생각하는 것이 아니며 그렇게 간단하지 않다는 것을 지적하고
싶었습니다

1

예. 이미 Dart, Coffeescript 및 Java를 Javascript로 컴파일 할 수 있습니다. Javascript 바이트 코드를 생성하기위한 LLVM의 컴파일러 백엔드 인 Emscripten이 있습니다 (LLVM은 상당히 많은 언어를 처리합니다).

그러나 짧은 시간이 아닌 JS로 컴파일하는 것 외에. IE6는 10 살이며 여전히 발로 차 있습니다. 현재 사용중인 브라우저 (다른 언어를 지원하지 않음)가 오래 지속되지 않기를 희망하지만 몇 년 동안 지속될 것입니다. "우리는 여전히 자바 스크립트 만 지원하는 브라우저를 지원해야합니다. CSS3 없이도 사이트가 작동하지만 클라이언트 측 스크립트 없이는 작동하도록 노력하는 것보다 훨씬 어려운 방식으로 자바 스크립트를 사용해야합니다. "


0

운이 좋을 수도 있습니다. 이것은 webkit-dev 포럼에서 제출의 첫 번째 단락입니다.

오늘날 많은 언어가 웹에서 실행되도록 JavaScript로 컴파일됩니다. 대안으로, 우리는 WebKit의 다른 언어 런타임이 JavaScript와 함께 웹 페이지에서 실행될 수 있도록 실험하고 있습니다 ...

나머지 메시지는 여기 에서 볼 수 있습니다 .


0

JavaScript는 브라우저의 핵심이며, 새로운 시도의 대부분이 JavaScript를 생성하는 이유입니다 (CoffeeScript는 분명한 예입니다).
GWT에서는 클라이언트 측 로직을 Java 프로그래밍 언어로 코딩하고 툴킷은 JavaScript를 생성합니다.

ClojureScript는 Lisp 코딩을 사용하는 경우 흥미로운 프로젝트입니다.

따라서 JavaScript가 무엇인지 여기에 있습니다. (웹의 코볼?)


0

"어떤 고객이든 원하는 색상으로 자동차를 칠할 수 있습니다." -- 헨리 포드

이미 자바 스크립트를 대상으로하는 많은 컴파일러가 있으며, 자바 스크립트 컴파일하는 모든 언어 를 선택할 수 있습니다 .

중간 언어의 가치를 설명하는 링크는 네트워크를 통해 제공되고 클라이언트 컴퓨터에서 실행될 코드를 제공하는 것이 아니라 컴파일러 제품군을 구현할 때 해당 언어에 대해 설명합니다. Javascript는 그 형식에 가장 적합하지는 않지만 CIL 또는 Java 바이트 코드처럼 보이지 않습니다.

자바 스크립트가 싫다면 임베디드, 사이언 티픽 또는 게임 개발 공간으로 이동하여 C, Fortran 및 C ++가 휴식처를 지배하는 것이 좋습니다. LOB (기간 업무) 앱은 웹으로 이동하고 있으며 이는 더 많은 Javascript를 의미합니다.

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