Tại sao sử dụng Ruby thay vì Smalltalk? [đóng cửa]


121

Ruby đang trở nên phổ biến , phần lớn là do ảnh hưởng của Ruby on Rails, nhưng có vẻ như nó hiện đang phải vật lộn với tuổi mới lớn. Có rất nhiều điểm tương đồng giữa Ruby và Smalltalk - maglev là một minh chứng cho điều đó. Mặc dù có cú pháp khác thường hơn, Smalltalk có tất cả (nếu không muốn nói là nhiều hơn) vẻ đẹp hướng đối tượng của Ruby.

Từ những gì tôi đã đọc, Smalltalk dường như đã đánh bại Ruby:

Có vẻ như Ruby chỉ đang phát minh lại bánh xe. Vì vậy, tại sao các nhà phát triển Ruby không sử dụng SmallTalk? Ruby có gì mà Smalltalk không có?

Đối với hồ sơ: Tôi là một chàng trai Ruby có ít hoặc không có kinh nghiệm trong Smalltalk, nhưng tôi bắt đầu tự hỏi tại sao.


Chỉnh sửa: Tôi nghĩ rằng vấn đề dễ tạo tập lệnh đã được GNU Smalltalk giải quyết . Theo tôi hiểu, điều này cho phép bạn viết smalltalk trong các tệp văn bản cũ thông thường và bạn không cần phải ở trong IDE Smalltalk nữa. Sau đó, bạn có thể chạy các tập lệnh của mình với:

gst smalltalk_file

47
Vì mọi người vẫn đang chờ đợi "Smalltalk on Snails"?
Mark Rushakoff

10
Về mặt kỹ thuật, nó được gọi là 'Seaside' (www.seaside.st) và chạy khá nhanh trên Gemstone VM có trình biên dịch JIT. Ngoài ra còn có một cổng Ruby tới Gemstone VM, được gọi là Maglev.
ConcernedOfTunbridgeWells

3
Sau khi đi qua tất cả những ý kiến dưới đây, là một fan hâm mộ ruby trong vòng 5 năm trở lại đây, bây giờ tôi đang bị cám dỗ để học Smalltalk càng sớm càng tốt
Amol Pujari

1
GNU Smalltalk gần như là phần mềm triển khai miễn phí duy nhất không gắn chặt với GUI. Tôi nghĩ rằng điều này vẫn còn quan trọng.
eonil

Liên kết "kiểm soát nguồn phân tán" bị hỏng.
Piovezan

Câu trả lời:


88

Tôi giống một người Pythonista hơn là một người dùng Ruby, tuy nhiên những điều tương tự lại xảy ra với Ruby vì những lý do giống nhau.

  • Kiến trúc của Smalltalk hơi đơn giản trong khi Python và Ruby được xây dựng từ đầu để tạo điều kiện tích hợp. Smalltalk chưa bao giờ thực sự có được sự hỗ trợ ứng dụng lai theo cách mà Python và Ruby có, vì vậy khái niệm 'smalltalk là ngôn ngữ kịch bản nhúng' chưa bao giờ được chú ý.

    Ngoài ra, Java không phải là thứ dễ dàng nhất để giao tiếp với các cơ sở mã khác (JNI khá vụng về), nhưng điều đó không ngăn nó đạt được sự quan tâm. IMO đối số giao diện là quan trọng - dễ nhúng không làm tổn hại đến Python - nhưng đối số này chỉ có trọng lượng vừa phải vì không phải tất cả các ứng dụng đều yêu cầu khả năng này. Ngoài ra, các phiên bản sau của Smalltalk đã giải quyết cơ bản vấn đề này.

  • Thư viện lớp của hầu hết các triển khai smalltalk chính (VisualWorks, VisualAge, v.v.) rất lớn và nổi tiếng với đường cong học tập khá dốc. Hầu hết các chức năng chính trong Smalltalk đều bị ẩn đi đâu đó trong thư viện lớp, ngay cả những thứ cơ bản như luồng và bộ sưu tập. Mô hình ngôn ngữ cũng là một cú sốc văn hóa đối với những người không quen thuộc với nó và cách nhìn từng phần của chương trình do trình duyệt trình bày hoàn toàn khác với những gì hầu hết mọi người đã từng làm.

    Hiệu quả tổng thể là Smalltalk có một danh tiếng (hơi xứng đáng) là khó học; để trở thành một lập trình viên Smalltalk thực sự thành thạo sẽ mất khá nhiều thời gian và công sức. Ruby và Python dễ học hơn nhiều và mang đến cho các lập trình viên mới tốc độ.

  • Về mặt lịch sử, việc triển khai Smalltalk chính thống khá tốn kém và cần phần cứng lạ để chạy, như có thể thấy bài đăng trên net.lang.st80 này từ năm 1983 . Windows 3.1, NT và '95 và OS / 2 là hệ điều hành thị trường đại chúng đầu tiên trên phần cứng phổ thông có khả năng hỗ trợ triển khai Smalltalk với tích hợp hệ thống gốc tốt. Trước đây, phần cứng Mac hoặc máy trạm là những nền tảng rẻ nhất có khả năng chạy Smalltalk một cách hiệu quả. Một số triển khai (đặc biệt là Digitalk) đã hỗ trợ hệ điều hành PC khá tốt và đã thành công trong việc đạt được một số lực kéo.

    Tuy nhiên, OS / 2 chưa bao giờ thành công và Windows đã không đạt được sự chấp nhận phổ biến cho đến giữa những năm 1990. Thật không may, điều này lại trùng hợp với sự nổi lên của Web như một nền tảng và một lực đẩy tiếp thị lớn đằng sau Java. Java đã nắm bắt được hầu hết các chia sẻ tư duy trong phần cuối của những năm 1990, khiến Smalltalk trở nên giống một chút.

  • Ruby và Python hoạt động trong một chuỗi công cụ thông thường hơn và không kết hợp chặt chẽ với một môi trường phát triển cụ thể. Mặc dù các IDE Smalltalk mà tôi đã sử dụng đủ đẹp, nhưng tôi sử dụng PythonWin để phát triển Python phần lớn vì nó có một trình soạn thảo đẹp với đánh dấu cú pháp và không bị lỗi.

    Tuy nhiên, Smalltalk được thiết kế để sử dụng với IDE (trên thực tế, Smalltalk là IDE đồ họa ban đầu) và vẫn có một số tính năng tốt không bị sao chép bởi các hệ thống khác. Kiểm tra mã với đánh dấu và 'Hiển thị nó' vẫn là một tính năng rất hay mà tôi chưa bao giờ thấy trong Python IDE, mặc dù tôi không thể nói cho Ruby.

  • Smalltalk đã hơi muộn khi đến với bữa tiệc ứng dụng web. Những nỗ lực ban đầu như VisualWave chưa bao giờ thành công rực rỡ và phải đến khi Seaside ra mắt, một web framework tốt mới được chấp nhận trong vòng kết nối Smalltalk. Trong khi đó, Java EE đã có một vòng đời chấp nhận hoàn toàn bắt đầu với những người hâm mộ cuồng nhiệt quảng cáo nó và cuối cùng chán nản và chuyển sang Ruby; -}

    Trớ trêu thay, Seaside đang bắt đầu có một chút chia sẻ về tư duy giữa các cognoscenti, vì vậy chúng ta có thể thấy rằng Smalltalk đi theo quay trở lại phổ biến.

Phải nói rằng, Smalltalk là một hệ thống rất tốt khi bạn đã tìm ra cách điều khiển nó.


1
Tôi nghĩ rằng điểm thư viện lớp học là không có cơ sở. Tôi biết cả Smalltalk và Ruby và các thư viện lớp rất giống nhau. Bất kỳ vấn đề nào tôi gặp phải khi học cái này, tôi sẽ phải học cái kia. Sau khi thực hiện thêm ruby ​​trước, nó làm cho các thư viện Smalltalk dễ học hơn nhiều. Chúng rất giống nhau ở hầu hết các nơi. Tôi không nghĩ bất cứ điều gì về thư viện lớp hoặc bản thân ngôn ngữ làm cho Smalltalk khó khăn hơn Ruby.
Sean T Allen

2
Cả VW và VA Smalltalk đều từng nổi tiếng về đường cong học tập dốc vì quy mô của các thư viện lớp học. Điều này đã được đăng ký khá rộng rãi vào thời điểm đó. Tôi đã học Smalltalk từ một phiên bản DOS cũ của Digitalk Smalltalk / V, có thư viện lớp nhỏ hơn nhiều. Cuốn sách hướng dẫn đó có cùng kích thước với cuốn sách PP Ruby, và giống như cuốn sách đó, tài liệu tham khảo của thư viện lớp chiếm khoảng một nửa tổng số trang. Tuy nhiên, các thư viện lớp cho VW và VA lớn hơn rất nhiều.
ConcernedOfTunbridgeWells

79

Khi tôi rời khỏi nhà vào buổi sáng để đi làm, tôi thường gặp khó khăn với quyết định rẽ trái hay rẽ phải theo đường lái xe của mình (tôi sống ở giữa đường). Dù bằng cách nào cũng sẽ đưa tôi đến đích. Một con đường dẫn tôi đến đường cao tốc, tùy thuộc vào giao thông, có thể sẽ đưa tôi đến văn phòng nhanh nhất. Tôi phải lái xe rất nhanh trong ít nhất một đoạn đường và tôi có cơ hội tốt để nhìn thấy một hoặc hai cô gái xinh đẹp trên đường đi làm của họ :-)

Con đường khác cho phép tôi đi xuống một con đường phía sau đầy gió và mê hoặc với toàn cây che phủ. Con đường đó khá thú vị và trong hai cách tiếp cận chắc chắn là vui hơn, mặc dù nó có nghĩa là tôi sẽ đến văn phòng muộn hơn so với khi tôi đi trên đường cao tốc. Mỗi cách đều có giá trị của nó. Vào những ngày tôi rất vội, tôi thường sẽ đi trên đường cao tốc mặc dù tôi có thể gặp phải dòng xe cộ và tôi cũng tăng khả năng bị tai nạn (nếu tôi không cẩn thận trong lúc vội vàng). Những ngày khác, tôi có thể chọn con đường đầy cây cối và lái xe dọc theo, thưởng thức phong cảnh và nhận ra rằng tôi đã đến muộn. Tôi có thể cố gắng tăng tốc, tăng khả năng bị phạt hoặc tự mình gây ra tai nạn.

Không có cách nào tốt hơn cách khác. Mỗi người đều có những lợi ích và rủi ro, và mỗi thứ sẽ giúp tôi đạt được mục tiêu của mình.


5
Cái nào là đường liên bang, và con đường nào là con đường khuất gió với tán cây? lol
Charlie Flowers

9
Charlie: đó là những gì làm cho nó Zen :)
xofz

32
Và ngôn ngữ nào có các cô gái xinh đẹp hơn?
Tin Man

25

Tôi nghĩ rằng câu hỏi của bạn là phần nào thiếu điểm. Bạn không nên chọn, bạn nên học cả hai!

Nếu bạn thực sự ở một vị trí mà bạn có thể chọn khung tiếp theo (vm, cơ sở hạ tầng) thì bạn cần phải quyết định sử dụng cái gì và có thể đặt một câu hỏi cụ thể với ưu và nhược điểm từ góc độ ứng dụng của bạn dự định làm gì.

Tôi đã sử dụng smalltalk (thích nó) và ruby ​​(yêu nó).

Ở nhà hoặc cho dự án nguồn mở, tôi có thể sử dụng mọi ngôn ngữ tôi thích, nhưng khi làm việc, tôi phải chấp nhận.

Tôi bắt đầu sử dụng ruby ​​(tại nơi làm việc) bởi vì chúng tôi cần một số ngôn ngữ kịch bản hoạt động ít nhiều tương đương với solaris, linux và windows (98,2000, xp). Ruby vào thời điểm đó chưa được biết đến với Average-joe và không tồn tại bất kỳ đường ray nào. Nhưng nó rất dễ dàng để bán cho tất cả mọi người tham gia.

(Tại sao không phải là python? Sự thật? Tôi đã từng dành một tuần để tìm kiếm một lỗi đã xảy ra khi một thiết bị đầu cuối chuyển đổi không gian của tôi thành một tab và ý định bị xáo trộn).

Vì vậy, mọi người bắt đầu viết mã ngày càng nhiều bằng ruby ​​vì nó rất thư giãn, thích thú và không phải là một đám mây trên bầu trời.

Paul Graham tổng kết

Chắc chắn là hầu hết mọi người không chọn ngôn ngữ lập trình chỉ đơn giản dựa trên thành tích của họ. Hầu hết các lập trình viên được người khác yêu cầu sử dụng ngôn ngữ nào.

Để trở nên hấp dẫn đối với tin tặc, một ngôn ngữ phải tốt để viết các loại chương trình mà họ muốn viết. Và điều đó có nghĩa là, có lẽ đáng ngạc nhiên, nó phải tốt cho việc viết các chương trình bỏ túi.

Và khi ở vùng đất Lisp, hãy cố gắng thay thế LISP bằng smalltalk

Thư viện, cộng đồng và động lực của Ruby rất tốt

Vì vậy, nếu LISP vẫn mạnh hơn Ruby, tại sao không sử dụng LISP? Những phản đối điển hình đối với việc lập trình trong LISP là:

  1. Không có đủ thư viện.
  2. Chúng tôi không thể thuê lập trình viên LISP.
  3. LISP đã không đi đến đâu trong 20 năm qua.

Đây không phải là những phản đối áp đảo, nhưng chúng chắc chắn đáng xem xét.

Bây giờ, với sự lựa chọn giữa một ngôn ngữ mạnh mẽ và ngôn ngữ phổ biến, bạn nên chọn ngôn ngữ mạnh mẽ. Nhưng nếu sự khác biệt về sức mạnh là nhỏ, thì việc trở nên phổ biến có rất nhiều lợi thế. Vào năm 2005, tôi đã suy nghĩ rất lâu trước khi chọn LISP thay vì Ruby. Tôi có lẽ chỉ làm điều đó nếu tôi cần mã được tối ưu hóa hoặc macro hoạt động như trình biên dịch chính thức.


4
E hèm, "20 năm qua"?!?! Tôi nghĩ bạn muốn nói, "51 năm qua". :-)
DigitalRoss

1
@DigitalRoss - Tôi muốn đi với 20; LISP thực sự khá lớn trong một số vòng kết nối nhất định tại một thời điểm, nhưng (mặc dù trên ViaWeb) không có 'ứng dụng sát thủ' mới nào thực sự được nhìn thấy kể từ những năm 1980. Tuy nhiên, các công nghệ dựa trên LISP thực sự nhận được rất nhiều kinh phí trong những năm 60, 70 và 80; mọi người thực sự nghĩ rằng LISP đã hoạt động trong một thời gian khá dài.
ConcernedOfTunbridgeWells

2
@DigitalRoss vâng, nếu bạn bỏ qua những thứ như liên tục, đa phương pháp, macro, tối ưu hóa cuộc gọi đuôi, thì tôi không biết.
Frank Shearar

Tôi luôn thấy những lập luận kiểu này ít được đồng tình hơn. Không có ngôn ngữ tốt nhất và bất kỳ kỹ sư phần mềm nào cũng có thể nói ngọng, sơ đồ, ruby, php hoặc c hoặc bất cứ thứ gì. Và nếu anh ta không thể, anh ta có thể học nó trong 2 tuần. Một ngôn ngữ chỉ là một công cụ. Bạn không cần phải ngủ với nó.
Edgar Klerks

22

Tôi sẽ nói ngược lại: Cú pháp Smalltalk là một trong những cú pháp ngôn ngữ lập trình đơn giản và mạnh mẽ.


7
Chỉ muốn nói amen!
Schpaencoder

19

Đúng là các ngôn ngữ rất giống nhau. Cách giải thích nông cạn đó là gọi Ruby là một ban nhạc cover Smalltalk. Cách giải thích hợp lý hơn là hệ thống khép kín của Smalltalk đã cô lập nó, trong khi sự tham gia của Ruby vào hệ sinh thái Unix và thói quen sử dụng các tính năng từ mọi ngôn ngữ dưới ánh nắng mặt trời mang lại cho nó một đường cong chấp nhận nhẹ nhàng hơn vô cùng và tích hợp dễ dàng với các công cụ kickass như Git.

Giles Bowkett


17

Đoán xem ai đã nói điều này? (trích dẫn gần gũi, có thể không chính xác): "Tôi luôn nghĩ Smalltalk sẽ đánh bại Java. Tôi chỉ không biết liệu có được gọi là 'Ruby' hay không khi nó làm như vậy."

Trống cuộn ....

...

Câu trả lời là ... Kent Beck



15

Ruby có gì mà Smalltalk không có?

  • Hỗ trợ rộng rãi, hiện tại bởi các nền tảng chính (IronRuby và jRuby) làm phong phú thêm bộ thư viện
  • Những nhà truyền giáo như Dave Thomas, người, trong nhiều năm, đã đi lưu diễn khắp đất nước để rao giảng phúc âm bằng ngôn ngữ của họ. Tôi đã thấy Dave tại các hội nghị Java nói rằng anh ấy không biết Java và anh ấy thích Ruby hơn.
  • Bất động sản mạnh mẽ, hiện tại trên giá sách
  • Người tạo ra Ruby đã nói rằng anh ấy nghĩ về lập trình viên: Cú pháp của Ruby dường như có sức hấp dẫn Zen này. Thật khó để chốt hạ, nhưng dường như vẫn làm nức lòng người hâm mộ.
  • Các bài thuyết trình sáng tạo, năng động như Giles và bài thuyết trình này thu hút được sự chia sẻ tư duy

Tôi nghĩ rằng quan điểm của bạn là đúng đắn. Như một người bạn từng nói, Ruby có thể là "bình mới rượu cũ" đối với Smalltalk. Nhưng đôi khi cái chai mới cũng quan trọng. Rượu phải được đặt đúng nơi, đúng lúc.


Dấu đầu dòng đầu tiên của bạn đã tắt. Hỗ trợ JVM và .NET VM có nghĩa là tào lao đối với Smalltalk vì mỗi lần triển khai đều chạy trên một máy ảo rồi (làm sao chúng có thể chạy tốt như vậy trên nhiều hệ điều hành, phải không?) Cú pháp của Ruby phức tạp hơn Smalltalk. Thật khó để pin xuống mà là một phần của vấn đề với nó;)

1
Có một phần lý do tại sao một số người có thể sử dụng jruny / ironruby là sự non nớt tương đối của ruby ​​vm, nhưng có một số thư viện thực sự tuyệt vời có sẵn cho .net / jvm mà họ có thể muốn sử dụng mà không có các thư viện tương đương ở nơi khác cộng với dễ dàng hơn rất nhiều cho một số doanh nghiệp khi kết hợp với các cơ sở mã java / c # của họ.
Roman A. Taycher

2
Tất nhiên, tôi thấy việc ấp ủ "bất động sản mạnh mẽ, hiện tại trên giá sách" là một hình phạt của một ngôn ngữ phức tạp nếu không có môi trường sống động. Khi tôi viết mã bằng C ++, tôi có một giá sách đầy ắp sách gotcha. Sau khi chuyển đến Smalltalk (thông qua Ruby), tôi không nhớ chúng một chút nào. Dựa vào chính IDE để có hầu hết các hướng dẫn, tôi hiếm khi để lại hình ảnh nhiều hơn là tìm kiếm nhanh trên google và đã xác minh một số bất động sản kệ đó với loạt Game of Thrones;)
Sean DeNigris

14

Đánh bại tôi. Tôi đã dành một năm để kiểm tra Ruby và thực hiện một số dự án nhỏ để xem tôi thích nó như thế nào. Tôi đoán mình là một người cố chấp Smalltalk vì mỗi khi ngồi xuống làm việc với Ruby, tôi đều thở dài và nghĩ rằng "Tôi thực sự muốn làm điều này ở Smalltalk". Cuối cùng tôi đã nhượng bộ và quay trở lại Smalltalk. Bây giờ tôi hạnh phúc hơn. Hạnh phúc hơn là tốt hơn.

Tất nhiên câu hỏi đặt ra là "Tại sao?". Không theo thứ tự đặc biệt:

  1. Bởi vì IDE thổi bay mọi thứ khác mà tôi từng làm việc. Điều này bao gồm một loạt các nền tảng từ ISPF trên máy tính lớn của IBM đến Visual của Microsoft (. *), Bao gồm những thứ như Visual Basic 4-6, Visual C ++ (các hóa thân khác nhau), Borland's Turbo Pascal và các hậu duệ (ví dụ: Delphi), và các thứ trên DEC máy ở cả chế độ ký tự và trong X-Windows.
  2. Bởi vì hình ảnh là một nơi tuyệt đẹp để sống. Tôi có thể tìm thấy những gì tôi muốn trong đó. Nếu tôi không thể tìm ra cách làm điều gì đó mà tôi biết ở đâu đó trong hình ảnh là một ví dụ về những gì tôi đang cố gắng làm - tất cả những gì tôi phải làm là săn lùng cho đến khi tôi tìm thấy nó. Và nó tự ghi lại - nếu bạn muốn xem chi tiết về cách hoạt động của một thứ gì đó, bạn chỉ cần mở trình duyệt trên lớp mà bạn quan tâm, xem phương pháp và đó là cách nó hoạt động. (OK, cuối cùng bạn sẽ gặp một thứ gọi là nguyên thủy, và sau đó là "ở đây có rồng", nhưng nó thường có thể hiểu được từ ngữ cảnh). Có thể làm những điều tương tự trong Ruby / C ++ / C, nhưng nó không dễ dàng. Dễ dàng là tốt hơn.
  3. Ngôn ngữ là tối thiểu và nhất quán. Ba loại thông điệp - một ngôi, nhị phân và từ khóa. Điều đó cũng mô tả mức độ ưu tiên của việc thực thi - trước tiên là các thông điệp một ngôi, sau đó là các thông điệp nhị phân, sau đó là các thông điệp từ khóa. Sử dụng dấu ngoặc đơn để giúp mọi thứ. Cú pháp nhỏ, thực sự - tất cả đã xong với việc gửi tin nhắn. (Được rồi, phép gán không phải là gửi tin nhắn mà là một toán tử. Vì vậy, là toán tử 'return' (^). Các khối được bao bởi cặp dấu ngoặc vuông ([]). Có thể là một hoặc hai bit 'ma thuật' khác trong đó, but darn little ...).
  4. Các khối. Vâng, tôi biết, chúng có trong Ruby (và những người khác), nhưng nếu có, bạn thực sự không thể lập trình trong Smalltalk mà không sử dụng chúng. Bạn là buộc phải học cách sử dụng chúng. Đôi khi bị ép buộc cũng tốt.
  5. Lập trình hướng đối tượng không có sự thỏa hiệp - hoặc các lựa chọn thay thế, cho vấn đề đó. Bạn không thể giả vờ rằng bạn đang "làm đồ vật" trong khi vẫn làm điều cũ.
  6. Vì nó sẽ làm căng não của bạn. Các cấu trúc thoải mái mà tất cả chúng ta đã quen sử dụng (if-then-else, do-while, for (;;), v.v.) không còn ở đó nữa, vì vậy bạn phải Học một cái gì đó mới. Có những điểm tương đương với tất cả những điều trên (và hơn thế nữa), nhưng bạn sẽ phải học cách nghĩ khác. Khác biệt là tốt.

Mặt khác này chỉ có thể là lời huyên thuyên của một chàng trai của những người được lập trình từ những ngày khi máy tính lớn cai trị trái đất, chúng tôi đã phải đi bộ năm dặm để làm việc thông qua bão tuyết chói mắt, khó khăn cả hai cách, và các máy tính sử dụng bánh rán cho bộ nhớ. Tôi không có gì chống lại Ruby / Java / C / C ++ /, tất cả chúng đều hữu ích trong ngữ cảnh, nhưng hãy cho tôi Smalltalk hoặc cho tôi ... tốt, có lẽ tôi nên học Lisp hoặc Scheme hoặc ... :-)


1
Tôi nghĩ câu hỏi là "Ruby có gì mà Smalltalk không có?"
Mauricio

1
@Mauricio, Và @Bob đã trả lời: "Đánh bại tôi."
systemovich

1
Đặt xuất sắc, tình yêu nó! Tại sao cái gì đó không thể tốt hơn mặc dù ít phổ biến hơn? Nếu bạn không đồng ý, tôi dám nói là bạn không nhận được Smalltalk ;-)
Amos M. Carpenter

@aaamos - cảm ơn bạn. Tôi nghi ngờ lý do Smalltalk không phổ biến là vì # 6 và ở mức độ thấp hơn là # 5. Smalltalk không phải là loại địa điểm "cùng một cú pháp cũ" của mẹ bạn - nó khác. Ví dụ, nếu bạn biết C thì C ++, Java và C # đều cảm thấy khá thoải mái. Và "làm thế nào" và "tại sao" của hành vi Smalltalk có thể hơi lộn xộn. (Tôi sẽ đánh liều rằng nếu một Smalltalker mới không cảm thấy như đầu của họ bị lệch đi, hoặc là họ quá xuất sắc thì họ đã mò mẫm ngay lập tức, hoặc họ không hiểu được nó. Ừ, tôi tự hỏi làm thế nào mà "tuyệt vời "điều sẽ cảm thấy :-).
Bob Jarvis - Phục hồi Monica

Bạn đã thử gỡ lỗi bằng pry (và plugin) và viết mã trực tiếp với tải lại nóng các tệp đã lưu chưa? Đó là kinh nghiệm lập trình tốt nhất mà tôi có.
Rivenfall

11

Smalltalk: mọi người chuyển tiếp ifTrue: [nghĩ] ifFalse: [không nghĩ]

Ruby: mọi người nghĩ về phía trước trừ khi nghĩ ngược lại

1) Luồng kiểm soát giống RPN của Smalltalk bằng các tin nhắn cũng giống như Lisp - nó thường xuyên và tuyệt vời nhưng khiến mọi người ngạc nhiên.

2) Ruby cho phép mọi người viết mã bằng cách sử dụng thành ngữ mà mọi người nói - làm blah trừ khi có lý do để không.

cập nhật đã viết lại mẫu Smalltalk để thực sự là mã hợp pháp hơn ..


4
Tiếng Anh có lẽ là một trong những cách tồi tệ nhất để diễn đạt hướng dẫn lập trình. Ý tôi là nó gây ra đủ sự nhầm lẫn giữa mọi người, chứ đừng nói đến máy tính. Làm bla bla? Ai nên làm blah? về những gì? Ngoài ra mã ruby ​​của bạn không có ý nghĩa và không hợp lệ. Nên là: Ruby: people.think_forwards trừ khi people.think_backwards? và SmallTalk phải là: Smalltalk: (people think_forwards?) ifTrue: [people think_forwards])
donalbain

2
Bạn cũng có thể thêm một phương thức được gọi là trừ khi: aBlock vào lớp BlockClosure từ Danh mục Kernel-Method sẽ đánh giá aBlock và ifTrue: đánh giá khối đang gọi.
Ricardo de Cillo

3
@donalbain, tôi không gợi ý rằng đây là những câu lệnh lập trình theo nghĩa đen mà là dấu hiệu của thứ tự câu lệnh. Tôi nghĩ điều đó khá rõ ràng khi tôi viết phản hồi của mình.
Andy Dent,

1
@donalbain Rất đúng, trên thực tế nó tồn tại. Luồng điều khiển giống Ruby hơn có tại github.com/randycoulman/SuffixConditionals . Andy, có một lỗi trong mã của bạn - những người lạc hậu không nghĩ, vì vậy bạn nên tôi đã gửi #ifFalse: ;-p
Sean DeNigris

Smalltalk có cách tiếp thị tồi: dựa trên cú pháp và hình ảnh kỳ lạ. Ruby bình thường hơn nhưng cũng có một cú pháp chất lượng tốt. Java được đánh máy và biên dịch để làm yên lòng khách hàng. Tôi sẽ không ngại học và sử dụng một cú pháp kỳ lạ nếu nó không ảnh hưởng đến việc “tiếp thị” của riêng tôi với tư cách là một lập trình viên.
Rivenfall

8

Ruby là ngôn ngữ buzz hiện tại. Bây giờ, việc tiếp thị phần mềm được xây dựng bằng nó dễ dàng hơn so với một ngôn ngữ được phát triển vào những năm 70.


Thực tế là nó đã được "phát triển trong những năm 70" không liên quan gì đến việc nó khó phát triển như thế nào.
gracchus

3
và nhận xét của tôi không liên quan gì đến sự phát triển.
coder1

3
Xin lỗi, tôi thường đọc sai khi tôi mệt mỏi, vì vậy tôi phải dành thời gian nghỉ phép để xin lỗi những người mà tôi đã bắt nạt.
gracchus 16/10/12

8

Cộng đồng! Ruby và đặc biệt là Rails có một cộng đồng tuyệt vời như vậy. Khi lộn xộn với smalltalk, dường như không có nhiều diễn viên màn hình, bài báo, bài đăng trên blog, v.v. viết về Smalltalk.


7

Bạn đã trả lời câu hỏi ở dòng đầu tiên: "Ruby đang trở nên phổ biến"

  • rất nhiều mô-đun, dự án thú vị và những thứ như vậy dựa trên Ruby.
  • Nếu bạn gặp khó khăn khi làm điều gì đó trong Ruby, việc tìm kiếm sự trợ giúp ở đâu đó sẽ rất nhỏ.
  • Ruby được cài đặt trên rất nhiều máy tính hiện nay (Nó được bao gồm theo mặc định trên OS X, nhiều bản phân phối Linux và có những trình cài đặt tốt cho Windows) - Tôi chưa thấy smalltalk được cài đặt theo mặc định trên bất kỳ máy nào tôi đã sử dụng ..

Tôi có thể nói rằng ngôn ngữ này vượt trội hơn hay không thì một ngôn ngữ vượt trội hơn so với ngôn ngữ khác là không liên quan .. Ví dụ, PHP có thể không phải là ngôn ngữ "tốt nhất" nhưng tôi vẫn sẽ cân nhắc việc sử dụng nó thay vì Ruby on Rails (một công cụ "tốt hơn" để tạo các trang web) vì nó rất phổ biến.

Về cơ bản, những ưu và nhược điểm cụ thể của một ngôn ngữ ít quan trọng hơn nhiều so với mọi thứ xung quanh nó - cụ thể là cộng đồng.


7

Ruby (hoặc bất kỳ ngôn ngữ nào khác) phổ biến hơn Smalltalk (hoặc bất kỳ ngôn ngữ nào khác) vì chúng ta đang sống trong một vũ trụ hỗn loạn. Nói một cách dí dỏm:

  • Từ chính Dave Thomas, "[sau] video về 'Cách xây dựng blog trong 10 phút' ... Ruby đã đi từ một ngôn ngữ thích hợp nhỏ tốt đẹp, trở thành 'ngôn ngữ bạn đã viết ứng dụng Rails'" ( Hội nghị Ruby Bài phát biểu năm 2010 ).
  • Các nhà cung cấp Smalltalk ban đầu tính phí nghiêm ngặt
  • Smalltalk, bởi vì nó được phát minh (đi trước thời đại) cách đây 30 năm, nên đối với nhiều người như một ngôn ngữ cũ, "đã chết" (như FORTRAN)
  • các tập đoàn coi Smalltalk là một lợi thế cạnh tranh nên họ che giấu việc sử dụng nó

Trong khi các ngôn ngữ tương tự nhau về các tính năng OO, lợi thế giết người của Smalltalk là môi trường sống, mở ('hình ảnh' bị hiểu nhầm nhiều). Sau khi bạn xem ví dụ này về lập trình trong Smalltalk , cuộc tranh luận đã kết thúc.


5

Đối với tôi, nó không phải là trường hợp của những gì Ruby có, nhưng những gì Ruby không có. Và điều mà nó không có là cần một máy ảo và môi trường hoàn chỉnh.

Smalltalk thật tuyệt - đây là nơi tôi học được các khái niệm OO, nhưng để dễ sử dụng, tôi chọn Ruby. Tôi có thể viết mã Ruby trong trình soạn thảo yêu thích của mình và chạy nó dưới dạng dòng lệnh.

Vì vậy, đối với tôi, đó là những gì tôi chọn Ruby thay vì Smalltalk.


Nhưng hãy tiếp tục và học hỏi Smalltalk.
Simon Knights

Theo chỉnh sửa của tôi: GNU Smalltalk cho phép bạn sử dụng trình soạn thảo yêu thích của mình và chạy từ dòng lệnh.
hai bit-ngu ngốc

Có - Cảm ơn - chỉ cần xem và tải xuống một bản sao!
Simon Knights

2
Chà, nó cũng không có một khung web tuyệt vời. Rails là ok, nhưng nó không có Seaside
Stephan Eggermont

3
Bất kỳ nền tảng smalltalk nào cũng cho phép bạn viết mã smalltalk trong trình soạn thảo yêu thích của bạn. Nhưng nếu bạn muốn bị ngắt kết nối với thế giới trực tiếp, đó là sự lựa chọn của bạn. Chỉ cần biết rằng bạn mất khoảng 90% năng suất khi làm việc đó.
Igor Stasenko

5

Tôi nghĩ rằng tất cả những ai đã làm việc với Ruby một thời gian đều nhận ra món nợ sâu sắc của nó đối với Smalltalk. Là một trong những người này, tôi thích điều gì ở Ruby hơn Smalltalk? Tôi nghĩ từ góc độ ngôn ngữ chặt chẽ, đó là đường. Ruby cố tình là một ngôn ngữ rất có cú pháp, trong khi Smalltalk là một ngôn ngữ rất tối giản về cú pháp. Về cơ bản, Ruby là mô hình đối tượng Smalltalk với đường cú pháp Perlish. Tôi tình cờ thích đường và thấy nó làm cho việc lập trình trở nên thú vị hơn.


1
Ruby có một mô hình đối tượng khác với Smalltalk. Tôi muốn nói "bị ảnh hưởng bởi" nhưng không giống nhau. Bạn có thể viết các chương trình ruby ​​theo cách dựa trên nguyên mẫu để tránh phải tạo các lớp mới. Mặc dù điều này là bất thường, nhưng Smalltalk không hỗ trợ điều đó.
Dafydd Rees

2
Tôi thích smalltalk, vì tôi có thể phát minh và sử dụng đường cú pháp riêng bất cứ khi nào tôi cần. Không cần đường nếu bạn đã có thể làm mọi thứ với cú pháp tối thiểu.
Igor Stasenko

5

Bạn có thể tìm một công việc khá dễ dàng khi làm Ruby.Mặc dù tôi thực sự yêu thích Smalltalk, nhưng hầu như không thể tham gia vào thị trường ngách của Smalltalk. Có rất nhiều công việc xung quanh nó, nhưng nếu bạn không tham gia khi nó phổ biến thì bây giờ hầu như không thể.

Tất cả những lý do khác đều trở nên vô nghĩa vì bạn cần dành nhiều thời gian, tập trung vào công việc thực tế để học ngoại ngữ đúng cách. Nếu bạn không giàu có một cách độc lập, cách tốt nhất để làm điều đó là tiếp xúc với nó tại nơi làm việc.


4

Bởi vì các bản phân phối Smalltalk được định giá bằng bội số $ 1000USD trong khi Ruby miễn phí.


4

Ruby là Smalltalk vì chữ số Ả Rập là chữ số La Mã. Cùng một phép toán, cú pháp dễ dàng hơn.


3
Đó là một cách sai lầm. Smalltalk có cú pháp dễ dàng hơn nhiều.
Stephan Eggermont

1
Chỉ khi bạn nghĩ trong rpn. Hầu hết mọi người không. Tôi thực sự tự hào về thực tế là bài đăng này liên tục nhận được lượt bình chọn tăng và giảm.
sal

12
RPN? Java: foo.bar () Perl: foo-> bar () Python: foo.bar () Smalltalk: foo bar Vì vậy, ngoài việc có cú pháp đơn giản hơn, nếu bạn khẳng định Smalltalk là RPN, bạn phải nói rằng tất cả các ngôn ngữ OO chính là "RPN".
Randal Schwartz

2
Chỉ cần so sánh lượng từ khóa Ruby so với lượng từ khóa Smalltalk. Va đo mơi chỉ la khởi đâu! Cú pháp của Smalltalk phù hợp với một chiếc khăn ăn, hãy thử làm điều đó với Ruby và bạn sẽ gặp khó khăn.
froginvasion

3

Tôi đã làm một chút Smalltalk - IDE là một điều tôi nhớ - Ruby có hỗ trợ IDE tốt không?


Đúng. TextMate là tuyệt vời, hỗ trợ Eclipse tốt và Emacs có một chế độ cho nó khá tốt.
Pete

6
Nếu bạn nghĩ "TextMate / Eclipse / Emacs" có thể so sánh với IDE tích hợp sẵn của Smalltalk, bạn chưa thấy một Smalltalk thực sự!
Randal Schwartz,

Tôi vẫn bỏ lỡ lựa chọn -> 'Hiển thị Nó' từ IDE trên các hệ thống tôi xây dựng ngày hôm nay - với một Ngoại lệ: Các công cụ phát triển SQL của SQL Server sẽ cho phép bạn đánh dấu lựa chọn và thực thi nó dưới dạng truy vấn. Smalltalk có ảnh hưởng nếu không có gì khác!
ConcernedOfTunbridgeWells

IDE nhận được gần nhất với Smalltalk nó IMHO ArachnoRuby. Nó được tích hợp tốt hơn bất kỳ Emacs / TextMate nào, v.v. Tuy nhiên, có vẻ như mọi người khá hài lòng với một vài cửa sổ đang mở chạy các công cụ đa dạng. Trân trọng
Friedrich

@Friedrich Re "mọi người khá hài lòng với một vài cửa sổ mở chạy các công cụ đa dạng" ... "Ngôn ngữ lập trình dạy bạn không muốn những gì họ không thể cung cấp. Bạn phải suy nghĩ bằng một ngôn ngữ ..." - Paul Graham
Sean DeNigris

3

Sử dụng Ruby vì nó có thể có chân kinh doanh, Smalltalk thì không.

Tôi có thể cho bạn biết từ kinh nghiệm cá nhân. Vẫn đang sử dụng Smalltalk, yêu thích nó và đã sử dụng một vài hương vị. Mặc dù Smalltalk là một ngôn ngữ tuyệt vời và là tất cả những gì bạn đã đề cập, nhưng bạn sẽ không thuyết phục được CIO / CTO trung bình sử dụng Smalltalk trong một dự án mới. Tất nhiên, bạn thậm chí có thể gặp khó khăn khi thuyết phục một CIO / CTO bảo thủ sử dụng Ruby. Cuối cùng, bạn phải rất cẩn thận nếu bạn muốn được hỗ trợ thương mại lâu dài và khả năng tìm kiếm những nhân viên không chuyên có thể hỗ trợ hệ thống của bạn trong tương lai. Ví dụ, Smalltalk là một công ty thực sự lớn vào đầu những năm 90 và IBM đã đầu tư rất nhiều vào nó vào cuối những năm 90. Đối với IBM, Smalltalk sẽ là ngôn ngữ tiếp theo cho tất cả các ứng dụng kinh doanh. IBM đưa Smalltalk vào mọi thứ bao gồm cả hệ thống máy tính lớn của họ. Java trở nên phổ biến, chiếm lĩnh thị trường, và Smalltalk trở thành một người chơi thích hợp. Hơn một năm trước IBM đã loại bỏ ngôn ngữ này (thuật ngữ của họ là hoàng hôn). Ngoài ra, hãy xem Lịch sử. ParkPlace và Digitalk, nơi những người chơi thương mại lớn đầu tiên trong đấu trường Smalltalk, họ hợp nhất và sau đó ngừng kinh doanh.


Smalltalk "có chân kinh doanh" - nếu bạn đã có nền tảng phù hợp và có thể tìm thấy cơ hội thích hợp ...
Dafydd Rees

Tiêu đề của bạn bị phóng đại quá mức. Không phải mọi hoạt động kinh doanh đều bị giới hạn bởi các CTO thiển cận. Như Paul Graham đã nói khi ông hoàn toàn lật tẩy lầm tưởng rằng một ngôn ngữ chính thống là an toàn hơn: "Bạn sẽ gặp khó khăn khi thuyết phục ông chủ đầu nhọn để bạn xây dựng mọi thứ trong Lisp ... Nhưng nếu bạn làm việc cho một công ty khởi nghiệp thì không" chưa có những ông chủ đầu nhọn, bạn có thể ... sử dụng công nghệ mà các đối thủ của bạn, dán chặt vào ngôn ngữ trung gian, sẽ không bao giờ có thể sánh kịp. "
Sean DeNigris

2

Tôi yêu cả Smalltalk và Ruby - nhưng tôi nhận thấy rằng Ruby có thể áp dụng nhiều hơn cho những gì tôi làm hàng ngày và gần gũi với trái tim tôi hơn (thực tế mà nói). Ruby cung cấp những gì mà Smalltalk không cung cấp?

  • Tập lệnh dựa trên văn bản
  • Yêu cầu triển khai thấp (chạy ở nhiều nơi hơn)
  • Dễ dàng học và chứng minh hơn (các lập trình viên Perl và Python sẽ có không gặp khó khăn gì
  • Dễ dàng di chuyển các chương trình hơn - các tệp văn bản!
  • Giao diện tốt với môi trường bản địa
  • Java chạy ở bất kỳ đâu, jRuby chạy ...
  • Cộng đồng lớn hơn và tích cực hơn nhiều

Một số đã đề cập đến gst (GNU Smalltalk); những vấn đề vẫn còn tồn tại.


Những nơi nào Ruby chạy mà Smalltalk không chạy? Ví dụ, Pharo Smalltalk chạy trên Mac, Windows, Unix, hoàn toàn không có hệ điều hành (Ruby có làm được điều đó không?) Và đang được chuyển sang các nền tảng di động khác nhau (Android, iOS).
Sean DeNigris

Làm thế nào về FreeBSD và OpenBSD? (không, tôi không biết câu trả lời ...) Còn Solaris và HP-UX và OpenVMS thì sao? Tôi cũng không muốn sử dụng Ruby hoặc Smalltalk trên Android hoặc iOS. Vấn đề lớn nhất không phải là hệ điều hành, mà là bộ nhớ: Ruby sẽ chạy trong bộ nhớ ít hơn đáng kể so với Smalltalk.
Mei

Rõ ràng, có một FreeBSD VM (xem gạch đầu dòng cuối cùng của OP tại forum.world.st/SOB-minutes-3-6-12-td4453817.html ). Tôi không chắc về những người khác. Đối với Android và iOS, liệu bạn có muốn sử dụng Smalltalk hay không, còn một câu hỏi khác là liệu nó có khả dụng hay không ;-)
Sean DeNigris

Điều đó cũng làm tôi nhớ - Tôi nhớ lại một Smalltalk cho Palm.
Mei

2

Sử dụng bất cứ điều gì khiến bạn mạnh mẽ hơn và nhanh hơn để vượt qua thử thách của bạn.

Đối với chúng tôi , một chút trong khuôn khổ ngôi nhà, chúng tôi xây dựng trên đỉnh bờ biển thực sự là siêu năng lực của chúng tôi.

Tôi yêu cộng đồng RoR, nó có thái độ đúng đắn. Điều đó rất có giá trị. Nhưng đồng thời, về mặt công nghệ, bên bờ biển khiến bạn mạnh mẽ hơn trước những vấn đề phức tạp hơn.

Bạn có thể tạo các ứng dụng web tuyệt vời bên bờ biển bằng cách sử dụng công cụ nguồn mở.

dabbledb là một sartup dựa trên bờ biển và, hey! Avi đã bán nó cho twitter vào tháng 6 năm nay!

Tôi nói rằng bạn không cần phải đợi người khác chấp thuận sáng kiến ​​của bạn.

Chỉ cần đi cho nó. Làm cho nó hoàn thành. Cho chúng tôi thấy rằng nó hoạt động.

Bạn không cô đơn. Chúng ta đang ở trên cùng một con thuyền.


2

Góc nhìn thú vị từ Robert Martin (từ RailsConf 2009): "What Killed Smalltalk cũng có thể giết Ruby"


2
Cuộc nói chuyện đó cho rằng smalltalk đã chết (không phải vậy) và viên ruby ​​đó tương tự như smalltalk trong không gian và thời gian để nó có thể chịu chung số phận (không phải). Nó không phải.
Randal Schwartz

0

Tôi nghĩ một phần của vấn đề là môi trường phát triển-là-thời gian chạy. Điều này mang lại rất nhiều sức mạnh, nhưng nó cũng thể hiện một đường cong học tập lớn hơn.

Đây là một hướng dẫn chào thế giới.

Điều này rất khác so với các ngôn ngữ khác, nơi tôi chỉ cần biết cách mở trình soạn thảo văn bản và sao chép và dán văn bản, nhấn lưu và chạy trình biên dịch. Tôi phải biết cách sử dụng môi trường. Hướng dẫn đó thậm chí không chỉ cho tôi cách tạo một chương trình cơ bản (nhiều khả năng là lỗi của hướng dẫn đó) mà tôi có thể chạy.

Chắc chắn sẽ có chi phí cao hơn để mọi thứ diễn ra suôn sẻ hơn hầu hết các ngôn ngữ khác.

Hầu hết các ngôn ngữ đều có một số mã đẹp bắt mắt mà chúng có thể thể hiện. Tôi chưa thấy điều đó với Smalltalk. Tôi cũng nghĩ rằng có một số kỳ thị đối với Smalltalk bởi vì nó đã tồn tại quá lâu và nó vẫn còn tương đối mù mờ.


Ở cuối trang: tự thông báo: 'Xin chào, Thế giới!'. Tôi đồng ý rằng đường cong học tập là dốc hơn, nhưng sử dụng "hello, world" làm bằng chứng, tôi nghĩ, là quá nhiều. :)
jop

Quan điểm của tôi là xem cách viết một cái gì đó đơn giản như hello workld, hướng dẫn phải cho bạn biết bạn cần mở cửa sổ nào. Tên và cách sử dụng của các cửa sổ không phải là thứ tôi có thể đoán được. Tôi mất một chút nhấp chuột xung quanh chỉ để tìm các cửa sổ mà nó đang nói đến.
Steve g

1
Theo chỉnh sửa của tôi: GNU Smalltalk cho phép bạn sử dụng trình soạn thảo yêu thích của mình và chạy từ dòng lệnh.
hai bit-ngu ngốc

ruby -e 'đặt "xin chào thế giới"
Marcel Valdez Orozco

1
Pharo [image filename] -e "tự thông báo:" hello world"
Sean DeNigris

0

Tôi nghĩ sự khác biệt LỚN NHẤT là Ruby giống hơn nhiều với perl về CÁCH SỬ DỤNG. Smalltalk không bao giờ có chỗ đứng trong các ngôn ngữ "kịch bản".

VM thực sự rất tuyệt và tôi hy vọng ruby ​​sẽ có thứ gì đó tương tự như nó để chúng tôi có thể coi mọi thứ trên hệ điều hành của mình được viết bằng ruby ​​như một đối tượng trong không gian bộ nhớ, tuy nhiên cho đến lúc đó tôi chỉ đơn giản là thích thú với cú pháp ngắn gọn của Ruby, khả năng viết một script nhỏ và sử dụng lại sau đó. Ruby có tất cả những ưu điểm của perl và OOP giống với smalltalk hơn là hack OOP của perl.


0

Tôi sẽ đi xa hơn câu trả lời của Jonke và nói rằng hiện nay có một số lượng lớn các ngôn ngữ có một cộng đồng rất mạnh, gần như đủ để phù hợp với mọi sở thích và một tập hợp con trong số này được công nhận chính thống (tức là người quản lý của bạn sẽ cho phép bạn sử dụng chúng tại hoạt động tốt).

Thật dễ dàng để học những điều cơ bản của một ngôn ngữ, nhưng để thực sự sử dụng nó một cách hiệu quả, bạn cần đầu tư đủ thời gian để tìm hiểu nền tảng và các công cụ, cũng như cú pháp và thành ngữ. IIRC, McConnell tuyên bố rằng phải mất khoảng ba năm để trở nên thực sự thành thạo.

Với những điều đó, thật khó để biện minh cho việc dành nhiều thời gian cho các ngôn ngữ như LISP và Smalltalk, mặc dù chúng rất thú vị và có lẽ mang tính giáo dục.


0

Là người đến sau trong cuộc thảo luận, vấn đề chính với Smalltalk và Lisp là bạn không thể chạy chúng với CGI hoặc FastCGI trên chia sẻ lưu trữ.

Khối lượng lớn chưa được rửa sẽ không bao giờ sử dụng chúng nếu họ cần VPS hoặc máy chủ chuyên dụng để sử dụng chúng. IMHO Seaside vượt trội hơn hầu hết mọi thứ, nhưng liệu nó có chạy trên Dreamhost hay Web thỏa mãn không?


Tôi tự hỏi nếu điều này vẫn còn là nhiều của một rào cản bây giờ mà ví dụ Digital Dương là cung cấp VPS với $ 0,007 / hr
Sean DeNigris
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.