웹 페이지에서 JavaScript를 정적으로 입력 한 대안이 실용적입니까?


9

동적 및 정적 타이핑에 대한 선호는 주로 맛의 문제이며, 다른 사람들은 다른 상황에서 다소 적합하다고 생각합니다.

내 질문은, 클라이언트 측 웹 페이지 기능 보강 등을 위해 JavaScript에 대해 정적으로 유형이 지정된 대안을 갖는 것이 기술적으로 가능할까요?


3
왜 안될까요?````
Josh K

2
모든 브라우저에서 구현해야하거나 이미 존재하는 가능성에 대해 가정적으로 정적 인 유형의 언어에 대해 이야기하고 있습니까?
user281377

2
Java 애플릿을 사용할 수 있다고 생각합니다.
David Thornley

@ammoQ 당신이 언급 한 것으로, 가상
Armand

@ 조쉬 몰라요. @David LOL 감사합니다!
Armand

답변:


22

그러한 것이 존재할 수 없었던 기술적 이유는 없습니다. 클라이언트 측 코드에 대한 특정 아무것도 그 의무 동적으로 입력 된 언어의 사용.


1
다트는 선택적인 정적 타이핑을 가지고 있지만 일반적인 자바 스크립트로 컴파일됩니다. www.dartlang.com
Nishant George Agrwal

16

다른 언어가 광범위하게 채택 될 가능성은 거의 없기 때문에 정적으로 형식화 된 JavaScript 버전 (예 : Java에 가까운 언어)과이를 일반 JavaScript로 변환하는 전처리기를 만드는 것이 가장 좋습니다.

예를 들어, 스크립트는 다음과 같습니다.

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

전처리 기는 모든 변수, 함수, 객체 등이 유형에 따라 올바르게 사용되는지 확인하고 스크립트를

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

모든 브라우저가 처리 할 수 ​​있습니다.


5
실용적인 접근 방식의 경우 +1
Gary Rowe

실제로이 질문은 실용주의에 관한 것이 아니라 이론에 관한 것입니다. 업데이트됩니다.
Armand

2
또한 형식 유추를 사용하는 것이 좋습니다.
Oliver Weiler

도우미 방법 : 매우 좋은 제안이지만, 예제가 너무 간단하기 때문에 형식 유추로 인해 정적 버전이 동적 버전과 매우 유사하기 때문에 예제를 변경하지 마십시오.
user281377

4
정적으로 유형이 지정된 자바 스크립트가 구문 적으로 다른 것보다 자바에 매우 가깝다고 생각하지 않습니다. Javascript와 Java는 정적 입력과 동적 입력 (클래스 기반 및 프로토 타입 기반 OO)에 비해 많은 차이점이 있습니다. 샘플 코드는 클래스 기반 인 것으로 보이므로 "staticjavascript"는 해당 언어의 잘못된 이름이며 오히려 "클라이언트 측 java"와 같은 이름이어야합니다. 그래도 자바 스크립트로 컴파일하는 경우 +1합니다 (Google Web Toolkit은 자바를 자바 스크립트로 컴파일합니다).
sepp2k

8

내 질문은, 클라이언트 측 웹 페이지 기능 보강 등을 위해 JavaScript에 대해 정적으로 유형이 지정된 대안을 갖는 것이 기술적으로 가능할까요?

확실한. 구글 웹 툴킷은 그냥 생각 ... 자바 스크립트 자바를 정적으로 입력 된 컴파일합니다 모든 아름다움과 자바의 유연성, 기계 생성 된 자바 스크립트의 모든 성능!

심각하게도 모든 종류의 언어에 대해이 작업을 수행 할 수 있으며 많은 사람들이 시도했습니다 (C 및 C # 용 컴파일러가 있거나 이미 있습니다). 최종 결과의 실용 여부는 달성하려는 목표에 달려 있습니다. Google은 매우 큰 클라이언트 측 앱을 개발하기위한 일관된 플랫폼을 갖추고 있으며 자체 자바 스크립트 엔진을 사용하여 부팅합니다. 호버 효과에 이러한 짐승을 채택하고 이상한 AJAX 호출은 단순히 형식화되지 않은 코드로 사는 법을 배우는 것보다 훨씬 많은 고통을 초래한다는 것을 알 수 있습니다 ...


3
당신이 GWT의 "이점"에 대해 농담하고 있는지 완전히 말할 수는 없습니다. 당신이 있다면, 브라보. GWT와 함께 일하는 것은 제 인생에서 가장 열광적 인 경험 중 하나였습니다.
Nicole

@Renesis : Javascript 및 브라우저 호환성으로 작업하는 것이 이미 화려하지 않은 것처럼? 그러나 단일 이미지로 여러 이미지를 다운로드 한 다음 클라이언트에서 잘라내는 등 매끄러운 기능이 있습니다.
Macneil

1
@Macneil 그들은 지금까지 이것을 고쳤을 수도 있지만 Sprites로 작업 할 때 원하지 않는 다른 CSS 배경 속성을 자동으로 작성했기 때문에 모든 이점을 거의 무시했습니다. .
Nicole

6

정적 형식 언어의 장점은 대부분 컴파일시 실현됩니다. 언어가 클라이언트에서 통역 될 경우, 많은 이점이 사라집니다. 서버에서 컴파일하는 경우 클라이언트에서로드하고 실행하는 방법을 알아야합니다 (ActiveX 컨트롤 생각). 하이브리드 방식 (일부 중간 토큰 형식으로 컴파일)을 사용할 수는 있지만 기본적으로 Java 애플릿으로 돌아갑니다.


2
가능 하지 않은 경우에 대답하는 것이 아니라 가능한 이유를 설명하는 +1

4

이미 존재합니다.

ActionScript 3 (Flash 및 Flex의 스크립팅 언어)은 강력한 유형을 구현하는 ECMAScript의 방언이며 JavaScript와 동일한 클라이언트 측 방식으로 사용할 수 있습니다 (AS3에 플래시 플러그인이 필요하다는 점과 컴파일됩니다). 나는 요즘 개인적으로 그것을 피하려고 노력하지만, 당신이 "정적"캠프에 있다면 소용돌이를 줘라.

이것이 주요 질문에 대한 답입니다. 이제 우리는 두 번째 질문이 "Flash입니까?"가됩니다. 대답은 "예"이며 몇 가지 "if"와 "but"가 있습니다

  • ... 어떤 이유로 든 코드를 숨겨야하는 경우.
  • ... 매우 매우 (과거의 jQuery 레벨) 높은 수준의 상호 작용을 원한다면
  • ...하지만 HTML5가 없어도 브라우저 간 호환성이 최근에 훨씬 향상되고 있습니다.
  • ...하지만 HTML5는 곧 나옵니다.
  • ...하지만 정적 타이핑 / 컴파일의 큰 장점 중 하나는 해석과 달리 속도가 최적화를 통해 허용되는 추가 속도입니다.

AS3은 폐기 된 ES4를 기반으로합니다.
gsnedders

3

이론적으로 원하는 페이지에 모든 스크립트를 붙일 수 있습니다. 결국 <script>태그에는 type속성이 있습니다.

유일한 장벽은 다른 브라우저에서 구현 측면에서 충분한 시장 점유율을 확보하여 사용 가치가 있다는 것입니다.


그렇습니다. 현재로서는 거의 불가능합니다.


그렇다면 정적 타이핑에 문제가 없습니까? 나는이 잡기의 실용성에 대해 너무 귀찮게하지 않았습니다.
Armand

1
@Alison : 원하는 텍스트 콘텐츠를 스크립트 태그에 넣을 수 있습니다 (단, 예외는 문자 시퀀스를 포함 할 수 없음 </script>). 정말로 원한다면 Brainf * ck 코드를 넣을 수 있습니다. 그런 다음 사용하려는 브라우저에서 선택한 언어에 대한 통역사를 구현하기 만하면됩니다.
아논.

@곧. 정말 고마워요 그렇게 쉬운 일이라면 아마도 어딘가에 있었을 것입니다. 나는 <script type="vbscript">옛날 옛적에 기억 한다 ...
Armand

앨리슨 : vbscript는 IE 전용이었으며 일부 사람들은 IE의 시장 점유율이> 90 % 일 때이 스크립트를 사용했습니다. 오늘날 IE의 시장 점유율은 약 50 % 정도이며 아마도 일부 지역에서는 더 적을 것입니다. 브라우저가 시장 점유율을 다시 확보하지 않는 한 새로운 클라이언트 측 스크립팅 언어와 같은 일은 일어나지 않을 것입니다.
user281377

@Alison : Internet Explorer는 여전히 스크립팅 언어로 VBScript를 지원합니다 ... 알아 두어야합니다. 여기에는이를 사용하는 인트라넷 사이트가 있습니다 (따라서 Internet Explorer가 필요 합니다)
Dean Harding

2

실용적입니까? 아니.

가능합니까? 예!

정적 인 형식의 JavaScript 대안을 개발하는 데는 시간이 오래 걸릴 것입니다. 최악의 경우 기존 브라우저에서 클라이언트 스크립팅 언어를 구현하도록 설득 할 수 없으며 직접 작성해야합니다.


설명 할까?
back2dos

후속 단락을 추가했습니다.
Marcie

나는 그것이 실용적이지 않을 수 있는 유일한 이유는 현재 상황이라고 덧붙였다. Javascript가 출시되기 직전의 시점으로 돌아 가면 상황이 달라집니다.
yakiv


1

haXe와 같은 언어를 사용하여 정적으로 입력 된 방식으로 코드를 작성하고 자바 스크립트로 내보낼 수 있습니다. JavaScript는 매우 빨라지고있어 출력 언어로 충분합니다. 정적으로 유형이 지정된 언어를 웹 표준으로 시행하는 것은 거의 불가능합니다. 정적 타이핑을 JavaScript에 도입하려는 시도 는 폭 넓은 논의로 인해 실패했습니다.


1

기술적으로 가능할까요? Java로 구현한다면 성능이 크게 저하되지 않으면 서 "매우 힘들지만 가능하다"고 말합니다.

실제로 Java에서 정적 유형 DSL을 필기로 작성하고 있으며 런타임 유형 확인을 피하는 유일한 방법은 제네릭을 사용하고 "확인되지 않은"경고를 억제하는 것입니다. 다차원 배열 (클래스 매개 변수는 컴파일 타임에 알아야하므로 본질적으로 유한하지만 다차원 배열은 무한한 유형의 유형을 나타냅니다 ...) 여전히 불행히도 이것을 알아 내려고 노력하고 있습니다-확실합니다. 사용자 정의 클래스와 비슷한 문제가 발생합니다.

문제는 이런 종류의 문제에 계속 걸려 넘어 지지만 잠시 동안 앉아서 좋은 해결책을 제시한다는 것입니다. 따라서 정적 입력 (런타임 유형 검사 없음) 의 성능 이점을 얻으려면 매우 어렵지만 불가능하지는 않다고 말하고 싶습니다. 성능을 빼고는 힘들지만 매우 가능하다고 말합니다.

나는 그것이 오래된 질문이라는 것을 알고 있습니다. 단지 내 경험이 누군가에게 가치가 있다고 생각했습니다.


0

기술적으로 사용자 에이전트 (브라우저)가 지원하는 모든 스크립팅 언어로 클라이언트 측 스크립트를 작성할 수 있습니다. 실제로 널리 지원되는 언어는 JavaScript / ECMAScript뿐입니다. 이 단계에서 브라우저 제작자들이 새로운 언어를 구현하고 지원하도록 설득하는 것은 성공할 것 같지 않습니다. 따라서 정적으로 유형이 지정된 새로운 클라이언트 측 언어를 사용하려면 새 언어를 JavaScript로 변환하거나 JavaScript에서 해당 언어에 대한 인터프리터를 구현해야합니다.

이미 이와 같은 작업을 수행하는 여러 프로젝트가 있습니다. 예를 들어, 다른 답변 중 하나에서 언급 한 Google Web Toolkit .


0

현실 세계에서 사용되는 모든 브라우저가 새로운 언어를 지원하도록하기를 희망하지 않습니다. 언어는 jscript로 컴파일해야합니다.

웹의 모든 예제가 jscript로되어 있으므로 언어는 대부분 jscript와 비슷해야합니다.

정적 검사기로 확인하지만 유효한 jscript 인 jscript의 "하위 세트"가있는 범위가 있다고 생각합니다. 예 :

  • 모든 변수에는 처음 사용하기 전에 유형이 있다는 주석이 있어야합니다.
  • 변수의 모든 사용법은 위와 같이 유효해야합니다.
  • 주석에서 선언되지 않은 함수 / 클래스는 사용할 수 없습니다 #
  • js 파일 맨 위에있는 주석에는 종속 된 다른 모든 js 파일이 나열되어야합니다.

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