스크립팅 언어
- 컴퓨터를 실제로 사용하려면 여러 프로그램을 결합해야 하는 경우가 많다.
- 예) 디렉토리의 모든 로그 파일에서 특정 유형의 오류 메시지를 인쇄
- A : 디렉터리의 모든 로그 파일을 나열
- B : 목록에서 각 로그 파일을 읽기
- C : 해당 유형의 오류 메시지를 찾기
- D : 발견된 메시지를 특정 형식으로 인쇄
Glue 언어
- 스크립팅 언어는 Glue 언어라고 불린다.
- 목표를 달성하기 위해 여러 프로그램을 함께 연결(Glue)
- 두 조상 : 쉘/터미널(sh, bash) + 텍스트 처리(sed, awk).
- 범용 스크립팅 언어
- Perl, Python, Ruby, PowerShell, AppleScript 등
- 웹용
- PHP, JSP, Ruby on Rails, JavaScript, TypeScript 등
공통적인 특징
- 일반적으로 배치 모드(batch)와 대화형 모드(interactive)를 모두 제공한다.
- 작성하기가 더 쉽다 - 간단한 표현
Public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!")l } } |
- 선택적 선언이 포함된 간단한 범위 지정 규칙
- 모든 이름을 전역(global) 또는 지역(local)으로 간주
- 선언은 필수가 아니다.
# 파이썬 a = 10 + 3 b = a + 2 print(a, b) |
- 유연하고 역동적인 타이핑
- 대부분 동적 유형 검사를 사용
- 하나의 변수는 서로 다른 상황에서 서로 다른 유형으로 사용된다.
자바스크립트 a = 3 console.log(typeof a) // number str = "string" a = str + 3 console.log(typeof a) // string |
- 패턴 매칭 및 문자열 조작에 적합
- 상위 수준(High-level)데이터 구조
- 튜플, 리스트, 딕셔너리
- Python에서는 기본 언어 기능이 지원
- C++, Java에서는 표준 라이브러리(예: 확장 또는 사전 구현된 라이브러리)에서 지원
문제 도메인
- 쉘 스크립트(Shell Scripts)
- 파일 및 디렉토리 조작
- Unix 명령을 대화형으로 연결
- 텍스트 처리 및 보고서 생성
- 패턴 매칭 및 문자열 조작 지원
- Perl: 실용적인 추출 및 보고 언어(Practical Extraction and Report Language)
- 생물 정보학 - 유전자 서열 분석에 사용됩니다.
- 수학 및 통계
- 쓰기 쉽고 데이터 조작도 쉽다.
- R과 Python이 사용
- 범용 Glue 언어
- 한 프로그램의 출력을 다른 프로그램의 입력에 연결하거나 리디렉션할 수 있다.
- 확장 언어(Extension Language)
- 스크립팅 언어는 기존 프로그램에 더 유용한 기능(예: 새 명령)을 추가하는 데 자주 사용된다.
- Lua: 게임 산업에서 많이 사용된다.
- 퀘스트, 스킬, 아이템, 몬스터 사양.
- 추가 기능/확장 개발.
- 웹 애플리케이션
- 서버측과 클라이언트측 모두에서 사용된다.
Python 범위 규칙(Problem Domains)
- Python에는 독특한 범위 규칙
- 변수는 명시적으로 선언되지 않는 한 지역 변수로 간주
- 읽기만 하고 블록에 쓰지 않는 변수는 쓰기가 포함된 가장 가까운 둘러싸는(enclosing) 범위에서 찾을 수 있습니다.
i = 1; j = 3 # 글로벌 변수 def outer(): def middle(k): def inner(): global i i = 4 inner() return i, j, k i = 2 return middle(j) print(outer()) # (i, j, k) = (2, 3, 3) print(i, j) # 4 3 |
- outer()는 i를 읽지 않지만 i에 새 값을 쓴다.
- j를 읽고 이를 middle()에 전달한다.
- middle()은 i와 j를 모두 읽는다.
- inner()는 전역 i를 쓴다.
작업 : 오류 로그 인쇄
- 일련의 로그 파일이 디렉터리에 저장된다.
- 로그 파일 이름에는 날짜가 포함된다.
- 각 파일에서 로그 유형은 헤더로 표시된다.
- 예) [build], [error], [normal]
- [error] 로그만 새 파일에 저장한다.
[build] build task xxx started. [normal] /usr/local/bin/python3 ... [error] cannot resolve dependencies... [normal] /usr/local/bin/python3 ... [error] failed to compile XXX. [error] cannot execute task YYY. [build] build task xxx completed. |
- Java
- 표준 라이브러리만 사용하는 경우 파일 자체를 읽는 것은 편리한 작업이 아니다.
- 물론 Java 7부터 java.nio.file.Files를 사용할 수 있다.
- 코드 작성 → 컴파일 → 실행
- IDE를 사용하지 않는 경우에도 이 단계는 쉽지 않다.
- 표준 라이브러리만 사용하는 경우 파일 자체를 읽는 것은 편리한 작업이 아니다.
- Python
- 여러 줄의 코드만으로도 요구 사항을 충족할 수 있다.
- REPL을 사용하면 필요한 코드를 더 쉽게 작성하고 실행할 수 있다.
- 중간 결과를 확인하고 즉시 코드를 수정할 수도 있다.
'프로그래밍언어론' 카테고리의 다른 글
[프로그래밍언어론] 31. OOP 개념 (0) | 2023.11.06 |
---|---|
[프로그래밍언어론] 30. 데이터 추상(Data Abstraction) (0) | 2023.11.06 |
[프로그래밍언어론] 28. 프로그래밍 언어 패러다임(PL Paradigm) (0) | 2023.11.06 |
[프로그래밍언어론] 27. 자료형(Data Types) (1) | 2023.10.17 |
[프로그래밍언어론] 26. 바인딩 정책(Binding Policy) (1) | 2023.10.17 |