문제

당신은 어떤 예를 알고 있습니까? 난해한 언어 실용적인 사용, 실제 프로그램을 작성하는 데 사용 되었습니까? 난해한 언어가 실제로 특정 문제를 해결하는 데 유용한 것으로 입증 된 컴퓨터 과학 영역이 모호하지만 어두워 졌습니까?

도움이 되었습니까?

해결책

실제 앱, 어?

게임 잃어버린 왕국 2004 년 최초의 연례 클래식 2K 텍스트 어드벤처 대회에서 우승했으며, 원래 저자가 작성하고 강화했습니다. Brainfuck에서

어때 Befunge의 irc 봇 또는 이 텍스트 편집기? 그리고 나는 당신이 난해한 언어로 글을 쓰는 것을 좋아한다면, 당신은 C 컴파일러에 대한 비난 또는 a C 컴파일러에 Brainfuck 매우 유용한...

다른 팁

난해한 프로그래밍 언어에는 실질적으로 사용되지 않습니다. 그러나 당신이 할 수 없기 때문에 사용 그들, 그들이 그렇지 않다는 것을 의미하지는 않습니다 유용한.

tl; dr :

  • 비 결정적 esolangs 모든 사람의 비 결정 성을 강조하십시오 -기반 프로그래밍
  • 튜링 방어피 프로그래밍 언어가 다른 어떤 것보다 더 강력한 방법을 강조하십시오 (둘 다 튜링-완성), 따라서 "계산력"을 "표현력"과 구별합니다.
  • 그들은 힘을냅니다 측면 사고 그리고 뇌 농업입니다

예를 들어, 난해한 프로그래밍 언어를 보면 대략 범주로 나눌 수 있습니다. 일부는 농담으로 만들어지고, 일부는 재미를 위해 만들어졌으며, 일부는 튜링 타이프로 만들어 지지만 증명하기 위해 만들어진 일부도 있습니다. 또는 요점을 설명합니다. 그리고 이것들 ~이다 실제로 정확히 유용합니다 : 포인트, 아마도 프로그래밍 언어 수업, 아마도 커뮤니티 또는 업계에. 실제 목적으로는 쓸모가 없지만 사용합니다. 교육 목적을 위해.

비 결정적 난해한 프로그래밍 언어를 사용하십시오. 이들은 특정 표현식의 평가 의미론이 결정적으로 정의되지 않고, 예를 들어 달의 단계 또는 그와 비슷한 것에 기초한 프로그래밍 언어입니다. 그러한 언어의 정의를 보면 즉시 다음과 같이 생각할 것입니다. "글쎄요, 그것은 바보입니다." 그리고 그건! (예를 들어, Java2K의 Hello World 프로그램은 거의 코드 페이지이며, 매번 "Hello World"를 인쇄하는 것은 보장되지 않습니다. 그러나 오늘날의 대부분의 주류 프로그래밍 언어는 대부분 비 결정적 동시성 모델. IOW : Java, C#, Python, Ruby, Perl, Erlang 또는 Clojure에서 스레드를 시작하자마자 귀하의 프로그램은 난해한 언어 java2k와 마찬가지로 무작위로됩니다. 그렇다면 왜 우리는 왜 하나가 멍청하다고 생각하고 다른 하나를 정상적으로 받아들이 는가? Esolangs는 비 결정주의를 극단으로 가져 가서 재미있는 방식으로 포장함으로써 우리가 그 질문을 할 수있게 해줍니다.

또 다른 예는 Turing Tarpits입니다. Turing Tarpit은 특징이 거의 없지만 여전히 튜링을 완료하는 Esolang입니다. 이러한 Turing Tarpit은 두 가지 다른 것을 보여주는 데 사용될 수 있습니다. 일부 언어를 다른 언어보다 "강력한"(표현력의 의미에서)로 만드는 것이 정확히 무엇인지 보여주는 데 사용될 수 있습니다. 웹에서 검색하면 사람들이 "LISP가 Java보다 훨씬 낫다면 LISP로 쓸 수있는 프로그램을 보여주지 않지만 Java로 쓸 수는 없습니다." 물론, 그것은 바보입니다. 두 언어는 모두 튜링을 완료하므로 그러한 프로그램은 없습니다. 그러나 Java와 Brainfuck과 대조하면 이것이 의미있는 질문이 아니라는 것을 보여줄 수 있습니다.

그리고 Turing Tarpits로 시연 할 수있는 또 다른 것은 기능을 제거하여 언어를 더욱 강력하게 만들 수 없다는 것입니다 (단어의 의미 : 계산 능력 및 표현력). 분명하게 들리지만 실제로 Microsoft가 C#에서 변동성 상태를 제거해야한다고 믿는 사람들이 있으며, 마술처럼 더 강력해질 것입니다.

일반적으로 Turn Tarpits는 계산 능력과 프로그래밍 언어의 표현력 사이의 구별을 보여주는 데 좋습니다.

Esolangs가 유용 할 수있는 다른 방법은 언어 연구를 프로그래밍하는 데 영감을 줄 수 있다는 것입니다. 이름에서 알 수 있듯이 Findamda를 생각하십시오. ~ 아니다 람다 미적분학을 기반으로합니다. 다시 말해 : 기능이없는 기능적 언어입니다.

그리고 마지막으로, Esolangs는 완전히 다른 각도에서 문제를 보도록 강요 할 수 있습니다 (예, 나는 인정합니다. 대부분 어색한 각도임을 인정하지만 일부 영화 감독 (예를 들어 히치콕)은 전체 경력을 빚지고 있습니다. 어색한 각도에서)와 그들은 좋은 퍼즐처럼 뇌를 괴롭 힙니다. 즉, 예를 들어, 존재의 모든 이유와 Brainfuck의 이름입니다.

고용 안정!!!

있는 경우 현실적인 호출되지 않을 언어에 사용하십시오 밀교. 두 용어는 상호 배타적입니다.

튜링 머신 이해, 계산 가능성 및 계산 이론에 의해 암시 된 것에 대한 실질적인 의미. Brain ****와 같은 난해한 언어를 사용하면 모든 실질적인 이점을 수집 할 수 있습니다.

나는 다른 사람들도 있다고 확신합니다.

난해한 프로그래밍 언어의 일부 클래스에는 이론적 컴퓨터 과학에 응용 프로그램이 있습니다.

튜링 방어피 계산 성 이론과 중단 문제의 특정 결과를 설명하는 데 사용됩니다. 예를 들어의 작품을 참조하십시오 이아프 (약간 더 접근 가능한 요약 파트 웨이가 있습니다. 이 기사).

튜링 머신 클래스의 기본 결과는 또 다른 실용적인 응용 프로그램입니다. 예를 들어, Wikipedia는 다음과 같습니다 피'' "최초의 '고토리스'명령형 구조화 된 프로그래밍 언어는 튜링 포도로 입증 된 것으로 입증되었습니다."

이진 조합 논리 분석에 유용한 도구입니다 Kolmogorov 복잡성.

에서 영감을 받다 이 질문, 그리고 그 대답, 나도 그러한 언어에 대한 실질적인 용도를 발견했습니다. 골프 스크립트, 코드 골프를 위해 특별히 설계된 언어 :

Golfscript는 가능한 몇 가지 키 스트로크에서 문제를 해결하기위한 스택 지향 난해한 프로그래밍 언어입니다. 또한 간단하고 글을 쉽게 작성하는 것을 목표로합니다.

거기에 당신은 그것을 쓴 사람들로부터 바로 그것을 가지고 있습니다. 코드 골프가 실용적인 문제인지 여부는 논쟁의 여지가 있지만, 개인적 믿음은 그것이 당신과 내가 실제로 글을 쓰고 만난 할 수있는만큼 가까워지는 것만 큼 재미있는 프로그래밍 운동과 경쟁이라고 말하는 것입니다. 많은 팬들과 함께. 그래서 ... 게임, 축구, 그리고 모든 종류의 다른 재미있는 활동이 어떤 방식 으로든 실용적이라면 ... Code Golf도 자유롭게 포함시킬 수 있습니다 :)

내가 보는 유일한 실질적인 이점은 당신이 난해한 언어로 코드를 작성하면 새롭고 흥미로운 방식으로 문제에 대해 생각하게 될 것입니다. 문제에 접근하는 새로운 방법을 배우면 주류 언어로 프로그래밍을 되 찾을 때에도 도움이됩니다.

작년에 나는 Charles Petzold의 '주석이 달린 튜링'을 읽었습니다. 나는 적어도 그가 묘사 한 것처럼 튜링 머신을 프로그래밍 할 의도가 없습니다. 그러나 그의 '언어'로 문제를 해결하는 것에 대해 생각하면 내 마음이 늘어났습니다. 나는 그것에 대한 더 나은 C# 프로그래머입니다.

확신하는; 곰팡이, IRC 봇 : http://zem.fi/~fis/fungot.b98.txt

난해한 언어를 개발하는 것은 창조와 같습니다 만다라. 일이 끝난 후에는 그것을 잊거나 파괴 할 수 있습니다.

만 판단하는 경우 Wikipedia 링크:

난해한 프로그래밍 언어 (때로는 Esolang으로 단축)는 컴퓨터 프로그래밍 언어 설계의 경계, 개념 증명 또는 농담으로 설계된 프로그래밍 언어입니다. 일반적으로 실제 프로그래밍을 위해 채택 될 의도는 없습니다.

그 다음에, 아니요, 그러한 언어를 실제 문제에 실질적으로 적용하지는 않습니다.

그 이유는 언어에 대한 모욕이 아니라 "실제"에 중점을 둡니다.

  1. 실제로 문제를 해결하는 경우 문제를 해결했다고 스스로에게 설득 할 수 있어야합니다. 읽기 어렵도록 특별히 설계된 언어를 사용하는 경우 솔루션을 시각적으로 검사하고 "그렇습니다. 맞습니다"라고 말하기가 어려울 것입니다.
  2. 실제로, 당신은 진공 상태에서 일하지 않습니다. 실생활에서, 당신은 항상 다른 사람들이 아닌 다른 사람들과 함께 일하고 있습니다 (당신의 미래에도 불구하고). 다른 사람은 솔루션을 유지하고, 여기에 기능을 추가하거나, 문제를 해결하거나, 더 나쁘게, 당신이 한 일과 그 이유를 문서화하려고 노력해야합니다.
  3. 1 또는 2가 적용되지 않으면 (a) 사소하게 검사하기 쉬우 며 (b) 실제로 사용되지 않기 때문에 유지 보수가 필요하지 않은 문제에 대한 해결책을 만들었습니다. 그러므로 그것은 사소한 / 비 연습 문제입니다.

Colorforth 매우 강력하고 실용적입니다.

290K의 Okad 및 Ga4

코드 난독 화는 매우 일반적인 실용적 사용입니다 : -p

그리고 APL/J/K 제품군을 밀교라고 할 수 있는지는 모르겠지만 오랫동안 생산 시스템에 사용되었습니다.

파일럿이라는 언어가 있습니다. 다트머스 기본 (Interpetive Language)으로 작성된 해석 언어입니다. 비 프로그래밍 교사가 시험을 프로그래밍 할 수있는 초기 사용이었습니다. 언어의 모든 명령은 단일 문자이며 사용 된 문자는 사용 가능한 옵션을 정의합니다. 그것은 고대입니다 (1976 년에 배웠습니다). 내가 알 수있는 한 더 이상 아무 소용이 없습니다.

다른 용도 중에서도 제약 기반 프로그래밍 및 진화 솔루션과 같은 검색 용도를 위해 알고리즘 검색을위한 (블랙 박스)/(샌드 박스 알고리즘 언어)로 더 많이 사용될 수 있습니다.

이 답변은 3 가지 유형의 난해한 프로그래밍 언어를 다룹니다.

  • 골프 언어
  • 튜링 방어피
  • 게임의 언어

골프 언어는 일회성 사용을 위해 함께 무언가를 해킹해야 할 때 유용합니다. 100 라인 파이썬 프로그램을 스크립트하거나 골프 언어에 내장 된 내용에 오류가 발생했기 때문에 디버깅 행위를 거치지 말고 몇 가지 내장을 연결하고 작업을 더 빨리 완료하십시오.

튜링 타피는 창의성에 유용합니다. Turing Tarpits의 몇 가지 명령으로 상자 밖에서 생각해야합니다. BF에서 프로그램 (ASCII 값의 단지 ASCII 값의 무리)을 통해 귀하에게 주어진 정수를 어떻게 (단일 셀 값과 같이) 처리 할 수있는 것으로 변환하는 방법은 무엇입니까? 평등을 어떻게 확인 하시겠습니까? 두 숫자를 어떻게 추가 하시겠습니까?

Turn Tarpits는 또한 코드 조직을 연습하는 데 유용합니다. 두 숫자를 추가하는 것과 같은 간단한 작업으로 인해 PSUEDO 코드를 작성하고 전체 프로그램의 레이아웃이 있으면 프로그램을 구성해야합니다. BF에서 두 가지 셀 값을 추가하려면 다음과 같은 것이 필요합니다. 1. 첫 번째 부가를 줄입니다. 2. 두 번째 부가 3. 첫 번째 부가가 비어있을 때까지 루프를 증가시킵니다.

게임의 언어는 해당 세계/레벨의 플레이어를위한 세계/레벨의 경험을 향상시키는 데 유용합니다. Roblox에서 (나는 그것을 스크립팅 언어를 "난해한"이라고 부르지 않지만), 당신이 당신의 세계의 일부 부분과 모델을 넣으면 재미 있을까요? 아니요. 만약 당신이 당신과 싸우고 총을 장착하기 위해 그 모델을 스크립팅했다면? 아마도. Geometry Dash에서는 "프로그래밍 언어"에서 일정 시간을 클릭하거나 보스 전투에서 유사 임의의 공격을 사용하도록 요구함으로써 레벨을 더 어렵게 만들 수 있습니다. 게임의 난해한 프로그래밍 언어는 수준/세계에서 가능성의 영역을 크게 향상시킬 수 있습니다.

Eiffel, Erlang, Ocaml, Haskell. 이것들은 모두 대부분의 프로그래머를위한 "틈새"언어이지만 도메인 내부에서 실용적입니다. 귀하의 질문은 단순히 의미가 없습니다. "인기있는 문제 영역에서 사용하지 않는 좋은 언어가 있습니까?"

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