IDE cho các ngôn ngữ động - bạn có thể nhận được bao xa?


56

Tôi thấy thật bực bội khi tốc độ phát triển mà các ngôn ngữ động sẽ cung cấp bị tổn hại đáng kể do thiếu hoàn thành và các tài sản khác mà IDE sẽ cung cấp cho bạn trong các đối tác tĩnh của chúng.

Đây không chỉ là việc nhập ít hơn - đó là tăng năng suất và niềm vui đơn giản mà bạn có được bằng cách duyệt API mà không cần phải liên tục tham khảo tài liệu không được tích hợp với trình chỉnh sửa.

Đến nay, tất cả các kết hợp ngôn ngữ động + IDE - công bằng không phải là nhiều - tôi đã thử là:

  • lỗi
  • chậm
  • không biết / quá nhiệt tình (như thể hiện tất cả các lần hoàn thành có thể)
  • hoặc đơn giản là không đầy đủ như, giả sử, Eclipse + Java.

Tôi biết rằng phân tích mã động không phải là một nhiệm vụ tầm thường. Nhưng người ta không thể không tự hỏi - đoạn mã này có thực sự khó để tìm ra không?

Vì vậy, câu hỏi của tôi là:

Có bất kỳ IDE cụ thể nào (hoặc ít thiết lập tất cả trong một) đã đạt được sự hỗ trợ hoàn toàn nổi bật cho ngôn ngữ động hay đây vẫn là vấn đề 'chưa giải quyết'?


30
+1 Mỗi IDE PHP duy nhất tôi đã thử chỉ là khủng khiếp so với Visual Studio + C # / C ++.
Matěj Zábský

5
Không chắc chắn về câu hỏi bao quát, nhưng bạn có thể muốn xem qua IDE của JetBrains. Cách tiếp cận của họ là "chúng tôi đã có một IDE tuyệt vời, hãy làm cho nó hoạt động với $ LANGUAGE". Thay vào đó, vấn đề với những cái bạn đã thử có thể đã sử dụng cách tiếp cận sau: "$ LANGUAGE không có IDE, ai đó nên tạo một cái".
millimoose

2
Tôi thực sự thấy IDEA thật tuyệt vời, đặc biệt là khi làm việc với Java và các nhiệm vụ liên quan đến dự án. Nhưng đối với JavaScript, dường như không nhận ra 'phương thức' được định nghĩa trong không gian tên hoặc các đối tượng chứa trong nó.
vemv

IntelliJ IDEA hoặc bất kỳ IDE cụ thể về ngôn ngữ nào của JetBrains.
sylvanaar

1
@FrustratedWithFormsDesigner Tôi đã sử dụng Komodo. Nó có khả năng tự động hoàn thành tốt hơn nhiều so với bất kỳ IDE RoR nào khác mà tôi đã thấy ... nhưng tôi đã thấy rất ít IDE cho Ruby thậm chí còn cố gắng thực hiện tự động hoàn thành. Điều đó nói rằng, tốt hơn là không có gì
Earlz

Câu trả lời:


21

Smalltalk - một ngôn ngữ rất năng động - luôn có một IDE tuyệt vời, trong đó những thứ nhỏ như tái cấu trúc tự động, SUnit (ông bà của tất cả * Khung đơn vị), "ai gửi thông điệp này?", "Ai thực hiện phương pháp này?" và tương tự đã được tiên phong. Vì vậy, có, IDE thực sự có thể hỗ trợ các ngôn ngữ động đến một mức độ mà cho đến gần đây, vượt xa các ngôn ngữ được gõ tĩnh.

S. Lott nói rằng "Các ngôn ngữ động không thể có cùng loại hoàn thành mã như các ngôn ngữ tĩnh thực hiện. Về cơ bản là không thể."

"Về cơ bản là không thể" theo nghĩa lý thuyết, tuyệt đối? Chắc chắn rồi. Trong một ý nghĩa thực tế? Không hẳn vậy. Có nhiều cách để suy ra loại ngôn ngữ động, tĩnh ( k-CFA , RoelTyper ), trong thời gian chạy ( PIC ) và các phương pháp khác, như sử dụng lịch sử gần đây của lập trình viên - "Lịch sử chương trình có thể cải thiện hoàn thành mã như thế nào" .

Chắc chắn cộng đồng Pharo và Squeak rất hài lòng với các công cụ hoàn tất mã của họ .


3
+1 từ tôi. Mặc dù làm việc trong thế giới Java những ngày này, tôi vẫn còn nhớ về việc bạn làm việc hiệu quả hơn ở Smalltalk so với bất kỳ ngôn ngữ nào khác mà tôi biết. Việc tích hợp IDE và mã trong hình ảnh của bạn, có mã luôn "sống" (Smalltalkers sẽ biết ý tôi là gì), đơn giản là vượt trội. Với việc Pharo và Seaside đưa cuộc sống mới vào thứ mà nhiều người nghĩ là "ngôn ngữ đã có", cũng như Eclipse là một IDE, tôi ngày càng quay lại với Fiddalk. Các quy ước đặt tên tuyệt vời của Smalltalk chắc chắn sẽ giúp hoàn thành mã dự đoán.
Amos M. Carpenter

16

Khá nhiều thứ bạn biết từ IDE được phát triển đầu tiên ở Smalltak, một ngôn ngữ động. Mọi thứ khác chỉ là sao chép chúng. Vì vậy, rõ ràng, tất cả các tính năng này có thể có trong các ngôn ngữ động.

Ngày nay, các ngôn ngữ động đứng sau các ngôn ngữ tĩnh. Nhưng tại sao?

Cho đến gần đây, mọi người đều nghĩ rằng gõ tĩnh là tốt hơn so với gõ động. Nhiều lập trình viên đã thay đổi suy nghĩ của họ gần đây hơn về điểm đó. Tập trung vào IDE cho các ngôn ngữ được gõ động không có ở đó.

Tôi nghĩ rằng các tính năng cho IDE ít hữu ích hơn trong các ngôn ngữ được gõ động. Khi làm việc trong Java hoặc Objective-C, tôi cảm thấy rằng IDE là cần thiết để giúp tôi làm việc với ngôn ngữ, nhưng điều tương tự không đúng với các ngôn ngữ động.

Một số phần của nhiệm vụ dễ dàng hơn trong một ngôn ngữ tĩnh. Nó đơn giản để tìm ra loại biểu thức. Làm tương tự trong một ngôn ngữ động đòi hỏi phải phân tích toàn bộ chương trình hoặc ghi nhật ký các loại trong thời gian chạy. Vì rất nhiều thứ mà IDE xoay quanh các loại, điều đó có ảnh hưởng.


2
Trong Squeak và Pharo, RoelTyper thực hiện công việc khá tốt là suy ra kiểu gì đó bằng cách xem những tin nhắn bạn gửi cho nó. Mặt khác, k-CFA của Shivers & Might cung cấp suy luận kiểu có thể điều chỉnh, theo nghĩa là bạn có thể đánh đổi chi phí so với độ chính xác.
Frank Shearar

13
I think that the features for IDEs are less useful in dynamically typed languages- Buồn cười, tôi nghĩ hoàn toàn ngược lại. Vì rất nhiều ngôn ngữ động không yêu cầu bạn phải khai báo các biến trước đó, việc viết sai một biến là một mối quan tâm nghiêm trọng ... một mối quan tâm được giảm bớt bởi một IDE tốt. Trong khi đó, phần còn lại của các tính năng chính - tô màu cú pháp, công cụ tái cấu trúc, tính năng gỡ lỗi - đều hữu ích như nhau trong tất cả các ngôn ngữ.
BlueRaja - Daniel Pflughoeft

2
@Winston: Sau đó, bạn chưa bao giờ thực hiện một dự án bằng ngôn ngữ không khai báo với nhiều người :) Thật khó chịu khi ngôn ngữ này phân biệt chữ hoa chữ thường. Ví dụ từ kinh nghiệm cá nhân: Từ "Trật tự công việc" đôi khi được đánh vần là một từ ("Workorder"), vì vậy khi tạo một biến, một số người sẽ viết workOrdervà một số người sẽ viết workorder. Đây là hai biến riêng biệt trong Python> _ <
BlueRaja - Danny Pflughoeft

1
@ BlueRaja-DannyPflughoeft, ngược lại, tôi đã thực hiện các dự án trong Python với nhiều người. Khi bạn nói rằng bạn có vấn đề là: bạn chạy và gặp ngoại lệ vì bạn đang tham chiếu một biến không tồn tại, mã của bạn không kiểm tra ban đầu vì bạn lưu trữ dữ liệu của bạn ở sai vị trí hoặc bạn gặp lỗi không được phát hiện dẫn đến lỗi Mã thoát để sản xuất?
Winston Ewert

2
"Nhiều lập trình viên đã thay đổi suy nghĩ của họ gần đây hơn về điểm đó." Tại sao lại thế này?
Pubby

10

Tôi gặp vấn đề với python, đại loại thế. Tôi muốn vim làm biên tập viên của mình, nhưng điều đó có nghĩa là tôi sẽ không có môi trường IDE. Vì vậy, tôi tự lăn với các plugin vim. Hiện tại, tôi nghĩ rằng tôi thực sự có một môi trường tốt hơn để phát triển mà bất kỳ IDE nào tôi đã sử dụng trong quá khứ.

Thiết lập của tôi được lưu trữ trên github , hãy xem và xem những gì bạn thích. Để biết tổng quan nhanh về các plugin:

  • mầm bệnh
  • chế độ python, để tích hợp dây, pyflakes và pydoc
  • vimpdb cho trình gỡ lỗi python
  • dự án cho một danh sách các tập tin trong một dự án
  • danh sách thẻ để nhảy thẻ
  • supertab để hoàn thành tab
  • snipmate cho đoạn trích
  • conqueterm cho một shell tích hợp, hoặc dấu nhắc lệnh, bash, python hoặc ipython

Có một số thứ khác, nhưng nó có tất cả các tính năng mà các IDE phổ biến hơn có. Nó không làm tôi mất một xu, và tôi có thể tận dụng tất cả sức mạnh của vim. Tách, lệnh di chuyển, thanh ghi, nhảy, có thể chạy toàn bộ môi trường dev của tôi bằng bàn phím ...


4

Có bất kỳ IDE cụ thể nào (hoặc ít thiết lập tất cả trong một) đã đạt được sự hỗ trợ hoàn toàn nổi bật cho ngôn ngữ động,

Xem xét đánh giá của bạn là khó hiểu ("hoàn toàn nổi bật"? "Không biết / quá nhiệt tình"?) Không nghi ngờ rằng bất kỳ IDE nào có thể phù hợp với tiêu chuẩn ngụ ý.

So sánh tầm thường với Eclipse + Java là ngớ ngẩn vì các ngôn ngữ động không phải là Java.

hay đây vẫn là một vấn đề 'chưa được giải quyết'?

Không hẳn.

Có lẽ nó không thể giải quyết được. Yêu cầu của bạn ("thiếu hoàn thành và các tài sản khác") làm cho khó chính xác hơn.

Các ngôn ngữ động không thể có cùng loại hoàn thành mã mà các ngôn ngữ tĩnh thực hiện. Về cơ bản là không thể.

Một số IDE làm tốt công việc đoán. Eclipse, ví dụ, có các bổ trợ cho các ngôn ngữ động.


3

Tôi nghĩ rằng bài thuyết trình này của Steve Yegge vẫn có liên quan. trong một vỏ hạt có một số id id script Java (intelliJ IDEA), nhưng các ngôn ngữ động nói chung đang chơi bắt kịp, không phải vì có bất kỳ thứ gì khó hơn trong việc tạo ra các công cụ này (hoặc thực sự là ngôn ngữ), đó chỉ là ngôn ngữ tĩnh Tất cả sự chú ý đầu tiên.


Trong thực tế, bài thuyết trình của Yegge là nguyên nhân cốt lõi của câu hỏi của tôi: nếu các phương pháp phỏng đoán và các kỹ thuật được mô tả khác ở đó, thì tất cả các triển khai tuyệt vời ở đâu? Trên IntelliJ: xem bình luận tôi để lại trên bài đăng gốc của mình (và cho tôi biết nếu tôi sai)
vemv

2014 - vẫn không có kết quả phù hợp cho các IDE tĩnh tốt nhất
Den

3

Tôi lập trình cả ngày trong javascript / php và ruby ​​làm việc trên các ứng dụng web và IDE tốt nhất mà tôi đã tìm thấy cho điều này là Aptana. Nó đã hoàn thành mã cho cả ba ngôn ngữ đó (và python), nó chọn các vars cục bộ của tôi và trên đó là khi làm việc với html và css nó chọn id id trong html để sử dụng trong css / javascript và chọn chức năng Tên cho khi tôi đang làm một cái gì đó nhanh chóng và bẩn thỉu và viết javascript nội tuyến (tôi biết xấu, nhưng đôi khi hữu ích cho bằng chứng về khái niệm). Nó đã được xây dựng trong các nhiệm vụ cào và được xây dựng để hỗ trợ cho git và bảng điều khiển dòng lệnh. Tôi phải mất một chút để thức dậy nhưng một khi tôi đã thấy rằng tôi hầu như không bao giờ rời khỏi IDE của mình khi mã hóa và nó giúp tôi tiết kiệm hàng tấn thời gian.


Tại sao bỏ phiếu cho một câu trả lời nói về sự phát triển ngôn ngữ được gõ động trong một IDE đã đạt được từ kinh nghiệm của tôi 'một trải nghiệm hoàn toàn nổi bật'. Đó là những gì các op yêu cầu?
Ryan

2

Tôi đã thấy rằng sự hỗ trợ của Wing IDE cho Python thực sự nổi bật. Nó hoạt động tốt với việc hoàn tất mã và trình gỡ lỗi của nó cũng mạnh mẽ như Visual Studio dành cho C # không động.

Tôi có thể chứng thực rằng nó không có lỗi, chậm hoặc không biết gì. Tôi chưa bao giờ sử dụng Eclipse, vì vậy tôi không biết gì về điểm đó, nhưng tôi nghĩ rằng câu hỏi lớn hơn là: có một số rào cản cố hữu để phát triển một IDE hoàn thiện và nâng cao năng suất cho các ngôn ngữ động. Với kinh nghiệm của tôi với Python và Wing, tôi muốn nói rằng đó không phải là trường hợp. Đó là, tuy nhiên, chắc chắn là khó khăn hơn.


2

Visual Studio của Microsoft là một IDE được nhiều lập trình viên sử dụng và nó hỗ trợ IronRuby , IronPython và F #. Hầu hết sẽ coi Ruby và Python là ngôn ngữ lập trình động trong khi F # sẽ ít hơn như vậy.

Đáp lại bình luận, F # là ngôn ngữ lập trình.

F # (phát âm là F Sharp) là ngôn ngữ lập trình đa mô hình, nhắm mục tiêu .NET Framework, bao gồm lập trình chức năng cũng như các quy tắc lập trình hướng đối tượng và bắt buộc. Nó là một biến thể của ML và phần lớn tương thích với việc triển khai OCaml.

Mặc dù định nghĩa chính xác về những gì định nghĩa chính xác một "ngôn ngữ động" vẫn còn đang tranh luận, hầu hết đều đồng ý rằng JavaScript "động" hơn so với C # chẳng hạn. Theo Wikipedia:

Định nghĩa của một ngôn ngữ động là mơ hồ bởi vì nó cố gắng tạo ra sự khác biệt giữa mã và dữ liệu cũng như giữa quá trình biên dịch và thời gian chạy không phổ biến. Các máy ảo, biên dịch đúng lúc và khả năng của nhiều ngôn ngữ lập trình trên một số hệ thống để trực tiếp sửa đổi mã máy làm cho sự khác biệt trở nên trừu tượng. Nói chung, khẳng định rằng một ngôn ngữ là động là một khẳng định về tính dễ sử dụng của các tính năng động hơn là một tuyên bố rõ ràng về khả năng của ngôn ngữ.

Tôi không muốn mở một con giun ở đây. Một số người cho rằng F # được mô tả chính xác hơn là một chức năng hơn là ngôn ngữ động và tôi sẽ không ngoại lệ với điều đó. Những gì tôi tin sẽ công bằng khi nói rằng đó là các ngôn ngữ .Net khác nhau, F # thường được coi là phù hợp hơn cho lập trình động so với C # hoặc VB.

Bạn có thể muốn xem: Điều gì đủ điều kiện một ngôn ngữ lập trình là động?


4
Bạn có thể giải thích ý của bạn về "F # [...] là một ngôn ngữ động" không, và nó nói năng động hơn như thế nào, C #?
Arseni Mourzenko

1
Thứ hai, tôi sẽ không coi F # là ngôn ngữ động. Heck, C # có thể là (Tôi không chắc chắn nếu F # có sẵn tương đương) "năng động hơn" đã tích dynamichợp sẵn bây giờ. Nhưng dù bằng cách nào, cả hai thường không được gõ động và hầu hết các tính năng khác (không đề cập đến văn hóa) liên quan đến "ngôn ngữ động" cũng bị thiếu.

2

Sự khác biệt chính giữa các ngôn ngữ gõ tĩnh và ngôn ngữ gõ động là hệ thống có thể biết, chắc chắn, Chỉ một tham chiếu biểu tượng có nghĩa là gì trong thời gian biên dịch.

Điều này giúp dễ dàng thu thập thông tin bạn cần để tạo một IDE tốt trực tiếp từ thông tin do trình biên dịch tạo ra trong thời gian biên dịch (phần lớn được chuyển sang thời gian "chỉnh sửa" phần lớn).

Nếu bạn có một chữ ký phương thức độc lập chỉ nói phương thức đó có "Điều" thì làm thế nào một biên tập viên có thể giúp bạn biết phải gửi gì? Làm thế nào nó có thể giúp đề xuất cách để sử dụng điều này?

Gõ vịt cũng không giúp được gì ở đây - ngay cả trình soạn thảo thông minh nhất cũng có thể không thể nói với bạn rằng đơn giản vì đối tượng của bạn có phương thức .executeFooOp () mà nó có thể hoàn thành mã ".executeBarOp" trên đối tượng đó (Mặc dù nó có thể quét phần còn lại của cơ sở mã và đưa ra một số dự đoán thông minh).

Tuy nhiên, nếu bạn biết rằng đó là "Chuỗi" trong chữ ký, tuy nhiên, bạn biết tất cả các phương thức mà bạn có thể gọi trên chuỗi đó VÀ bạn có thể đề xuất biến đó khi người dùng đó đang gõ một cuộc gọi phương thức yêu cầu Chuỗi như một tham số. Bạn thậm chí có thể đề xuất các lớp con mà nó có thể được sử dụng nếu bạn muốn.

Thông tin không có ở đó với các ngôn ngữ được gõ động trừ khi bạn có thể quét toàn bộ cơ sở mã với một cái gì đó thông minh hơn so với trình biên dịch thông thường của bạn.


1
"Sự khác biệt chính giữa các ngôn ngữ gõ tĩnh và ngôn ngữ gõ động là hệ thống có thể biết, chắc chắn, Chỉ một tham chiếu biểu tượng có nghĩa là gì trong thời gian biên dịch." - Có, nhưng nó không phải. Nếu IDE hoạt động trong thời gian chạy thay vì vào thời gian biên dịch, thì nó không cần biết thông tin này vào thời gian biên dịch. Khi chạy, thông tin có sẵn, nếu không thì chương trình có thể thậm chí không chạy.
Jörg W Mittag

1
Ide không thể hoạt động trong thời gian chạy - hoặc chính xác hơn là chỉ có thể chạy trên một nhánh có thể tại một thời điểm. Thời gian chạy là tình huống, một biểu tượng nhất định CÓ THỂ có nghĩa là một điều trên một lượt và một điều khác trên một lượt khác, vì vậy nếu "Trình chỉnh sửa" của bạn là "Đang chạy" (Làm thế nào mà nó thậm chí hoạt động ???) trên "Một lượt", làm thế nào lấy thông tin từ "Another Pass" để hoàn thành văn bản? Đối với vấn đề đó, điều gì sẽ xảy ra nếu bạn đang viết một thư viện được cắm vào một mô-đun chưa được đăng ký?
Bill K

@billk Trong thực tế, IDE chỉ hoạt động tốt khi chạy. nếu bạn làm việc thử nghiệm trước tiên, thời gian chạy của bạn sẽ biết đối tượng bạn mong đợi. Hãy thử một smalltalk trong một thời gian.
Stephan Eggermont

0

Ít nhất là đối với PHP, nhiều IDE "hiểu" một cái gì đó như

/** @var $foo ClassA **/

Nếu bạn viết tài liệu theo cách được chuẩn hóa (trong trường hợp này là phpDocumentor ), IDE sẽ tận dụng tối đa.


2
Vì vậy, bạn đang nói rằng nếu bạn nhập mọi thứ mà một ngôn ngữ được biên dịch tĩnh sẽ yêu cầu bạn nhập thì bạn có thể tìm thấy thông tin tương tự về ngôn ngữ mà bạn có thể với bất kỳ ngôn ngữ gõ tĩnh nào - đúng là tôi cho rằng nhưng tại sao không bỏ qua bước bổ sung và đi đến một ngôn ngữ gõ tĩnh?
Bill K

Bởi vì một lần nữa ít nhất php thực hiện một số tự động truyền cho các loại đơn giản. Và cũng bởi vì làm như vậy một ngôn ngữ động cho phép bạn quyết định nơi chỉ định một loại. Với sự phát triển nhanh, bạn có thể muốn hoãn các quyết định như "Tôi có sử dụng một lớp làm kiểu hoặc giao diện không?"
ACNB

@ACNB: Rất nhiều ngôn ngữ "tĩnh" cũng cho phép tự động truyền và nhập kiểu. Ví dụ: C ++, C # và những thứ tương tự.
Arafangion

0

Từ tất cả các IDE cho các ngôn ngữ động (ngôn ngữ giải quyết loại trong thời gian chạy), ngôn ngữ tốt nhất là ... Visual Studio cho Python

  • Thông tin loại Bulling cho Intellisense
  • dẫn đường
  • Gỡ lỗi

Rất đáng để thử.


Bạn có thể chỉ ra cụ thể, bằng cách nào VS cho Python tốt hơn, hãy chọn một cách ngẫu nhiên, Hopscotch?
Jörg W Mittag
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.