문제

예를 들어,거기에 특정한 것들을 쓰는 경우에 운영 체제할 수 없는 달성에 turing 완벽한 언어?

도움이 되었습니까?

해결책

아니요. 또는 적어도 당신이 교회 튜링 논문.

그러나, 완전한 언어가 완전하지만, 특정 프로그램, 즉 포트란의 문자열 처리, COBOL의 수치 프로그래밍, SED의 정수 산술, 실제로 x86 어셈블러의 모든 것을 작성하는 것은 엉덩이에 완전히 고통스러운 언어가 있습니다.

그리고 물론 거기에 있습니다 Brainfuck.

다른 팁

예, 하드웨어를 직접 조작 할 수없는 언어를 가질 수 있습니다. 예를 들어 Bourne Shell을 사용하여 운영 체제를 작성하기는 어렵습니다. 그러나 이러한 한계는 당신이 생각하는 것보다 적습니다. 운영 체제는 표준 ML, 계획 및 심지어 Haskell!

Turing-완료하는 가장 일반적인 형식적인 정의의 완성도.가 있는 언어 기능을 위해 필요한 특정 응용 프로그램이지만 이러한 맞지 않으로 공식적인 정의입니다.

예를 들어,그래픽 기능을,능력을 부활 백그라운드 프로세스,기능 상태를 유지하고,능력 네트워크에 연결하는 모든 유용한 기능과 관련되지 않는 언어의 튜링-완전성.그래서 Python 에서 Google 애플리케이션 엔진 또는 자바 애플릿에서 실행되는 샌드박스는 여전히 Turing-완료합니다.

당신은 그 많은 경우에,이러한 유형의 기능에 의해 제공되는 라이브러리,보다는 오히려 핵심 언어입니다.

실용주의에 대해 말하고 있다면, 확실히 ... 파일을 읽거나 쓸 수없는 프로그래밍 언어를 상상할 수 있습니다 (예 : 정수에서 어떤 함수를 계산할 수있는 언어) ... 언어가 내 토스터를 운영 할 수 없다고해서 튜링이 완료되지 않았다는 의미는 아니지만, 할 수없는 일이 있다는 것을 의미합니다., 그래서 나는이 구별이 얼마나 '중요하거나 유용한 지 잘 모르겠습니다.

맥락에 따라 "언어로 무언가를 성취하는"것은 다른 사람들과 다른 것을 의미합니다. 튜링은 그 사람들 중 하나이며, 그는 "완전한"으로 자신이 의미하는 바를 정확하게 정의했습니다.

언어 (또는 이론적 인 기계)가 완전한 경우에는 할 수없는 계산이 없습니다. 이것은 언어가 전능하다는 것을 암시하지 않고 단지 합계에 능숙하다는 것을 의미합니다. 계산을 시작하지 않으므로 튜링 컴퓨터가 할 수없는 많은 "사물"이 있습니다.

"운영 체제"는 튜링 계산이 아닙니다. 운영 체제가 되려면 단순한 계산보다 더 많은 일을해야합니다. 또한 하드웨어를 조작해야합니다.

적절한 입력 개념과 시간을 포함하여 필요한 모든 하드웨어 조작을 수행하기위한 일련의 작업 세트와 함께 Turing Complete Language가 주어지면 OS를 작성할 수 있습니다. 아니면 OS를 쓸 수 있다고 말해야합니다. 개인적으로 할 수 있는지 여부는 언어가 얼마나 쉬운 지, 그리고 튜링 정의가 무시하는 물리적 한계에 달려 있습니다. 그리고 현실적인 시간에 실행하십시오.

그러나 실질적인 한계를 무시하지만 언어가 하드웨어를 구동하기에 충분한 작업이있는 경우 튜링 완전 언어로 OS를 작성할 수 있습니다. 라이브러리와 구별되는 실질적인 CS 접근법을 라이브러리와 구별하려면 "도서관 호출". 그의 컴퓨팅 모델에는 어쨌든 "전화"의 개념이 없기 때문에 튜링은 그러한 구별을하지 않았다. 또한 부트 스트랩 문제를 해결해야합니다. 하드웨어는 쓰고있는 언어를 직접 실행해야합니다. 그렇지 않으면 하드웨어가 실행되는 언어로 컴파일러가 필요하거나 그렇지 않으면 언어로 작성된 통역사가 필요합니다. 하드웨어 실행. 그의 계산 모델은 추상 하드웨어를 사용하는 반면 OS를 작성하는 것은 하드웨어에 관한 것이기 때문에 튜링은이 모든 것을 무시합니다.

영어 (compscispeak 대신)에서는 언어가 "특정 특징이 없다"고 말하는 것이 일반적이며, 아마도 다른 언어와 비교하여 "완전하지 않은"것으로 틀림 없습니다. 예를 들어 LISP 통역사 인 C 프로그램을 작성하고 LISP 프로그램을 문자열로 포함시킬 수 있습니다. Voila, C 폐쇄. 그러나 이것은 대부분의 사람들이 "C가 폐쇄되기를 바란다"고 묻는 것이 아닙니다. 모든 언어가 폐쇄가 필요하다고 생각되면 C는 불완전합니다. 모든 언어가 구조화 된 프로그래밍이 필요하다고 생각되면 ARM 어셈블러가 불완전합니다. 객체에 메소드를 동적으로 추가 할 수 있다고 생각되면 "AddMethod"및 "CallmethodbyName"메소드가있는 C ++ 클래스를 작성하고 거기에서 자신의 방법 호출 대회를 가짜로 작성하는 것이 완벽하게 가능하지만 C ++는 불완전합니다. 등등.

Turing은 언어가 이러한 편의성을 필요로한다고 생각하지 않습니다. 계산이 수행 할 수있는 어떤 계산에 영향을 미치지 않으며, 특정 프로그램을 작성하는 것이 얼마나 쉬운 지에는 영향을 미칩니다. 튜링 완전성의 개념은 프로그램이 어떻게 보이는지 또는 어떻게 구성되는지에 대해 말할 것이 없습니다. 그들이 출력하는 것. 따라서 이러한 언어는 완전하고 있지만 프로그래머의 관점에서 볼 때 그 언어로 달성 할 수없는 특정 사항이 있습니다.

언어 또는 할 수 없습 같은 것들-서브루틴,재귀,사용자 지정 데이터 형태,반복,정의 클래스,고토,등등.설정의 이러한 언어 기능것은 없습니다.예를 들어 언어는 불완전한이 없는 경우 루프,gotos 및 서브루틴-할을 수행하지 않고 주기적인 작업입니다.언어 완전성은 매우 이론 및 과학적인 것입니다.예를 들어,같은 그것의 입증된 보다 경우에도 귀하의 언어를 허용하지 않는 함수를 호출하는 재귀적으로,하지만 할 수 있습 함수 포인터-시뮬레이션할 수 있습니다 재귀,즉y-연결됩니다.

물건처럼 일하는 파일과 하드웨어 매우 자주의 일부가 아닌 언어입니다.을 달성하는 어떤 프로그래밍해야 하는 작업보다 더 많은 언어입니다.당신은 환경을 필요 당신의 프로그램에서 작동.에 86 언어 있지침"int"으로 하나의 매개 변수이지만,그것은 OS 특정 작업을 수행하는 실행할 경우"int21h".

언어요인과 통신하는 방법 환경 및 완료 될-다음 그것은 환경에서 작동합니다.그것은 유효한 쓰 86asm"mov ax,bx"그러나 그것은 당신의 CPU 하여 이 작업을 수행할 수 있습니다.

되는 불완전한 다른 방법으로 쉽고,정의 자신의 버전의 완성도.즉나는 증오 없이 일하는 등 기반 객체 지향 프로그래밍,이렇게 정의하는 언어가지 않 펠드만 완성하지 않는 경우가 언어 기능 지원하는 등 기반 OOP.확인 후,C 및 자바스크립트지 않 F 완료합니다.당신은 여전히 아무것도 할 수 있습니에서 그들의 언어와 심지어 시뮬레이션 등 기반 OOP 을 몇 가지 수준입니다.

에 관한 OS-당신은 여전히 필요한 프로세서를 실행하는 지침에 컴파일러로 변환하는 언어로 CPU 다.내가 상상할 수 있는 컴파일러는 아무것도 번역하는 컴퓨터 코드입니다.다음과 같,다음과 같은 유효한 JS 코드

for(var i=0;i<10;i++){
 mov("ax",i);
 int(0x21);
}

하지 않아야하는 것은 열심히 그것을 컴파일로 컴퓨터 코드.

현대 세계에서 선택할 뿐만 아니라 언어,당신은 또한 당신 플랫폼 선택,표준 및 비 표준 라이브러리,문학,사회,지원,등등.그 모든 것에 영향을 미칠 능력이 어떤 것,그리고 그들은 촬영 전부 수 있습이 될 수 있지"전체"충분한 작업입니다.그러나 제가 컴파일되지 않 c++코드를 자바 애플릿을 의미하지 않는다,그것은 은 c++언어의 불완전하다.그것은 단지 부재의 컴파일러는 c++코드를 무언가가 될 수 있는 로드 JVM.

당신이 원하는 경우에,당신할 수 있는 디자인 언어와 언어가 같은 기능을"OpenFile,PingNetworkHost,DownloadMpeg4FileOverHttpsAndPlaybackwards".하지만 언어 있지 않은,그들은 여전히 수 있습으로 구현되는 다른 언어의 특징과 환경,지원도의 부재는 이러한 특징을 만들지 않는 언어는 불완전합니다.당신의 언어는 다음과 같 C 지 않고 고토 연산자,루자(예,는 동안 수행하는 동안)와 기능,그 다음 당신은 쓸 수 없습니다 순환 프로그램 및 환경 및 라이브러리가 당신을 도울 수 있습니다.

대답은 가장 확실한 예입니다. 완전성은 튜링 완전 언어가 계산 가능한 기능을 계산하는 데 사용될 수 있음을 의미합니다. 우선, 그것은 계산의 복잡성에 대해 아무 말도하지 않습니다.

일반적으로 다항식 시간 알고리즘은 다른 튜링 완전한 언어에서 다항식 시간 알고리즘으로 표현 될 수 있지만 그에 관한 것입니다. 특히 모든 실시간 요구 사항 (소프트 또는 하드)이 창 밖으로 나가십시오. 유일한 초점이 완전성을 촉진하는 경우.

또 다른 중요한 것은 주관적인 재산 인 언어의 표현력이지만, 프로그램은 Java보다 기계 코드로 작성하기가 훨씬 어렵다는 것을 이해할 수 있습니다.

운영 체제의 경우 하드웨어에 대한 인터페이스는 필수이지만 모든 언어에는 이러한 유틸리티가 장착 될 수 있습니다.

편집] 내가 추가 할 수있는 또 다른 것은 유한 한 컴퓨팅 머신의 특성에 의해 프로그래밍 언어의 실제 구현이 완료되지 않는다는 것입니다. 교회-징후 논문은 (정지 문제와 같은) 관련 정의 발견과 함께 컴퓨팅에 대한 우리의 이해의 토대를 마련했지만, 그들은 실제 컴퓨팅의 세계를 거의 만나지 않습니다.

불완전한 유용성 :)

대화가 언어에 관한 경우, 일반적으로 언어는 매우 간단한 기계에서 실행되는 것으로 가정합니다. 따라서 파일에서 읽거나 네트워크에 액세스하는 모든 개념은 일반적으로 언어의 힘과 관련하여 고려되지 않습니다.

계산 가능성 이론에서 자주 사용되는 다른 클래스의 언어가 있습니다 (각각 거의 끝없는 수정을 가진)

  1. 유한 한 오토 마톤. 이것은 가장 단순한 클래스의 기계이며 가장 작은 클래스의 언어를 인식 할 수 있습니다. 정확한 정규 표현이 인식 할 수있는 언어, 즉. 문자열이 두 개의 'A로 시작하고 d로 끝나는 지 여부. 문자열에 균형 잡힌 괄호 세트 세트 인 FX가 포함되어 있는지 인식하는 데 사용될 수 없습니다.
  2. 오토 마톤을 아래로 누르십시오. 이것은 본질적으로 스택이있는 유한 오토마톤의 확장입니다. 유한 상태 머신과 달리 특정 문자열에 균형 잡힌 괄호 세트가 포함되어 있는지 알 수 있습니다. 오토마톤을 인식 할 수있는 언어는 IS를 인식 할 수 있습니다 바로 그거죠 컨텍스트가없는 문법을 사용하여 설명 할 수있는 세트는 종종 소스 코드를 구문 분석하는 데 사용됩니다.
  3. 튜링 머신. 이것들은 여기에서 가장 강력한 클래스의 기계이지만 모든 질문에 대답하는 데 사용될 수 있다는 의미는 아닙니다. 그들은 질문에 대답 할 수 없습니다.이 문자열은 영원히 실행될 튜링 머신을 묘사합니까? 실제로 튜링 머신은 튜링 머신 (쌀 정리)의 사소한 특성에 대해 아무것도 말할 수 없습니다.

그렇습니다. 튜링 머신에는 한계가 있으며, 튜링 머신이 할 수없는 일을 할 수있는 기계가 있지만 실제로는 이론적으로는 실제로 존재했을뿐입니다.

나는 튜링 (또는 정규 표현 또는 푸시 다운 오토마타) 이외의 완전성에 대한 정의가 관련이 있다고 생각하지 않습니다. 언어. 그러나이 완전성은 숫자 또는 기호 컴퓨팅 시설과 관련이 있습니다.

당신이 언급하고있는 것들은 언어보다 런타임과 환경의 함수 인 것 같습니다. 중요한 차이점이 있으며, 완전성이라는 공식적인 개념은 일반적으로 언어 자체에만 적용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top