다트에는 웹 프로그래머에게 유용한 기능이 있습니까?


33

http://www.dartlang.org/

나는 사이트를 매우 짧게 체크 아웃했고 궁금했다. 다트 사용의 장점이 있습니까? JavaScript를 대체하는 것입니까?

더 간단한 Java처럼 보입니다. 직장에서 상당히 많은 C #을 작성하면 언어는 내가 익숙한 것과 매우 흡사하므로 구문을 배우는 것은 마치 배우는 바람처럼 보입니다. 언어에 대한 의견이나 경험이 있습니까?

(CoffeeScript와 비교할 때 (= Ruby 구문을 사용하지 않습니다) 구문이 더 익숙해 보입니다).


18
Doug Crockford의 의견은 다음과 같이 재미 있습니다. "오랫동안 생각했습니다. 깨끗한 종이를 가지고 Javascript의 모든 장점을 유지하는 새로운 언어를 쓸 수 있다면 ... 다트 같은 걸로
MebAlone

2
@MebAlone Ho-ho-ho, 얼마나 통찰력. Crockford가 얼마나 흔들리는 지. 지혜에 현명한 균열.
funkybro

11
@MebAlone Dart 언어 디자이너 JavaScript의 모든 장점을 유지하는 새로운 언어를 만들려고하지 않았습니다 . 그들은 브라우저를위한 클래스 기반의 객체 지향 언어를 고안하려고 노력했다.
MarkJ

1
무슨 Is there any advantages of using Dart?뜻입니까? 이상의 장점 것을 측정 하는 방법 ? JavaScript로 컴파일되는 다양한 언어가 있습니다. 그들 대부분은 다트보다 훨씬 더 좋은 일을합니다. 일부는 다트보다 대부분의 일을 더 잘합니다. 예를 들어 C #을 사용하면 ScriptSharp흥미로울 수 있습니다. JavaScript로 컴파일하는 모든 언어 중에서 가장 먼저 선택하는 것과는 거리가 멀지 만, 매우 쉬운 전환을 제공하여 기존 코드를 쉽게 이식 할 수 있습니다.
back2dos

1
@MebAlone Douglas는 약간의 충돌이 있습니다. 불평하는 개발자는 새로운 아이디어를 받아들이지 않지만 2 일 전에 방금 출시 된 2012 년에는 다트가 나쁘다고 말합니다. 그들은 2 년 전에 올 것이라고 발표했습니다. 다트와 마찬가지로 더글러스가 JS에서 불만족스러운 것들을 다루고있다 ( "느슨한"프로토 타입을 가진 생성자 함수는 없다). 그가 좋아하는 것들을 유지하면서 (폐쇄 물처럼). 여러 프레젠테이션에서 나는 그가 프로토 타입을 칭찬하고 생성자 함수의 구문을 비판했다 (그가 옳다). 그런 다음 프로토 타입의 존재를 완전히 무시하는 모듈 패턴을 표시하여 "해결"합니다.
HMR

답변:


65

질문 해 주셔서 감사합니다! 완전 면책 조항, 나는 다트 팀에서 일합니다.

아마도 오늘날 Dart가 가진 가장 큰 장점은 C #, Java, C ++ 및 대부분의 JavaScript 개발자에게 친숙하다는 것입니다. 많은 개발자들은 언어 (클래스 기반 OO, 어휘 범위, 익숙한 구문) 및 다트가 충족하고 능가하는 툴 (코드 완성, 리팩토링, 코드 탐색, 디버깅)에 대한 기대치를 가지고 있습니다.

언어에 대해 좋아하는 것이 있습니다.

  1. 선택적 정적 유형. 프로토 타입을 작성하거나 작은 스크립트를 작성할 때 정적 유형을 사용하지 않습니다. 나는 단지 그들을 필요로하지 않으며, 행사에 푹 빠지고 싶지 않습니다. 그러나 이러한 스크립트 중 일부는 더 큰 프로그램으로 발전합니다. 스크립트가 확장됨에 따라 클래스와 정적 유형 주석을 원합니다.

  2. 유죄가 입증 될 때까지 결백합니다. 다트는 컴파일 타임 오류가 발생하는 상황을 최소화하려고 노력합니다. Dart의 많은 조건은 경고이며 프로그램 실행을 중단시키지 않습니다. 왜? 웹 개발 방식에 따라 개발자가 약간의 코드를 시도하고 다시로드하고 결과를 확인할 수 있도록해야합니다. 개발자는 코드의 구석을 테스트하기 전에 전체 프로그램이 올바른지 먼저 확인할 필요는 없습니다.

  3. 어휘 범위. 익숙하지 않다면 굉장합니다. 간단히 말해서 변수의 가시성 및 심지어 이것 조차도 프로그램 구조에 의해 정의됩니다. 이것은 전통적인 웹 프로그래밍에서 퍼즐의 클래스를 제거합니다. 재 바인드 기능에 필요가 유지 없습니다 어떻게 생각하는지 또는 기대합니다.

  4. 언어로 구워진 실제 수업. 대부분의 웹 개발 프레임 워크가 솔루션을 제공하기 때문에 대부분의 개발자가 수업에서 일하기를 원한다는 것은 분명합니다. 그러나 프레임 워크 A의 "클래스"는 전통적인 웹 개발에서 프레임 워크 B와 호환되지 않습니다. 다트는 자연스럽게 수업을 사용합니다.

  5. 최상위 기능. Java의 고통스러운 부분 중 하나는 모든 것이 클래스에 배치되어야한다는 것입니다. 특히 약간의 유틸리티 함수를 정의하려는 경우 약간 인공적입니다. Dart에서는 클래스 외부의 최상위 레벨에서 함수를 정의 할 수 있습니다. 이로 인해 라이브러리 구성이보다 자연스럽게 느껴집니다.

  6. 클래스에는 암시 적 인터페이스가 있습니다. 명시 적 인터페이스를 제거하면 언어가 간단 해집니다. 더 이상 어디서나 IDuck을 정의 할 필요가 없습니다. 이제 필요한 것은 오리 클래스입니다. 모든 클래스에는 암시 적 인터페이스가 있으므로MockDuck implements Duck

  7. 명명 된 생성자 가독성을 높이는 데 도움이되는 생성자 이름을 지정할 수 있습니다. 예를 들면 다음과 같습니다.var duck = new Duck.fromJson(someJsonString)

  8. 팩토리 생성자. 팩토리 패턴은 매우 일반적이며이 언어로 구워진 것을 보는 것이 좋습니다. 팩토리 생성자는 싱글 톤, 캐시의 객체 또는 하위 유형의 객체를 반환 할 수 있습니다.

  9. 격리합니다. 스레드간에 변경 가능한 상태를 공유하는 시대는 지났습니다 (오류가 발생하기 쉬운 기술). Dart 분리는 분리 된 메모리 힙으로 별도의 프로세스 또는 스레드에서 실행될 수 있습니다. 포트를 통해 메시지를 보내 통신을 분리합니다. Dart VM에서 작업을 격리하고 HTML5 앱에서 웹 작업자에게 컴파일 할 수 있습니다.

  10. Dart는 JavaScript로 컴파일합니다. JavaScript는 웹의 언어와 다르기 때문에 이것은 매우 중요합니다. 다트 앱은 최신 웹에서 실행되어야합니다.

  11. 강력한 툴링. 다트 프로젝트는 에디터도 제공합니다. 코드 완성, 리팩토링, 빠른 수정, 코드 탐색, 디버깅 등이 있습니다. 또한 IntelliJ에는 Dart 플러그인이 있습니다.

  12. 라이브러리. Dart 코드를 라이브러리로 구성하여 이름을 쉽게 지정하고 재사용 할 수 있습니다. 코드는 라이브러리를 가져올 수 있고 라이브러리는 다시 내보낼 수 있습니다.

  13. 문자열 보간. 이것은 훌륭한 기능이므로 문자열을 쉽게 작성할 수 있습니다.var msg = "Hello $friend!";

  14. noSuchMethod Dart는 동적 언어 이며을 사용 하여 임의의 메서드 호출을 처리 할 수 ​​있습니다 noSuchMethod().

  15. 제네릭. "이것은 사과 목록입니다"라고 말할 수 있으면 도구에 훨씬 더 많은 정보를 제공하여 잠재적 인 오류를 조기에 발견 할 수 있습니다. 그러나 다트의 제네릭은 아마도 익숙한 것보다 훨씬 간단합니다.

  16. 운영자 과부하. 다트 클래스는 +또는 과 같은 연산자의 동작을 정의 할 수 있습니다 -. 예를 들어와 같은 코드를 작성할 수 new Point(1,1) + new Point(2,2)있습니다.

모든 것을 말하면, 더 많은 JavaScript 라이브러리가 있습니다.

개인적으로 웹에는 여러 언어를 사용할 공간이 있다고 생각합니다. 응용 프로그램이 훌륭하고 대부분의 최신 브라우저에서 실행되는 경우 어떤 언어로 작성되었는지는 중요하지 않습니다. 개발자, 개발자가 행복하고 생산적이며 웹에서 시작하는 한 중요한 일! :)


많은 현대 프로그래밍 언어 (Ruby, Scala, Python)에는 일종의 다중 상속 메커니즘이 포함되어 있으며 이는 JDK8에서 제공됩니다. 다트에 대한 계획입니까?
MebAlone

4
1 번 지점에서 +1-동적 입력은 작은 스크립트 (예 : "양식 유효성 검사"수준)에 매우 적합합니다. 그 이상을 넘어서는 정적 타이핑의 안전망은 필수 불가결합니다.
funkybro

2
@MebAlone 가까운 미래에 믹스 인이 다트에 나올 것으로 기대합니다.
세스 래드

깜짝 스냅 샷은 언급되지 않았습니다. IMO는 다트 최고의 기능 중 하나입니다.
신화

@mythz 스냅 샷은 아직 완전히 구현되지 않았기 때문에 언급하지 않았습니다. 그러나 그렇습니다, 그들은 시원합니다!
세스 래드

11

직장에서 C #을 많이 쓰면 언어는 내가 익숙한 것과 매우 흡사합니다.

그것은 다트에 대한 한 가지 점입니다. 자바 스크립트는 일반적인 관용구가 거의없는 어색한 언어로 간주됩니다. Java와 같은 언어에는 종종 문제에 접근하는 자연스러운 방법이 있습니다. 예를 들어 테이블 인벤토리를 유지하는 경우 Java 또는 C #에서 테이블 클래스를 만듭니다.

Javascript에는 클래스가 없으므로 프로토 타입을 사용하고 싶을 수 있지만 어색한 느낌을주고 강력한 구조 및 캡슐화 도구를 제공하지 않습니다. (적어도 묘기를 만들지 않고서는 안된다.) 자바 스크립트 프로토 타입에는 상속, 구성 등이 어색하다. 그렇기 때문에 대부분의 사람들은 일반 해시 맵을 사용하여 데이터를 저장합니다. 또는 프로토 타입과 같은 타사 라이브러리를 사용하여 클래스와 같은 경험을 제공합니다.

편의는 하나, 다른 하나는 구조입니다. 대규모 앱을 구성하는 표준 방법이 없기 때문에 Javascript가 제대로 확장되지 않습니다. 그러나 현재 이러한 타사 라이브러리는 실제로 인기를 얻고 있습니다. (backbone.js처럼)

다트는 그것을 해결하는 것입니다. Java의 구조적 편리함을 제공하기 위해 거기에 있으며 이러한 어색한 JS 기능이 모두 없습니다. (대부분은 약한 타이핑과 관련이 있습니다.)

대답은 '예 : 클래스, 상속, ... : "전통적인 OOP"입니다. (대부분의 실제 JS 웹 응용 프로그램은 jQuery의 콜백 기반 접근 방식을 기본 구조로 사용합니다.) 그리고 정적 형식의 느슨한 형식을 가지고 있지만 핵심 판매 지점은 아닙니다.

BTW : 2010 년 날짜 : " Java의 미래 "이 "내부"Google 메일 링을 읽을 수 있습니다.

Javascript에는 언어를 발전 시켜서 해결할 수없는 근본적인 결함이 있습니다. 우리는 자바 스크립트의 미래를위한 두 가지 전략을 채택 할 것입니다 ... 자바 스크립트의 동적 특성을 유지하면서 더 나은 성능 프로파일을 가지고 있으며 대규모 프로젝트를위한 툴링이 가능한 새로운 언어 (대시라고 함)를 개발하십시오. .


5
모든 사람이 자바 스크립트를 "어색한 언어"로 생각하는 것은 아닙니다. 문제에 접근하는 자연스러운 방법이 종종 있습니다. 너무 자주 Java에서 지원하지 않는 기술 (기능 프로그래밍, 연산자 오버로딩, 믹스 인, 일반 프로그래밍)이 필요합니다. Javascript 프로토 타입에서는 상속, 구성 등이 어색하지 않습니다. Java 및 C #과는 다르지만 Ruby, LUA 및 Perl과 유사합니다.
kevin cline

1
음 ... 처음으로 프로토 타입에 대해 좋은 소식이 들립니다. 그러나 어떤 방식으로 루비와 비슷한 JS 프로토 타입을 볼 수 있습니까?
Philip

1
(자바 세계에서) 더 자주 나가야합니다. Ruby 메타 프로그래밍 ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html )을 보면 Ruby 멤버 이름 확인이 Javascript 멤버 이름 확인과 유사하지만 IMO가 더 복잡하다는 것을 알 수 있습니다.
케빈 클라인

jQuery는 형태 나 형태에 관계없이 DOM API (본질적으로 랩핑) 나 핵심 JS 자체 또는 Dart보다 콜백 방식을 홍보하지 않습니다. 프로토 타입은 클래스가 할 수없는 일을 할 수있는 상속 메커니즘입니다. 프로토 타입이 아닌 내부 인스턴스 변수를 잘 캡슐화하는 함수 생성자와 클래스를 비교합니다. Java 또는 C # dev의 중간 인재 레벨 Bean / getter-setter 스팸에 대해 캡슐화가 좋은지에 대한 최소한의 아이디어를 가지고 있거나 평균적인 Google 개발자가 JavaScript를 작성하는 방법에 대해 약간의 아이디어를 가지고 있지는 않습니다.
Erik Reppen

@ErikReppen : DOM 조작에만 jQuery를 사용하는 경우, backbone.js와 같은 다른 프레임 워크와 결합 할 경우 콜백이 거의 필요없는 코드를 작성할 수 있습니다. jQuery를 사용하여 이벤트를 바인딩하면 (익명) 콜백이 많이 촉진됩니다. backbone.js는 IMHO에보다 체계적인 접근 방식을 가지고 있습니다.
Philip

5

저에게는 범위와 클래스가있는 JavaScript보다 코드를 더 잘 구성 할 수있는 기회가 있습니다.

Java 및 JavaScript와 비슷하며 Dart 편집기를 사용하면 거의 적응하지 못했습니다. 나는 곧바로 코딩을 시작했다.

var ws = new [Moz]WebSocket다른 브라우저를 수용하는 것은 성가신 일입니다. Dart는 널리 사용되는 브라우저와 호환되는 JavaScript 코드로 컴파일됩니다.

내 과제는 주로 JavaScript 코드와 인터페이스하는 것입니다. 나는 어떻게 든 주변을 찾을 수 있지만 그것이 다트의 일부라면 더 좋을 것입니다.


@Abiola에 따르면 Dart는 더 나은 JavaScript interop이 필요합니다. 그것은 레이더에 매우 중요합니다. 팀이 무엇을 기대하는지 기대하고 있습니다.
세스 래드

0

웹 2.0이 시작된 이래로 Java / C # 접근 방식은 JS를 두드리는 데있어 편향되어 있습니다. 이는 클라이언트 측 언어와 서버 측 언어 사이의 인공적 (또는 매우 실제적이고 필요한) 차별화 때문입니다. 이것이 서버 측 언어가 웹 응용 프로그램의 핵심 문제 도메인을 '제어'할 수 있고 비즈니스 코드 (서버 측)에서 덜 심각한 코드 (ui 코드)를 구분하는 데 도움이된다고 생각합니다. 또한 Java 나는 Flash와 HTML 5로 인해 애플릿과의 GUI 전쟁을 잃어 버렸기 때문에 서버 측 커널을 유지하고 싶다고 생각합니다. 이제 RedTamarin은 NodeJS-esque AS3 프로젝트를 통해 통합 된 프론트 및 백엔드 패러다임의 다원화 된 미래를 암시합니다. .

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