약한 유형의 언어가 여전히 활발하게 개발되는 이유는 무엇입니까?


17

왜 약한 유형의 언어가 여전히 활발하게 개발되고 있는지 궁금합니다. 예를 들어, 글을 쓸 수 있으면 어떤 이점이 있습니까?

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

매우 다른 형식의 버전을 사용하는 대신

int someInt = 1;
(...)
string SomeString = 'SomeText';

두 번째 예에서 추가 변수를 선언해야하지만 실제로 문제가 있습니까? 모든 언어가 컴파일 타임에 유형 안전을 시행하여 유형 캐스팅의 함정을 피하기 때문에 강력하게 형식화하려고 노력해서는 안됩니까?


9
"강하게 입력 된"은 잘 정의 된 용어가 아닙니다. 대부분 "유형 시스템을 파괴 할 수 없습니다"를 의미합니다. 잠복 대 매니페스트 타이핑 또는 정적 대 동적 타이핑 일 수있는 위에서 설명한 것과 직교합니다.
Frank Shearar

10
내가 잃어버린 것 중 몇 가지는 밀접하게 관련이 있고 논란의 여지가 많은 질문이있는 화염 미끼에서 (태그에 정적 및 동적 입력을 언급하는 질문에 대해서는 SackOverflow를 검색) 합법적 인 질문으로 옮기는 것입니까?

1
정적 유형 언어와 동적 유형 언어 모두에 장점과 단점이 있습니다. 동적 유형 언어는 빠른 개발 또는 프로토 타입 제작에 적합합니다 (따라서 "스크립트 언어"는 일반적으로 동적 유형 임). 정적 유형 언어는 크고 복잡한 프로젝트로 성장함에 따라 유지 관리 및 확장이 더 쉽습니다.
Charles Salvia

6
첫 번째 예제는 변수 가 선언 된 유형이없는 Python과 비슷 합니다. 그러나 파이썬은 매우 강력한 유형의 언어입니다. 왜냐하면 객체 자체는 거의 변하지 않거나 강제하기 어려운 유형을 가지고 있기 때문입니다. 용어를 잘못 사용하면이 질문에 대답하기가 매우 어렵다고 생각합니다.
S.Lott

1
@delnan이 질문이 두 가지 합리적인 답변을했고 화염 전쟁으로 발전하지 않았다는 사실이 도움이됩니다.
Adam Lear

답변:


25

강력 / 약한 타이핑 및 정적 / 동적 타이핑은 직교합니다.

강 / 약 은 기능적으로 말해서 가치의 유형이 중요한지 여부입니다. 약한 유형의 언어에서는 숫자로 채워지는 두 개의 문자열을 사용하여 정수를 더할 수 있습니다. 강력한 형식의 언어에서는 오류입니다 (먼저 값을 올바른 형식으로 캐스트하거나 변환하지 않는 한). 강하고 약한 타이핑은 흑백이 아닙니다. 대부분의 언어는 100 % 엄격하거나 100 % 약하지 않습니다.

정적 / 동적 타이핑은 유형이 값 또는 식별자에 바인딩되는지 여부입니다. 동적 형식 언어에서는 형식에 관계없이 모든 변수에 모든 값을 할당 할 수 있습니다. 정적 유형 지정은 모든 식별자에 대한 유형을 정의하며 다른 유형에서 지정하는 것은 오류이거나 내재 된 캐스트입니다. 일부 언어는 유형이 지정되지 않은 식별자 ( 'variant')뿐만 아니라 정적으로 선언 된 형식을 허용하는 하이브리드 방식을 사용합니다. 컴파일러가 유형을 파악하도록하여 모든 유형을 명시 적으로 선언하지 않고 정적 유형을 지정할 수있는 메커니즘 인 유형 유추도 있습니다 (Haskell은이를 광범위하게 사용하고 C #은 var키워드를 통해이를 노출합니다 ).

약한 동적 프로그래밍은 실용적인 접근 방식을 허용합니다. 언어는 대부분 방해가되지 않지만 발로 직접 촬영할 때는 들어오지 않습니다. 이와 반대로 강력한 정적 타이핑은 프로그래머가 컴파일러 또는 인터프리터가 오류 클래스를 감지 할 수 있도록 코드에 명시 적으로 값에 대한 특정 기대치를 표현하도록합니다. 좋은 유형의 시스템을 사용하면 프로그래머는 가치에 대해 할 수있는 것과 할 수없는 것을 정확하게 정의 할 수 있으며, 우연히 누군가가 원치 않는 사람을 시도하면, 유형 시스템은 종종 그것을 방지하고 일이 어디에서 왜 잘못되었는지 정확하게 보여줄 수 있습니다.


문자열 연결 및 추가를위한 별도의 연산자 (예 : &연결을 가정 )가있는 HyperTalk와 같은 약한 형식의 언어에서 모호성을 "12"+3갖거나 45 & "6"모호하지 않은 작업 (각각 15 및 "456"계산). 보다 강력한 형식의 언어에서 "+"연산자는 문자열과 숫자에 대한 작업이 금지되므로 모호성을 유발하지 않으면 서 문자열 연결과 숫자 추가 모두에 대해 안전하게 오버로드 될 수 있습니다. 언어가 형식이나 수행 할 작업을 모두 지정하지 않으면 문제가 발생합니다.
supercat

4

약한 타이핑은의 라인을 따라 더 1 == "TRUE"있습니다. 위키 백과의이 섹션은 그 차이점을 잘 보여줍니다.

위키 백과의 예제는 정적으로 입력되지 않았으므로 두 번째 예제에서 참조하는 것입니다.

따라서 사람들이 동적 유형 언어를 사용하는 이유는 다음과 같습니다. 정적 유형 시스템은 사용자에게 제한을 둡니다. 많은 사람들이 표현형 정적 유형 시스템을 사용한 적이 없었기 때문에 정적 유형 지정의 단점이 장점보다 크다는 결론을 이끌어냅니다.


0

사람들이 사용하고 좋아하기 때문에 약한 유형의 언어는 여전히 개발되고 있습니다. 약한 타이핑이 마음에 들지 않으면 약한 유형의 언어를 사용하지 마십시오. 무언가가 하나의 진정한 길이며 모든 사람이해야한다고 선언하는 유일한 길은 세상의 복잡성을 무시합니다.


0

모든 언어가 컴파일 타임에 유형 안전을 시행하여 유형 캐스팅의 함정을 피하기 때문에 강력하게 형식화하려고 노력해서는 안됩니까?

반드시 그런 것은 아닙니다. 학습 Objective-C : 입문서 는 Objective-C와 관련하여 해당 질문을 직접 해결합니다.

약한 유형의 변수는 컬렉션 클래스와 같은 항목에 자주 사용되며 컬렉션에있는 개체의 정확한 유형을 알 수 없습니다. 강력한 형식의 언어를 사용하는 데 익숙한 경우 약한 형식의 변수를 사용하면 문제가 발생할 수 있지만 실제로는 상당한 유연성을 제공하고 Objective-C 프로그램에서 훨씬 더 큰 역 동성을 허용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.