프로그래밍 언어에서 "기능에 대한 기본 지원"이란 무엇입니까?


15

"PHP는 유니 코드를 기본적으로 지원하지 않습니다"와 같은 줄을 썼습니다. 또한 파이썬이 유니 코드를 기본적으로 지원한다는 것을 읽었습니다. 이제 utf8_encode()PHP에서 함수 를 호출하여 문자열을 유니 코드로 인코딩하고 unicode()파이썬에서 함수 를 사용 하여 문자열을 유니 코드로 변환 할 수 있습니다 . 그렇다면 유니 코드를 기본적으로 지원한다는 것은 무엇을 의미합니까? 또한 일부 언어는 동시성을 기본적으로 지원하지만 일부 언어는 기본적으로 지원하지 않습니다. 그래서 의미하는 것은

X 언어는 기본적으로 기능 Y를 지원합니다


사실, 파이썬 3는 유니 코드를 기본적으로 지원합니다. 2.7과 마찬가지로.
nmichaels

답변:


16

이는 주어진 기능을 지원하기 위해 개발자가 확장 또는 타사 제품과 같이 언어 자체에 포함되지 않은 구성 요소를 사용할 필요가 없음을 의미합니다.

예를 들어, PHP 자체에서 문자열을 처리하는 모든 함수는 유니 코드를 지원하지 않기 때문에 PHP는 유니 코드를 기본적으로 지원하지 않습니다. 예를 들어, 문자열을 얻기 위해, 당신은 사용할 수 substr있지만, 사용할 필요가 mb_substr멀티 바이트 문자열 확장을 사용하도록 요구.

주어진 기능을 기본적으로 지원하려면 소스 코드 트렁크에 확장 기능 만 통합하는 것만으로는 충분하지 않습니다. 대신 유니 코드가 C # 또는 Java와 같이 기본 인코딩 인 경우 PHP는 유니 코드를 기본적으로 지원합니다.


1
구성 요소가 언어의 일부인지 아닌지에 관한 것입니까? mb_stringPHP 소스에 기능 을 포함하면 네이티브가 될 것입니까?
lovesh

1
@ lovesh : 그렇게 쉽지 않습니다. 그것들이 PHP 트렁크에 확장자를 통합 하지만 유니 코드를 기본 인코딩으로 만들지 않으면 네이티브로 간주되는지 확실하지 않습니다. 대신 C #에서와 같이 유니 코드가 기본 인코딩이되면 기본 지원이됩니다.
Arseni Mourzenko 23시 47 분

또는 기본적으로 지원되지만 공통적이지 않거나 기본값이 아니라고 말할 수 있습니다. 그것은 의미론 일뿐입니다.
BlueRaja-대니 Pflughoeft

2
언어가 기본적으로 어떤 종류의 문자열을 지원하려면 적어도 해당 종류의 문자열에 대한 문자열 리터럴 구문이 필요합니다. 예를 들어, 같은 것을있을 것 s = "Müsliriegel"mb;대신 같은의 s = toMb("Müsliriegel");(이것은 물론, 사소 모든 언어에 의해 충족되는 기본 인코딩으로 사용 UTF8)
user281377

11

"X 언어는 기본적으로 기능 Y를 지원합니다"는 기능 Y를 확장하거나 다른 노력 없이도 기능 Y를 사용할 수 있음을 의미합니다. 언어 자체에서 직접 사용할 수 있습니다.

예를 들어,

"C ++ 언어는 기본적으로 연산자 오버로딩을 지원합니다."

"Java 언어는 기본적으로 자동 가비지 콜렉션을 지원합니다."자동 가비지 콜렉션을 수행하는 다른 라이브러리 나 도구를 사용할 필요가 없기 때문입니다. langauge (및 플랫폼) 자체와 함께 제공됩니다.


9

나는 당신이 내장으로 언급 한 상황에서 네이티브 를 읽었 습니다 . 언어가 일부 기능을 기본적으로 지원 하지 않는 경우 언어를 직접 구현하거나 해당 기능을 제공하는 라이브러리 나 모듈을 찾아야합니다.

네이티브 가 많이 보이는 또 다른 컨텍스트 는 일부 플랫폼 또는 다른 애플리케이션의 애플리케이션과 관련이 있습니다. 그러한 경우, 그것은 어떻게 든 해석되거나 번역되는 것이 아니라 플랫폼위해 컴파일 된 것을 의미 합니다. 네이티브 iOS 앱은 오브젝티브 C와 같은 언어로 작성된 코드로 컴파일되어 하나입니다 ARM 계열 프로세서에서 직접 실행 (당신이 iOS 장비에서 찾을 것입니다).


5

나는 그 용어의 오용을 고려할 것이다. 언어에 대해 "네이티브"가 되려면이를위한 기능이 내장되어 있어야합니다. 유니 코드와 같은 것에 대한 기본 지원 은 어떤 방식으로 유니 코드를 구현하는 언어의 원시 유형을 갖 습니다. 일반적으로 이것은 언어의 일부가 아니라 라이브러리의 일부입니다.

IMHO는 언어의 기본 라이브러리에 표시되거나 고유하지 않은 것을 호출합니다.

몇 가지 예 :

C ++은 클래스를 기본적으로 지원합니다. C는 그렇지 않습니다. 클래스를 작성하고 사용할 수있는 언어 키워드 나 유형 기능이 없으므로 직접 코딩해야합니다.

C ++에는 C보다 기본 문자열 유형이 더 이상 없다고 말하고 싶습니다. 표준 라이브러리에는 basic_string 템플릿이 있지만 이것은 언어 기능이 아닙니다.

C ++ 11은 유니 코드 값 작업을 용이하게하기 위해 언어 자체에 새로운 키워드와 원시 유형이 추가되어 실제로 유니 코드 지원을 추가 한 것으로 보입니다.

그것이 내가 보는 차이점을 명확히하기를 바랍니다.


"원시 유형"이라는 단어를 사용하면 혼동됩니다. 당신은 명확히 할 수 있습니까?
Jeremy Heiler

파이썬 3에서는 모든 문자열이 유니 코드 (별도의 bytes유형)이므로 파이썬이 기본적으로 유니 코드를 지원한다고 말하는 것이 공정하다고 생각합니다.
Brendan Long

파이썬 2는 unicode파이썬 3보다 사용하기가 더 고통 스럽지만 유형 이 있다는 점에서도 잘합니다. C ++은 일반적으로 언어의 일부가 라이브러리에 있다는 점에서 이상한 짐승입니다.
로봇 고트

@JeremyHeiler : "원시 유형"은 기본적이고 비 복합, 비 라이브러리 유형 인 것으로 보입니다. 예를 들어 C 에는 문자열 유형 ( char[])과 문자열 리터럴이 있습니다. 모든 "원시 유형"이 일치하는 리터럴을 가질 필요는 없으며, 예를 들어 C의 포인터는 그렇지 않습니다. ( NULL만 할 수 변환int*)
MSalters

-1

최소한 통역 또는 JIT 컴파일 언어에서 "기본 지원"은 일반적으로 기본적으로 통역사 아래에있는 사전 컴파일 된 기능에 대한 링크 인 코드를 의미합니다.

예를 들어 JavaScript에서 Firefox에서 window.open을 경고하면 "[native code]"와 같은 내부 함수가있는 함수가 표시 될 수 있습니다. 모든 참조가 통역사에게 제공되고 컨텍스트와 범위를 설정하기위한 단계가 필요하지만 내부는 기본적으로 캐시되어 준비가 완료됩니다. 예를 들어 window.open은 아마도 브라우저의 런타임 환경에서 무언가를 호출합니다.

이것은 귀하의 진술 또는 다른 사람이 작성한 비원시 객체 및 방법과 다릅니다.이 경우 귀하의 모든 진술을 해석 / 평가해야하기 때문입니다.

누군가가 사전 컴파일 언어와 관련하여 용어를 사용했다면, 컴파일러가 실제로 토큰 화하고 기계 코드로 변환하는 핵심 언어를 모두 의미한다고 가정합니다. 그것을 모두 연결하는 데 사용되는 구조와 참조.


1
그것은 언어의 기본 지원이 아닙니다. 라이브러리에서 기본적으로 지원됩니다.
SLaks

어느 점에 동의하지 않습니까? 당신이 저를 잘못 읽거나 핵심 개념을 이해하지 못하지만 그것은 모호합니다.
Erik Reppen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.