프로그래밍 언어를 디자인하려면 어떻게 하시겠습니까? 어떤 기능을 사용 하시겠습니까? 무엇을 빼시겠습니까? 정적으로 또는 동적으로 입력 했습니까? 강하거나 약한 유형? 컴파일되거나 해석 되었습니까? 답을 정당화하십시오.
프로그래밍 언어를 디자인하려면 어떻게 하시겠습니까? 어떤 기능을 사용 하시겠습니까? 무엇을 빼시겠습니까? 정적으로 또는 동적으로 입력 했습니까? 강하거나 약한 유형? 컴파일되거나 해석 되었습니까? 답을 정당화하십시오.
답변:
나는 함수형 프로그래밍 언어가 따라 잡을 것이라고 생각한다 . 그래서 나의 언어는 기능적 일 것이다. 함수형 프로그래밍으로 길들이기 효과 보기
CPU는 곧 수백 개의 코어를 갖게 될 것이며 스레드는 관리하기가 쉽지 않을 것입니다. 따라서 액터 모델 은 스레드 대신 필수입니다. 동시 세계를위한 소프트웨어 Erlang 참조
또한 OOP가 실패했다고 생각합니다. 객체 간의 통신은 비동기 적이라고 가정했습니다 . 따라서 불변의 메시지와 함께 메시지 전달이 필요하다고 생각 합니다. 보내고 잊어 버리십시오. 액터 모델 에서처럼. 객체 지향 프로그래밍 : 잘못된 경로를 참조하십시오 .
나는 정적 타이핑 을하는 것이 좋을 것이라고 생각 하므로 개발주기 초기에 오류가 포착됩니다. 그러나 Haskell에서와 같이 형식 유추 를 사용 하므로 개발자는 C, C # 및 Java와 같이 코드의 어느 곳에서나 형식을 작성할 필요가 없습니다. 참조 중대한 좋은을 위해 당신은 하스켈 알아보기
또한 WPF 및 Android에서와 같이 선언적 레이아웃을 사용 하여 훌륭한 UI 라이브러리를 디자인합니다 . 그러나 Functional Reactive Programming 에서와 같이하고 싶습니다 .
따라서 내 언어는 Erlang의 동시성과 같지만 Haskell에서와 같이 입력하고 WPF.NET에서와 같이 GUI 프레임 워크를 사용합니다.
참고 :이 게시물의 기능을 설명하기 위해 C와 같은 구문을 사용했지만 모든 키워드가 CAPS 인 것처럼 어리석지 않은 한 구문 자체는 까다 롭지 않습니다.
1. 타이핑 시스템
언어에서 원하는 최고의 기능은 동적 타이핑 옵션 이있는 정적 타이핑입니다 . 그 이유는 정적 타이핑을 사용하면 a) 늦지 않고 일찍 오류를 잡을 수 있고 b) 언어의 구별 여부에 관계없이 대부분의 코드는 암시 적으로 정적으로 유형이 지정되기 때문입니다. 그러나 동적 타이핑이 매우 유용한 몇 가지 사용 사례가 있습니다. 예를 들어, 파일에서 데이터를 읽을 때 종종 다양한 유형의 필드가 있으며 동적 유형 지정으로 이기종 컨테이너를 쉽게 만들 수 있습니다. 이상적인 언어는 다음과 같습니다.
//variable declarations
int anInt = 42 //anInt is now irrevocably an integer and assigning another type to it is an error
vartype aVariable = 42 //aVariable is currently an integer, but any type can be assigned to it in the future
//function definitions
int countElements(Collection c)
{
return c.count();
}
//c HAS to be a collection, since countElements doesn't make sense otherwise
void addToCollection(Collection& c, vartype v)
{
c.append(v)
}
//c is passed by reference here
2. 컴파일 및 해석
언어가 미리 컴파일되거나 JIT 컴파일되었지만 순전히 해석되지는 않기 때문에 속도가 이유입니다. 점에서이 관계 1 최적화 컴파일러 / 지터 이후는있을 것이다 많은 정적으로 입력 된 코드를 최적화 쉽게 시간을, 그리고 그대로 동적으로 입력 된 코드는 단순히 남아있을 수 있습니다.
3. 폐쇄
언어는 함수형 프로그래밍 구조를 지원해야하며 함수는 일류 객체 여야합니다.
4. 객체 지향
이 언어를 사용하면 객체 지향 코드를 작성할 수 있어야하지만 간단한 명령형 코드도 허용되어야합니다. 즉, 다음과 같은 hello world 프로그램을 작성할 수 있어야합니다.
int main(string<> args=null)
{
printf("hello, world");
return 0;
}
// this code also demonstrates two other features,
// default arguments for functions (not explained further)
// and immutable lists like string<> (see 6. Built-in datatypes)
5. 네임 스페이스
네임 스페이스는 좋은 것입니다. 전역 네임 스페이스에 들어가는 것은 거의 없습니다. 하지만 경우에 있어야합니다 , 당신이 할 수있는 (++ C ALA) 글로벌 네임 스페이스에 물건을 넣어.
6. 내장 데이터 타입
언어는 내장 데이터 유형으로 다음과 같은 구성을 가져야합니다.
int
데이터 유형 또는 유형. int
유형 이 하나만있는 경우 범위가 무제한이어야합니다. 더 많으면 무제한 범위 유형이 가장 큰 계산 결과를 보유 할 수있는 가장 작은 유형 으로 암시 적으로 업 캐스트해야합니다 .float
IEEE 754에 해당 하는 단일 내장 이진 유형double
list
이중 연결 목록 또는 각 요소에 대한 포인터를 보유하는 연속 메모리 블록으로 구현되는 가변 유형list
배열처럼 작동하지만 생성 후 크기를 변경할 수없는 불변 유형string
유형으로, 기본값은 불변입니다.map
또는 dict
형 가변이며, 불변 키 및 가변 및 / 또는 불변의 값을 보유하고있다.vartype
필요한 경우 d 일 수 있습니다boolean
유형null
또는 none
어떤 유형의 변수에 할당 될 수있는 형태.set
유형decimal
십진 부동 소수점 변수를 구현 하는 유형fixed
타입이 구현하는 고정 소수점 수decimal
, float
및 fixed
유형은 공유해야 정확한 그들에게 투명하게 전달과 기능에서 반환 할 수 있도록 (중 상속 또는 오리 입력을 통해) 같은 공용 인터페이스를. 부모 유형은이라고 할 수 있습니다 real
.
7. 가치와 참조에 의한 전화
기본값은 value (즉, 함수에서 인수의 사본이 작성되고 작동 됨)를 사용하여 값과 참조로 함수를 호출 할 수 있어야합니다.
8. 포인터
언어에는 포인터가 있어야하며 포인터 산술이 가능해야합니다. 포인터는 정적으로 만 입력 할 수 있습니다 (악몽을 피하기 위해 void*
). vartype
포인터가 명시 적으로 허용되지 않습니다. 포인터와 포인터 산술이 있으면 언어를 시스템 프로그래밍 언어로 심각하게 사용할 수 있습니다.
9. 인라인 어셈블리
8 과 관련하여 언어는 필요한 상황에 대해 인라인 어셈블리 언어 코드를 허용해야합니다.
10. 안전
언어는 예외 처리 등을 지원하여 사용하기에 안전해야합니다. 포인터 산술 및 인라인 어셈블리는 명시 적으로 안전하지 않은 것으로 표시된 코드 부분으로 강등 될 수 있습니다. 안전하지 않은 코드는 허용되지만 사용하지 않는 것이 좋습니다.
11. 정의되지 않은 행동
언어 표준은 안전하지 않은 것으로 명시 적으로 표시된 코드를 제외하고 모든 상황에서 프로그램이 작동하는 방식을 지정해야합니다. 즉, 안전하지 않은 블록 외부에는 정의되지 않은 동작이 없어야합니다. 이를 통해 언어를 실행 가능한 응용 프로그램 개발 언어로 사용할 수 있으며 OS를 작성할 수 있습니다.
그것이 지금 생각할 수있는 전부이지만, 더 많은 것을 생각할 때 게시물을 편집 / 업데이트 할 것입니다.
decimal
여기 에 유형을 추가 하겠습니다.
이것이 내 꿈 프로그래밍 언어의 모습입니다 :
yield
스몰 토크 에서 파이썬을 구현할 수 있습니까? 사용하기에 깨끗해야합니다.
나는 C #과 거의 비슷하게 디자인했을 것이지만 Microsoft는 나를 이겼다. :)
(물론 내 생각은 덜 생각하고 아마추어는 많았을 것입니다.)
컴파일되거나 해석되는지 여부는별로 신경 쓰지 않으므로 해당 비트를 정당화 할 필요가 없습니다.
강력한 정적 타이핑과 관련하여 정당성이 요구되는 이유를 이해하기가 어렵습니다. 정적 타이핑은 컴파일 타임 동안 버그를 잡는 기능입니다. 동적 타이핑은 해당 기능이 없기 때문에 런타임까지 버그를 연기합니다. 내 개인적인 경험에는 동적 디스패치가 의미가 있고 유용한 유용한 사용 사례가 거의 없었으므로 4.0 이전에 C #에서 진행 한 컨볼 루션은 쉽게 정당화되었습니다. C # 4.0에서는 동적 디스패치가 있기 때문에 더 이상 정당화 할 필요가 없습니다.
그러나 아마도 C #처럼 종교적으로 오래된 C 구문을 고수하는 대신 새로운 구문을 만들었을 것입니다. switch 문은 특히 끔찍하며 캐스트 구문도 싫어합니다 (잘못된 방법입니다). 나는 구문의 세부 사항에 대해 큰 소문을 내지 않기 때문에 Visual Basic만큼 장황하게 표현하고 싶지 않다는 것을 제외하고는 세부적으로 정당화 할 필요가 없습니다.
내가 뭘 정당화하기를 원하십니까?
다음은 내가 넣은 기능 목록입니다.
리스프 스타일
찬성 :
(eval "your data files")
단점 :
하스켈 스타일
찬성 :
단점 :
파이썬 스타일
찬성 :
구현 :
CL과 비슷한 유형을 기반으로 함수 오버로드를 허용하십시오 defgeneric
.
(define (+ (a <int>) (b <int>))
(ints-add a b))
(define (+ (a <string>) (b <string>))
(string-concat a b))
(define (+ a b)
(add-generic a b))
찬성 :
단점 :
C 스타일
찬성 :
단점 :
찬성 :
단점 :
이것을 생각해 보면, 컴파일 및 시스템 프로그래밍 비트를 제외하고는 다소 체계를 정의합니다. libguile을 사용하고 C로 해당 비트를 작성하여 해결할 수 있습니다.
car
함수이고 cdr
인수 인 목록 대신에 name
필드가 메소드이고 arguments
필드가 인수 인 오브젝트 . 중첩 대신 필드 가 prev
있고 next
포인터가 있습니다.)
거기에 꽤 좋은 것으로 생각되는 몇 가지 언어가 있습니다 (C #은 현재 가장 좋아합니다). 이것이 나의 환상 언어이기 때문에 여기에 내가 정말로 원하는 것은 다음과 같습니다.
언어 디자인에 대해 많이 알지 못해서 부끄러운 이야기를하고 있지만, 내가 말하는 기능 을 다른 언어의 힌트 라고 생각합니다 . 컴파일러 힌트 ?
나는 이것을 Perl6 초안으로 읽었는지 또는 당시에 너무 높았는지 모르겠지만 기본적으로 모든 것이 어둡고 구식 인 언어를 상상합니다. 그러나 실제로 성능을 높이고 싶다면이 값은 항상 정수이거나 절대 null이 아니거나 병렬 일 수도 있고 stateless 일 수도 있습니다. 컴파일러가 자동으로 마을로 갈 수 있습니다 이러한 특정 표시 영역에.
E : 요청한 내용을 분명히하거나 이미 존재하는 예를 인용 한 의견에 감사드립니다.
safety
and와 speed
값 을 변경하여 컴파일러에서 확인 및 적용 (문제를 찾기 위해)하거나 자신이하는 말이 사실이라고 가정하고 더 빠른 코드를 컴파일 할 수 있다는 것입니다.
새로운 아이디어를 시도하려면 :
동적 형식의 함수형 프로그래밍 언어를 만들면 모든 문 표현 트릭과 패턴 일치로 가장 간단한 람다 구문을 수행 할 수 있습니다. 오프사이드 규칙이 활성화되었습니다.
// a view pattern (or Active Pattern in F#)
default = \def val: !!val.Type val def
// usage of the pattern
greet = \name<(default "world") `and` hasType Str>:
p "Hello, \{name}!"
(p "Enter your name", .input).greet // (, ) is a sequence expression, returning the last value
여기에 설명이 있습니다 :
default =
저장을 설정하고, \def val
두 인자 커리 기능을 시작 val.Type
과 동일 Type[val]
, !!
변환 부울하고, 부울 적용 할 수 있으므로, val
및def are after it.
f x
= f[x]
= x.f
.f
=f[]
그리고에서 greet
사용 name<(default "world")
되었으며 hasType Str>
, 이는 패턴 default "world"
이 사용되고 바인딩 될 것임을 의미합니다 name
. 기본 패턴은 기본값을 지정합니다.
and
두 패턴을 연결하는 또 다른 패턴입니다. default
동안 패턴은 실패 할 수 없습니다 hasType
실패 할 수 있습니다. 이 경우 예외가 발생합니다.
변수는 실제로 스토리지이며 기능적으로 전달 될 수 있으며 범위가 변경되면 스토리지 테이블을 참조, 작성 및 파기 할 수 있습니다.
해시와 같은 것은 루아와 자바 스크립트와 같습니다.
컴파일 된 언어를 만들려면 Haskell과 유사한 기능을 사용하여 Java 용 F #을 만들 것입니다. 의사 코드와 같은 블록을 작성하여 명령 및 프로그래밍을 혼합하여 명령형 프로그래밍을 달성하는 기능을 제외하고는 순수한 기능 언어입니다.
내가 아는 유일한 언어는 PHP와 자바 스크립트이며 언어를 디자인하기 전에 몇 가지를 더 배워야한다는 것을 명심하십시오.
구문 : 함수 이름과 인수 순서에 대해 신중하게 생각하십시오 (즉, PHP보다 덜 복잡합니다).
특징 :
의 설정 string
바이트의 일련의 변수에서 작동하지만, 텍스트를 이해하지 못하는 기능, 그리고 세트 text
인코딩을 많이 이해하고 UTF-8 및 기타 멀티 바이트 문자열을 작동 할 수있는 기능을. (그리고 text.isValidEncoding(text, encoding)
바이트 시퀀스가 잘못되어 텍스트로 취급하기에 안전하지 않은지를 알려주 는 함수를 사용하여 언어에 인코딩 무결성 검사가 내장되어 있습니다 .
나는 강력한 정적 타이핑이라는 아이디어가 마음에 들지만 결코 사용하지 않았기 때문에 실제로 말할 수는 없습니다.
프로그래밍 언어를 디자인하기 전에 질문에 대한 답을 찾을 수있을 것입니다. 왜 또 다른 프로그래밍 언어가 필요한가요? 이 글을 쓰는 시점의 Rosetta Code 는 344 개 언어를 나열합니다. 그 중 어느 것도 내 요구를 충족시키지 못하면 시작점 (가장 가까운 언어)을 결정하지 않은 이유와 추가 할 내용에 대한 세부 사항이 있습니다.
추첨에서 이겼는데 어떤 이유로 든 더 나은 것이 없다면 Liskell로 시작하여 GHC 프론트 엔드와 달리 본격적인 언어로 만든 다음 FFI를 더 쉽고 자동화하여 사용할 수 있도록하십시오. C / C ++ 라이브러리.
좋은 언어는 다음과 같은 언어입니다.
이것을 기능 목록으로 바꾸는 것은 매우 어렵지만, 자연스럽게 느껴지 지는 않지만 함수형 프로그래밍 은 명령형 프로그래밍보다 특히 더 가깝습니다 (특히 구체적인 세부 사항 숨기기)
현재이 목록에 가장 가까운 언어는 아마도 Haskell 일 것입니다.
첫 번째 질문에, "어떻게 하시겠습니까?"-짧은 대답입니다. 나는 그것을 풀기에 충분한 파서 / 컴파일러 이론이 없다. 그러나 저는 25 년 동안 프로그래밍을 해왔으므로 공유 할 아이디어와 의견이 있습니다.
먼저, 실제로 연결된 모델을 만들 수있는 OOP 접근 방식을 생각해 보겠습니다. 즉, 모델은 거의 모든 종류의 프로그래밍 프로젝트에서 가장 중요한 것 중 하나입니다. 모델을 올바르게 만들기 위해서는 항상 많은 성가신 작업과 지속적인 리팩토링이 필요합니다. OO 언어.
보여줄 수있게 해줘 House 클래스에 Door 속성이 있다고 가정 해 봅시다.
var door = house.Door;
이제 Door 인스턴스를 참조하는 로컬 변수가 생겼습니다.
그러나 방금 일어난 일을 고려하십시오 : 당신은 방금 문을 찢어 버렸습니다. 이제 문을 통과하게되어 매우 기쁩니다. 그리고 나머지 코드는이 문이 실제로 집에 붙어 있다는 사실을 알지 못합니다.
나에게 이것은 근본적으로 잘못되었습니다.
그리고 예, 이것은 사례별로 "쉽게"수정됩니다.이 경우 현재 연결된 모든 문에서 집까지의 역 참조를 유지합니다. 물론 두 개의 역 참조를 정확하게 유지하는 것이 의무이므로 모델을 오류로 엽니 다. 따라서 House.Doors 및 Door.House 속성을 비공개로 만들고 House.AddDoor (), House.RemoveDoor ( ), Door.SetHouse () 등을 모두 연결하고 실제로 작동하는지 확인하십시오.
이처럼 단순한 관계를 모델링하는 데 많은 노력을 기울이지 않습니까? 유지해야 할 코드가 많습니까? 모델이 발전함에 따라 리팩토링 할 코드가 많습니까?
문제는 포인터입니다. 내가 본 모든 OO 언어는 본질적으로 객체 참조가 실제로 포인터라는 사실로 인해 어려움을 겪습니다. 왜냐하면 그것이 컴퓨터가 사용하기 때문입니다.
포인터는 실제 세계를 모델링하는 좋은 방법이 아닙니다. 모델링하려는 세계에 관계없이 해당 세계의 모든 관계가 양방향 관계가되는 것이 거의 보장됩니다. 포인터는 한 방향으로 만 가리 킵니다.
기본 데이터 모델이 그래프 인 언어를보고 싶습니다. 기본적으로 모든 관계에는 두 개의 끝이 있습니다. 이것은 실제 세계를 모델링하는 데 훨씬 더 자연스럽게 맞을 것입니다. 이것은 실제로 컴퓨터가 처음 필요한 유일한 것입니다. (그것과 비디오 게임.)
그러한 언어의 구문이 어떻게 생겼는지 또는 텍스트를 사용하여 표현할 수 있는지 여부는 알 수 없습니다. (어떻게 그런 언어가 그래픽이어야하는지 궁금했습니다.)
또한 모든 형태의 우발적 인 상태가 제거되는 것을보고 싶습니다.
예를 들어, 웹 개발에서 데이터베이스, 비즈니스 모델, 프리젠 테이션을위한 뷰 모델로 데이터를 만드는 데 많은 시간을 소비합니다. 그런 다음 일부 데이터는 양식에 표시됩니다. 이는 또 다른 변형 일뿐입니다. .. 및 상태가 양식 게시물에서 돌아온 다음 데이터를 재구성하고이를 뷰 모델에 다시 투영합니다 (예 : 뷰 모델 바인더). 그런 다음 뷰 모델에서 비즈니스로 다시 투영합니다. 모델 ... 그런 다음 객체 관계형 매퍼 (또는 거친 작업)를 사용하여 데이터를 뷰 모델에서 변환하여 관계형 데이터베이스에 투영합니다.
이것이 중복되는 소리가 들리기 시작합니까? 이 광기의 어느 시점에서 우리는 실제로 유용한 것을 성취 했습니까? 그리고 유용하다는 것은 최종 사용자가 이해하고 관심을 가질 수있는 유형의 무언가를 의미합니다. 하루가 끝나면 실제로 사용자가 이해할 수있는 것을 만드는 데 소비 한 시간은 실제로 유일하게 잘 소비 한 시간입니다. 다른 모든 것은 부작용입니다.
매우 역동적 인 언어를 원합니다. 쓰기 / 컴파일 / 실행주기는 지루한 시간 낭비입니다. 이상적으로 언어는 변경된 내용을 파악하고 필요에 따라 백그라운드에서 투명하게 컴파일 /로드해야합니다.
이상적으로는 "실행"을 누르지 않아도됩니다. 변경 사항을 적용하면 변경 사항이 즉시 반영되어 화면에 표시됩니다. 쓰기 / 컴파일 / 실행주기의 문제 또는 심지어보다 직접적인 쓰기 / 실행주기의 문제는 사용자가 수행중인 작업과 너무 연결이 끊어져 있다는 것입니다. 즉각적인 피드백, 즉각적인 결과가 필요합니다. 기다림이 너무 깁니다!
다시 말하지만, 이것이 전통적인 IDE로 달성 할 수 있는지, 또는 완전히 새로운 종류의 인터페이스가 필요한지조차 모릅니다.
작업중인 문제에 가장 적합한 약한 유형과 강한 유형의 조합을 사용할 수 있어야합니다.
일반적으로 상태는 언어가 귀하를 위해 완전히 관리하는 것이어야합니다. 지속성을 위해 왜 데이터베이스에 의존해야합니까? 이상적으로는 하나의 웹 요청, 하나의 세션, 24 시간, 모델에서 변수의 수명을 간단하게 지정할 수 있기를 원합니다.
다른 미디어 및 수명 기간 동안 스토리지 솔루션의 전체 어레이 중에서 선택해야하는 이유는 무엇입니까? -각 미디어에 맞게 데이터를 변환하고 구성하는 것은 말할 것도 없습니다. 브라우저 캐시, 데이터베이스, 메모리, 디스크, 누가 신경 써요! 데이터는 데이터입니다. 당신이 당신의 데이터를 저장하는 곳 (그리고 얼마나 오래 동안)은 신들과의 싸움이 아니라 단순한 선택이어야합니다!
음, 행운을 빌어 요
아마도 다음을 지원하는 다중 패러다임 언어 일 것입니다.
왜 이런가요? 특히 데이터를 구성하기 위해 큰 프로그램을 구성하는 좋은 방법이기 때문에 객체 지향. 항상 (OOP)를 원하지 않거나 필요로하지 않기 때문에 사람들이 선택해야합니다. 프로그래머가 쉽게 디버깅하고 프로그램을보다 명확하게 만들 수 있기 때문에 기능적입니다.
코드 블록을 표시하기 위해 들여 쓰기 블록이있는 Python 모델을 사용합니다. 매우 떨리고 읽기가 좋습니다.
파이썬은 아주 좋은 언어이기 때문에 실제로 파이썬에서 많은 아이디어를 훔칠 것입니다. 나는 진술을하고 맵, 목록 및 튜플을 복사 할 것입니다.
이제는 파이썬에서 역동적 인 개념을 취하지 않을 것입니다. 한 가지 이유는 아마도 명시 적으로 정적으로 입력되었을 것입니다. 프로그램이 더 명확 해 졌다고 생각합니다. 변수는 아마도 메소드가있는 객체 일 것이므로 str.length()
문자열의 길이를 얻는 것과 같은 것을 할 수 있습니다. 함수 정의에서 반환 유형과 인수 유형을 지정해야합니다 (일부 종류의 일반 유형도 지원).
파이썬에서 복사로 돌아가 보자 ;-). 선택적 프로 시저 인수를 갖는 방법을 좋아하므로 아마도 그럴 것입니다. 그러나 파이썬은 프로 시저 오버로드를 지원하지 않습니다.
클래스를 보자. 다중 상속을 버릴 것이다. 남용하기 쉽다. 개인 및 유사한 범위를 구현하고 C ++에서 수행되는 방식으로 구현했을 것입니다. 나는 또한 추상 클래스와 인터페이스를 가질 것이다. 나는 파이썬이 그것을 믿지 않는다.
내부 클래스를 지원할 것입니다. 사실 매우 강력한 객체 지향 언어를 원합니다.
아마 해석 될 것입니다. 좋은 JIT 컴파일 (프로그래머 생산성이 우선이지만 빠른 언어를 원함)을 사용하여 실제로 빠르게 얻을 수 있으며 컴파일은 여러 번 생산성에 좋지 않습니다. 해석 된 언어는 또한 플랫폼 독립성을 증진 시키며 매일 매일 점점 더 중요합니다.
기본 제공되는 유니 코드 지원이 있습니다. 요즘 국제화는 중요합니다.
확실히 가비지 수집됩니다. 젠장, 나는 메모리 관리를 직접하는 것을 싫어한다. 생산성에도 좋지 않습니다.
마지막으로 좋은 표준 라이브러리가 있습니다.
와, 내가 정말 파이썬을 얼마나 좋아하는지 깨달았습니다.
Interpreted languages also promote platform independance
? 컴파일러 (백분율)보다 크로스 플랫폼 인터프리터가 더 있다고 생각하지만이 문장이 왜 참인지 알 수 없었습니까? 크로스 플랫폼 능력에 대해서는 전혀 차이가 없다고 생각합니다.
우선, 컴파일러에 관한 몇 권의 책, 몇 가지 표준을 구입하고 언어와 컴파일러에 대한 코스를 2 ~ 2 개 수강 할 것입니다. PEP에 기여 하고 C ++ 표준위원회 회의를 방문했습니다. 필자는 기능과 버그 모두를 위해 내가 사용하는 컴파일러에 패치를 제공 할 것입니다.
그런 다음 되돌아 가서 제가 지금 올라온이 목록에서 공포를 봅니다. 이것은 제가 지금 시작했을 때 어떤 방향으로 갈 것인지에 대한 것입니다.
언어를 구현하기 시작하면 이러한 상당히 넓은 지점조차도 빠르게 변경 될 수 있으므로 더 자세히 설명 할 필요가 없다고 생각합니다.
시간이 있으면 스칼라를 기반으로 하는 지역화 가능한 프로그래밍 언어를 디자인 하므로 XML을 제외한 대부분의 기능을 갖습니다. 저의 목표는 아랍어 (내 모국어)와 같이 영어와 다른 구조의 언어로 거의 자연스럽게 읽는 언어를 만드는 것입니다. 다음과 같은 기능을 생각하고 있습니다.
#lang
지시문으로, 전처리기에 프로그래밍에 사용되는 휴먼 언어를 알리는 데 사용됩니다. 예를 들어 : 대신 , 대신 #lang ar
이라는 단어 فئة
를 사용할 수 있습니다. 휴먼 언어 별 키워드는 표준 프리 프로세서 파일에 정의되어 있습니다.class
عرف
def
class MyClass is composed of {
되기 class MyClass {
에 "로", 제거 def MyMethod(x: Int) as {
가되는 def MyMethod(x: Int) {
. 일부 (인간) 언어에서는 특히 학생의 경우 코드를 이해하기가 훨씬 쉽습니다.اعرض طول اسم محمد
와 같습니다 print(length(name(Mohammad)))
. (괄호는 명확성을위한 것입니다.)전처리 기와 컴파일러에 대한 이러한 최소한의 변화는 영어가 아닌 사람들에게 프로그래밍을 훨씬 간단하게 만들 것이라고 믿습니다.
print
것은 아프지 않을 것입니다.