폐쇄 . 이 질문은보다
중점 되어야합니다. 현재 답변을 받고 있지 않습니다.
댓글
답변
언어 분류 방법에 따라 다릅니다. 기본적으로 언어는 두 가지 유형으로 나눌 수 있습니다. 명령형 컴퓨터에 방법 em을 지시하는 언어 > 작업을 수행하고 컴퓨터에 무엇을 지시하는 선언적 언어입니다. 선언적 언어는 함수를 구성하여 프로그램이 구성되는 기능적 언어와 logic 프로그래밍 언어 : 프로그램이 일련의 논리적 연결을 통해 구성됩니다. 명령형 언어는 문제를 해결하기위한 단계 목록과 비슷합니다. 일종의 조리법과 같습니다. 명령형 언어에는 C, C ++ 및 Java가 포함됩니다. 기능적 언어에는 Haskell이 포함됩니다. 논리 프로그래밍 언어에는 Prolog가 포함됩니다.
명령어는 때때로 C와 같은 절차 적 언어의 두 하위 그룹으로 나뉩니다. 및 객체 지향 언어 . 객체 지향 언어는 객체 지향 기능 언어 (예 : Ocaml 및 Scala)가 있기 때문에 그룹화와 약간 직교합니다.
다음을 입력하여 언어를 그룹화 할 수도 있습니다. 정적 및 동적 . 정적으로 입력 된 언어는 프로그램을 실행하기 전에 (일반적으로 컴파일 단계에서) 입력을 확인 (일반적으로 강제)하는 언어입니다. 동적 유형 언어는 유형 검사를 런타임으로 연기합니다. C, C ++ 및 Java는 정적으로 유형이 지정된 언어입니다. Python, Ruby, JavaScript 및 Objective-C는 동적 유형 언어입니다. Forth 프로그래밍 언어를 포함하는 유형이 지정되지 않은 언어도 있습니다.
또한 다음과 같이 언어를 그룹화 할 수 있습니다. 입력 훈련 : 암시 적 유형 변환을 지원하는 약한 입력 및 강력한 입력. 둘 사이의 선은 약간 모호합니다. 일부 정의에 따르면 C는 약한 유형의 언어이고 다른 사람들은 강력한 유형의 언어로 간주합니다. 타이핑 규율은 “어쨌든 언어를 그룹화하는 데 유용한 방법은 아닙니다.
댓글
답변
이것들이 주요한 것입니다. 그러나 “다른 많은 패러다임이 있고 그 사이에 많은 겹침이 있습니다.
댓글
답변
답변
답변
-
절차 : 조립, 자바, C #, F #, Lisp, Fortran.
-
세트 기반 : SQL.
-
패턴 기반 : Perl, Regex, Snobol.
-
트리 기반 : XSLT.
-
배열 기반 : APL.
댓글
답변
대답하는 방법에는 여러 가지가 있지만 다음과 같이 분류 할 수 있습니다.
기계 언어 : 기계어는 저수준 프로그래밍 언어입니다. 컴퓨터로는 쉽게 이해할 수 있지만 사람은 읽기가 어렵습니다. 이것이 사람들이 더 높은 수준의 프로그래밍 언어를 사용하는 이유입니다. 고급 언어로 작성된 프로그램은 컴퓨터에서 실행할 수 있도록 기계어로 컴파일 및 / 또는 해석됩니다.
어셈블리 언어 : 어셈블리 언어는 기계어를 나타냅니다. 즉, 각 어셈블리 언어 명령어는 기계어 명령어로 변환됩니다. 어셈블리 언어 문은 읽을 수 있지만 문은 여전히 낮은 수준입니다. 어셈블리 언어의 단점은 각 플랫폼이 특정 어셈블리 언어와 함께 제공되기 때문에 이식성이 없다는 것입니다.
고급 언어 : 오늘날 대부분의 프로그래머는 고급 언어를 사용합니다. C, C ++ 및 Java와 같은 언어는 모두 고급 언어입니다. 고급 언어의 장점은 읽기 쉽고 이식성이 뛰어나다는 것입니다. 고급 언어의 단점은 어셈블리 언어보다 강력하지 않다는 것입니다. 높은 수준의 언어로 된 단일 문이 많은 기계 언어 문으로 번역되기 때문입니다.
고급 언어는 다음과 같이 추가로 분류 될 수 있습니다.
-
기능 언어 : 기능적 언어에서 프로그램은 기능 정의로 나뉩니다. 기능적 언어는 일종의 선언적 언어입니다. 대부분은 상수가있는 형식화 된 람다-미적분을 기반으로합니다. 유명한 함수 언어 중 일부는 Scala, F #, Clojure 및 Lisp입니다.
-
절차 적 언어 : 절차 적 언어에서 프로그램은 결과를 생성하기 위해 따라야하는 일련의 단계. COBOL, FORTRAN 및 C는 일부 절차 언어입니다.
-
객체 지향 프로그래밍 언어 : OOP 언어에서 프로그램은 데이터를 포함하는 객체와 데이터에 대해 작동하는 메소드로 나뉩니다. Java, C # 및 C ++는 OOP 언어입니다.
-
논리 프로그래밍 언어 : 논리 언어는 다음과 같은 프로그램을 만드는 데 사용됩니다. 컴퓨터가 논리적으로 추론 할 수 있습니다. 예 : 논리 언어
심층 연구를 위해 다음을 확인하십시오.
답변
저는 기능 측면에서 생각하는 경향이 있습니다.
구문 :
C 기반 또는 사용자 정의. Java에는 C 기반 구문이 있습니다. 구문에서 벗어나 특정 언어가 작동하는 방식의 기본 측면에서 더 많이 생각하기 위해 Python 또는 Ruby와 같은 것을 시도해 보는 것이 좋습니다. C 기반보다 더 부피가 커질 필요가없고 공백을 구성하는 데 문제가없는 구문은 없다고 생각합니다.
Compiled vs. Build-Process vs. Interpreted / Console :
컴파일 시간과 런타임 환경 문제에 대해 거의 익숙하지 않지만 이해합니다. “내가 거의 생각하지 않는 전체적인 관심사가있다.
마찬가지로 Java와 같은 가상 머신 내부에서 실행하기위한 컴파일 방식의 프로세스를 가진 많은 해석 언어가 있습니다. 변경 사항을 확인하려면 다시 빌드해야합니다.
그리고 라이브 환경의 콘솔에서 명령별로 즉석에서 실행할 수있는 JavaScript와 Python이 있습니다.이 세 가지 모두 코드 작성 방법이 매우 다릅니다.
동적 입력과 엄격한 입력 :
저는이 둘을 디자인 트레이드 오프로 보는 경향이 있습니다. 당신이 훨씬 낮은 수준에 있고 성능이 중요 할 때 정적 타이핑이 많은 의미가 있습니다. 나는 어떤 식 으로든 다른 것보다 “안전하다”는 개념을 이해 한 적이 없습니다. 타이핑 시스템이 어떻게 작동하고 기본적으로 무엇을 기대해야하는지 배우는 매우 플라스틱 / 동적 언어로 등장했습니다. 유형 헛소리는 JS에서 거의 걱정거리가 아닙니다. 언어의 움푹 들어간 부분에 대해 알지 못하는 경우 더 많은 주니어 레벨 개발자에게는 좀 더 신비한 터치가 될 수 있지만 어떤면에서는 유연성이 일을 더 견고하게 만들 수 있습니다.
블록 수준 범위 대 기능 범위 대? :
블록 수준이 가장 일반적입니다 (모든 대부분의 c 기반 구문 언어에서 {} 사이). JavaScript 범위는 함수를 중심으로 구축됩니다 (객체를 매우 효과적으로 구축하는데도 사용됨). 또한 내부 범위에서 어떤 종류의 액세스 권한을 가졌는지에 대한 많은 차이가 있습니다. 외부 범위에. 나는 다른 범위 지정 체계에 익숙하지 않지만 그것들이 존재한다고 확신합니다.
클래식 OOP 대 프로토 타입 OOP 대 Almost-OOP (구조체 C ?) vs 비 OOP :
클래스 기반 OOP에서도 변형의 여지가 많습니다. 다중 상속 (ew, well in 초과, ew), 인터페이스 정의 등을 수행 할 수 있는지 여부 …
자바 스크립트에는 객체가 훨씬 더 간단하고 매우 변경 가능한 일종의 스턴트 하이브리드 프로토 타입 OOP가 있지만 내부 문제와 인터페이스를 분리 할 수있는 능력이 있습니다. IMO는 캡슐화의 중요한 측면입니다. .
OOP에 대한 것은 기술적으로 OOP가되지 않고 본질적으로 OOP 지향적 인 많은 것들을 얻을 수 있다는 것입니다. 물론 순수 주의자들이 있지만 결국 디자인 패턴은 특정 상황에서 잘 작동하는 특정 추상화를 달성하는 것입니다. OOP 기반 언어의 아이디어가 더 절차 지향적 인 것에 아무 소용이 없다고 너무 빨리 생각하지 마십시오. 그리고 저는 자바 스크립트에 대해 말하는 것이 아닙니다. 그것은 프로토 타입 기반 OOP 패러다임의 구피 버전에 의해 전혀 제한되지 않습니다.
일급 함수 :
이러한 언어를 사용하지 않는 것은 포기하기 어렵습니다. 다른 컨텍스트에서 사용하기 위해 데이터처럼 함수를 전달할 수 있습니다. 이는 특히 이벤트 처리 체계를 구현하기 매우 쉽게 만들지 만 원하는 방식으로 작동하도록 언어를 매우 쉽게 적용 할 수있게 해줍니다. 자바 스크립트를 성공으로 이끈 것은 제가 의심하는 그 무엇보다 중요한 것입니다. 2 주 만에 설계되고 Java와 유사한 구문이 마케팅 계획으로 적용 되었음에도 불구하고 궁극이되었습니다.
폐쇄 :
Java에 대한 논쟁이 어디에 있는지 잘 모르겠지만 1 ~ 2 년 전에 많은 Java 개발자들이이 기능에 대해 호소력을 갖고 있었다는 것을 알고 있습니다. 비 클로저 언어에서 함수가 닫히면 함수 내부에서 참조 할 수있는 모든 것은 가비지 수집 되었기 때문에 액세스 할 수 없습니다. 클로저에서 실행 컨텍스트는 다음과 같이 바인딩됩니다. “반환 된 객체 또는 함수에서와 같이 다른 범위에서 닫힌 함수 내부의 항목을 참조 할 수 있습니다. 기본적으로 함수가 닫 혔을 때와 마찬가지로 해당 변수를 얻을 수 있습니다. 참조 엔터티의 로컬 변수로 만들어진 변수의 복사본처럼 구현 된 것 같지만, “가비지 수집의 문에 발을 넣는 것과 같습니다.
강성 / 엄격 / 안전 vs. 원하는 모든 로프 제공 :
JS 개발자와 Java 개발자는 각각을 이해하지 못하는 경향이 있습니다. 다른 하나는이 특별한 디자인 스펙트럼의 거의 반대쪽에있는 두 언어와 관련이 있다고 생각합니다. 나는 당신이 나 자신이나 우리 팀의 다른 개발자들로부터 나를 보호하기를 원하지 않습니다. 나는 훨씬 적은 코드로 훨씬 더 많은 일을하고, 모든 것을 매우 다른 (그러나 주어진 도메인에 대해 일관된) 방식으로하고 싶습니다. 둘 다 절대적으로 절충안이 있으며 많은 언어가 중간에 더 많이 떨어지는 경향이 있습니다.
댓글
답변
이 모든 것에 대한 지름길은 약간의 유용한 작업을 수행하기에 충분한 Lisp를 배우는 것입니다. 이러한 패러다임의 대부분은 Lisp를 사용하는 방법으로 시작되었으므로 “간단한 방법”입니다. 시도해 볼 수 있습니다.
주변에는 여러 “종류”의 언어가 있지만 항상 새로운 언어가 나타날 수 있습니다. 기본적으로 언어의 목적은 아이디어, 개념 또는 요구 사항을 가능한 한 직접 인코딩 할 수 있도록하는 것입니다. 이를 위해 기존 패러다임이 요구되는 상황이있을 수 있으며 새로운 패러다임이 필요할 수 있습니다.
한 가지 살펴 보는 방법은 표면 구조입니다. 아이디어를 간결하게 인코딩 할 수있는 방법을 통해 원하는 내용에 대한 마음이 바뀌면 해당 코드를 쉽게 변경할 수 있으며 버그가 발생할 가능성이 거의 없습니다.
다른 방법 제어 구조 측면에서보세요. 언어가 실행될 때 (있는 경우) 원하는 것을 달성하기 위해 일이 발생하는 순서는 무엇입니까? 예 : 단순 직선 실행, 재귀, 역 추적, 병렬 처리. I (겸손한 기침) 중 하나는 차등 실행 이었습니다.
또 다른 유용한 관점은 데이터 구조가 설계 될 때마다 언어가 태어난. 프로그램이 인터프리터가 작업을 수행하는 데 사용하는 데이터 묶음 (바이트 코드 등) 인 것처럼 데이터는 데이터를 결합하고 작업을 수행하는 응용 프로그램에 의해 “실행”됩니다.
Comments
답변
특정 응용 프로그램에 대한 프로그래밍 언어가 있음을 추가하십시오. 떠오르는 것은 공작 기계 제조에 사용되는 언어 인 APT (Automatic Programmed Tool)입니다.
댓글