동적 언어를위한 IDE-얼마나 멀리 갈 수 있습니까?


56

IDE가 정적 요소에서 제공하는 완료 및 기타 자산의 부족으로 인해 동적 언어가 제공해야하는 개발 속도가 크게 저하되는 방법에 불만이 있습니다.

입력 횟수를 줄이는 것이 아니라 편집기와 통합되지 않은 설명서를 지속적으로 참조하지 않고도 API를 탐색하여 얻는 생산성 향상 및 일반 재미입니다.

현재까지 모든 IDE + 동적 언어 조합-공평하지는 않지만별로 시도하지 않았습니다.

  • 버기
  • 느린
  • 단서없는 / 과열의 (완전히 모든 완성을 보여 주듯이)
  • 또는 단순히 Eclipse + Java만큼 완벽하지 않습니다.

동적 코드 분석은 사소한 작업이 아니라는 것을 알고 있습니다. 그러나 궁금한 점은 없습니다. 이 코드는 정말 이해하기 어렵 습니까?

그래서 내 질문은 :

특정 IDE (또는 적은 올인원 설정)가 동적 언어에 대해 완전히 뛰어난 지원을 얻었습니까? 아니면 여전히 '해결되지 않은'문제입니까?


30
+1 내가 시도한 모든 PHP IDE는 Visual Studio + C # / C ++에 비해 끔찍했습니다.
Matěj Zábský

5
중요한 질문은 확실하지 않지만 JetBrains IDE를 살펴볼 수 있습니다. 그들의 접근 방식은 "우리는 이미 훌륭한 IDE를 가지고 있습니다. $ LANGUAGE에서 작동하도록하겠습니다". 당신이 시도한 것들의 문제는 대신 다음과 같은 접근 방식을 취했을 것입니다. "$ LANGUAGE에는 IDE가 없으므로 누군가가 만들어야합니다."
millimoose

2
IDEA는 특히 Java 및 프로젝트 관련 작업을 수행 할 때 정말 훌륭했습니다. 그러나 JavaScript의 경우 네임 스페이스 또는 포함 된 객체에 정의 된 '방법'을 인식하지 못하는 것 같습니다.
vemv

IntelliJ IDEA 또는 JetBrains의 언어 별 IDE 중 하나.
sylvanaar

1
@FrustratedWithFormsDesigner Komodo를 사용했습니다. 내가 본 다른 RoR IDE보다 훨씬 자동 완성 기능이 뛰어납니다 ...하지만 자동 완성을 구현하려고 시도하는 Ruby의 IDE는 거의 없습니다. 즉, 아무것도 아닌 것이 낫습니다
Earlz

답변:


21

매우 역동적 인 언어 인 스몰 토크는 항상 자동 리팩토링, SUnit (모든 * Unit 프레임 워크의 조부모), "누가이 메시지를 보냅니 까?", "누가이 방법을 구현합니까?"와 같은 작은 IDE를 가지고있었습니다. 등이 개척되었습니다. 따라서 IDE는 실제로 동적 언어를 지원할 수 있으며, 최근까지는 정적으로 유형이 지정된 언어보다 훨씬 뛰어났습니다.

S. Lott 는 "동적 언어는 정적 언어와 같은 종류의 코드 완성을 가질 수 없습니다. 본질적으로 불가능합니다."

이론적이고 절대적인 의미에서 "본질적으로 불가능하다"? 확실한. 실용적인 의미에서? 실제로는 아닙니다. 동적 언어, 정적 ( k-CFA , RoelTyper ), 런타임 ( PIC ) 및 프로그래머의 최근 히스토리 ( "프로그램 히스토리가 코드 완료를 개선하는 방법" 과 같은)와 같은 다른 방법 으로 유형을 유추하는 방법에는 여러 가지가 있습니다 .

물론 Pharo 및 Squeak 커뮤니티는 코드 완성 도구에 매우 만족 합니다 .


3
나에게서 +1 요즘 Java 세계에서 일하고 있음에도 불구하고, 나는 내가 알고있는 다른 언어에 비해 스몰 토크에서 당신이 얼마나 더 생산적인지를 아직도 생각합니다. 이미지에 IDE와 코드를 통합하여 코드가 항상 "살아남"(Smalltalkers가 의미하는 바를 알 수 있음)은 타의 추종을 불허합니다. Pharo와 Seaside가 이클립스가 IDE만큼이나 많은 사람들이 "필수 언어"로 생각하는 것에 새로운 삶을 불어 넣으면서 점점 더 스몰 토크와 함께 바이올린으로 돌아갑니다. 스몰 토크의 뛰어난 명명 규칙은 예측 코드 완성에 확실히 도움이됩니다.
Amos M. Carpenter

16

IDE에서 아는 모든 것은 동적 언어 인 Smalltak에서 처음 개발되었습니다. 다른 모든 것들은 단지 그것들을 복사하는 것입니다. 따라서 이러한 모든 기능은 동적 언어로 가능합니다.

오늘날 동적 언어는 정적 언어 뒤에 있습니다. 그런데 왜?

최근까지는 정적 타이핑이 동적 타이핑보다 우수하다고 생각했습니다. 많은 코더들이 그 시점에서 최근에 마음을 바꿨습니다. 동적으로 입력 된 언어를위한 IDE에 중점을 두지 않았습니다.

IDE의 기능은 동적으로 입력되는 언어에서 덜 유용하다고 생각합니다. Java 또는 Objective-C에서 작업 할 때 언어 작업에 도움이되는 IDE가 필요하다고 생각하지만 동적 언어에 대해서도 마찬가지입니다.

작업의 일부는 정적 언어에서 더 쉽습니다. 식의 유형을 알아내는 것은 간단합니다. 동적 언어로 동일한 작업을 수행하려면 전체 프로그램 분석 또는 런타임 중에 유형을 로깅해야합니다. IDE가 유형을 중심으로 많은 것을 수행하기 때문에 효과가 있습니다.


2
Squeak과 Pharo에서 RoelTyper는 어떤 메시지를 보냈는지 확인하여 적절한 유형의 유추 작업을 수행합니다. 그렇지 않으면 Shivers & Might의 k-CFA는 조정 가능한 유형 유추를 제공하므로 비용과 정확성을 절충 할 수 있습니다.
Frank Shearar

13
I think that the features for IDEs are less useful in dynamically typed languages재미 있네요. 정반대라고 생각합니다. 너무 많은 동적 언어에서는 변수를 미리 선언 할 필요가 없으므로 변수 철자를 잘못 입력하는 것은 심각한 문제입니다. 한편 구문 채색, 리팩토링 도구, 디버깅 기능 등 나머지 주요 기능은 모든 언어 에서 똑같이 유용 합니다.
BlueRaja-대니 Pflughoeft

2
@Winston : 그런 다음 여러 사람과 함께 선언적이지 않은 언어로 프로젝트를 수행 한 적이 없습니다. :) 언어가 대소 문자를 구분할 때 특히 성가시다. 개인 경험의 예 : "Work-Order"라는 단어는 때때로 하나의 단어 ( "Workorder")로 철자가되므로 변수를 작성할 때 일부 사람들이 쓰고 workOrder일부는 쓰게 workorder됩니다. 파이썬에서 두 개의 개별 변수> _ <
BlueRaja-Danny Pflughoeft

1
@ BlueRaja-DannyPflughoeft는 반대로 여러 사람들과 함께 Python 프로젝트를 수행했습니다. 문제가 있다고 말할 때 : 존재하지 않는 변수를 참조하기 때문에 실행하고 예외가 발생합니다. 데이터를 잘못된 곳에 저장하거나 코드를 발견하지 못해 오류가 발생하여 버그가 발생합니다. 코드가 프로덕션으로 탈출합니까?
Winston Ewert

2
"많은 코더들이 그 시점에서 최근에 마음을 바꿨습니다." 왜 이런거야?
Pubby

10

나는 파이썬과 같은 문제에 부딪쳤다. vim을 에디터로 사용하고 싶었지만 IDE 환경이 없었습니다. 그래서 vim 플러그인으로 내 자신을 굴 렸습니다. 현재 필자는 과거에 사용한 IDE보다 더 나은 개발 환경을 가지고 있다고 생각합니다.

내 설정은 github에 호스팅되어 있으므로 원하는 것을 자유롭게 살펴보고 침대 에 담으십시오 . 플러그인에 대한 간단한 개요 :

  • 병원체
  • python-mode, 로프, pyflakes 및 pydoc 통합
  • 파이썬 디버거 용 vimpdb
  • 프로젝트의 파일 목록을위한 프로젝트
  • 태그 점프를위한 태그리스트
  • 탭 완성을위한 수퍼 탭
  • 스 니펫 스 니펫
  • 통합 쉘, 명령 프롬프트, bash, python 또는 ipython에 대한 conqueterm

다른 것들이 있지만 더 인기있는 IDE의 모든 기능이 있습니다. 비용이 들지 않았으며 모든 vim의 힘을 활용할 수있게되었습니다. 스플릿, 이동 명령, 레지스터, 점프, 키보드로 내 전체 개발 환경을 실행할 수 있습니다 ...


4

특정 IDE (또는 더 적은 올인원 설정)가 동적 언어에 대해 완전히 뛰어난 지원을 달성하도록합니다.

귀하의 평가가 이해하기 어렵다는 것을 고려하면 ( "완전히 탁월하다"? "우둔한 / 과열이없는"?) 모든 IDE가 묵시적인 표준과 일치 할 수 있는지 의심됩니다.

동적 언어는 Java가 아니기 때문에 Eclipse + Java와의 간단한 비교는 어리석은 일입니다.

아니면 여전히 '해결되지 않은'문제입니까?

좀 빠지는.

아마 해결할 수 없습니다. 귀하의 요구 사항 ( "완료 부족 및 기타 자산")으로 인해보다 정확하게 작성하기가 어렵습니다.

동적 언어는 정적 언어와 동일한 종류의 코드 완성을 가질 수 없습니다. 본질적으로 불가능합니다.

일부 IDE는 추측을 잘 수행합니다. 예를 들어 Eclipse에는 동적 언어 용 플러그인이 있습니다.


3

Steve Yegge의 프레젠테이션 은 여전히 ​​관련성 이 있다고 생각합니다 . 간단히 말해서, 절반 정도의 자바 스크립트 아이디어 (intelliJ IDEA)가 있지만 일반적으로 동적 언어는 이러한 도구 (또는 실제로 언어)를 만드는 데 본질적으로 어려운 것이 없기 때문에 정적 언어가 아닙니다. 모든 관심을 먼저.


사실 Yegge의 프레젠테이션은 내 질문의 근본 원인이었습니다. 만약 휴리스틱과 다른 기술이 있다면 멋진 구현은 어디에 있습니까? 인 IntelliJ에 : 내 원래의 게시물에 남아있는 주석을 참조 (내가 틀렸다면 알려주세요)
vemv

2014-여전히 최고의 정적 IDE와 일치하지 않음
Den

3

나는 하루 종일 자바 스크립트 / PHP와 루비로 웹 응용 프로그램을 프로그래밍하고 이것을 위해 찾은 최고의 IDE는 Aptana입니다. 그것은 세 가지 언어 (및 파이썬) 모두에 대한 코드 완성 기능을 갖추고 있으며 로컬 vars를 선택하고 html 및 css로 작업 할 때 css / javascript에서 사용하기 위해 html에서 id를 선택하고 함수를 선택합니다. 내가 빠르고 더러운 일을하고 인라인 자바 스크립트를 작성할 때의 이름 (나쁜 ​​것을 알고 있지만 때로는 개념 증명에 유용합니다). 그것은 레이크 작업을 내장하고 git과 커맨드 라인 콘솔을 지원합니다. 일어나기까지 약간의 시간이 걸렸지 만 일단 코딩을 할 때 IDE를 떠나는 것이 거의 없다는 것을 알게되어 많은 시간을 절약 할 수있었습니다.


내 경험 '완전히 뛰어난 경험'에서 얻은 IDE 내에서 동적으로 유형이 지정된 언어 개발에 대한 답변에 대해 왜 투표를 거부합니까? 작전이 요청한 것은 무엇입니까?
Ryan

2

Wing IDE의 Python 지원이 정말 뛰어납니다. 코드 완성과 함께 잘 작동하며 디버거는 Visual Studio의 비 동적 C #만큼 강력합니다.

나는 버그가없고 느리거나 단서가 없다는 것을 증명할 수있다. 나는 이클립스를 사용한 적이 없기 때문에 그 시점에 대해 무지하다. 그러나 더 큰 문제는 동적 언어를위한 완전하고 생산성을 향상시키는 IDE를 개발하는 데있어 내재 된 장벽이 있다는 것이다. Python과 Wing에 대한 나의 경험을 감안할 때, 나는 그렇지 않다고 말하는 경향이 있습니다. 그러나 확실히 더 어렵다.


2

Microsoft의 Visual Studio는 많은 프로그래머가 사용하는 IDE이며 IronRuby , IronPython 및 F #을 지원합니다 . 대부분 루비와 파이썬을 동적 프로그래밍 언어로 생각하지만 F #은 그렇지 않습니다.

이 의견에 따라 F # 은 프로그래밍 언어입니다.

F # (F Sharp로 발음)은 .NET Framework를 대상으로하는 다중 패러다임 프로그래밍 언어로, 기능 프로그래밍과 명령 및 객체 지향 프로그래밍 분야를 모두 포함합니다. ML의 변형이며 OCaml 구현과 대부분 호환됩니다.

"동적 언어"를 정확하게 정의하는 것에 대한 정확한 정의는 여전히 논쟁의 여지가 있지만, 대부분은 JavaScript가 C #보다 "동적"이라는 데 동의 할 것입니다. Wikipedia에 따르면 :

동적 언어의 정의는 코드와 데이터뿐만 아니라 컴파일과 런타임 사이에 보편적이지 않은 구별을 시도하기 때문에 모호합니다. 가상 머신, 적시 컴파일 및 일부 시스템에서 많은 프로그래밍 언어가 머신 코드를 직접 수정하는 기능은 구별을 추상화합니다. 일반적으로 언어가 역동적이라는 주장은 언어의 기능에 대한 명확한 진술보다 역동적 인 기능의 사용 편의성에 대한 주장입니다.

나는 여기에 웜 캔을 열고 싶지 않습니다. 어떤 사람들은 F #이 동적 언어가 아닌 기능적 기능으로 더 정확하게 기술되어 있다고 제안 할 것입니다. F.은 다양한 .Net 언어라고 말할 수 있지만 F #은 일반적으로 C # 또는 VB보다 동적 프로그래밍에 더 적합한 것으로 간주됩니다.

프로그래밍 언어를 동적으로 사용할 수있는 요소는 무엇입니까?


4
"F # [...]는 동적 인 언어입니다"라는 말의 의미와 C #의 역 동성이 어떻습니까?
Arseni Mourzenko

1
둘째, F #을 동적 언어로 생각하지 않습니다. 도대체 C #은 (F #에 쉽게 사용할 수있는 것이 있는지 확실하지 않습니다) dynamic지금까지 내장 된 "더 동적"일 수 있습니다 . 그러나 어느 쪽이든, 어느 쪽도 일반적으로 동적으로 입력되지 않으며 "동적 언어"와 관련된 대부분의 다른 기능 (문화적 내용은 말할 것도없고)도 빠져 있습니다.

2

정적 형식 언어와 동적 형식 언어의 주요 차이점은 시스템이 컴파일 타임에 심볼 참조가 의미하는 바를 알 수 있다는 것입니다.

이를 통해 컴파일 타임에 컴파일러가 생성 한 정보에서 직접 좋은 IDE를 만드는 데 필요한 정보를 쉽게 수집 할 수 있습니다 (대부분의 경우 "편집"시간으로 이동 함).

메소드에 "사물"이 있다고 말하는 독립형 메소드 시그니처가있는 경우 편집기가 전송 내용을 알도록 어떻게 도울 수 있습니까? 물건을 사용하는 방법을 제안하는 데 어떻게 도움이 될 수 있습니까?

오리 타이핑은 여기에서도 도움이되지 않습니다. 가장 지능적인 편집기조차도 객체에 .executeFooOp () 메소드가 있기 때문에 해당 객체에서 ".executeBarOp"를 코드 완성 할 수 있다고 말할 수는 없습니다. (하지만 나머지 코드베이스를 정찰하고 지능적으로 추측 할 수는 있음).

그러나 서명에서 "문자열"임을 알고 있다면 해당 문자열에서 호출 할 수있는 모든 메소드를 알고 있으며 해당 사용자가 메소드 호출을 입력해야하는 경우 해당 변수를 제안 할 수 있습니다. 매개 변수로서의 문자열. 원하는 경우 하위 클래스를 캐스트 할 수 있다고 제안 할 수도 있습니다.

일반적인 컴파일러보다 훨씬 지능적인 것으로 전체 코드베이스를 완전히 스캔 할 수 없다면 동적으로 입력되는 언어에는 정보가 없습니다.


1
"정적 유형 언어와 동적 유형 언어의 주요 차이점은 시스템이 컴파일 타임에 심볼 참조가 의미하는 바를 알 수 있다는 것입니다." – 네,하지만 꼭 그럴 필요는 없습니다. IDE가 컴파일 타임이 아닌 런타임에 작동하면 컴파일 타임에이 정보를 알 필요가 없습니다. 런타임시 정보 사용할 수 있습니다. 그렇지 않으면 프로그램을 실행할 수 없습니다.
Jörg W Mittag 2012 년

1
IDE는 런타임에 작동하지 않거나 한 번에 하나의 가능한 지점에서만 정확하게 실행할 수 있습니다. 런타임은 상황에 따라 달라집니다. 주어진 심볼은 한 패스에서 다른 것을 의미 할 수 있습니다. 따라서 "편집기"가 "실행 중"(어떻게 작동합니까 ???) 인 경우 "한 패스"에서 어떻게해야합니까? 텍스트 완성을 위해 "다른 패스"에서 정보를 얻으시겠습니까? 이를 위해 아직 쓰지 않은 모듈에 꽂을 라이브러리를 작성한다면 어떨까요?
Bill K

@billk 실제로 IDE는 런타임에 제대로 작동합니다. 테스트를 먼저 수행하면 런타임에 예상되는 객체를 알 수 있습니다. 잠시 동안 작은 대화를 시도하십시오.
Stephan Eggermont

0

적어도 PHP의 경우 많은 IDE가 다음과 같은 것을 "이해합니다"

/** @var $foo ClassA **/

표준화 된 방식 (이 경우 phpDocumentor ) 으로 문서화 하면 IDE 가이 를 최대한 활용합니다.


2
따라서 정적으로 컴파일 된 언어가 입력 해야하는 모든 것을 입력하면 정적으로 입력 한 언어로 할 수있는 것과 동일한 정보를 찾을 수 있습니다. 사실 가정하지만 추가 단계를 건너 뛰고 정적으로 입력 된 언어로 이동?
Bill K

적어도 PHP는 간단한 유형에 대해 자동 캐스팅을 수행하기 때문입니다. 또한 동적 언어를 사용하면 유형을 지정할 위치를 결정할 수 있습니다. 민첩한 개발을 통해 "클래스를 유형 또는 인터페이스로 사용합니까?"와 같은 결정을 연기 할 수 있습니다.
ACNB

@ACNB : 많은 "정적"언어는 자동 캐스팅 및 형식 유추를 허용합니다. 예를 들어, C ++, C # 등.
Arafangion

0

동적 언어 (런타임에 유형을 확인하는 언어)에 대한 모든 IDE에서 가장 좋은 것은 ... Visual Studio for Python

  • Intellisense의 Bulling 유형 정보
  • 항해
  • 디버깅

시도해 볼 가치가 있습니다.


구체적으로, Python for VS가 어떤 방식으로 더 나은지, Hopscotch를 무작위로 골라 봅시다.
Jörg W Mittag
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.