Judoscript
Judoscript| 패러다임 | 프로시저, 객체 지향, 스크립팅 |
|---|---|
| 설계자 | 황진보 |
| 개발자 | 황진보 |
| 처음 등장한 | 2001년 11월 |
| 안정된 릴리스 | v0.9 / 2005년 11월 |
| 타이핑 분야 | 다이내믹, 스태틱, 스트롱 |
| 플랫폼 | JVM |
| 면허증. | LGPL |
| 웹 사이트 | judoscript.com |
| 영향을 받다 | |
| SQR, Perl, JavaScript, Java | |
Judoscript는 주로 Java 플랫폼에서 스크립팅 작업을 위해 설계된 범용 프로그래밍 언어입니다.It was conceived and developed by James Jianbo Huang (simplified Chinese: 黄剑波; traditional Chinese: 黃劍波; pinyin:Huang Jiannbo)는 2001년 말에 시작되었습니다.Judoscript는 최초의 자바 스크립트 언어 중 하나였지만, 가장 두드러진 특징은 대담한 멀티 도메인 지원 철학과 관행입니다.
2005년 말까지 Judoscript는 지정된 애플리케이션 기능을 모두 완료했습니다.자바 스크립트 언어의 상황은 2003년 자바소프트가 독자적인 스크립트 언어를 만들겠다고 발표하면서 빠르게 변화했다.Judoscript의 개발은 JavaSoft의 Groovy 언어 출시가 임박했을 때 중단되었다.
역사
Huang은 People Soft에서 광범위하게 사용되는 상용 보고서 작성자인 SQR에서 일해 왔습니다.엄밀히 말하면, SQR은 문자 기반 보고서 및 데이터 조작을 작성하기 위한 SQL 및 보고서 작성 지침을 내장한 뛰어난 범용 스크립트 언어입니다.C로 기술되어 있어 거의 모든 종류의 주요 운영체제로 이식되며 모든 주요 RDBMS 데이터베이스와 연동됩니다.Java와 JDBC의 등장으로 Huang은 이러한 소프트웨어의 단일 버전이 SQR의 서로 다른 포트의 전체 어레이를 제거할 수 있다는 것을 금방 깨달았습니다.이것이 Judoscript 아이디어의 씨앗이었다.
1990년대 후반만 해도 임베디드 SQL은 새로운 아이디어가 아니었습니다.예를 들어 Oracle의 Pro*C는 바로 그 방법을 사용했습니다.놀랍게도 임베디드 SQL은 범용 언어에 내장된 도메인 고유(RDBMS) 기능입니다.Perl의 정규 표현도 텍스트 처리 영역에서 좋은 예입니다.Judoscript의 비전은 많은 인기 있는 프로그래밍 도메인에 일관성 있는 선언적 표현력을 가진 범용 스크립트 언어로 구체화되기 시작했습니다.밀레니엄 전환기에 접어들면서 인터넷이 우리 생활에 침투하기 시작했고, 점점 더 많은 핵심 기술이 널리 채택되고 있었기 때문에 Judoscript에서 지원할 특정 도메인을 선택하는 것은 그리 어려운 일이 아니었다.어떤 면에서는, 이 비전은 적절한 시기에 나타난 것이다.Judoscript의 라이프 타임에 구현된 도메인 고유의 기능에는 JDBC 스크립트, SAX 스타일의 SGML 및 XML 스크립트, WSDL 스크립트, Ant 스크립트, 유니파이드 파일 시스템 및 아카이브 스크립트, Microsoft COM 스크립트, 네이티브 OS 실행 파일 실행, 메일 전송, HTTP 및 SCP 스크립트, 마지막 스크립트 등이 있습니다.Judoscript가 계속 성장한다면 NoSQL, AI 등과 같은 새로운 기술이 보급됨에 따라 점점 더 많은 도메인별 지원이 포함될 것으로 예상됩니다.
Judoscript는 JVM 기반의 스크립트 언어이며, 1등급 시민으로서 Java 스크립트를 보유하고 있습니다.Judoscript는 Ant 네이티브 지원을 개척하여 사용자가 Ant 생태계의 방대한 유틸리티 풀을 활용할 수 있도록 지원합니다.Java, Ant, WSDL, HTTP 및 Microsoft COM의 네이티브 스크립트 기능을 통해 Judoscript 사용자는 이종 소스 리소스를 쉽게 사용할 수 있습니다.Judoscript의 기본 언어는 매우 많은 JavaScript와 정적 클래스 선언입니다.다른 스크립트 언어와 마찬가지로 Judoscript에는 다양한 구문설탕, 여러 줄의 문자열 리터럴, XML 및 정규 표현 리터럴이 포함되어 있습니다.print진술서 등그러나 이러한 측면이 대부분의 다른 언어의 설계를 지배하고 있지만, 일반적인 프로그래밍 가능성은 언어의 핵심인 고유한 특징에 비해 덜 중요합니다.
Judoscript의 초기 전망은 2001년 말에 개발되기 시작했고, 첫 번째 버전은 11월에 발표되었습니다.Judoscript는 Rhino, BeanShell, Jython 등과 함께 Java 플랫폼용으로 특별히 설계된 최초의 범용 스크립트 언어 중 하나가 되었습니다.
2004년에 Judoscript는 버전 0.9에 접근했습니다.개발은 2005년까지 계속되어 대부분의 최종 기능이 구현되었습니다.주요 기능이 결여되어 있는 것은 오프라인 또는 실행 시 Java 바이트 코드를 생성하는 것입니다.이 바이트 코드는 이러한 언어가 버전 1.0에 도달하기 위해 필수적인 것으로 간주되었습니다.이를 위해 Huang은 Java 매크로 어셈블리 언어인 자메이카를 발명했습니다.하지만 Judoscript를 위한 이 작업은 결코 이루어지지 않았다.
JavaOne 2003에서 JavaSoft는 6월에 Java 플랫폼용 완전 소유 스크립트 언어를 만들겠다는 의도를 발표했습니다.이 독점적인 움직임은 대부분의 경쟁자들의 삶을 억압했다.그 결과 그루비어는 2007년에 첫 버전이 발표되었으며, 그루비어는 "jruby"에서 발음을 따온 것으로 보인다.내장된 Ant 지원은 Judoscript의 Ant 스크립트 기능과 시간순으로 연결되어 있습니다.그루비가 풀려나려고 했을 때, Judoscript는 앞으로 나아갈 추진력을 잃었다.2005년 말, 불과 4년 후, Judoscript의 개발은 중단되었다.
그럼에도 불구하고 Judoscript는 언어 디자이너와 애호가들에게 소중한 존재로 남아 있으며, 프로그래밍 언어 역사에서 유일하게 네이티브 도메인 고유의 기능이 내장된 범용 언어일 수 있습니다.그 이유는 나중에 더 자세히 설명하겠습니다.
언어 설계
Judoscript 언어의 디자인은 두 가지 다른 맛을 혼합합니다.무엇보다도, 이것은 객체 멤버에 액세스하기 위해 동적 타이핑과 점 표기법을 사용하는 일반적인 프로그래밍 언어입니다.절차적 패러다임과 객체 지향 패러다임을 모두 지원하여 정적 클래스 선언과 상속을 지원합니다.다양한 통사당 및 다용도print스테이트먼트는 스크립팅 언어의 특성을 나타냅니다.
Judoscript는 Java 리소스를 스크립팅할 수 있습니다.스태틱 타이핑 기능은 주로 오버로드된 Java 메서드를 호출하기 위해 도입되었습니다.
Judoscript와 다른 군중과의 거리를 두는 두 번째 맛은 각각 매우 다른 모양을 가진 많은 네이티브 도메인별 진술의 구현이다.값을 반환하는 사람도 있고 반환하지 않는 사람도 있습니다.이러한 특수 문장의 대부분은 프로그램 [1]내 어디에서나 정기 문장으로 사용할 수 있습니다.
필요에 따라서, 도메인 고유의 문장에 식을 짜넣을 수 있습니다.표현식은 문자열 및 XML 값과 같은 텍스트 리터럴에 포함되어 텍스트 템플릿이 될 수도 있습니다.
언어 기능 I: 강력한 스크립트 언어
기본 언어
Judoscript 기본언어는 변수 및 상수 선언, 흐름 제어문 및 객체 멤버에 액세스하기 위한 점 표기법에 대한 JavaScript와 거의 동일합니다.2개의 C++ 스타일의 코멘트 외에 3번째 폼이 있습니다./? ?/코드 청크를 디세블로 하는데 도움이 됩니다.함수 파라미터에는 기본값을 설정할 수 있으며 호출에는 명명된 파라미터 값을 사용할 수 있습니다.JavaScript와 마찬가지로 함수도 객체이며 값으로 전달될 수 있습니다.동적 프로그래밍은 다음을 통해 사용할 수 있습니다.eval그리고.evalExternal명령어를 지정합니다.[2][3][4]
객체 지향 프로그래밍
JavaScript와 달리 사용자 정의 클래스는 정적으로 선언되지만 데이터 구성원은 동적입니다.다중 상속이 지원되며 프로그래머는 잠재적인 다이아몬드 상속 문제를 처리해야 합니다.클래스 인스턴스를 다른 [5]유형으로 전환할 수 있습니다.
학급 노드 { 컨스트럭터 { 주장하다(이름. != 무효); // '이름'을 초기화해야 합니다. 아이들. = []; } 기능. add Child(자녀 추가) 어린아이 { 아이들..더하다(어린아이); } 기능. 문자열 { 돌아가다 이름.; } } 코드 구성
Judoscript는!include다른 스크립트렛을 포함하도록 지시합니다.이것은 Judoscript로 작성된 코드를 공유하는 유일한 메커니즘입니다.
Judoscript로 작성된 라이브러리를 작성하지 않기 위해 Java와 유사한 패키지 또는 다른 언어로 된 모듈을 지원하지 않는 것은 의도적인 것입니다.재사용 가능한 라이브러리는 Java로 작성하여 Judoscript(또는 Java 스크립트 언어)가 사용할 수 있도록 하는 것이 좋습니다.
언어 기능 II: Java 스크립트
자바 스크립트는 Judoscript의 1등급 시민입니다.다음은 가장 중요한 Java 스크립팅 기능 중 몇 가지 목록입니다.사용방법 및 [6]예에 대해서는 설명서를 참조해 주십시오.
Java 오브젝트 스크립팅
a = 신규 자바::자바.이용하다.해시 맵; a.놓다('날짜.', 날짜.(2001,1,1)); a.놓다('정수', 1); a.놓다('이중으로 하다', 10.01); a.놓다('문자열', '안녕, 세계!'); a.놓다('치수', 신규 자바::자바.아워트.치수(10,20)); 위해서 k 에 a.열쇠들.() { 인쇄 k:>10, ' = ', a.얻다(k); } 소품 = 신규 자바::특성.( a.b.c.d.e.f.g = 'a 스루 g', h.i.j.k.l.m.n = 'h 스루 n' ); 인쇄 소품; Java 스태틱메서드의 에일리어스
Java 정적 메서드를 Judoscript 함수로 별칭짓는 기능은 많은 내장 함수를 담당하는 중요한 메커니즘입니다.
기능. 받침대 위해서 자바::시스템..getProperty(); 기능. 지금이다 위해서 자바::시스템..current TimeMillis(); 기능. rt 위해서 자바::런타임.get Runtime(실행 시간)(); 인쇄 지금이다(), nl; 인쇄 받침대('138.class.패스'), nl; rt().gc(); Java 클래스를 값으로 사용
Java 클래스도 객체 값이며 변수 또는 상수에 할당할 수 있습니다.
컨스턴트 #종류들 = 자바::자바.sql.종류들; 필드 = [ '비트', '틴인트, '소형', 'INTEGER', '비긴트', '플로트', '진짜', '더블', '숫자, '10진수', 'CHAR', '바차', '롱바차', '날짜', '시간', '타임 스탬프', 바이너리, 바이너리, '롱바루INARY', '특수', '기타', 'JAVA_OBJECT', '구분', '구조', '어레이', 'BLOB', '찰칵', '참조' ]; 인쇄 'JDBC 유형(Java)', 시스템 속성('syslog.version'), ':'; 위해서 fld 에 필드 { 인쇄 fld:<13, ': ', #종류들.(fld); } Java 클래스 확장 및 Java 인터페이스 구현
Java 클래스를 확장하거나 Java 인터페이스를 구현하는 Judoscript 클래스를 정의할 수 있습니다.
학급 마이해시맵 확장 자바::해시 맵 { // 기존 메서드 재정의 테스트 인트 해시 코드() { 돌아가다 잘 하는 군요.해시 코드() ^ 1; } // 새로운 메서드. 스트링[] getKeys() { arr = []; 위해서 x 에 이것. { arr.더하다(x); } 돌아가다 arr.문자열 배열(); } // 새로운 메서드. 물건[] getValues(값)() { arr = []; 위해서 x 에 가치() { arr.더하다(x); } 돌아가다 arr.오브젝트 배열(); } } 익명 Java 인터페이스 어댑터를 생성하여 사용할 수 있습니다.
수입품 java.awt.틀; 수입품 java.awt.이벤트*; f = 신규 자바::틀; f.add Window Listener( 신규 자바::Window Listener { 무효 창 닫기(윈도 이벤트 e) { 퇴장 0; } } ); f.set Visible(진실의); 언어 기능 III: 특수 도메인 지원
언어의 이 부분이 Judoscript를 독특하게 만드는 것이다.각 주요 도메인 지원에 대해 간략하게 설명하겠습니다.보통은 예를 제시하겠습니다.
JDBC 스크립팅
JDBC 스크립트는 Judoscript의 핵심 기능이며 언어 자체의 주요 동기이기도 합니다.데이터베이스 조작을 직관적이고 [7]편리하게 합니다.
다음은 데이터베이스에 연결하여 일부 SQL 문을 실행하는 예입니다.
db::연결하다 로. 'jdbc:thin:@dbsvr:1521:dbname', '사용자', '합격'; 한다면 표외부('EMP') { db::sql: 떨어지다 테이블 emp; } db::sql { 만들다 테이블 emp(emp_no 정수 기본적인 열쇠, 이름 바샤르(100), // 첫번째 이름. 성_이름 바샤르(100), // 지난 이름. birth_date 날짜., --생년월일 급여 번호); -- 급여 만들다 색인 emp_fname 온 emp(이름); 만들다 색인 emp_lname 온 emp(성_이름); 삽입 안으로 emp(emp_no,이름,성_이름,birth_date,급여) 가치( 100, '짐, '말론, 종료일('1-3-1954','dd-mm-yyy'), 86500.0); } 인쇄 'db::sql 결과: ', $_; 절단하다(); 스토어드 프로시저를 사용하는 방법은db:any진술.
db::조금도 [[* 만들다 절차. test_filename(테스트)_interface(실행)( param_io 입력 나가. 번호, param_i 입력 바샤르, param_o 나가. 바샤르) ~하듯이 시작한다. param_o := param_i; 한다면 param_io IS 것은 아니다. 특수한 순서 그리고나서 param_io := param_io + 1; 또 다른 param_io := -1000; 끝. 한다면; 끝.; *]]; 보다 흥미로운 용도는 파라미터화된 쿼리와 업데이트입니다.쿼리 및 업데이트는 직접 또는 미리 실행할 수 있습니다.
db::준비한다. 인스톨: 삽입 안으로 emp( emp_no, 이름, 성_이름, birth_date, 급여 ) 가치( :emp No, :이름, :성, :생년월일, :급여 ) ; 위해서 배를 젓다 에 행 { db::sql 인스톨 와 함께 @emp No:정수 = 아이디++, @이름 = 배를 젓다[0], @성 = 배를 젓다[1], @생년월일:날짜. = 배를 젓다[2], @급여:번호 = 배를 젓다[3]; } 다음은 쿼리 예시입니다.
db::질문하다 큐리: 선택한다. emp_no, 이름, 성_이름, birth_date, 급여 부터 emp ; 인쇄 '성씨 연봉 생년월일', nl, '--- ---------- ----------- -------- ----------'; 하는 동안에 큐리.다음 분.() { 인쇄 큐리[1].인트() :< >5, 큐리.이름 :< >12, 큐리.성_이름 :< >12, 큐리.급여 :*7.1, ' ', 큐리.birth_date.fmt Date(fmt 날짜)('yyy-MM-dd'); } SGML 및 XML 문서 처리
SGML은 HTML과 XML을 포함하는 일반적인 하이퍼텍스트 형식입니다.XML 문서 처리에는 Simple API for XML(또는 SAX)와 Document Object Model(또는 DOM)의 두 가지 API가 있습니다.SEX 처리는 텍스트 전체를 스트림으로 스캔하여 발견된 태그 또는 텍스트 세그먼트별로 이벤트를 실행합니다.Judoscript에는 XML [8][9]및 SGML 데이터에 이 기능을 효과적으로 사용하는 귀여운 문장이 있습니다.
다음 예시는 HTML 스크래핑의 본질을 보여줍니다.이것으로, 웹사이트 크롤러를 쓰는 것은 현실과 멀지 않다!
'http://www.judoscript.org'을 sgml {<a>: $.href != null {println '하이퍼링크를 찾았습니다:', $.href;} <p>: println '문단 태그를 찾았습니다.'; TEXT: println '일부 텍스트:', $.length(); } 로 실행합니다.다음 예제에서는 스크립트 끝에 추가된 XML 데이터를 처리합니다.
$local as xml {<book>: println ($.hardcover=='true')을 실행하시겠습니까?"하드", "소프트", "커버북 ------------------"; <날짜>텍스트: println ' 날짜: ' , $_ , ' ( , $ . type , ' ) ; < title >텍스트: println ' 제목: , $_; <작성자>텍스트: println 'Author:', $_; <isbn>텍스트: Println ' ISBN : ' , $ _ ; } EndScript ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------라일리 &, 앰프, 어소시에이츠, 주식 회사 <, /publisher>,<>isbn>, 1-56592-001-5<>/isbn>,<>날짜 type="초판">, 1986-12 개체, /date>,<>날짜 type="2판">, 1992-06 개체, /date>,<>/book>,<>책 hardcover="진정한">,<>title>고도 프로그래밍은 UNIX환경에서 <, /title>,<>author>, 리처드 세인트Evens<>/author>,<>publisher>, Addison-Wesley<>/publisher>,<>isbn>, 0-201-56317-7.</isbn> <date type="book"> 1993 </date> </date> </type="book printing"> 1996-12 </book> </booklist> </booklist>Judoscript는 XML 문서의 DOM 및 XSLT 처리도 지원합니다.
Apache Ant 스크립팅
Apache Ant는 오랫동안 Java의 빌드 시스템이었습니다.기업과 개발자는 Antlance로 태스크라고 불리는 많은 확장을 만들어 왔습니다.Ant 생태계는 범용이든 독점이든 모든 종류의 유틸리티의 보고가 되고 있습니다.Judoscript는 모든 개미 태스크를 직접 호출하는 메커니즘을 포함하고 있습니다.다음은 [10]예시입니다.
a = '개미'; 개미 작업::<메시지 표시="안녕하세요 ${a}!/> anttask:: <echo> 안녕하세요, ${a}!</filters>Judoscript에서는 네이티브 실행 파일을 실행하는 방법이 있지만 다음과 같이 Ant 스크립팅을 사용할 수도 있습니다.
src = '.'; anttask:: <exec dir="${src}" exec 파일="exec.exe" os="Windows 2000" output="exec.txt"> <block line="/c dir"/> </exec>통합 파일 시스템 및 아카이브 스크립팅
파일 조작은 정보 작업자에게 가장 일반적인 작업 중 하나입니다.Judoscript는 ZIP 파일 및 TAR [11]볼과 같은 파일 시스템과 아카이브 파일 모두에서 일관된 처리 환경을 제공하기 위해 노력하고 있습니다.
다음 예제에서는 ZIP 아카이브 내의 파일을 검사합니다.
awebapp의 listFiles '*'입니다.zip' dirOnly, $_ { // 각 디렉토리 목록의 상태를 가져옵니다.x recursive size compressed Size 、 println $_[ 0 ] :> 8, ', $_[1]:> 8, ', x; } 다음 예제에서는 파일을 ZIP 아카이브에 복사합니다.식을 약간 변경하여 파일을 파일 시스템의 다른 위치에 복사할 수 있습니다.
'C:/temp/classes/'의 '*.java, *.properties'를 manifest [[* Manifest-Version: 1.0 Main-Class: James Jianbo Huang (c) 2001-(* #year *) *]]에 재귀합니다.
보다 세밀한 제어가 가능한 ZIP의 또 다른 예.
zf = createZip('~/archives/work-'+Date().fmtDate('yyyy')MMdd')+'zip'), '*/alfa*, */beta*, */save/*'를 제외한 'c:/judo/docs/'의 '*'를 zf에 숨김 에코 없음, '*/alfa*', '/beta*', '/src/'를 제외한 '/alf'의 '*/'에 '*'를 복사합니다.'syslog/'; zf.close(); 또한 다음과 같이 인터넷 리소스를 파일 시스템 또는 아카이브에 복사할 수 있습니다.
tar = createTar('yahoo_comp.tar.gz'), zip = createZip('yahoo_comp.zip'), URL = [http://dir.yahoo.com/Computers_and_Internet/index.html', 'http://dir.yahoo.com/Computers_and_Internet/Internet/WAIS/index.html' ], URL { tar keepDirs에 u를 복사하고 zipk에 u를 복사합니다.eepDirs; } tar.close(); zip.close(); SOAP 웹 서비스 스크립팅
Judoscript 시대에는 RESTful API가 등장하기 전에는 SOAP 웹 서비스가 원격 호출의 업계 표준이었습니다.Judoscript를 사용하면 SOAP 웹 [12]서비스를 쉽게 사용할 수 있습니다.
svc = wsdl::' http://coldrooster.com/dhtmldude/mathservice.asmx?WSDL'; println '3 + 2 = ' , svc.추가(3, 2); println '3 - 2 = ' , svc.빼기(3, 2); println '3 * 2 = ' , svc.곱셈(3, 2); println '3 / 2 = ' , svc.나누기(3, 2);
기타 응용 프로그램 기능
Judoscript는 OS 네이티브 실행 파일의 실행, E-메일 송신, 스케줄링된 작업의 실행, HTTP, SSH, SCP를 통한 인터넷 리소스 액세스, 자체 HTTP 서버 부팅 [13]등 정보 워커의 일상적인 태스크 대부분을 처리하기 위한 모든 종류의 프로그래밍 기능을 갖추고 있습니다.
Microsoft COM 스크립트 기능은, Microsoft Office 문서에의 문호를 열어, 그 DOM 를 사용해 데이터에 액세스 해 조작해, 다른 데이터 스토어나 [14]소스와 통합합니다.
실행
Judoscript 언어 문법과 파서는 JavaCC 도구를 사용하여 수행됩니다.복잡한 도메인 고유의 스테이트먼트의 대부분은 임베디드 서브 파서를 보증하는 독자적인 서브 언어를 구성합니다.이러한 다른 문장과 일부 구문설은 JavaCC 문법 파일에 네이티브 메서드를 필요로 합니다.이러한 복잡성 때문에 파서는 프로그램의 내부 표현을 직접 생성하여 언어 엔진에 의해 쉽게 실행할 수 있습니다.
언어 런타임에는 많은 지원 라이브러리가 포함되어 있습니다.서드파티제 라이브러리와 내부적으로 개발된 라이브러리가 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Judoscript Home Page".
- ^ "Judoscript Basic Program Structure".
- ^ "Judoscript Basic Data Types and Expressions".
- ^ "Judoscript Basic Flow Control Statements".
- ^ "Judoscript Functions, Classes, Threads and Eval".
- ^ "Judoscript Java Scripting".
- ^ "Judoscript Introduction to JDBC Scripting".
- ^ "Judoscript XML Scripting".
- ^ "Judoscript XML Scripting".
- ^ "Judoscript Ant Scripting and Scripting Ant".
- ^ "Judoscript File System and Archives".
- ^ "Judoscript SOAP Web Service Scripting".
- ^ "Judoscript Schedule, Execute, E-Mail, SSH, SCP".
- ^ "Judoscript COM Scripting".