✨Smalltalk

Smalltalk

Smalltalk là ngôn ngữ lập trình hướng đối tượng, kiểu dữ liệu động, và có tính phản xạ. Smalltalk được thiết kế nhằm bảo vệ tối đa các đặc điểm ngắn gọn và trong sáng của nó và không hướng đến tính khả dụng (usability) hay tính hiệu năng (performance). Vì vậy nó phù hợp với các mục đích giáo dục hơn là mục đích thương mại, tuy nhiên các đặc điểm của Smalltalk đã ảnh hưởng và góp phần mang lại thành công cho nhiều ngôn ngữ khác trong đó có Java, C#.

Ngôn ngữ Smalltalk được phát triển bởi nhiều tác giả qua nhiều thời kỳ khác nhau các tác giả chính bao gồm Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Scott Wallace.

Smalltalk thường được nhắc đến như là tiêu chuẩn ngôn ngữ lập trình, không phải là một trình biên dịch cụ thể. Đã có nhiều trình biên dịch khác nhau sử dụng ngôn ngữ Smalltalk như Smalltalk-80, VisualAge Smalltalk.v.v... Tiêu chuẩn được biết đến nhiều là ANSI Smalltalk được phê chuẩn vào năm 1998.

Tính hướng đối tượng

Mọi thứ trong một chương trình Smalltalk đều là đối tượng. Đây là điểm mạnh thường được nhắc đến nhất khi nói về Smalltalk.

Tính phản xạ

Một chương trình Smalltalk khi đã biên dịch và đang chạy, vẫn giữ lại tối đa các cấu trúc ở mức cao, ví dụ cấu trúc lớp, đối tượng, tên biến v.v... Nhờ tính phản xạ, người ta có thể lưu, truyền, phục hồi các đối tượng, ngoài ra, người ta dễ dàng phát triển các chương trình kiểm thử (tester), chương trình gỡ rối (debugger).

Đối với các ngôn ngữ không có tính phản xạ (ví dụ tiêu biểu là C/C++), sau khi biên dịch thành mã nhị phân, cấu trúc chương trình ở mức cao bị xóa đi, thay vào đó là kiến trúc mức CPU và API. Điều này gây nhiều phiền phức cho trình gỡ rối, khiến chúng phải sinh ra hàng loạt các tập tin mô tả.

Tính phản xạ có thể làm tăng chi phí bộ nhớ, và chi phí tính toán.

Ví dụ Hello World

Ví dụ sau đây năm dòng "Hello, World!" ra màn hình bằng cách gửi thông điệp show đến đối tượng Transcipt với tham số là chuỗi "Hello, world!"

<syntaxhighlight lang="smalltalk" style="font-size:1.2em;"

Transcript show: 'Hello, world!'.

Các trình biên dịch

#Smalltalk [http://www.refactory.com/Software/SharpSmalltalk/] Ambrai Smalltalk Bistro Cincom Smalltalk, ObjectStudio và VisualWorks của [http://smalltalk.cincom.com Cincom] ([http://www.cincomsmalltalk.com/CincomSmalltalkWiki wiki], [http://www.cincomsmalltalk.com/blog/blogView blog] ) Dolphin Smalltalk [http://www.object-arts.com/content/navigation/home.html] F-Script GemStone/S [http://www.gemstone.com/products/smalltalk/] GNU Smalltalk IBM VisualAge Smalltalk [http://www.ibm.com/software/awdtools/smalltalk/] Little Smalltalk LSW Vision-Smalltalk, bao gồm một phiên bản.NET OSVM Smalltalk nhỏ gọn cho các thiết bị nhúng [http://www.esmertec.com/solutions/M2M/] Pocket Smalltalk chạy trên Palm Pilot PublicDomainSmallTalk [http://susie.dargos.com/doku.php?id=PublicDomainSmallTalk] S# [http://www.ssharp.org] Smalltalk MT Smalltalk biên dịch trên nền Windows Smalltalk/X [http://www.smalltalk-x.de/en/home] Smalltalk YX [http://code.google.com/p/syx] Sport Squeak Smalltalk nguồn mở StepTalk (chạy Smalltalk trên Objective-C runtime) Strongtalk [http://www.strongtalk.org/] (dành cho Windows, có lựa chọn kiểu mạnh) Susie: Scripting Using a Smalltalk Interpreter Engine [http://sourceforge.net/projects/susie/] [http://home.netsurf.de/helge.horch/esug/index.html Bits of History] một bản Smalltalk-76 chạy dưới dạng Java applet. VA Smalltalk follow-on to IBM VisualAge Smalltalk [http://www.instantiations.com/VAST/] Visual Smalltalk Enterprise và họ Smalltalk, bao gồm Smalltalk/V. *Vista Smalltalk dành cho IE7 và Windows Vista

Một số liên kết

[http://www.chronos-st.org/Smalltalk-Getting-the-Message.html Smalltalk: Getting the Message] (sách giáo khoa) [http://users.ipa.net/~dwighth/smalltalk/byte_aug81/design_principles_behind_smalltalk.html Design Principles Behind Smalltalk] viết bởi Dan Ingalls đăng trên BYTE, tháng 8 năm 1981. Các điểm đặc biệt trong Smalltalk [http://www.smalltalk.org/ Smalltalk.org] Trang dành riêng cho Smalltalk. [http://www.littlesmalltalk.org/ Littlesmalltalk.org] Phiên bản Smalltalk nhỏ, mới xuất hiện, với giao diện đồ họa tốt. [http://dmoz.org/Computers/Programming/Languages/Smalltalk/ Open Directory: Smalltalk] [http://users.ipa.net/~dwighth/smalltalk/bluebook/bluebook_imp_toc.html Implementation Section from Smalltalk-80: The Language and Its Implementation] viết bởi Goldberg & Robson [http://www.bitsavers.org/pdf/xerox/alto/Smalltalk72_Manual.pdf Smalltalk-72 Instruction Manual] [http://www.softcentral.com/informationspace/ Công cụ hiển thị thông tin bằng Smalltalk] [http://www.esug.org ESUG (European Smalltalk Users Group)]: Một tổ chức phi lợi nhuận tập hợp các thành viên trong cả lĩnh vực công nghiệp và nghiên cứu. Có các hoạt động phổ biến Smalltalk bao gồm những lần gặp gỡ hàng năm kể từ 1993. [http://users.ipa.net/~dwighth/smalltalk/St76/Smalltalk76ProgrammingSystem.html The Smalltalk-76 Programming System: Design and Implementation] viết bởi Dan Ingalls. [http://www.dolphinmap.net Dolphin Map - Một wiki về các thông tin liên quan đến Dolphin Smalltalk] . [http://f.webring.com/t/Smalltalk Smalltalk web ring] Các sản phẩm và dịch vụ liên quan đến Smalltalk.

Sách

[http://www.iam.unibe.ch/~ducasse/FreeBooks.html Một số sách tiếng Anh nói về Smalltalk] [http://lists.squeakfoundation.org/mailman/listinfo/smalltalk-vn Một mail-list Smalltalk ở Việt Nam] *[http://damien.cassou.free.fr/smalltalk-flyer-vietnamese.pdf Tờ poster Smalltalk dịch sang tiếng Việt]

👁️ 4 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**Smalltalk** là ngôn ngữ lập trình hướng đối tượng, kiểu dữ liệu động, và có tính phản xạ. Smalltalk được thiết kế nhằm bảo vệ tối đa các đặc điểm ngắn gọn và trong sáng
**Objective-C** là một ngôn ngữ lập trình đa dụng, hướng đối tượng có bổ sung thêm thông điệp kiểu Smalltalk vào ngôn ngữ lập trình C. Ban đầu được phát triển bởi Brad Cox và
**Ruby** là một ngôn ngữ lập trình hướng đối tượng, có khả năng phản ứng. Theo tác giả, Ruby chịu ảnh hưởng bởi Perl, Smalltalk, Eiffel, Ada và Lisp. Ruby cung cấp nhiều mẫu hình
**Groovy** là một ngôn ngữ lập trình hướng đối tượng trên nền Java. Nó là một ngôn ngữ lập trình động với các tính năng tương tự như Python, Ruby, Perl, và Smalltalk. Hơn nữa,
**Lập trình hướng đối tượng** () là một mẫu hình lập trình dựa trên khái niệm "đối tượng", mà trong đó, đối tượng chứa đựng các dữ liệu trong các trường, thường được gọi là
Trong khoa học máy tính, **bao đóng** (closure) là một hàm hay một tham chiếu tới một hàm cùng với môi trường tham chiếu - một bảng chứa tham chiếu đến mỗi biến không phải
Trong toán học và trong khoa học điện toán, **hệ thập lục phân** (hay **hệ đếm cơ số 16**, tiếng Anh: _hexadecimal_), hoặc chỉ đơn thuần gọi là thập lục, là một hệ đếm có
nhỏ|[[VirtualBox]] Trong khoa học máy tính, một **máy ảo** (**VM**) là một trình giả lập một hệ thống máy tính. Máy ảo dựa trên kiến trúc máy tính và cung cấp chức năng của máy
**Orient Overseas Container Line** (OOCL) là một công ty dịch vụ vận tải container và hậu cần tại Hồng Kông. OOCL là một trong những công ty vận tải và hậu cần lớn nhất thế
thumb|right|Sơ đồ luồng vòng lặp Do While Trong hầu hết ngôn ngữ lập trình máy tính, một **vòng lặp do while** (tiếng Anh: _do while loop_) là một câu lệnh luồng điều khiển để thực
**Framework for Integrated Test**, hoặc "Fit", là một công cụ mã nguồn mở dùng để kiểm thử khách hàng tự động. Nó tích hợp công việc của khách hàng, nhà phân tích, người kiểm tra
thumb|**Simple DirectMedia Layer** **Simple DirectMedia Layer** (thường được viết tắt là SDL) là một thư viện lập trình có khả năng trừu tượng hóa các phần cứng đồ họa, âm thanh hay thiết bị vào
**Lập trình meta** hay còn gọi là **siêu lập trình** là việc tiến hành một trong hai thao tác (hay cả hai) sau: * Công việc viết một chương trình máy tính mà chương trình
**Python** () là ngôn ngữ lập trình bậc cao đa năng. Triết lý thiết kế của nó nhấn mạnh khả năng đọc mã bằng cách sử dụng thụt lề đáng kể. Python có kiểu động
**_Design Patterns_** (ISBN 0201633612) là cuốn sách khoa học máy tính đưa ra các giải pháp chuẩn và các quy ước đặt tên cho các vấn đề chung trong thiết kế phần mềm. Các tác
**Lập trình máy tính** hay **lập chương trình máy tính,** thường gọi tắt là **lập trình** (, hay _programming_), là việc lập ra chương trình làm việc cho máy có bộ xử lý, nói riêng
phải|Biểu đồ hoạt động của một trình biên dịch lý tưởng. **Trình biên dịch** () hay **phần mềm biên dịch** là một chương trình máy tính làm công việc dịch một chuỗi các câu lệnh
Môi trường phát triển tích hợp Eclipse phiên bản 3.1.2 trên nền Windows XP. **Eclipse** là một môi trường phát triển tích hợp dùng cho lập trình máy tính., Nó chứa một không gian làm
**Java** (phiên âm Tiếng Việt: "_Gia-va_") là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ
Trong các lĩnh vực an ninh máy tính và lập trình, một **lỗi tràn bộ nhớ đệm** hay gọi tắt là **lỗi tràn bộ đệm** (tiếng Anh: _buffer overflow_) là một lỗi lập trình có
**Scala** ( ) là một ngôn ngữ lập trình đa mẫu hình, được thiết kế để tích hợp các tính năng của lập trình hướng đối tượng với lập trình hàm Nó cũng có thể
thumb|**[[Phép tính lambda** là một hệ thống hình thức để định nghĩa hàm, ứng dụng hàm và đệ quy được Alonzo Church đề xuất vào những năm 193x.]] **Lý thuyết ngôn ngữ lập trình** (thường
**Go** là một ngôn ngữ lập trình mới do Google thiết kế và phát triển. Nó được kỳ vọng sẽ giúp ngành công nghiệp phần mềm khai thác tối đa nền tảng đa lõi của
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
**Dart** là một ngôn ngữ lập trình web do Google phát triển. Nó được chính thức công bố tại [http://gotocon.com/aarhus-2011/ Hội thảo GOTO] ngày 10-12 tháng 10 năm 2011 tại Aarhus. Mục đích của Dart
**Swift** là một ngôn ngữ lập trình hướng đối tượng dành cho việc phát triển iOS và macOS, watchOS, tvOS và z/OS. được giới thiệu bởi Apple tại hội nghị WWDC 2014. Swift được mong
**Hệ điều hành Mac cổ điển** hay **Classic** **Mac OS** là một thuật ngữ thông tục được sử dụng để mô tả một loạt các hệ điều hành được Macintosh phát triển cho dòng máy
**Erlang** ( ) là ngôn ngữ lập trình đa năng, đồng thời, là ngôn ngữ lập trình hàm, và là một hệ thống thu gom rác được phát triển tại Phòng thí nghiệm Khoa học
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
**Biểu diễn tri thức và suy luận** (**Knowledge representation and reasoning**, **KRR**, **KR&R**, **KR²**) là lĩnh vực của trí tuệ nhân tạo (AI) tập trung vào việc biểu diễn thông tin về thế giới dưới
**Tấn công phi kỹ thuật** hay **lừa đảo phi kỹ thuật** ( _attack_), trong bối cảnh an toàn thông tin, liên quan đến việc thao tác tâm lý của con người để dụ họ thực
Trong điện toán, **lập trình hướng khía cạnh** (tiếng Anh: _aspect-oriented programming_, viết tắt: _AOP_) là một mẫu hình lập trình nhằm tăng tính mô đun bằng cách cho phép phân tách những mối quan
Trong ngôn ngữ lập trình, **kiểu trừu tượng** (tiếng Anh: _abstract type_) là một kiểu trong hệ thống kiểu danh định mà không thể được khởi tạo trực tiếp; một kiểu mà không trừu tượng
phải|nhỏ|277x277px| Minh họa của một ứng dụng sử dụng libvorbisfile để phát file Ogg Vorbis Trong khoa học máy tính, **thư viện** là tập hợp các tài nguyên không biến động được sử dụng bởi
**Dylan** là một ngôn ngữ lập trình đa mẫu hình có hỗ trợ hàm, lập trình hướng đối tượng (OOP), động và phục hồi trong khi cung cấp một mô hình lập trình được thiết
**Snap!** (trước đây là **Build Your Own Blocks** hoặc **BYOB**) là một ngôn ngữ lập trình mang tính giáo dục miễn phí. Được lấy cảm hứng từ Scratch, Snap! và các chương trình được tạo
**Redis** (/ˈrɛdɪs/; từ viết tắt của **Remote Dictionary Server**) là một cơ sở dữ liệu phân tán trong bộ nhớ, được sử dụng như một cơ sở dữ liệu đệm lưu dữ liệu dạng cặp
Một **tập lệnh**, hoặc **kiến trúc tập lệnh** (tiếng Anh: instruction set architecture, viết tắt _ISA_), là một phần của kiến trúc máy tính liên quan đến lập trình, bao gồm các bản địa các
**Scratch** là một ngôn ngữ lập trình mang tính giáo dục miễn phí dựa trên các khối ngôn ngữ lập trình trực quan (VPL) và trang web chủ yếu để giáo dục lập trình, với
**Howard G. "Ward" Cunningham** (sinh ngày 26 tháng 5 năm 1949) là một lập trình viên người Mỹ, có công phát triển wiki đầu tiên và là đồng tác giả của _Tuyên ngôn về phát
**Lawrence Gordon Tesler** (24 tháng 4 năm 1945 – 17 tháng 2 năm 2020) là một nhà khoa học máy tính người Mỹ, làm việc trong lĩnh vực tương tác máy tính của con người.