> 백엔드 개발 > PHP 튜토리얼 > 프로그래밍 언어에 관한 무작위 대화

프로그래밍 언어에 관한 무작위 대화

WBOY
풀어 주다: 2016-07-25 08:43:31
원래의
961명이 탐색했습니다.



앞에 적음: 우리는 기존 언어의 프로그래밍 패러다임이 절차적, 객체지향적, 기능적, 논리적이라는 것을 알고 있습니다. 소프트웨어 산업화가 대중화되고 소프트웨어가 복잡해짐에 따라 프로그래밍 언어의 개발 역사도 초기 절차적(명령형) 언어 c에서 java객체- 언어로 표현되는 지향적인 프로그래밍 언어. 논리 프로그래밍 언어 ​​(프롤로그로 대표되는 )와 함수형 언어 ​​(lisp 시리즈)도 학술이나 인공지능 분야에서 주로 사용된다. 최근에는 멀티코어의 등장으로 클라우드 컴퓨팅 시대가 도래했습니다. 함수형 프로그래밍 언어는 점차적으로 가장 고전적인 언어로 대표되는 scheme, common-lisp, ml, clojure, go.와 최신 jdk8 Functional, closure, Lambda와 같은 구문도 점차 추가되었으며, scala의 저자는 코더가 코딩에 함수형 언어 사고를 사용하는 것을 점점 더 옹호하고 있습니다. . 프로그래밍 언어의 발전도 시대의 변화에 ​​맞춰 끊임없이 변화하고 있음을 알 수 있다. 개발 과정을 보면 소프트웨어의 복잡성이라는 기본적 요구를 해결하는 중심으로 기술 개발이 진행되고 있음을 알 수 있습니다.

1. 프로그래밍 언어 개요 ​​
프로그래밍 언어는 컴퓨터를 상징하는 언어이자 인간과 컴퓨터 사이의 의사소통을 위한 언어이다. 새로운 프로그래밍 언어를 배울 때, 언어의 어떤 특성을 관찰해야 합니까? "SICP"라는 책의 저자는 세 가지 요점을 나열했습니다.

* 원시 요소. (기본 요소)
* 조합 수단. (조합 수단)
* 추상화 수단.
위의 세 가지 기능은 기본적으로 모든 프로그래밍 언어의 기능을 포괄하며, 언어 설계자가 처음부터 고려해야 할 사항이기도 합니다. 이 세 가지 사항에 대한 나의 이해: 기본 요소는 어휘 부분인 언어의 기본 기호(기본 데이터 유형, 키워드 등)를 나타냅니다. 조합의 수단은 기본 요소를 사용하여 조합하는 과정을 통해 대규모 프로그램을 구성하는 수단입니다. 추상화 수단은 추상화를 의미합니다. 추상화는 소프트웨어의 복잡성을 해결하고 소프트웨어의 가독성, 확장성, 재사용성 등을 향상시키는 중요한 수단입니다. 다음은 결합요소와 추상화 방식의 관점에서 언어의 특성을 비교한다.

2. 조합의 의미 어셈블리어 : 가장 간단한 어휘적, 문법적 형태로 저수준어라고 불린다. 언어. 어셈블러는 리터럴 번역 과정을 통해 어셈블리 코드를 네이티브 코드(CPU 명령어 세트)로 변환합니다. 제공되는 기본 요소에는 숫자, 문자, -, , *, /, 케이스, if, break, go, 명령어 및 기타 기본 요소가 컴퓨터 실행 시퀀스 기호로 결합됩니다.
C 언어는 프로그래머가 CPU, 레지스터, 메모리를 직접 다루는 작업에서 벗어나 배열, 구조 및 기타 데이터 구조와 같은 더 많은 조합 방법을 제공하는 어셈블리 언어보다 더 발전했습니다.
Java 언어는 객체 지향 언어를 표방하므로 C 언어보다 한 단계 더 나아가 강력한 유형 시스템을 사용하여 속성과 메서드를 결합합니다.
go 언어는 ML 언어와 매우 유사하며 "인터페이스", "고차 함수", "클로저", "duck 유형", "여러 값 반환"이 있으며 조합을 위한 고루틴 등을 제공합니다.

프롤로그 언어는 완전히 패턴 매칭을 위한 논리적 언어입니다. 그의 사고는 수학의 기초가 "1 1 = 2"인 것처럼 세상의 모든 정리는 가장 간단한 정리에서 파생되며, 그래야만 "우주 중력", "상대성이론"의 법칙이 성립할 수 있다는 것입니다. 그리고 다른 법칙이 도출됩니다.
Lisp 방언은 s-표현식(유명한 S-표현식)을 사용하여 데이터와 함수를 결합합니다. Lisp에서는 데이터와 함수 사이에 구분이 없습니다. 모든 것이 데이터입니다.
여담: Lisp 방언은 튜링 기계의 개념과 일치하며 코딩할 때 컴퓨터 아키텍처를 전혀 느낄 수 없습니다. 다른 언어는 von Loyman의 계산 및 저장 아이디어인 "스택" 구조나 "레지스터" 구조를 기반으로 더욱 설계되었습니다.

3. 추상화는
C 언어부터 함수를 단위로 사용하여 프로그램의 추상화를 제공합니다. 이는 프로그램의 재사용성과 모듈성을 크게 향상시킵니다. 팀워크 코딩도 가능하게 만드세요.

객체 지향 프로그래밍: 기본적으로 컴퓨터의 세부 사항을 숨기는 개발자는 객체를 통해 특정 비즈니스를 추상화합니다. 하지만 엄밀히 말하면 자바도 명령형 언어의 범주에 속해 값으로 호출됩니다. 이에 비해 Python과 Ruby는 객체 지향적이며 함수형 프로그래밍 패러다임을 결합하고 자연어에 더 가깝습니다.

lisp로 대표되는 함수형 언어: 함수는 기본이자 유일한 추상화입니다. common-lisp도 매크로를 기반으로 한 일련의 객체 지향 프로그래밍 방법을 개발합니다. 나는 함수형 프로그래밍 개념을 선호합니다: 함수의 부작용 없음(특히 왜곡된 Haskell의 경우 스레드 안전성을 고려할 필요가 없음), 고차 함수, 클로저, 람다 등.

4. 유형 시스템
사람들은 종종 다음과 같이 말합니다. JavaScript는 약한 유형의 언어이고 Java 언어는 강력한 유형의 언어입니다. 타입 시스템 관점에서 프로그래밍 언어를 차별화하는 것도 흥미롭다. 일반적으로 약한 유형의 언어는 자연어에 더 가깝고 문법도 더 자유롭고 생생합니다. 요즘 언어의 추세도 약어형 방향으로 흘러가고 있습니다.

컴퓨터는 고도로 구조화되어 있으며 스택의 바이너리 비트 오류로 인해 오버플로, 버스 및 기타 오류가 발생합니다. 따라서 언어 수준의 자유는 컴파일러나 해석기의 이점을 얻습니다. 예를 들어 Java 및 C와 같은 언어에는 강력한 타이핑 드라이브 코더의 이점이 있어 문법 및 의미 오류가 거의 없는 코드를 작성할 수 있다는 점도 편리합니다. 대규모 기술 팀을 위한 협력.

약한 유형의 언어를 사용하면 자유를 얻을 수 있고(유형 정보가 필요하지 않음) 프로그래머가 더 적은 키보드 키를 입력할 수 있습니다. 자유에는 대가가 따릅니다. 유형 추론(유형 추론)은 컴파일러나 해석기에 내장되어 있습니다. (유형 추론은 명시적인 변수 유형, 연산자, 반환 값 및 컨텍스트의 기타 정보를 기반으로 정규화 방법을 사용합니다. 스택을 사용하고 점진적인 교체 과정을 통해 유형을 추론합니다.) 약한 유형은 쉽게 컴파일할 수 있지만(또는 컴파일할 필요 없이 해석하고 실행하는 경우) 유형 확인 프로세스도 있지만 이 프로세스가 지연됩니다. 런타임까지. 따라서 약한 유형의 언어는 그다지 구조화되지 않아 코딩 시 올바른 유형을 보장하기 어렵고 IDE 지원도 어렵습니다. 그러나 일부 분석기는 구문 및 의미 오류를 지속적으로 감지할 수 있으며 이는 강력한 형식의 언어의 IDE 효과를 얻는 것과 동일합니다. 최근에는 언어의 방향이 점차 컴퓨터 아키텍처에서 벗어나 자연어의 방향으로 진화하고 있습니다. 프로그래머는 예술가처럼 코드를 자유롭게 그릴 수 있습니다.

5. 컴파일/해석
Java 언어는 해석됩니까, 컴파일됩니까? Java 소스 코드 -> 클래스 바이트 코드의 절차적 javac 컴파일러 프로세스에서 말하기는 어렵습니다. 그러나 JVM에서 바이트 코드를 실행하는 과정은 해석되거나 컴파일될 수 있습니다. 해석된 유형과 컴파일된 유형은 모두 어휘 분석 -> 구문 분석 -> 컴파일러 백엔드 -> 컴파일 원칙의 프로세스를 따릅니다. 하지만 그들만의 장점도 있습니다:

인터프리터: 코드를 빠르게 로드합니다. 인터프리터는 런타임 컨텍스트와 같은 정보를 유지해야 합니다. 따라서 필요한 코드가 로드되고 조각이 해석되어 실행됩니다. 그러나 동일한 코드에 대해 컴파일 과정을 거치는 것이 중복되어 시간낭비가 발생하게 됩니다.

컴파일러: 빠른 실행. 더욱이 컴파일러 백엔드는 중간 코드를 최적화하기가 더 쉽습니다. 최적화 프로세스는 구조화된 프로세스이기 때문입니다. 전체 중간 코드를 순회하고 코드 전체를 최적화하며 운영 효율성을 향상시키는 것이 필요한 경우가 많습니다.

런타임: 일반적으로 해석된 언어는 실행 프로세스 중에 변수의 검색, 바인딩, 범위 등을 제공하기 위해 런타임 컨텍스트 정보를 메모리에 유지해야 합니다. 컴파일된 언어는 레지스터 스택 모델을 기반으로 코드를 실행합니다. 기본적으로 스택 구조에서 데이터 바인딩이 완료되어 실행 속도가 약간 빨라집니다.

Hotspot-jvm은 해석과 컴파일의 각각의 장점을 결합합니다. 먼저 실행 프로세스를 설명합니다. 메소드가 자주 실행되어 핫스팟에 도달하면 jvm은 컴파일 프로세스를 시작하고 하위 코드를 네이티브 코드로 컴파일합니다. 그런 다음 캐시하고 다음 호출에서 직접 실행합니다. hotspot-jvm은 레지스터 명령을 희생하면서 크로스 플랫폼 고려 사항을 기반으로 하는 스택 명령을 기반으로 바이트코드를 실행합니다(안드로이드 운영 체제 기반의 dalvik 가상 머신은 레지스터 명령을 기반으로 함). 따라서 언어 디자인은 종종 절충 과정입니다. 더 많은 "자유"를 얻을수록 "희생"도 커집니다.

6. 요약: 원래 라이프니츠의 질문을 해결하기 위해 Turing이 발명했습니다. 모든 컴퓨팅 작업을 해결하는 보편적인 모델이 있습니까? 폰 레이먼(Von Leyman)이 인간 뇌 뉴런의 사고 과정을 시뮬레이션하고 기억과 산술 장치를 기반으로 한 최초의 컴퓨터인 ENIAC을 생산하기 전까지는 무어의 법칙이 붕괴된 후에도 컴퓨터 하드웨어 기술은 크게 변하지 않았습니다. 여러 수준의 캐시, 멀티 코어 및 멀티 CPU 기술을 사용하여 점점 더 큰 규모의 컴퓨팅 작업을 지원합니다. 이 과정에서 사람들이 논리학, 기호학, 알고리즘을 계속 공부하면서 컴퓨터와 상호작용하는 데 사용되는 언어는 점점 더 추상화되고 풍부해지고 있습니다. 우리는 이 이미지 기호를 사용하여 시간과 공간을 추상화하고, 이 이미지 기호를 사용하여 소프트웨어의 복잡성을 해결하며, 이 이미지 기호를 사용하여 우리의 생각을 컴퓨터에 전달합니다.



첨부파일 및 텍스트 업로드 제한으로 인해 일부 사진과 텍스트가 표시되지 않을 수 있습니다. 자세한 내용은 http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000725&idx를 참조하세요. =2&sn=fde9b2af17a00679c89f3f6fc8be64c8#rd
모든 분들과의 소통을 환영합니다.
아래 QR코드를 스캔하시면 더 많은 아름다운 기사를 만나보실 수 있습니다! (예상치 못한 놀라움을 보려면 QR 코드를 스캔하세요!!)


프로그래밍 언어에 관한 무작위 대화 WeChat 구독 계정(uniguytech100)과 서비스 계정(uniguytech)을 팔로우하여 더 많은 멋진 기사를 받아보세요! [모두 기술 네트워크 토론 QQ 그룹], 그룹 번호: 256175955에 참여하실 수도 있습니다. 개인 소개를 적어주세요! 그것에 대해 함께 이야기합시다!



관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿