프로그래밍 언어에 대해 말할 때 "직교성"은 무엇을 의미합니까?
직교성의 몇 가지 예는 무엇입니까?
프로그래밍 언어에 대해 말할 때 "직교성"은 무엇을 의미합니까?
직교성의 몇 가지 예는 무엇입니까?
답변:
직교성 은 "A를 변경해도 B는 변경되지 않습니다"를 의미하는 속성입니다. 직교 시스템의 예로는 라디오가 있는데, 방송국을 변경해도 볼륨이 변경되지 않고 그 반대의 경우도 마찬가지입니다.
비 직교 시스템은 속도를 변경하면 방향이 바뀔 수있는 헬리콥터와 같습니다.
프로그래밍 언어에서 이것은 명령어를 실행할 때 해당 명령어 만 발생한다는 것을 의미합니다 (디버깅에 매우 중요 함).
명령어 세트를 참조 할 때도 특정 의미가 있습니다 .
Eric S. Raymond의 "Art of UNIX programming"에서
직교성은 복잡한 설계도 간결하게 만드는 데 도움이되는 가장 중요한 속성 중 하나입니다. 순전히 직교 디자인에서는 작업에 부작용이 없습니다. 각 작업 (API 호출, 매크로 호출 또는 언어 작업)은 다른 작업에 영향을주지 않고 한 가지만 변경합니다. 제어하는 시스템의 각 속성을 변경하는 방법은 단 하나뿐입니다.
일련의 구성이있는 경우. langauge는 프로그래머가 이러한 구성을 자유롭게 혼합 할 수 있도록 허용하는 경우 직교 라고합니다 . 예를 들어 C에서는 배열 (정적 배열)을 반환 할 수 없습니다.이 경우 C는 비정 교적이라고합니다.
int[] fun(); // you can't return a static array.
// Of course you can return a pointer, but the langauge allows passing arrays.
// So, it is unorthognal in case.
대체로 직교성은 서로에 최소한의 영향을 미치는 두 가지 간의 관계입니다.
이 용어는 수학에서 비롯됩니다. 여기서 두 벡터는 직각으로 교차하면 직교합니다.
일반적인 2 차원 데카르트 공간 (X / Y 축이있는 일반적인 그리드)을 생각해보십시오. x = 1 및 y = 1의 두 선을 플로팅합니다. 두 선은 직교합니다. x를 변경하여 x = 1을 변경할 수 있으며 이는 다른 행에 영향을 미치지 않으며 그 반대의 경우도 마찬가지입니다.
소프트웨어에서이 용어는 서로 독립적으로 작동하는 시스템의 두 부분에 대해 말하는 상황에서 적절하게 사용될 수 있습니다.
대부분의 답변은 매우 길고 모호합니다. 요점은 도구가 직각이면 다른 모든 것을 조이지 않고도 더 나은 도구를 위해 추가, 교체 또는 제거 할 수 있다는 것입니다.
망치와 톱질에 사용할 수있는 망치와 톱을 사용하는 목수, 또는 나무를 톱질 한 다음 함께 망치로 만드는 새로운 망치 / 톱 콤보를 가진 목수의 차이점입니다. 톱질과 망치질은 모두 작동하지만, 톱질이 필요하지만 망치질이 아닌 작업을 수행하면 직교 도구 만 작동합니다. 마찬가지로 망치로 치는 대신 나사를 조여야하는 경우 톱이 직각 (혼합되지 않음)이면 망치를 버릴 필요가 없습니다.
고전적인 예는 유닉스 명령 줄 도구입니다. 디스크의 내용을 가져 오는 도구 (dd), 파일에서 줄을 필터링하는 도구 (grep), 해당 줄을 파일 (cat)에 쓰는 도구 등이 있습니다. 마음대로 혼합하고 일치시킬 수 있습니다.
프로그래밍 언어에 대한 프로젝트 결정에 대해 이야기하는 동안 직교성은 과거에 본 것에 대해 해당 언어에 대한 다른 것을 예측하는 것이 얼마나 쉬운 지로 보일 수 있습니다.
예를 들어, 하나의 언어로 다음을 가질 수 있습니다.
str.split
문자열을 분할하고
len (str)
길이를 얻기 위해.
더 직교하는 언어에서는 항상 str.x 또는 x (str)를 사용합니다.
개체를 복제하거나 다른 작업을 수행 할 때
클론 (obj)
또는
obj.clone
이것이 프로그래밍 언어가 직교하는 주요 요점 중 하나입니다. 그러면 매뉴얼을 참조하거나 다른 사람에게 물어볼 필요가 없습니다.
위키피디아 기사는 복잡한 디자인이나 저수준 언어의 직교성에 대해 더 많이 설명합니다. 누군가가 의견에 대해 위에서 제안했듯이 Sebesta 책은 직교성에 대해 명확하게 이야기합니다.
내가 한 문장 만 사용한다면, 프로그래밍 언어는 당신이 본 것에 따라 알 수없는 부분이 예상대로 작동 할 때 직교라고 말할 것입니다. 아니면 ... 놀라지 마세요.
;)
에서 위키 피 디아 :
컴퓨터 과학
직교성은 복잡한 설계의 실현 가능성과 간결성을 촉진하는 시스템 설계 속성입니다. 직교성은 시스템의 구성 요소에 의해 생성 된 기술적 효과를 수정해도 부작용이 생성되거나 시스템의 다른 구성 요소에 전파되지 않음을 보장합니다. 구성 요소로 구성된 시스템의 발생하는 동작은 모듈과 인터페이스의 비 직교 설계와 같은 부적절한 통합으로 인한 부작용이 아니라 논리의 공식 정의에 의해 엄격하게 제어되어야합니다. 직교성은 부작용을 일으키거나 의존하지 않는 설계를보다 쉽게 확인할 수 있기 때문에 테스트 및 개발 시간을 줄여줍니다.
예를 들어, 자동차에는 직교 구성 요소와 제어 장치가 있습니다 (예 : 차량 가속은 가속 기능에만 관련된 구성 요소 외에는 영향을주지 않음). 반면에 직각이 아닌 디자인은 제동에 영향을 미치거나 (예 : 전자식 안정성 제어) 속도가 서스펜션에 영향을 미칠 수 있습니다. 1 결과적으로,이 사용법은 수학에서 직교를 사용하여 파생 된 것으로 보입니다. 서로 직교합니다.
어떤 명령어가 모든 주소 지정 모드에서 레지스터를 사용할 수있는 경우 명령어 세트는 직교라고합니다. 이 용어는 명령어를 구성 요소가 명령어 필드 인 벡터로 간주 한 결과입니다. 한 필드는 작동 할 레지스터를 식별하고 다른 필드는 주소 지정 모드를 지정합니다. 직교 명령어 세트는 레지스터 및 주소 지정 모드의 모든 조합을 고유하게 인코딩합니다.
에서 위키 백과 :
직교성은 복잡한 설계의 실현 가능성과 간결성을 촉진하는 시스템 설계 속성입니다. 직교성은 시스템의 구성 요소에 의해 생성 된 기술적 효과를 수정해도 부작용이 생성되거나 시스템의 다른 구성 요소에 전파되지 않음을 보장합니다. 구성 요소로 구성된 시스템의 발생하는 동작은 모듈과 인터페이스의 비 직교 설계와 같은 부적절한 통합으로 인한 부작용이 아니라 논리의 공식 정의에 의해 엄격하게 제어되어야합니다. 직교성은 부작용을 일으키거나 의존하지 않는 설계를보다 쉽게 확인할 수 있기 때문에 테스트 및 개발 시간을 줄여줍니다.
예를 들어, 자동차에는 직교 구성 요소와 제어 장치가 있습니다 (예 : 차량 가속은 가속 기능에만 관련된 구성 요소 외에는 영향을주지 않음). 반면에 직각이 아닌 디자인은 제동에 영향을 미치거나 (예 : 전자식 안정성 제어) 속도가 서스펜션에 영향을 미칠 수 있습니다. [1] 결과적으로,이 사용법은 수학에서 직교의 사용에서 파생 된 것으로 보입니다. 벡터를 기본 벡터 세트의 각 구성원에 개별적으로 투영하고 기본 벡터가 다음과 같은 경우에만 투영을 추가하여 부분 공간에 벡터를 투영 할 수 있습니다. 상호 직교.
어떤 명령어가 모든 주소 지정 모드에서 레지스터를 사용할 수있는 경우 명령어 세트는 직교라고합니다. 이 용어는 명령어를 구성 요소가 명령어 필드 인 벡터로 간주 한 결과입니다. 한 필드는 작동 할 레지스터를 식별하고 다른 필드는 주소 지정 모드를 지정합니다. 직교 명령어 세트는 레지스터 및 주소 지정 모드의 모든 조합을 고유하게 인코딩합니다.
가능한 가장 간단한 용어로 말하자면, 하나를 변경해도 다른 것에 영향을 미치지 않으면 두 가지가 직교합니다.
고급 언어에서 직교성이 부족한 예로서 C에서 다음 규칙과 예외를 고려하십시오. C에는 두 종류의 구조화 된 데이터 유형 인 배열과 레코드 (구조체)가 있지만 레코드는 함수에서 반환 될 수 있지만 배열은 반환 할 수 없습니다. 구조의 멤버는 void 또는 동일한 유형의 구조를 제외한 모든 데이터 유형이 될 수 있습니다. 배열 요소는 void 또는 함수를 제외한 모든 데이터 유형이 될 수 있습니다. 매개 변수는 배열이 아닌 경우 값으로 전달됩니다.이 경우 실제로는 참조로 전달됩니다 (C 프로그램에서 아래 첨자가없는 배열 이름의 모양은 배열의 첫 번째 요소의 주소로 해석되기 때문입니다).
프로그래밍 언어의 직교성은 상대적으로 적은 수의 기본 구조 집합을 비교적 적은 수의 방법으로 결합하여 언어의 제어 및 데이터 구조를 구축 할 수 있음을 의미합니다. 게다가 가능한 모든 프리미티브 조합은 합법적이고 의미가 있습니다. 예를 들어 데이터 유형을 고려하십시오. 언어에 4 개의 기본 데이터 유형 (정수, 부동, 이중 및 문자)과 2 개의 유형 연산자 (배열 및 포인터)가 있다고 가정하십시오. 두 가지 유형 연산자를 자신과 네 가지 기본 데이터 유형에 적용 할 수 있으면 많은 데이터 구조를 정의 할 수 있습니다. 직교 언어 기능의 의미는 프로그램에서 나타나는 컨텍스트와 무관합니다. (직교라는 단어는 서로 독립적 인 직교 벡터의 수학적 개념에서 비롯됩니다. ) 직교성은 주요 요소들 간의 관계의 대칭성에서 비롯됩니다. 직교성이 부족하면 언어 규칙에 대한 예외가 발생합니다. 예를 들어, 포인터를 지원하는 프로그래밍 언어에서는 언어에 정의 된 특정 유형을 가리키는 포인터를 정의 할 수 있어야합니다. 그러나 포인터가 배열을 가리 키도록 허용되지 않으면 잠재적으로 유용한 많은 사용자 정의 데이터 구조를 정의 할 수 없습니다. IBM 메인 프레임 컴퓨터와 VAX 시리즈 미니 컴퓨터의 어셈블리 언어의 한 측면을 비교하여 설계 개념으로 직교성의 사용을 설명 할 수 있습니다. 하나의 간단한 상황을 고려합니다. 메모리 나 레지스터에있는 두 개의 32 비트 정수 값을 추가하고 두 값 중 하나를 합계로 바꿉니다. IBM 메인 프레임에는이를위한 두 가지 지침이 있습니다.
A Reg1, memory_cell
AR Reg1, Reg2
여기서 Reg1 및 Reg2는 레지스터를 나타냅니다. 이들의 의미는 다음과 같습니다.
Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)
32 비트 정수 값에 대한 VAX 추가 명령어는 다음과 같습니다.
ADDL operand_1, operand_2
누구의 의미가
operand_2 ← contents(operand_1) + contents(operand_2)
이 경우 피연산자는 레지스터 또는 메모리 셀이 될 수 있습니다. VAX 명령어 설계는 단일 명령어가 레지스터 또는 메모리 셀을 피연산자로 사용할 수 있다는 점에서 직교합니다. 가능한 모든 방법으로 결합 할 수있는 피연산자를 지정하는 두 가지 방법이 있습니다. IBM 디자인은 직교하지 않습니다. 4 개의 피연산자 조합 중 2 개만 합법적이며 2 개는 서로 다른 명령어 A 및 AR이 필요합니다. IBM 디자인은 더 제한적이므로 쓰기가 어렵습니다. 예를 들어, 두 개의 값을 더하고 합계를 메모리 위치에 저장할 수 없습니다. 또한 제한 사항과 추가 지침으로 인해 IBM 디자인을 배우기가 더 어렵습니다. 직교성은 단순성과 밀접한 관련이 있습니다. 언어 설계가 직교할수록 언어 규칙에 필요한 예외가 적습니다. 예외가 적을수록 디자인의 규칙 성이 높아져 언어를 배우고, 읽고, 이해하기가 더 쉬워집니다. 영어의 중요한 부분을 배운 사람은 누구나 많은 규칙 예외를 배우는 것이 어렵다는 것을 증언 할 수 있습니다 (예를 들어, c 이후를 제외하고 e 이전에 i).
행렬의 직교성 확인 :
직교성은 매트릭스와 관련 될 수도 있습니다.
Matrix *(transpose of matrix)= identity matrix.
직교성에 대한 YouTube 비디오를 보려면 아래 링크를 클릭하십시오.
https://youtu.be/tNekLaxnfW8