2010-03-10 39 views
17

Tôi cần ghi lại phần mềm mà tôi hiện đang làm việc. Phần mềm này bao gồm một số ngôn ngữ lập trình và các kịch bản mà tôi đã suy nghĩ. Nếu một nhà phát triển mới đến và cần phải sửa chữa một cái gì đó, họ có thể biết Java nhưng có thể không bash scripting. Sẽ thật tuyệt nếu có một chương trình giúp bạn hiểu những gìCó chương trình nào có thể giúp hiểu chương trình khác không?

for f in "[email protected]" ; do 

có nghĩa là. Tôi đã nghĩ đến cái gì đó tạo ra một trang HTML tĩnh với mã cộng với cú pháp nổi bật và nếu bạn di chuột qua một cái gì đó (như "cho"), nó sẽ hiển thị một cửa sổ pop-up với một lời giải thích:

for bắt đầu một vòng lặp lặp qua tất cả các giá trị theo sau in. Trong vòng lặp, bạn có thể truy cập từng giá trị thông qua biến số $f. Nội dung vòng lặp nằm giữa dodone

Có điều gì đó như vậy đã tồn tại chưa?

[EDIT] Đây chỉ là một ví dụ. Bạn sẽ nhận được trợ giúp khác cho f, in, "[email protected]", ;do, tức là mỗi phần tử của dòng cần được giải thích. Các phần tử không xác định (như tên lệnh) phải liên kết với Google. Vì vậy, bạn có thể hiểu những gì nó làm ngay cả khi bạn đang thiếu một số chi tiết.

[EDIT2] Tôi biết rằng bạn không thể viết chương trình hiểu được chương trình khác làm gì. Những gì tôi đang tìm kiếm là một công cụ đơn giản sẽ làm "làm nổi bật cú pháp mở rộng" theo nghĩa là nó sẽ tô màu một biểu thức và cung cấp cho một lời giải thích ngắn gọn (có thể là một liên kết đến một số tham chiếu chuyên sâu).

Điều này dành cho người biết cách lập trình nhưng có thể chưa từng thấy một số cấu trúc tối nghĩa trước đây. Nói

echo "Error" 1>&2 

Mỗi lập trình viên bash biết điều này có nghĩa nhưng một nhà phát triển Java có thể bối rối bởi các 1>&2 mặc dù thực tế rằng họ có thể đoán rằng echo == System.out.println. Một đơn giản "chuyển hướng stdout để stderr" sẽ xóa mọi thứ lên và cho rằng ngay lập tức "AHA!" cho phép họ ở trong dòng suy nghĩ hiện tại của họ.

+2

Đối với những người không biết bash, phần phức tạp không phải là 'for', nó là' $ @ '. – mouviciel

+0

Đây chỉ là một ví dụ. Bạn sẽ nhận được một trợ giúp khác cho 'f',' in', '" $ @ "', ';' và 'do', tức là mỗi phần tử của dòng cần được giải thích. Vì vậy, bạn có thể hiểu những gì nó làm ngay cả khi bạn đang thiếu một số chi tiết. –

+0

+1 Câu hỏi hay. : D Có những chương trình có thể hiểu các chương trình khác. Chúng được gọi là thông dịch viên/trình biên dịch. Nhưng nói chung, mỗi người trong số họ chỉ hiểu một ngôn ngữ. –

Trả lời

0

Nếu bạn nghĩ về nó, sẽ không hữu ích khi có công cụ giải thích cú pháp. Nhà phát triển chỉ có thể google cho các từ khóa thay vì duyệt một trang web theo cách tương tự như http://www.codeweblog.com/source/.

Tôi tin rằng các nhận xét tốt sẽ hữu ích hơn nhiều, cộng thêm có các công cụ để trích xuất tài liệu bằng cách sử dụng các chú thích (ví dụ, HappyDoc thực hiện điều đó cho Python).

+1

Các bình luận tốt sẽ giải thích chi tiết mức cao. Nhưng đối với tôi, rõ ràng là cái gì '" $ @ "' có nghĩa là, trong khi một nhà phát triển khác sẽ chỉ nhìn chằm chằm vào nó trong sự thất vọng. Tôi hiểu rằng công cụ này sẽ không cho phép tạo tài liệu tự động; nó chỉ là một "ống kính thông minh" có thể trả lời các câu hỏi chi tiết. –

+0

Sau đó, tại sao không thêm nhận xét nội dòng về "$ @"? Bạn cũng có thể thêm thẻ cho các nhận xét, như #TODO: ... hoặC#FIXME: ... hoặC#SEEME: ... hoặc, trong trường hợp này, #NOTICE: "$ @" thực hiện điều này ... Trên một sidenote, lợi ích sẽ là gì đối với những người không biết bash nhưng biết Java để biết những gì "$ @" không, bên cạnh việc biết các chi tiết cấp cao? Chắc chắn bạn không mong đợi anh ta để gỡ lỗi hoặc sửa chữa mà không học bash? –

+1

Bởi vì tôi không biết những gì các nhà phát triển tiếp theo có thể biết và tôi chắc chắn không muốn giải thích mọi nhân vật trong mọi dòng mã của tôi! –

0

Đó là một điều rất khó khăn. Trước hết theo định nghĩa nó có thể được chứng minh rằng chương trình sẽ "hiểu" bất kỳ chương trình nào không tồn tại. Tuy nhiên, bạn vẫn có thể sử dụng tài liệu hiện có. Có thể sử dụng các công cụ như Doxygen có thể giúp bạn. Bạn sẽ cần ghi lại mã của mình thông qua các nhận xét và tài liệu sẽ được tạo từ chúng.

+0

Bạn có thể tìm thấy công cụ hỗ trợ nhiều ngôn ngữ hơn tại đây: http://sourceforge.net/projects/naturaldocs/ –

+1

Tôi chỉ muốn nhà phát triển mới nỗ lực tìm kiếm mọi chi tiết của ngôn ngữ lập trình không xác định trong sách hoặc Google . Tôi không tìm kiếm một công cụ mà có thể "hiểu", nhưng một trong đó "giúp để hiểu" –

+0

Điều này tạo ra tài liệu tìm kiếm tốt đẹp từ các ý kiến ​​mã nguồn. Tôi đang nhắm vào thứ gì đó hoạt động ở cấp độ thấp hơn. –

1

IMO sẽ đơn giản và hiệu quả hơn khi chỉ thu thập các liên kết đến các tham chiếu và hướng dẫn cụ thể về ngôn ngữ tốt trên trang Wiki.

Đối với tất cả các ngôn ngữ chính thống, các nguồn như vậy tồn tại và được duy trì thường xuyên.Nếu bạn cố gắng tạo tham chiếu của riêng mình, bạn cũng cần duy trì nó. Công bằng đủ, cú pháp bash sẽ không thay đổi thường xuyên, nhưng các ngôn ngữ khác phát triển nhanh hơn, vì vậy nó sẽ là một gánh nặng.

+0

Sẽ tốt hơn nếu bạn thu thập các liên kết đó trong một công cụ có thể kết nối chúng với các phần liên quan của tham chiếu ngôn ngữ cụ thể. Bạn đã cố gắng đọc một số perl thường xuyên như thế nào để tự hỏi nơi nào trong các tài liệu thậm chí bắt đầu tìm kiếm thứ gì đó? –

+0

Tôi hiểu vấn đề phiên bản. Tôi đã tìm ra rằng bạn sẽ phải chạy công cụ trên máy bằng các kịch bản lệnh và nó sẽ gọi 'bash --version' và thêm nó vào trang HTML (vì vậy nó biết cú pháp nào là chính xác). Vâng, đó là một nỗ lực nhưng không phải là một không thể vượt qua. –

+2

@Aaron Digulla Ah, bây giờ tôi có ý tưởng của bạn. Và nó thật sự rất hấp dẫn. Tôi vẫn sẽ nói rằng một công cụ liên kết đến lời giải thích cú pháp cho một cấu trúc cụ thể chỉ là một trợ giúp hời hợt. Để sử dụng một yếu tố ngôn ngữ đúng, người ta phải hiểu ngữ nghĩa của nó, tác dụng phụ ... thường có một địa ngục phức tạp rất nhiều. Vì vậy, biết cú pháp (và chỉ cú pháp) có thể tạo ra cảm giác kiểm soát sai đối với các nhà phát triển cơ sở. –

0

Một ngôn ngữ không thể được giải thích chỉ thông qua cú pháp của nó. Môi trường thời gian chạy đóng một vai trò lớn, cùng với triết lý cơ bản của ngôn ngữ và các libraies.

Hơn nữa, cú pháp không phức tạp đối với hầu hết các ngôn ngữ phổ biến (do mã đó đã được viết với tính bảo trì).

Tiếp tục với ví dụ bash, bạn không thể hiểu bash nếu bạn không biết gì về quy trình & điều khiển công việc, biến môi trường, danh sách lớn lệnh unix (tr, sắp xếp, cắt, dán, sed, awk, find,. ..) và nhiều tính năng khác không xuất hiện trong cú pháp.

+0

Tôi không tìm kiếm sự hiểu biết sâu sắc. Tôi chỉ muốn một công cụ có thể cho tôi biết "$ @" có ý nghĩa gì. Hoặc trong ví dụ của bạn: "&" sẽ tạo cửa sổ bật lên: "Chạy lệnh trong nền". Nếu người đọc cần thêm thông tin, họ sẽ cần phải tìm kiếm thông tin đó. Nhưng nếu họ chưa bao giờ thấy "&" trước đó chỉ là văn bản nhỏ có thể là đủ. –

+1

Quan điểm của tôi là người đọc có thể không hiểu chính khái niệm "chạy lệnh trong nền" và cuối cùng sẽ tìm kiếm toàn bộ ngôn ngữ. Điều gì là tốt nhất? dành thời gian để triển khai quảng cáo trên mọi phần tử cú pháp, dành thời gian để dạy bash cho người đã biết java hoặc dành thời gian thuê người đã biết bash và java? Tôi sẽ không chọn giải pháp đầu tiên. – mouviciel

+1

Nếu họ không hiểu khái niệm này, bạn ít nhất biết những gì để google cho. Hãy thử google cho ">>". –

3

Một công cụ như thế này có thể được tạo bằng cách sử dụng ANTLR, tức là phân tích mã thành cây cú pháp trừu tượng bằng ngữ pháp ANTLR cho ngôn ngữ đó và viết trình tạo HTML tạo mã được chú thích.

Nghe có vẻ như một công cụ hữu ích để học ngôn ngữ hoặc khám phá mã nguồn của các dự án mà bạn không duy trì - nhưng nó có phù hợp với tài liệu không?

Tại sao điều quan trọng là giúp các lập trình viên của các ngôn ngữ khác hiểu mã ở cấp chi tiết triển khai này? Bất cứ ai duy trì việc thực hiện ở cấp độ này rõ ràng sẽ phải biết ngôn ngữ và có lẽ sẽ có một IDE để làm hầu hết điều này.

Điều đó nói rằng, tôi chắc chắn sẽ xem xét một công cụ như thế này như một trợ giúp học tập.

+0

Tôi sẽ không sử dụng công cụ này để ghi lại tác phẩm của mình. Tôi sẽ sử dụng nó như là một công cụ bảo trì thông qua đó các nhà phát triển tiếp theo có thể chạy bất kỳ kịch bản để hiểu tất cả những thủ thuật nhỏ, ông không hiểu :-) –

+0

Được rồi, yeah nó muốn được thực sự hữu ích cho điều đó. Ngay cả thứ gì đó đặt tên cho các phần của lời nói sẽ hữu ích để đưa bạn đến đúng phần tài liệu hiệu quả hơn, ví dụ: để nói rằng "> & 2" trong bash là chuyển hướng, vì "chuyển hướng" là thuật ngữ tốt để tìm kiếm trong trang người dùng hoặc trên web. – mattbh

0

Nếu công cụ sản xuất

cho bắt đầu một vòng lặp mà lặp trên tất cả các giá trị mà làm theo. Trong các vòng lặp, bạn có thể truy cập vào mỗi giá trị qua biến $ f. Nội dung vòng lặp là giữa thực hiện và thực hiện

nó sẽ là vô giá trị. Đây chính xác là loại bình luận mà các lập trình viên (người) được đào tạo nói với nver để viết.

+0

-1 Xin lỗi, bạn không hiểu câu hỏi nào cả. –

+0

@Aaron Đó thường là lỗi của người hỏi. –

+0

@Aaron: Anh ấy đã hiểu câu hỏi, bạn không hỏi một câu hỏi thích hợp tho: p. – Younes

Các vấn đề liên quan