JVM 의 동적 언어 지원 안내
버 전 6 부터 JVM 은 현대 동적 언어 (스 크 립 트 언어 라 고도 함) 로 확장 되 었 습 니 다.자바 8 의 발행 은 이 분야 에 더 많은 동력 을 제공 했다.이러한 지원 의 필요 성 을 느끼 는 것 은 자바 가 언어 로 서 고유 하 게 정적 유형 이기 때문이다.모든 것 은 번역 할 때 결정 된다.다른 한편, 동적 언어의 행 위 는 실행 할 때 정 의 된 것 이다.결과적으로 JVM 이 자바 에 대한 지원 은 자바 프로그래머 에 게 새로운 시 야 를 열 어 주 었 다. 우 리 는 그 중에서 플랫폼 의 정적 과 동적 측면 을 결합 시 켜 자바 응용 프로그램 에서 효과적으로 사용 할 수 있다.본 고 는 JVM 의 동적 언어 지원 목록 을 탐색 하 였 다.
동적 언어 지원
정적 유형 화 된 언어 는 모든 유형 화 된 정보 (예 를 들 어 클래스, 구성원, 함수 파라미터, 반환 유형 값 등) 를 컴 파일 할 때 확정 하 는 것 을 의미한다.자바 컴 파 일 러 는 이 정 보 를 사용 하여 바이트 코드 를 생 성 합 니 다.
다른 한편, 동적 언어 (스 크 립 트 언어) 는 스 크 립 트 엔진 이 실 행 될 때 모든 종류의 검 사 를 수행 합 니 다.별도의 컴 파일 절차 가 없습니다.명령 시퀀스 는 해석 기 에서 실 행 된 다음 중간 코드 를 만 들 기 위해 해석 합 니 다.변 수 는 JVM 에서 사용 하 는 자바 바이트 코드 로 컴 파일 할 때 기호 표 에 저 장 됩 니 다.동적 언어의 특징 은 코드 를 작성 하면 바로 배치 할 수 있다 는 것 이다.해석 형 이기 때문에 대기 시간 이 거의 없 으 면 디 버 깅 하기 쉽다.자바 에 서 는 자바 x. script 을 포함 하여 모든 클래스 와 인 터 페 이 스 를 제공 합 니 다. 자바 Scripting API 라 고 부 르 며 동적 언어 를 지원 합 니 다.
정적 과 동적 두 언어 는 모두 많은 장점 과 단점 을 가지 고 있다.그러나 요점 은 자바 의 정적 특성 때문에 자바 가 지금까지 이익 을 얻 지 못 했다 는 것 이다.특수 지원 하에 JVM 을 재건 하 는 것 은 쉽 지 않다.아마도 진정한 도전 은 실행 중인 시스템 을 실현 하 는 데 있 을 것 이다. 이 시스템 은 컴 파일 과정 이 끝 난 후에 방법 으로 적당 한 실현 을 선택 할 수 있다.여기에서 우 리 는 JVM 이 유행 하 는 동적 언어 지원 을 소개 했다.
JVM 의 JavaScript
JavaScript 는 JavaScripting API 가 지원 하 는 가장 유행 하 는 스 크 립 트 언어 입 니 다.현재 모든 웹 브 라 우 저 는 이 언어 를 지원 합 니 다.ScriptEngine 인터페이스 에 있 는 eval 방법 은 순수한 자바 String 으로 작 성 된 스 크 립 트 를 실행 하 는 데 사용 할 수 있 습 니 다.
1 package com.mano.example;
2
3 import javax.script.*;
4
5 public class ScriptingDemo {
6
7 public static void main(String[] args) {
8
9 final ScriptEngineManager manager = new
10
11 ScriptEngineManager();
12
13 final ScriptEngine engine =
14
15 manager.getEngineByName("js");
16
17 try {
18
19 System.out.println(engine.eval("engine.getClass()
20
21 .getSimpleName()"));
22
23 System.out.println(engine.eval("5+5"));
24
25 engine.put("x", 123423558);
26
27 engine.put("y", 4);
28
29 engine.eval("var result = x.toExponential(y);");
30
31 System.out.println(engine.get("result"));
32
33 }catch (ScriptException e) {
34
35 e.printStackTrace();
36
37 }
38
39 }
40
41 }
네트워크 나 파일 에 저 장 된 스 크 립 트 를 Reader 로 실행 할 수도 있 습 니 다.스 크 립 트 를 단독 파일 에 저장 하 는 것 이 유리 합 니 다.자바 코드 를 다시 컴 파일 하지 않 고 스 크 립 트 를 각각 디 버 깅 하고 수정 할 수 있 습 니 다.단, 짧 은 스 크 립 트 에 대해 서 는 자 바스 크 립 트 를 String 대상 에 넣 을 수 있 습 니 다.
1 package com.mano.example;
2 import javax.script.*;
3 import java.io.*;
4 import java.nio.file.*;
5 public class ScriptingDemo {
6 public static void main(String[] args) {
7 finalScriptEngineManager manager = new
8 ScriptEngineManager();
9 final ScriptEngine engine =
10 manager.getEngineByName("js");
11 Path scriptFile = Paths.get("sample.js");
12 try {
13 Reader reader = Files.newBufferedReader(scriptFile);
14 engine.eval(reader);
15 }catch(IOException | ScriptException e) {
16 e.printStackTrace();
17 }
18 }
19 }
eval 을 통 해 스 크 립 트 를 호출 하지만 평가 자 와 상 태 를 공유 하지 않 습 니 다.이것 은 독립 된 코드 다.JVM 이 사용 하 는 기본 스 크 립 트 엔진 은 Nashorn 이지 만 곧 GraalVM 으로 대 체 될 것 입 니 다.API 측면 에 서 는 별 차이 가 없 지만 성능 과 확장 성 측면 에서 GraalVM 이 할 수 있 는 일이 있 을 것 이다.
JDK 가 설치 한 bin / 폴 더 에는 jjs (추천 하지 않 음) 라 는 명령 행 도구 가 있 습 니 다.이 도 구 는 자 바스 크 립 트 파일 을 직접 실행 하 는 데 사용 할 수 있 습 니 다.가령
1 $ jjs sample.js
비록 여기에 표 시 된 예 는 매우 간단 하지만, 우 리 는 더 많은 일 을 할 수 있 고, 더욱 의미 있 는 방식 으로 자 바스 크 립 트 와 자 바 를 결합 할 수 있다.
JVM 에 Groovy 사용 하기
Apache Groovy 는 동적 언어 로 자바 와 병존 한 지 오래 되 었 다.정적 형식 과 컴 파일 기능 을 사용 하여 입력 할 수 있 는 기능 이 강 합 니 다.자바 프로그램 과 잘 통합 되 어 있 으 며 자바 스 크 립 트 처럼 사용 할 수 있 습 니 다.그것 은 자바 의 확장 으로 설계 되 었 다.언어, 대상 모델, 런 타임 라 이브 러 리 는 오래된 버 전 을 유지 합 니 다.정적 및 동적 형식 입력 을 지원 하 며 XML 과 HTML, 정규 표현 식, 목록 과 관련 배열 에 로 컬 지원 을 합 니 다.아래 코드 는 자바 가 아 닌 Groovy 스 크 립 트 입 니 다.문법 이 좀 비슷 하 다.자 연 스 럽 게 자바 프로그래머 는 거의 평탄 한 학습 곡선 을 빠르게 파악 할 수 있다.Groovy 스 크 립 트 엔진 은 자바 표준 API 라 이브 러 리 에 대한 완전한 접근 권한 을 가지 고 있 습 니 다.따라서 다른 바 인 딩 없 이 자바 API Date 기능 을 호출 할 수 있 습 니 다. 다음 과 같 습 니 다.
1 package com.mano.example
2 class SimpleApp {
3 static void main(String[] args){
4
5 Date date = new Date();
6 System.out.println(date.toString());
7 for(int i=0;i<10;i++)
8 println(i)
9 }
10 }
명령 행 에서 다음 코드 를 실행 할 수 있 습 니 다.
1 $ groovy SimpleApp.groovy
groovyc 가 있 습 니 다. Groovy 컴 파일 러 입 니 다. Groovy 소스 코드 를 바이트 코드 로 컴 파일 하 는 데 사 용 됩 니 다. 자바 c 와 같 습 니 다.이것 은 클래스 파일 만 만 들 고 JVM 이 일반적으로 실행 하 는 다른 종류의 파일 처럼 파일 을 실행 할 수 있 습 니 다.이것 은 명령 행 도구 이자 Groovy 스 크 립 트 를 컴 파일 하고 실행 하 는 가장 간단 한 방법 입 니 다.이렇게:
1 $ groovyc sample.groovy
JVM 의 Ruby
루비 는 웹 개발 분야 에서 유 행 했 던 동적 언어 였 다.최근 에는 현대 웹 애플 리 케 이 션 개발 에 중대 한 혁신 을 가 져 왔 다.JVM 플랫폼 의 Ruby 구현 을 Jruby 라 고 한다.그것 은 자바 와 루비 에서 파생 된 대량의 라 이브 러 리 를 가지 고 있 는 고성능 과 다 중 스 레 드 기능 으로 유명 하 다.Groovy 와 비슷 해 자바 와 루비 사이 의 커 다란 상호작용 성 을 가 져 왔 다.
Jruby 에서 단 계 를 실현 하 는 간단 한 방법 은 다음 과 같다.
1 def fact(num)
2 if num==0
3 return 1
4 else
5 return num*fact(num-1)
6 end
7 end
JVM 의 Python
파 이 썬 은 대상 을 향 한 동적 언어 로 최근 많은 사람들 을 끌 어 들 였 다.과학계 에서 널리 사용 되 고 있 으 며 방대 한 도서관 창고 와 웹 개발 부터 자연 언어 처리 까지 의 틀 로 유명 하 다.Python 의 JVM 구현 을 Jython 이 라 고 합 니 다.
Groovy 의 강 한 점 이 자바 의 문법 유사 성에 있다 면 Python 의 강 한 점 은 바로 문법 단순 성 이다.다음은 매우 사소한 시연 이다.
1 print "This is a simple code to demonstrate Jython"
2 i = 0
3 while i<10:
4 i = i+1
5 print "Value of i = ",i
Python 의 재 미 있 는 점 은 사람들 이 쉽게 사용 하기 위해 서 입 니 다.필요 에 따라 제공 할 수 있 는 충분 한 문서 와 도움 이 있 습 니 다.Jython 의 도움 으로 우 리 는 Python 의 기능 을 기 존의 자바 응용 프로그램 에 빈 틈 없 이 통합 할 수 있 습 니 다.
결론.
자바 응용 프로그램 은 현재 확장 가능 한 동적 언어 지원 을 이용 하여 충실 할 수 있 습 니 다.이외에 도 JVM 은 많은 다른 언어 를 지원 한다.몇 가지 예 만 들 면 Clojure, Kotlin, Scala.앞으로 더 많이 추 가 될 거 야.Nashorn 의 폐기 와 GraalVM 의 합병 은 언어 지원 에 있어 서 새로운 것 을 가 져 올 수 있 습 니 다.현재 자바 응용 프로그램 은 우호 적 인 환경 에 모인 다양한 언어 에서 이득 을 볼 수 있다.JVM 도 언어 에 독립 된 플랫폼 으로 만 드 는 것 이 목적 일지 도 모른다.
본문 은 여기까지 나 누 었 다.읽 어 주 셔 서 감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.