ThisJava ..

Similar documents
Design Issues

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

Microsoft PowerPoint - 2강

PowerPoint Presentation

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint 프레젠테이션

A Tour of Java V

gnu-lee-oop-kor-lec06-3-chap7

Frama-C/JESSIS 사용법 소개

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

제11장 프로세스와 쓰레드

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint 프레젠테이션

17장 클래스와 메소드

슬라이드 1

JUNIT 실습및발표

Network Programming

PowerPoint Presentation

PowerPoint 프레젠테이션

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

Spring Boot/JDBC JdbcTemplate/CRUD 예제

PowerPoint Presentation

PowerPoint Presentation

슬라이드 1


유니티 변수-함수.key

Microsoft PowerPoint - 04-UDP Programming.ppt

09-interface.key

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

JAVA PROGRAMMING 실습 09. 예외처리

No Slide Title

쉽게

C# Programming Guide - Types

Microsoft PowerPoint - ch07 - 포인터 pm0415

설계란 무엇인가?

PowerPoint Template

Microsoft Word - java19-1-midterm-answer.doc

Cluster management software

5장.key

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

어댑터뷰

JAVA PROGRAMMING 실습 02. 표준 입출력

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

4장.문장

JAVA PROGRAMMING 실습 07. 상속

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - C++ 5 .pptx

Cluster management software

Spring Data JPA Many To Many 양방향 관계 예제

제8장 자바 GUI 프로그래밍 II

PowerPoint Presentation

Microsoft PowerPoint 세션.ppt

교육자료

Microsoft PowerPoint - 14주차 강의자료

슬라이드 1

금오공대 컴퓨터공학전공 강의자료

2017 년 6 월한국소프트웨어감정평가학회논문지제 13 권제 1 호 Abstract

PowerPoint Presentation

Microsoft PowerPoint 장강의노트.ppt

23

01-OOPConcepts(2).PDF

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Presentation

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

PowerPoint Presentation

PowerPoint 프레젠테이션

05-class.key

Microsoft PowerPoint - Chapter 6.ppt

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

HTML5 웹프로그래밍 입문-개정판

PowerPoint 프레젠테이션

No Slide Title

Microsoft PowerPoint - CSharp-10-예외처리

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint - 06-Chapter09-Event.ppt

C++ Programming

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - Java7.pptx

chap 5: Trees

오버라이딩 (Overriding)

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000

Microsoft PowerPoint - Lect04.pptx

Transcription:

자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29

APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 3/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 SAFE: Scalable Analysis Framework for ECMAScript 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 4/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 ˆv Value = PValue ( Loc) pv ˆ PValue = Ûndef Null Bool Number Ŝtring 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 5/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 ˆv Value = PValue ( Loc) pv ˆ PValue = Ûndef Null Bool Number Ŝtring 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 6/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 abstract class AbsBase { def istop(): Boolean def isbottom(): Boolean def isconcrete(): Boolean def toabsstring(): AbsString 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 7/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 sealed abstract class AbsNull extends AbsBase { /* partial order */ def <= (that: AbsNull) = {... /* join */ def + (that: AbsNull) = {... /* meet */ def <> (that: AbsNull) = {...... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 8/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 sealed abstract class AbsString extends AbsBase { /* partial order */ def <= (that: AbsString) = {... /* join */ def + (that: AbsString) = {... /* meet */ def <> (that: AbsString) = {...... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 9/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 abstract class AbsBase { /* partial order */ def <= (that: ThisType): Boolean /* join */ def + (that: ThisType): ThisType /* meet */ def <> (that: ThisType): ThisType... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 10/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 AbsBase 에서요구하는함수의인자와결과타입실행시간에정확한클래스타입매칭 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 11/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 AbsBase 에서요구하는함수의인자와결과타입실행시간에정확한클래스타입매칭 Bruno Oliveira s solution abstract class AbsBase { type ThisType <: AbsBase def + (that: ThisType): ThisType... case class AbsString extends AbsBase { type ThisType = AbsString override def + (that : ThisType): ThisType =... new AbsString()... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 12/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 AbsBase 에서요구하는함수의인자와결과타입실행시간에정확한클래스타입매칭한요약도메인의여러구현 abstract class AbsDomain {... abstract class AbsBase[A] extends AbsDomain {... class AbsString extends AbsBase[String] {... class AbsStringSet extends AbsString {... class AbsStringAutomata extends AbsString {... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 13/29

실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 AbsBase 에서요구하는함수의인자와결과타입실행시간에정확한클래스타입매칭한요약도메인의여러구현 abstract class AbsDomain {... abstract class AbsBase[A] extends AbsDomain {... class AbsString extends AbsBase[String] {... class AbsStringSet extends AbsString {... class AbsStringAutomata extends AbsString {... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 13/29

실제로부딪힌문제 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 14/29

이론적배경 This-typed 메소드 : 메소드의인자타입이나결과타입에메소드주인의타입을사용하는경우 abstract class AbsBase { /* partial order */ def <= (that: ThisType): Boolean /* join */ def + (that: ThisType): ThisType /* meet */ def <> (that: ThisType): ThisType... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 15/29

이론적배경 This-typed 메소드 : 메소드의인자타입이나결과타입에메소드주인의타입을사용하는경우전통적인 This 타입클래스를 선언한 타입부정확한컴파일시간타입우리가제안하는 This 타입객체의 실행시간 타입정확한실행시간타입컴파일시에존재하지는않지만부를수는있는타입 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 16/29

이론적배경 This-typed 메소드 : 메소드의인자타입이나결과타입에메소드주인의타입을사용하는경우전통적인 This 타입클래스를 선언한 타입부정확한컴파일시간타입우리가제안하는 This 타입객체의 실행시간 타입정확한실행시간타입컴파일시에존재하지는않지만부를수는있는타입 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 16/29

이론적해결방안 새로운타입성질클래스 C 의정확한클래스타입 #C 를추가 This 타입변수이름붙인타입변수 </X/> 를사용하여서로같은정확한타입을더많이명시가능정확한타입유추를사용하여프로그래머의타입명시부담감소새로운언어성질가상생성자를사용하여 This 타입의값을만들어내는메소드생성 classesmatch 를추가하여실행시간에정확한타입검사가능 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 17/29

실제적해결방안 ThisJava, JastAddJ 를기반한공개소프트웨어구현 : http://plrg.kaist.ac.kr/research/software 기존자바코드와문제없이혼용가능자바바이트코드로컴파일 실용적기존자바언어의특이한성질과부드럽게작용 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 18/29

자바바이트코드로컴파일 정확한타입자바의 type erasure 와비슷한부정확한타입만들기적용클래스 C 의정의안에나오는 This 타입은 C 로변환클래스 D 와이름붙인타입변수 X 에대해서 #D 와 D</X/> 는 D 로변환 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 19/29

자바바이트코드로컴파일 정확한타입 가상생성자 class C { int fi; Point fp; This(int i, Point p) { fi = i; fp = p; This copy() { return new This(fi, fp); 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 20/29

자바바이트코드로컴파일 정확한타입 가상생성자 class C { int fi; Point fp; C(int i, Point p) { fi = i; fp = p; C vcstub0(int i, Point p) { Object[] pack = new Object[] {Integer.valueOf(i), p; return vcstub1(pack); C vcstub0(object[] pack) { int i = ((Integer)pack[0]).intValue(); Point p = (Point)pack[1]; return new C(i, p); C copy() { return vcstub0(fi, fp); 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 21/29

자바바이트코드로컴파일 정확한타입 가상생성자 정확한타입을사용한타입테스트와변환... (o instanceof #Point)...... (#Point) o... Object o;... if (o instanceof This) { This t = (This) o;... Object o;... classesmatch (o, this) {... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 22/29

자바바이트코드로컴파일 정확한타입 가상생성자 정확한타입을사용한타입테스트와변환... (o instanceof #Point)...... (#Point) o... Object o;... if (o instanceof This) { This t = (This) o;... Object o;... classesmatch (o, this) {... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 22/29

자바바이트코드로컴파일 정확한타입 가상생성자 정확한타입을사용한타입테스트와변환... (o instanceof #Point)...... (#Point) o... Object o;... if (o instanceof This) { This t = (This) o;... Object o;... classesmatch (o, this) {... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 22/29

기존자바언어성질과의관계 같은이름의여러메소드부정확한타입으로만들고이름변환을거친후호출된메소드검사 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 23/29

기존자바언어성질과의관계 같은이름의여러메소드 Covariant 배열타입 #C[], This[][], 와 C</X/>[] 같이 invariant 배열타입사용 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 24/29

기존자바언어성질과의관계 같은이름의여러메소드 Covariant 배열타입 타입변수 class C<X extends #Point> {... class I<Y extends This> {... void m(point</e/> p) { class L<Z extends Point</E/>> {...... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 25/29

기존자바언어성질과의관계 같은이름의여러메소드 Covariant 배열타입 타입변수 class C { /* #Point instead of X */... class I { /* C.This instead of Y */... void m(point</e/> p) { class L { /* Point</E/> instead of Z */...... 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 26/29

기존자바언어성질과의관계 같은이름의여러메소드 Covariant 배열타입 타입변수타입검사 OpenJDK 1.6 소스에있는 7637 자바파일중수정이필요한한가지경우 public static <T> List<T> aslist(t... a) {... List<C> l = Arrays.asList(new C(...)); List<C> l = Arrays.asList(new C(...)); // List<#C> List<C> l = Arrays.<C>asList(new C(...)); 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 27/29

기존자바언어성질과의관계 같은이름의여러메소드 Covariant 배열타입 타입변수타입검사 OpenJDK 1.6 소스에있는 7637 자바파일중수정이필요한한가지경우 public static <T> List<T> aslist(t... a) {... List<C> l = Arrays.asList(new C(...)); List<C> l = Arrays.asList(new C(...)); // List<#C> List<C> l = Arrays.<C>asList(new C(...)); 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 27/29

기존자바언어성질과의관계 같은이름의여러메소드 Covariant 배열타입 타입변수타입검사 OpenJDK 1.6 소스에있는 7637 자바파일중수정이필요한한가지경우 public static <T> List<T> aslist(t... a) {... List<C> l = Arrays.asList(new C(...)); List<C> l = Arrays.asList(new C(...)); // List<#C> List<C> l = Arrays.<C>asList(new C(...)); 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 27/29

정리 This-typed 메소드는실제상황에서발생하는중요한문제 약간의타입과언어성질을추가해서자바와같은기존언어에 This-typed 메소드추가가능 구현내용공개 : http://plrg.kaist.ac.kr/research/software 하지만, 자바언어의제약때문에 SAFE 는 ThisJava 을사용하지않을예정 ThisScala? 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 28/29

뒷이야기 Jacques Garrigue 의 OCaml 로흉내내기 Scala 플러그인으로 ThisScala 구현? 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 29/29