Những nhược điểm của tabstops đàn hồi là gì? [đóng cửa]


83

Nhìn vào đây: một cuộc chiến thần thánh điển hình trên các tab so với không gian .

Bây giờ nhìn vào đây: tabstops đàn hồi . Tất cả các vấn đề được giải quyết, và một loạt các hành vi mới rất hữu ích được thêm vào.

tabstops đàn hồi

Các tab đàn hồi thậm chí được đề cập trong các tab so với không gian thảo luận? Tại sao không? Có những hạn chế đối với ý tưởng tabstop đàn hồi nghiêm trọng đến mức không ai từng thực hiện chúng trong một trình soạn thảo phổ biến?

EDIT : Tôi xin lỗi vì đã nhấn mạnh quá nhiều vào "tại sao họ không đề cập đến". Đó không thực sự là những gì tôi dự định; Câu hỏi đó thậm chí có thể lạc đề. Điều tôi thực sự muốn nói là, nhược điểm lớn nhất của việc này là gì ngăn cản việc áp dụng rộng rãi hơn một ý tưởng rõ ràng có lợi? (trong một thế giới lý tưởng nơi mọi thứ đã hỗ trợ nó)

(Hóa ra đó đã là một yêu cầu trên Microsoft Connect cho Visual Studio thực hiện các tab đàn hồi , và một yêu cầu trong Eclipse quá. Thêm vào đó là một câu hỏi hỏi về biên tập viên khác mà thực hiện các tab đàn hồi )


4
Đây sẽ là một câu hỏi lớn cho ux.stackexchange.com
JonnyBoats

11
Họ không bao giờ được đề cập trong cuộc thảo luận "tab so với không gian" bởi vì gần như không có cách nào để một lập trình viên làm việc sử dụng những thứ này. Có lẽ nếu bạn đã triển khai Eclipse, VS, gvim và emacs, điều đó có thể thay đổi.
Paul Tomblin

2
Tôi thực sự thích ý tưởng này, nhưng chỉ khi bạn sống với nó trong một tháng hoặc lâu hơn thì bạn mới thực sự biết những cạm bẫy là gì. Giống như mọi thứ, có một số trường hợp đảm bảo sẽ có những điều bạn không mong đợi ...
Chris Burt-Brown

3
@ ChrisBurt-Brown Đó luôn là một rủi ro, vâng. IntelliSense cũng có những cạm bẫy của nó, giống như việc đăng ký văn bản khi bạn không muốn nó. Tuy nhiên, nhìn chung, IntelliSense trong C # là một chiến thắng lớn.
Roman Starkov

4
Tôi muốn cái này trong notepad ++ ... Tôi muốn cái này ngay bây giờ
Ben Brocka

Câu trả lời:


32

Thánh chiến là chủ quan

Tabstops đàn hồi của Nick là một khái niệm tuyệt vời có thể giúp nhiều người đồng ý về một giải pháp khả thi, mặc dù tôi rất nghi ngờ rằng nó sẽ hoàn toàn chấm dứt Cuộc chiến Thánh này: cuối cùng, đó cũng là vấn đề của hương vị và nhiều lập trình viên sẽ không di chuyển inch từ vị trí của họ về vấn đề này, thậm chí với chi phí thỏa hiệp. Vì vậy, đó sẽ là một lý do đầu tiên.

Chẳng hạn, nhiều người ở phía "khoảng trắng" vẫn sẽ không thích nó vì nó yêu cầu một phần logic bổ sung trong phần mềm của bạn để hiển thị hợp lý (ví dụ: chỉ xem một thay đổi trong chế độ xem web của SCM).

Vấn đề thực hiện

Nhưng lý do rõ ràng nhất chỉ là rào cản kỹ thuật của nó để xâm nhập : đó là một khái niệm khác biệt cơ bản với những gì đã được thực hiện trong một số năm (nếu không phải là hàng thập kỷ) trong các IDE và trình soạn thảo văn bản. Nó sẽ yêu cầu viết lại một số trong số chúng để xử lý các dòng trong một sự kết hợp khá khác nhau, điều này gây khó khăn cho các hệ thống cũ và lớn hơn có khả năng chịu sự ghép nối sâu và chặt chẽ trong mã xử lý dòng của chúng. Đó là, tuy nhiên, dễ dàng hơn rất nhiều để làm gì khi bạn bắt đầu từ đầu (nghĩ về bản demo của Nick hoặc của Go 's tabwriter gói).

Đối với một giai thoại cá nhân, tôi nhớ đã tiếp cận tác giả một lúc trước để hỏi liệu có bất kỳ sự hỗ trợ nào trong tầm nhìn hay không, và trong trường hợp cụ thể này, ông đã đề cập đến điều này vì nó không tầm thường. Ông cũng yêu cầu sự giúp đỡ từ cộng đồng để giúp thực hiện tính năng này và đưa nó đến với công chúng.

Chúng ta có quan tâm đủ không?

Một lý do thứ ba, là một số nhà phát triển không bận tâm đến vấn đề này và không thực sự quan tâm đến mức họ sẽ đi xa hơn để hỗ trợ nỗ lực. Trong hầu hết các trường hợp, xung đột giữa không gian và tab không phải là một công cụ chặn doanh nghiệp, do đó, không có quá nhiều vấn đề đằng sau vấn đề này.

Nếu bạn muốn nó, bạn sẽ phải chiến đấu vì nó. Điều này có thể thực hiện được trong phần mềm nguồn mở. Và nếu bạn thay đổi đủ những thứ này, những nguồn đóng sẽ phải tuân theo nguy cơ mất một số cơ sở người dùng của họ, nếu một phần rất nhỏ của nó.

Vì vậy, nếu bạn muốn nó, hãy giúp Nick một tay.


(lạc đề) Tôi thường tự hỏi làm thế nào các loại tính năng "này hay nhưng rất nhỏ" lại biến nó thành các sản phẩm như Visual Studio. Có vẻ như ai đó trong nhóm chỉ đơn giản là tìm thấy thời gian để thực hiện nó vì lý do cá nhân. Ví dụ, hãy nghĩ đến việc nhập vào nhiều dòng trong Visual Studio; Nó không giống như hàng chục ngàn người yêu cầu, nhưng tôi thích nó hơn.
Roman Starkov

3
@romkyns: Đối với nhiều thứ, phải mất một người trong cuộc yên tĩnh hoặc một ngàn giọng nói đang gào thét ở cổng.
haylem

35

Nhiều lần tôi đã phải chiến đấu với một trình xử lý văn bản để có được tài liệu theo cách tôi muốn mà không có một số quy tắc tự động ẩn kiểm soát vị trí của các từ của tôi. Tôi không muốn dành một giây để cố gắng tìm ra lý do tại sao biên tập viên cứ khăng khăng đặt những từ đó ở đó.


11
Tôi cũng không hoàn toàn đồng cảm với tình cảm này, vì những quy tắc như vậy thực sự làm tôi thất vọng quá. Nhưng điều này là khác nhau theo hai cách. Một: Giống như các tabstops bây giờ, bạn không phải sử dụng chúng nếu bạn không muốn. Bạn có thể để văn bản của đồng nghiệp một mình nếu nó sử dụng chúng. Hai: Tabstops đàn hồi không có quy tắc ẩn, nhưng rõ ràng là quy tắc. Hành vi này là hoàn toàn tự nhiên - có lẽ thậm chí còn tự nhiên hơn so với các tabstop truyền thống, xảy ra tại một số vị trí tùy ý, thường không liên quan, trong văn bản. Đây là lý do tại sao không ai sử dụng tabstops cho bất cứ điều gì khác ngoài thụt đầu dòng nữa.
Timwi

10
@Timwi: Câu hỏi là liệt kê những nhược điểm. Tôi đã làm.
mhoran_psprep

14
Có thể không rõ ràng từ GIF, nhưng điều duy nhất có thể nhận ra là khi bạn nhấn "TAB", bất cứ điều gì đến sau sẽ xuất hiện theo chiều dọc. Nó không giống như một trình xử lý văn bản. Chỉ cần thử bản demo tương tác thực tế tại liên kết tôi đã đăng và bạn sẽ thấy nó tự nhiên như thế nào.
Roman Starkov

3
@mhoran_psprep: Đủ công bằng, tôi đánh giá cao đầu vào của bạn. Tôi đoán chúng tôi đã xem xét các cách giải thích khác nhau của câu hỏi. Bạn đang liệt kê những nhược điểm của bản thân khi sử dụng tính năng này, trong khi tôi nghĩ đó là về những hạn chế của việc giới thiệu tính năng này (tức là làm cho nó có sẵn và không bắt buộc ).
Timwi

27

Đây là lần đầu tiên tôi nghe nói về những điều đó. Không chắc chúng có phải là một ý tưởng tốt hay không nhưng chúng dường như ít được sử dụng vì chúng tôi có các công cụ (chẳng hạn như thụt lề) tự động định dạng mã.

Điều gì xảy ra khi tôi mở các tab đàn hồi thông minh của bạn trong vim và chỉnh sửa nó? Làm tab tự động dọn dẹp hoặc bạn còn lại với một mớ hỗn độn?

Những nhược điểm chính, như tôi thấy chúng có thể phá vỡ các khác biệt, kiểm soát phiên bản và không tương thích với các trình soạn thảo không hỗ trợ chúng. Nó có thể có rất nhiều sửa đổi mã để hỗ trợ chúng và có những điều quan trọng hơn tính năng "một điều tab khác để định dạng mã". Rốt cuộc, tất cả chúng ta đều có thể sử dụng indenttất cả những điều trên nếu bộ nhớ phục vụ.


9
Thật là một thái độ suy nghĩ lạc hậu. Chúng ta không có tiến bộ bởi vì các công cụ cũ, lỗi thời yêu thích của mọi người chưa thể đối phó được ! (Tất nhiên, điều trớ trêu là các công cụ này (như vim) là nguồn mở, vì vậy nếu nó thực sự quan trọng đối với bạn, bạn có thể (và có lẽ nên ) thêm hỗ trợ tabstop đàn hồi cho nó)
Timwi

14
@Timwi: Bạn đang hoàn toàn thiếu điểm tôi đang làm. Điều gì xảy ra khi tệp mã của bạn được phân tích cú pháp bởi một cái gì đó không biết về các tab đàn hồi? Bạn có kết thúc với một mớ hỗn độn hoặc họ có thể đối phó? Điều gì về kiểm soát phiên bản và khác? Chỉ mong muốn rằng tất cả các công cụ đã hỗ trợ tính năng $ là không thực tế ngay cả khi những công cụ đó là nguồn mở.
Sardathrion

14
@Timwi: Bạn cho rằng tất cả mọi người đều thấy các tab tab đàn hồi là tuyệt vời như bạn nghĩ. Điều này có thể không đúng.
Sardathrion

7
@Sardathrion là đúng. Điều gì xảy ra khi tôi phải điều khiển từ xa vào máy chủ * nix của mình mà không có hệ thống cửa sổ tại chỗ và cần kiểm tra một số mã với Vim / Emacs / Pico / Sao? Nếu có một cơ chế sao cho có thể đọc được thì sẽ ổn thôi ... nếu không thì đó sẽ là một cơn ác mộng. Tôi không thấy lợi ích của tab đàn hồi dù sao cũng có lợi. Tôi đã có thể tự động định dạng mã của mình để xem nó nên như thế nào trong các IDE tôi sử dụng.
Rig

7
Điểm kiểm soát phiên bản là một điểm tốt - Tôi không nghĩ mọi người sẽ đánh giá cao một biên tập viên mà âm thầm bắt đầu thay đổi vị trí / định dạng của các nhận xét trong mã cách xa mã mà họ đang sửa đổi (xem phần magenta trong hoạt hình của OP ảnh động). Sẽ rất hữu ích khi có một triển khai tham chiếu để chơi cùng, nhưng những gì tôi thấy cho đến nay không có gì đáng chú ý - emacs đã làm được nhiều điều này, chỉ với một vài lần nhấn phím (có thể nói là một điều tốt).
mcmcc

13

Thành thật mà nói, tôi không thấy chúng hữu ích một khi bạn vượt qua được sự phấn khích ban đầu. Chẳng hạn, dù sao thì tôi cũng không thích bình luận ở cuối dòng - Tôi luôn đặt bình luận của mình trên một dòng riêng. Cùng với đó, các tab đàn hồi mất đi công dụng chính của chúng.

Sau đó, tất nhiên bạn vẫn có thể sử dụng chúng để căn chỉnh các đối số hàm (và tham số) và danh sách dài các bài tập.

Nhưng đối với trước đây tôi có xu hướng chỉ thụt vào tất cả các đối số theo một cấp độ bổ sung và điều đó hoàn toàn tốt với tôi:

void foo(
    int x,
    int y,
    string z
)

Và tôi không thấy bất kỳ cần phải thay đổi điều đó.

Và đối với việc sắp xếp các bài tập, tôi không làm điều đó. Tôi đặt các không gian đơn xung quanh bài tập, thế thôi. Tôi cũng có xu hướng không tập hợp nhiều bài tập với nhau nên hiếm khi có vấn đề về khả năng đọc.

Tóm lại, các tab đàn hồi hoàn toàn không có ích cho tôi. Tất nhiên đây là một sở thích cá nhân có thể khác nhau nhưng tôi thấy rằng nó hoạt động tốt và tôi đoán rằng việc thiếu hỗ trợ cho các tab đàn hồi là do người khác nghĩ tương tự.

Nếu một biên tập viên sẽ thực hiện chúng, tôi vẫn không sử dụng chúng.


Đánh giá cao. Dường như bạn cũng có thể vui vẻ sử dụng phông chữ có chiều rộng thay đổi nếu bạn chỉ muốn, vì dù sao bạn cũng không căn chỉnh bất cứ thứ gì ngoài đầu dòng. Visual Studio hỗ trợ khá tốt cho việc này, trên thực tế, và khả năng tăng khả năng đọc là tốt.
Roman Starkov

1
@romkyns Chúng tôi đã thảo luận về điều đó và trong quá trình một tôi đã cố gắng sử dụng một font theo tỷ lệ cho chương trình một thời gian. Kết quả cuối cùng là các phông chữ đơn cách hoạt động tốt hơn, ngay cả khi không quan tâm đến vết lõm. Ngoài ra, tôi hiện đang làm việc độc quyền trong Vim và bảng điều khiển, không ai trong số đó sẽ không hỗ trợ phông chữ theo tỷ lệ.
Konrad Rudolph

1
@romkyns Điều đó nói rằng, những vấn đề này có thể giải quyết được (hoặc thậm chí có thể giải quyết được, với một phông chữ tỷ lệ được thiết kế để lập trình). Nhưng tôi vẫn không thực sự thấy sự cần thiết.
Konrad Rudolph

13

Một nhược điểm là nó không hoạt động nếu bạn muốn căn chỉnh trên một nhóm dòng và sau đó thụt vào dòng tiếp theo, vì nó nhóm các điểm dừng của các dòng liền kề.

def foo( bar,
         xyzzy ):
         wibble() # Too much indentation

Những gì tôi muốn:

def foo( bar,
         xyzzy ):
    wibble()

Đối với các ngôn ngữ niềng răng, điều này có thể ít gặp vấn đề hơn, vì bạn thường có thể giải quyết vấn đề này bằng cách đặt dấu ngoặc mở trên một dòng của riêng nó (như trong hoạt hình), nhưng đối với các ngôn ngữ nhạy cảm với khoảng trắng, điều này nhanh chóng trở thành một nỗi đau, và bạn cuối cùng phải quay trở lại sử dụng không gian.


Đã đồng ý. Việc triển khai của Nick không hoạt động đối với các ngôn ngữ như Python rất tốt.
Roman Starkov

3
Tại sao điều này sẽ không làm việc? Đây không phải là một hạn chế cơ bản, thuật toán chỉ cần nhận thức được ngôn ngữ. Nhưng ở một mức độ nào đó, điều này đúng ngay cả ngày nay, ví dụ Vim định nghĩa các quy tắc thụt đầu dòng khác nhau tùy thuộc vào ngôn ngữ. Điều này có thể dễ dàng chứa thụt Python.
Konrad Rudolph

1
@KonradRudolph Không, họ không thể. Điểm thu hút của các tabstops là khả năng tự động thụt lề / các nhóm văn bản không liên kết với nhau. Một ví dụ đơn giản là kết thúc câu lệnh "if": Bạn thử và không thụt lề vì bạn đang thoát khỏi câu lệnh, nhưng các tab đàn hồi "thông minh" quyết định bạn cũng không thụt dòng hoặc hai dòng ở trên, v.v. và v.v ... Và nếu bạn phải nhóm văn bản lại với nhau một cách rõ ràng, thì - vấn đề là gì? Làm việc đó còn nhiều việc hơn là tự sửa các vết lõm ...
Izkata

1
@Izkata Unindenting thủ công sẽ (nên) chỉ đơn giản là kết thúc nhóm hiện tại. Tại sao bạn có thể kiểm soát thụt lề với tab đàn hồi dừng thủ công? Bạn sẽ không làm vậy, vì vậy thuật toán biết rằng khi bạn thực hiện nó, nó sẽ kết thúc một khối chứ không phải bỏ ẩn khối trên.
Konrad Rudolph

1
Oh, điểm tốt. Hmm ... có lẽ bạn có thể thụt lề hai lần đối số? Vì vậy, sau đó wibble()sẽ chỉ có một vết lõm duy nhất và do đó sẽ không được liên kết với các đối số chức năng?
Ajedi32

12

Tại sao chúng ta không tạo ký tự tab dọc (VT, ASCII 11) để chỉ ra việc sử dụng các tab đàn hồi? Nó không phục vụ mục đích trong bất kỳ ngôn ngữ lập trình chính thống nào, nhưng được phân tích cú pháp dưới dạng khoảng trắng hợp lệ trong tất cả chúng, AFAIK.

Điều này có nghĩa là việc sử dụng các tab đàn hồi không còn là quy ước bên ngoài (ví dụ: "tệp này đã được định dạng bằng các tab đàn hồi, vui lòng bật chúng lên") nhưng một số trường hợp bạn chọn tham gia trong từng trường hợp.

Các trình soạn thảo văn bản hiện có thường hiển thị glyph hoặc một khoảng trắng thay cho tab dọc. Điều này không lý tưởng, nhưng một cái giá nhỏ phải trả, IMO.


10

Chúng không được đề cập vì chúng không được triển khai trong hầu hết các IDE của trình soạn thảo văn bản; chúng là một tính mới của việc sử dụng thực tế ít trong một dự án.

Spaces đã được sử dụng để bố trí lập trình kể từ thời của thẻ đục lỗ. Tab xuất hiện và ai đó rõ ràng nghĩ rằng chúng là một ý tưởng tốt (họ đã nhầm: p).

Trong thời đại mà hầu hết các biên tập viên hiện đại có thể tự động chuyển đổi các tab thành không gian ... chúng khá vô nghĩa.

Phải cài đặt thêm một công cụ khác để đối phó với những thứ tầm thường như các tab so với không gian chắc chắn không hấp dẫn tôi và tôi không nghĩ rằng nó sẽ phù hợp với hầu hết các đồng nghiệp của tôi.


Tôi đã xóa các bình luận khi họ đang rơi vào sự xúc phạm.
ChrisF

1
Chỉ cần nghĩ rằng tôi đã chỉ ra, lý do chính tại sao tôi thích ý tưởng về các tab đàn hồi không phải vì nó giải quyết vấn đề của các tab so với khoảng trắng, mà là do hành vi được hiển thị trong GIF trong câu hỏi ban đầu; tự động, liên kết không đau. Thêm vào đó, đối với VCS khác có lợi ích bổ sung rằng không có thay đổi khoảng trắng cần thiết trong ví dụ đó.
Ajedi32

"Phải cài đặt thêm một công cụ khác ..." không phải là một đối số đủ tốt ... Như thể chưa có đủ công cụ được sử dụng.
Milind R

@MilindR Cho dù bạn có coi đó là một cuộc tranh luận đủ tốt hay không, đó là lý do tại sao (vào thời điểm ba năm trước) tôi sẽ không có hứng thú với điều này. Có rất nhiều công cụ được sử dụng để làm một cái gì đó hữu ích không phải là lý do để thêm một công cụ khác, thực sự, không thêm bất cứ thứ gì vào môi trường của bạn.
TZHX

Thái độ như thế này là lý do tại sao các công ty như MS quyết định buộc người dùng vào UX mới ... Tôi rùng mình khi nghĩ điều gì sẽ xảy ra nếu thái độ tương tự được áp dụng cho đĩa mềm -> chuyển đổi CD.
Milind R

4

Tôi nghĩ rằng họ sẽ tìm thấy nhiều sử dụng nếu IDE hỗ trợ họ (Microsoft!). Một khi mọi người tìm thấy họ có thể đập hộp hoa của họ ở bên cạnh và để chúng dễ đọc, họ sẽ làm được. Bạn có thể thêm nhiều bình luận được thêm vào mã nguồn đột ngột (đó chỉ có thể là một điều tốt).

Tôi cho rằng chúng ta cũng có thể thêm nhận xét "chú giải công cụ" vào danh sách 'sẽ tốt nếu ...', vì vậy các khối nhận xét lớn của bạn có thể được ẩn đi và xem dễ dàng khi cần. Có lẽ chúng ta cũng có thể có các khối nhận xét tạo thành một phần của tài liệu (không phải là công cụ loại cát, các đoạn tài liệu phù hợp với người dùng có thể đọc được nhúng trong mã, không chỉ các tiêu đề phương thức)

Nhược điểm: nó có thể làm cho nguồn khác biệt của bạn trông tệ nếu một loạt các dòng trông giống như chúng bị thay đổi khi thực sự chỉ có 1 được sửa đổi (nếu trình chỉnh sửa lưu tệp với các tab được chuyển đổi thành khoảng trắng). Hoặc, nếu tab đàn hồi được triển khai với một ký tự (hoặc nhiều khả năng là 2 tab) thì xem nguồn của bạn bên ngoài trình chỉnh sửa có thể trông tệ.

Tôi nghĩ rằng tôi thích ý tưởng này, 'tab tab' ở cuối dòng sẽ co giãn khối nhận xét và sắp xếp tất cả các nhận xét trên các dòng tiếp theo (có khoảng cách giữa hai tab).


3

Đây là cách tôi thấy: nếu hầu hết các công cụ phổ biến đã hỗ trợ các tab đàn hồi, nhiều người sẽ sử dụng chúng. Điều tương tự cũng xảy ra với chế độ điều hướng / chỉnh sửa của vi, với đánh dấu cú pháp và sau đó với Intellisense. Trong mỗi trường hợp, sự khôn ngoan đã được thiết lập là nó không hữu ích hoặc không cần thiết, nhưng nó đã được thực hiện và nó đã cất cánh.

Tất nhiên, các tab đàn hồi có tác động tương đối thấp. Hầu hết mọi người đều hài lòng với hiện trạng và vì vậy đừng quan tâm. Một lý do tương tự được áp dụng cho nhiều tình huống trong đó một số người chỉ hài lòng với những gì họ đã có và không thấy lý do gì để chuyển sang một thứ gì đó cao cấp hơn. Nói cách khác, vấn đề lớn nhất với các tab đàn hồi cũng giống như đối với hầu hết mọi ý tưởng hay khác: nó cần phải đạt được lực kéo.

Nhưng điều đó không có nghĩa là tính năng này không thể được chấp nhận tăng dần. Mỗi ngôn ngữ lập trình đơn lẻ được áp dụng tăng dần, mặc dù toàn bộ một nhóm yêu cầu trình biên dịch mới và IDE mới để bắt đầu sử dụng nó. Điều tương tự cũng đúng với mọi kiến ​​trúc phần cứng đơn lẻ và nhiều ví dụ khác. Đây cũng không phải là trường hợp thiếu tích hợp với các công cụ hiện có là một công cụ chặn hiển thị: ví dụ như vậy là đúng, ví dụ, định dạng của unified-diff diff, mà thay thế một định dạng ít đọc hơn trước đây mà các công cụ tự động hiểu được (chẳng hạn như bản vá). Những công cụ đã được nâng cấp theo thời gian.

Tôi đánh giá cao các vấn đề liên quan mà những người khác đã đề cập, nhưng mặc dù vậy, chắc chắn sẽ có những đội (như của tôi), những người sẽ chấp nhận điều này mà không do dự, trong toàn bộ chúng tôi. Các công cụ bên ngoài như khuếch tán, hợp nhất, vv ban đầu sẽ không hỗ trợ nó, nhưng chúng tôi sẽ thực hiện phần của mình để khuyến khích các nhà cung cấp đưa vào tính năng này. Đây là cách tiến bộ luôn luôn được thực hiện. Nó đòi hỏi một số đau đớn trong một thời gian chuyển tiếp tạm thời, nhưng cuối cùng, nó là giá trị nó.


Đối số C vs C ++ xuất hiện một chút sai lầm. Mặc dù có thể đúng như vậy, đây là trường hợp của "một số người" (như bạn nói đúng), có những lý do rõ ràng để bám lấy C hoặc ủng hộ C ++ tùy theo tình huống. Kích thước của thời gian chạy C ++ là một trong số chúng, trong một cài đặt mặc định.
haylem

Tôi với Haylem. Quan điểm của bạn sẽ có nhiều âm thanh hơn nếu không có sự so sánh C-vs.-C ++. Chúng là những ngôn ngữ khá khác nhau. Theo tôi, C là dành cho lập trình hệ thống và các công việc cấp thấp khác, nơi bạn cần nhiều điều khiển (ví dụ như VM). C ++ dành cho các ứng dụng cấp trung, trong đó tính trừu tượng rất hữu ích để quản lý độ phức tạp (không gian tên, bộ chứa STL và thuật toán, mẫu), nhưng hiệu suất vẫn là một mối quan tâm (trò chơi là ví dụ dễ thấy nhất).
Jon Purdy

@haylem: Cảm ơn đã phản hồi. Tôi đã xóa tham chiếu đến C / C ++.
Timwi

@JonPurdy: Cảm ơn phản hồi. Tôi đã xóa tham chiếu đến C / C ++.
Timwi

2

Vấn đề lớn nhất mà tôi có với nó là khoảng cách không nhất quán trong toàn bộ tài liệu. Tôi biết với tư cách là một lập trình viên, tôi sẽ cảm thấy khó chịu khi thấy một vòng lặp hoặc nếu câu lệnh ở vị trí thụt lề 'tiêu chuẩn' và sau đó để ý ở các vết lõm khác nhau. Cá nhân tôi biết rằng tôi thích nhìn thấy tất cả các dấu ngoặc nhọn của mình được đặt trong tài liệu, không chỉ trong khối mã tôi đang xem.

Nhìn chung, tôi nghĩ rằng đó là một ý tưởng tốt, tuy nhiên, cá nhân tôi không thích nó.


1

Tôi vừa thử thực hiện các tab tab đàn hồi của jEdit, hoạt động rất tốt với các ngôn ngữ lập trình mà tôi quen thuộc (chủ yếu là các ngôn ngữ giống như HTML / XML và C). Tuy nhiên, với mã Python, đây là cách nó được hiển thị (khoảng trắng được sử dụng thay cho các tab để minh họa cách sắp xếp mọi thứ):

def foo(x):
             '''<1 tab before the docstring.
No tab       <tab
No tab       <tab
             <tab  <another tab
             <tab  <another tab
             <tab'''
             if 1 or 2:    #<Tab before this comment
                           yield True

Đối với một ngôn ngữ như Python dựa vào khoảng cách, đây là một công cụ giải quyết trừ khi bạn vô hiệu hóa chức năng được cung cấp bởi các tab đàn hồi. Các trình soạn thảo như Vim và Emacs làm cho việc vô hiệu hóa hầu hết các loại chức năng trở nên đơn giản nếu bạn biết tên của tùy chọn và cách tắt nó, nhưng chức năng này sẽ được yêu cầu vô hiệu hóa cho mã như trên.

Điều đó đang được nói, thật tuyệt vời cho x86 ASM, C, C ++, Go, XML, HTML và những thứ khác không phụ thuộc vào khoảng trắng quá nhiều:

import (
    "fmt"    // We love formatting functions.
    "io"     // Because I/O is useful.
    "os"     // Can't open a file without os.Open!
)

type Foo struct {
    Field1              int          // This is properly aligned
    ReallyLongField2    string       // with this.
    privateField        io.Reader    // Elastic tabstops are great for Go.
}

Tôi sẽ nói rằng các phương ngữ Lisp như Scheme có các quy ước riêng của chúng cũng sẽ làm cho các tabstop đàn hồi đưa ra mã "xấu xí". Nếu tôi thay đổi cài đặt tabstop của mình để khớp với quy ước của 2 cột và chèn các tab ở vị trí bất thường (giữa một hàm và các đối số của nó):

(let loop ((n 1))
  (if  (> n 10)
        '()
        (cons  n
               (loop (+ n 1)))))

so với càng dễ đọc hơn:

(let loop ((n 1))
  (if (> n 10)
      '()
      (cons n
            (loop (+ n 1)))))

Cấp, cái này không tệ như ví dụ Python, nhưng nó chắc chắn làm giảm khả năng đọc mã. Mặc dù tôi rất thích chức năng khi mã hóa bằng thứ gì đó như C # hoặc C ++, tôi ghê tởm chức năng khi mã hóa bằng ngôn ngữ như Python hoặc Scheme trong đó khoảng trắng là chức năng và / hoặc trực quan hữu ích. Các tab đàn hồi được tạo ra đặc biệt hữu ích mà không yêu cầu tiện ích thụt đầu dòng riêng biệt, nhưng rõ ràng nó không có nghĩa cho tất cả các ngôn ngữ lập trình.


0

Emacs đã xử lý thụt đầu dòng với sự hiện diện của dấu ngoặc đơn chưa được tiết lộ và sẽ tự động căn chỉnh wilma với fred . Tôi không biết tại sao Eclipse không làm như vậy. Ok, tôi có một ý tưởng, nhưng nó không đơn giản.

Bạn có thể yêu cầu Emacs căn chỉnh bình luận, không gặp nhiều rắc rối, nhưng AFAIK không ai ngoài bạn từng muốn điều đó.


2
Tôi chỉ có thể diễn giải câu cuối cùng của bạn là trolling, vì rõ ràng ít nhất một anh chàng khác muốn nó khá tệ đến mức tạo ra một trang được tranh luận tốt, triển khai Java và GIF để cho thấy tại sao nó tốt. Nếu bạn đọc qua các câu trả lời, bạn cũng sẽ thấy rằng Nick cũng không đơn độc. Oh chờ đã, nhìn vào đây quá.
Roman Starkov

Nhân tiện, Emacs có thụt lại wilmakhi bạn chỉnh sửa không, chẳng hạn như thay đổi độ dài của tên hàm? Nếu đúng như vậy, điều đó khá gần với những gì các tab đàn hồi làm.
Roman Starkov

@romkyns: Tôi không có ý trolling, tôi chỉ có nghĩa là tôi chưa bao giờ thấy phong cách bình luận thụt lề trong EMACS. Nói chung EMACS không thụt lại nhiều dòng khi bạn nhập, nhưng điều đó cũng có thể được thay đổi.
kevin cline
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.