260 likes | 281 Views
강의 내용 및 방법. 접근방법 Lambda Calculus, Proof of Correctness 는 간단히 설명 리포트 2 주일에 프로그램 1 개 정도 , term project 는 없음 (ABEEK 의 이론 과목임 ), 5 월 말 이후 프로그램 숙제 없음 각 장의 문제풀기 및 다른 문제 제공 시험 중간 , 기말 및 1~2 회 정도의 쪽지시험 수업은 75 분 (14:30-15:45), 혹시 부족하면 보강. 참고자료. Http://borame.cs.pusan.ac.kr/lecture
E N D
강의 내용 및 방법 • 접근방법 • Lambda Calculus, Proof of Correctness는 간단히 설명 • 리포트 2주일에 프로그램 1개 정도, term project는 없음 (ABEEK의 이론 과목임), 5월 말 이후 프로그램 숙제 없음 • 각 장의 문제풀기 및 다른 문제 제공 • 시험 • 중간, 기말 및 1~2회 정도의 쪽지시험 • 수업은 75분(14:30-15:45), 혹시 부족하면 보강
참고자료 • Http://borame.cs.pusan.ac.kr/lecture • 강의참고자료 (한글) • 2002년 강의 내용 • 2002년 리포트, 기타 참고사항 • 2003, 2004, 2005, 2006, 2007년 강의노트 • 다른 대학교, 자료, 우균 교수 자료(한글) 참고 • 강의 중에 이해가 안 되는 부분은 언제나 홈페이지의 묻고 답하기에 질문할 수 있음
Introduction Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Sections 1-1.3.2
언어란? • 생각을 표현하는 도구!! 정보를 교환하는 도구!! • 개념화 : 물체(Object), 물체와 관계, 추상화 • 중력의 법칙, 예측 • 인간은 전체를 듣지 않고도 부분을 이해함, 스스로 보완하여 인식함 • 프로그래밍언어 !! • 우리의 생각을 컴퓨터가 처리할 수 있게 표현하는 도구 • 조금만 틀려도 이해 못함 • 오류가 없는 프로그램은 만들 수 없으며, 인간이 1,000만 줄 이상 프로그램은 만들 수 없다. (조던 폴락) • 기계와 인간 간의 간격을 줄일수록 바람직함(추상화 단계가 높아져야 함) • 기계뿐 아니라 인간도 이해해야 함 (쉽게 프로그램할 수 있어야)
Organization of Programming Languages • Understand how languages are designed and implemented • 구조 • Lexicon – What sorts of words are legal? • Syntax -- What a program looks like? • Semantics -- What a program means? • Implementation -- How a program executes • Understand most appropriate language for solving specific problems, For example: • Pascal, C, Perl -- procedural, statement oriented • C++, Java, Smalltalk -- Object oriented • ML, Lisp -- Functional • Prolog -- Rule-based • JavaScript, PHP, ASP.net – Procedural, Event-driven accessing
Language Goals • During 1950s--1960s - Compile programs to execute efficiently. • There is a direct connection between language features and hardware - integers, reals, goto statements • Programmers cheap; Machines expensive; Keep the machine busy • But today • Compile programs that are built efficiently • CPU power and memory very cheap • Direct connection between language features and design concepts - encapsulation, records, inheritance, functionality, assertions • Event-driven programming, Service-oriented approach, Web-service, Very High-level Language
Python • Python is a general-purpose, high-level programming language. Its design philosophy emphasizes programmer productivity and code readability. Python's core syntax and semantics are minimalist, while the standard library is large and comprehensive. • Python supports multiple programming paradigms (primarily functional, object oriented and imperative), and features a fully dynamic type system and automatic memory management; it is thus similar to Perl, Ruby, Scheme, and Tcl. • Python was first released by Guido van Rossum in 1991.[3] The language has an open, community-based development model managed by the non-profit Python Software Foundation. While various parts of the language have formal specifications and standards, the language as a whole is not formally specified. The de facto standard for the language is the CPython implementation.
Why study programming languages? (1) • To improve your ability to develop effective algorithms • Improper use of recursion • Object-oriented programming, logic programming, concurrent programming • To improve your use of your existing programming language • Data structures for arrays, strings, lists, records, set, bag, table (associative array) • Malloc() garbage collection • Implementation details of recursion, object classes, subroutine calls, exception(event) handling … • Service-oriented developing • Web-service, Semantic web, Script language
Why study programming languages? (2) • To increase your vocabulary of useful programming constructs • Increase programming vocabulary and its implementation tech. • Coroutine, Semaphore, event-driven programming, associative array • Named parameter (Ada, Python, Smalltalk, Common Lisp) • Name mangling (name decoration) • To allow a better choice of programming language • Numeric computation : C, FORTRAN, Ada • AI : LISP, Prolog • Internet applications : Perl, Java, HTML, XML, Web Service(SOAP), PHP, ASP.net, Python
Why study programming languages? (3) • To make it easier to learn a new language • Web programming (JavaScript, PHP), Semantic web • Python • To make it easier to design a new language • User interface design • *** C, COBOL, SMALLTALK의 덧셈의 속도차이를 초래하는 언어개념 및 구현의 차이
Evolution of software architecture • 1950s - Large expensive mainframe computers ran single programs (Batch processing) • 1960s - Interactive programming (time-sharing) on mainframes • 1970s - Development of Minicomputers and first microcomputers. Apple II. Early work on windows, icons, and PCs at XEROX PARC • 1980s - Personal computer - Microprocessor, IBM PC and Apple Macintosh. Use of windows, icons and mouse • 1990s - Client-server computing - Networking, The Internet, the World Wide Web • 2000s - P2P, Grid Computing, Web Service, Event-driven approach, Service-oriented programming, Script language, …
Attributes of a good language (1) • Clarity, simplicity, and unity - provides both a framework for thinking about algorithms and a means of expressing those algorithms • Conceptual integrity • 나쁜 예: APL, SNOBOL4 • Orthogonality - every combination of features is meaningful • Fewer exceptions C언어에서 !!! • Logical errors and inefficiency
Attributes of a good language(2) • Naturalness for the application - program structure reflects the logical structure of algorithm • Sequential algorithm, concurrent algorithm, logic algorithm, non-deterministic algorithm • Appropriate data structures, operations, control structures, natural syntax • Support for abstraction - program data reflects problem being solved • Data abstraction <D,O,C> • Encapsulation
Attributes of a good language (3) • Ease of program verification - verifying that program correctly performs its required function • Verification/validation • standard, or specification requirements • the needs of the intended end-user or customer • Comments, assert() • Design specification • Programming environment - external support for the language • Debugger, syntax-directed editor • Supporting function, platforms • Smalltalk • Supporting all the software lifecycle phases
Attributes of a good language (continued) • Portability of programs - transportability of the resulting programs from the computer on which they are developed to other computer systems • Transportability • C, C++, Pascal Java (Byte-code) • ML : single source implementation • Cost of use - program execution, program translation, program creation, and program maintenance • Code optimization, (Smalltalk, Perl), lifecycle costs
Language paradigms • Imperative languages • Goal is to understand a machine state (set of memory locations, each containing a value) • Statement oriented languages that change machine state (C, Pascal, FORTRAN, COBOL) • Syntax: S1, S2, S3, ... • Applicative (functional) languages • Goal is to understand the function that produces the answer • Function composition is major operation (ML, LISP) • Syntax: P1(P2(P3(X))) • Programming consists of building the function that computes the answer
Language paradigms (continued) • Rule-based languages • Specify rule that specifies problem solution (Prolog, BNF Parsing) • Other examples: Decision procedures, Grammar rules (BNF) • Syntax: Answer specification rule • Programming consists of specifying the attributes of the answer • Object-oriented languages • Imperative languages that merge applicative design with imperative statements (Java, C++, Smalltalk) • Syntax: Set of objects (classes) containing data (imperative concepts) and methods (applicative concepts)
New Paradigm • Internet, Home Computing, Ubiquitous Computing, Embedded Computing, etc • Languages and Compilers that are smart, small and safe • Moveable code agents • Independent from machines and programming environments • Supporting pragmatics or intelligence • Java, XML, Mobile computing. Mobile code • Event driven approach, Service-oriented Architecture, Web Service • Supports multiple paradigm : Python
다음을 조사하라!! (1) 왜 ActiveX가 새로운 Windows(비스타)에서 문제를 발생하는가? 왜 우리나라에서 유달리 ActiveX를 많이 쓰는가? • ActiveX 대신 문제를 해결하는 방법은? • Wikipedia를 참고하라!!! (2) Orthogonality가 C언어에서 발생시킬 수 있는 오류의 예를 들어라! (3)우리가 사용하는 언어는 왜 프로그래밍 언어로 부적합한가?