✨Ruby (ngôn ngữ lập trình)

Ruby (ngôn ngữ lập trình)

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 lập trình, bao gồm lập trình hàm, hướng đối tượng, mệnh lệnh, phản xạ. Nó sử dụng hệ thống kiểu biến động và tự động quản lý bộ nhớ tự động.

Lịch sử

Ruby được tạo ra từ 24 tháng 2 năm 1993, bởi lập trình viên người Nhật Bản tên là Matsumoto Yukihiro (松本 行弘), biệt danh Matz. Phiên bản chính thức 0.95 (Đây là phiên bản công khai đầu tiên của Ruby được công bố tại Nhật Bản) vào ngày 21 tháng 12 năm 1995. Ở phiên bản Ruby 0.95, nó đã có nhiều tính năng quen thuộc trong các phiên bản sau của Ruby, bao gồm thiết kế hướng đối tượng, các lớp với kế thừa, mixin, vòng lặp, xử lý ngoại lệ và thu gom rác.

Ruby 3.4.0

Ruby 3.4.0 được phát hành vào ngày 25 tháng 12 năm 2024. Phiên bản 3.4.0 cũng cung cấp các nâng cấp về mặt hiệu năng cho các phiên bản Ruby 3.3.x. Phiên bản 3.4.0 này tập trung vào việc bổ sung các tham số chiếu trong tham số khối. Ngoài ra phiên bản cũng lựa chọn Prism là trình phân tích cú pháp măc định và hỗ trợ thêm Happy Eyeballs phiên bản 2 vào thư viện socket, cải thiện YJIT, thêm Modular GC, ...

Các điểm nổi bật chính

Tham số it được giới thiệu:

Thay đổi lớn nhất trong phiên bản 3.4.0 của Ruby là việc xuất hiện tham số it trong block. Tham số này chính là tham chiếu mặc định cho tham số của một block, tương tự như _1, giúp code trong các block đơn giản trở nên dễ đọc hơn. Ví dụ: ["a", "b"].map { it.upcase } # -> ["A", "B"]

Prism là trình phân tích cú pháp mặc định

Chuyển trình phân tích cú pháp mặc định từ parse.y sang Prism.

Việc thay đổi trình phân tích cú pháp mặc định sang Prism là một thay đổi nội bộ trong ngôn ngữ Ruby nên người dùng sẽ thấy ít có sự thay đổi. Để sử dụng trình phân tích cú pháp thông thường, sử dụng đối số dòng lệnh --parser=parse.y.

Hỗ trợ Happy Eyeballs Version 2

Thư viện socket được cải tiến để giảm độ trễ kết nối mạng bằng cách thử đồng thời cả địa chỉ IPv6 và IPv4, sau đó chọn kết nối thành công đầu tiên.

Các cải tiến về mặt hiệu năng

YJIT (Just-In-Time Compiler)

YJIT tiếp tục được cải thiện, mang lại hiệu năng tốt hơn trên hầu hết các benchmark cho cả nền tàng x86-64 và arm64. Việc sử dụng bộ nhớ cũng được giảm thiểu và có thêm các tùy chọn dòng lệnh mới để quản lý.

Modular GC (Modular Garbage Collector)

Ruby 3.4.0 giớ thiệu một hệ thống garbage collector (GC) dạng mô-đun, cho phép tải các trình thu gom rác khác nhau một cách linh hoạt. Đáng chú ý là sự xuất hiên của một trình Garbage Collector thử nghiệm dựa trên MMTk (viết bằng Rust) hứa hẹn một hiệu năng cao.

JSON

Tốc độ của JSON.parse được cải thiện, nhanh hơn khoảng 1.5 lần so với phiên bản tiền nhiệm.

Các thay đổi quan trọng khác

Việc thay đổi các chuỗi (string) trong các file không có comment frozen_string_literal giờ đây sẽ đưa ra cảnh báo không dùng nữa (deprecation warning).

Việc phân tán từ khóa nil khi gọi phương thức hiện được hỗ trợ. nil được xử lý tương tự như {}, không truyền từ khóa và không gọi bất kỳ phương thức chuyển đổi nào.

Bảng các phiên bản Ruby

Cái tên Ruby

Nguồn gốc của cái tên "Ruby" là từ một phiên chat online giữa Matsumoto và Ishitsuka Keiji vào ngày 24 tháng 2 năm 1993, trước khi bất kỳ đoạn mã nào được viết cho ngôn ngữ này. Ban đầu, "Coral" và "Ruby" là hai cái tên được đề xuất. Matsumoto chọn tên sau trong email gửi đến Ishitsuka. Sau này Matz cũng bất ngờ khi phát hiện ra Pearl là viên đá quý tượng trưng cho những người sinh tháng 6, còn Ruby thì tượng trưng cho những người sinh tháng 7. Anh cho rằng cái tên Ruby như thế là phù hợp vì Ruby kế thừa và phát triển nhiều đặc tính từ Perl .

Quan điểm

Quan điểm chính trong việc thiết kế của Matz là nhằm giảm thiểu các công việc nhàm chán mà họ, các nhà lập trình, buộc phải làm; tiếp đến là nguyên tắc thiết kế giao diện người dùng (user interface) hiệu quả. Ông nhấn mạnh rằng việc thiết kế hệ thống cần phải tập trung vào con người, hơn là vào máy tính:

:Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.

Ngôn ngữ Ruby được thiết kế nhằm theo nguyên tắc ít gây ngạc nhiên nhất (principle of least surprise-POLS), nghĩa là ngôn ngữ hoạt động theo một cách trực quan hay ít nhất đó cũng là nhận xét mà các nhà lập trình đưa ra. Nguyên tắc này không xuất phát từ Matz và, nói chung, Ruby gần với suy nghĩ ít ngạc nhiên nhất của 'Matz' hơn.

Ngữ nghĩa

Ruby là một ngôn ngữ hướng đối tượng: mỗi giá trị đều là một đối tượng (object), bao gồm các kiểu dữ liệu mà đối với các ngôn ngữ khác, chúng là kiểu cơ bản (primitive) như integer. Mỗi hàm (function) là một phương thức (method). Tên biến (variables) chính là tham chiếu (references) đến các đối tượng, bản thân nó không phải là đối tượng. Ruby hỗ trợ kế thừa (inheritance) với dynamic dispatch, mixin và singleton method (thuộc về, và để định nghĩa cho, một instance đơn hơn là định nghĩa dành cho lớp). Mặc dù Ruby không hỗ trợ đa kế thừa, các lớp vẫn có thể được đưa vào các module dưới dạng các mixins. Cú pháp dạng thủ tục (procedural syntax) vẫn còn được hỗ trợ, có vẻ như là ngoài tầm vực của mọi đối tượng, nhưng thực sự là thuộc một thể hiện của class Object tên là 'main'. Vì class này là cha của mọi class khác, nó trở trên ẩn đối với mọi lớp và đối tượng.

Ruby được xem là một ngôn ngữ lập trình đa mẫu hình (multi-paradigm programming language): nó cho phép bạn lập trình dạng thủ tục (tạo ra các hàm/biến nằm ngoài phạm vi của các lớp và biến chúng thành một phần của đối tượng gốc, 'self' Object), với khả năng hướng đối tượng (mọi thứ đều là đối tượng) hay hàm (nó có các hàm không có tên (anonymous functions), closures, và continuations; mọi câu lệnh đều có giá trị trả về, và các hàm đều trả về kết quả ước lượng cuối cùng). Nó hỗ trợ mạnh cho tự định kiểu (type introspection), reflection và meta-programming.

Theo Ruby FAQ, "Nếu bạn thích Perl, bạn sẽ thích Ruby và sẽ thấy thoải mái với cú pháp của nó. Nếu bạn thích Smalltalk, bạn sẽ thích Ruby và sẽ thấy thoải mái với ngữ nghĩa của nó (semantics). Nếu bạn thích Python, bạn có thể hoặc không thể dừng lại bởi sự khác biệt lớn trong triết lý hiện thực giữa Python và Ruby/Perl."

Trình thông dịch

Ruby có hai bản thông dịch chính: bộ thông dịch Ruby ban đầu (viết tắt là MRI), bản được dùng phổ biến nhất, và JRuby, bộ thông dịch dựa trên ngôn ngữ Java. Bộ thông dịch Ruby đã được cài đặt trên nhiều nền tảng khác nhau, bao gồm Unix, Microsoft Windows, DOS, Mac OS X, OS/2, Amiga và một số nền tảng khác. Bản chính thức của Ruby có kèm theo "IRB", là bộ thông dịch dạng dòng lệnh trực tiếp (interactive command-line interpreter) giúp cho việc kiểm tra code nhanh chóng.

Quy ước bản quyền

Ruby được phân phối tự do theo đăng ký tự do và mã nguồn mở GPL và Ruby License [http://www.ruby-lang.org/en/LICENSE.txt] .

Tính năng

  • Hướng đối tượng
  • Xử lý ngoại lệ
  • Iterator và closures (dựa vào cách truyền một khối lệnh)
  • Native, biểu thức chính quy như Perl ở mức độ ngôn ngữ
  • Chồng toán tử (operator overloading)
  • Thu hồi rác tự động
  • Tính khả chuyển cao (portable)
  • Có thể chạy đa luồng (multi-threading) trên mọi platforms
  • Khả năng nạp động các DLL/thư viện chia sẻ trên hầu hết mọi platforms.
  • Tự kiểm tra (introspection), reflection và meta-programming
  • Rất nhiều thư viện chuẩn
  • Hỗ trợ dependency injection
  • Continuation và generator (xem ví dụ tại RubyGarden: [http://www.rubygarden.org/ruby?Continuations continuations] và [http://www.rubygarden.org/ruby?RubyFromPython generators] )
  • Dùng khối lệnh (code block)

Ruby hiện tại vẫn chưa hỗ trợ Unicode, dù chỉ mới hỗ trợ tạm thời cho UTF-8.

Những vấn đề mới

Mặc dù việc thiết kế Ruby tuân theo nguyên tắc ít gây ngạc nhiên nhất, nhưng một số tính năng khác với các ngôn ngữ khác như C hay Perl:

  • Các tên bắt đầu bằng ký tự hoa được xem là hằng, vì thế biến cục bộ nên bắt đầu bằng ký tự thường.
  • Việc đánh giá Boolean đối với các dữ liệu không phải bool rất chặt chẽ: 0, ""[] được xem là true: Trong C, biểu thức 0 ? 1: 0 được xem là 0. Trong Ruby, tuy nhiên, nó lại trả về 1, vì số 0 được xem là "một cái gì đó"; chỉ có nilfalse mới được xem là bằng false. Một hệ luận đối với quy luật này là theo qui ước, các phương thức của Ruby—ví dụ, biểu thức chính quy tìm kiếm — sẽ trả về các số, chuỗi, danh sách etc. nếu thành công, nhưng lại trả về nil nếu thất bại (ví dụ, không tìm thấy).
  • Để biểu diễn một số thực dấu chấm động, ta phải theo quy tắc dùng ký số zero (99.0) hay chuyển đổi tường minh (99.to_f). Việc dùng dấu chấm là không đủ (99.) vì các số vẫn có thể nhận cú pháp có phương thức.
  • Thiếu một kiểu dữ liệu ký tự ("char"). Điều này có thể gây ngạc nhiên khi duyệt qua chuỗi: "abc"[0] cho ra 97 (một số nguyên, biểu diễn mã ASCII của ký tự đầu tiên trong chuỗi); để lấy được "a" dùng "abc"[0,1] (chuỗi con có chiều dài 1) hay "abc"[0].chr.

Một danh sách các lỗi thường gặp ("gotchas") có thể tra trong cuốn sách của Hal Fulton The Ruby Way, trang 48–64. Tuy nhiên, vì danh sách trong cuốn sách là dựa trên phiên bản cũ của Ruby (version 1.6), một số mục đã được sửa đổi sau khi cuốn sách ấn hành. Ví dụ, retry bây giờ làm việc được với while, untilfor, cũng như với iterators.

Ví dụ

Lưu ý: Các ví dụ sử dụng chuỗi ký tự Unicode để chạy được cần đặt một biến môi trường là $KCODE="u". Hay là chạy #ruby với tùy chọn là -K u vẫn được. Xem thêm những hạn chế của phiên bản Ruby hiện tại với Unicode tại [http://ruphus.com/blog/2005/06/11/ruby-and-unicode/ ruby và unicode]

# Mọi thứ, kể cả tầm thường nhất, là một đối tượng. Vì thế những ví dụ dưới đều chạy được: -199.abs # => 199, abs: giá trị tuyệt đối "ruby is cool".length # => 12 "Rick".index("c") # => 2 "Nice Day Isn't It?".split(//).uniq.sort.join # => " '?DINaceinsty"

Input

print 'Làm ơn gõ tên >' name = gets.chomp puts "Chào #{name}."

Hội thoại

puts 'Cho tôi con số của bạn' number = gets.chomp puts number.to_i output_number = number.to_i + 1 puts output_number.to_s + ' là một con số lớn hơn.'

Mảng

Khởi tạo và sử dụng một mảng:

a = [1, 'chào', 3.14, 1, 2, [4, 5]]

a[2] # => 3.14 a.reverse # => [[4, 5], 2, 1, 3.14, 'chào', 1] a.flatten.uniq # => [1, 'chào', 3.14, 2, 4, 5]

Khởi tạo và xây dựng một mảng kết hợp (Ruby gọi là hash):

hash = Hash.new # Tương đương với hash = {} hash = {:water => 'wet',:fire => 'hot'} # Đoạn mã đầu trở nên dư thừa khi # đưa cho hash một đối tượng hash riêng biệt mới puts hash[:fire] # Xuất ra "hot"

hash.each_pair do |key, value| # Hoặc: hash.each do |key, value| puts "#{key} is #{value}" end

Trả về {:water => 'wet',:fire => 'hot'} và xuất ra:

water is wet

fire is hot

hash.delete:water # Hủy cặp giá trị:water => 'wet' và trả về "wet" hash.delete_if {|key, value| value == 'hot'} # Hủy cặp giá trị:fire => 'hot' và trả về {}

Cấu trúc rẽ nhánh

Mệnh đề If:

Tạo ra một số ngẫu nhiên và in ra số đó là chẵn hay lẻ.

if rand(100) % 2 == 0 puts "Là số chẵn" else puts "Là số lẻ" end

Block và iterator

2 cách để tạo một đoạn block: { puts 'Xin chào, thế giới!' } # lưu ý dấu ngoặc

hoặc:

do puts 'Xin chào, thế giới!' end

Một block có thể được truyền đến một hàm (method) như một tham số tùy chọn. Nhiều hàm được cài sẵn có tham số như vậy: File.open('file.txt', 'w') do |file| # 'w' biểu thị "chế độ ghi chép" file.puts 'Viết gì đó' end # Tập tin sẽ tự động đóng ở đây

File.readlines('file.txt').each do |line| puts line end

=> 'Viết gì đó'

Thông số đi qua block để trở thành closure (ví dụ): # Trong một biến thể hiện đối tượng (biểu thị bằng '@'), hãy lưu block này. def remember(&p) @block = p end

Dùng hàm trên, cho block đó một cái tên.

remember {|ten| puts "Xin chào, #{ten}!"}

Dùng closure (lưu ý rằng điều này không có áp dụng tự do cho các biến khác):!

@block.call("Tèo") # Xuất ra "Xin chào, Tèo!"

Tạo ra một hàm ẩn danh: proc {|arg| puts arg} Proc.new {|arg| puts arg} lambda {|arg| puts arg} ->(arg) {puts arg} # được giới thiệu ở Ruby 1.9

Trả về closure từ một hàm: def create_set_and_get(initial_value=0) # Lưu ý initial_value là 0 closure_value = initial_value [ Proc.new {|x| closure_value = x}, Proc.new { closure_value } ] end

setter, getter = create_set_and_get # Trả về hai giá trị setter.call(21) getter.call # => 21

Biến tham số cũng có thể được sử dụng như là một liên kết cho closure,

Vậy nên hàm trên có thể được viết lại như sau:

def create_set_and_get(closure_value=0) [ proc {|x| closure_value = x }, proc { closure_value } ] end

Trong một hàm, có thể thay đổi block vào lúc gọi hàm:

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

def bfs(e) q = [] e.mark yield e q.push e while not q.empty? u = q.shift u.edge_iterator do |v| if not v.marked? v.mark yield v q.push v end
end end bfs(e) {|v| puts v}

Duyệt lần lượt trên enumation và mảng bằng cách dùng block:

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

a = [1, 'chào', 3.14] a.each {|item| puts item} # Xuất ra toàn bộ phần tử (3..6).each {|num| puts num} # Xuất ra các số từ 3 đến 6

Block cũng có thể dùng với các hàm dựng sẵn:

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

File.open('taptin.txt', 'w+b') do |taptin| taptin.puts 'Viết linh tinh gì đó.' end # File được tự động đóng lại tại đây

Hay:

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

IO.readlines('taptin.txt') do |dòng|

Xử lý từng dòng ở đây.

end

Sử dụng enumeration và block để xuất ra lũy thừa 2 của các số từ 1 đến 10:

(1..10).collect {|x| x*x} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Lớp

Đoạn mã sau định nghĩa một lớp tên là Person. Bên cạnh phương thức khởi tạo initialize, là phương thức được gọi đến khi cần tạo đối tượng mới, lớp này còn có 2 phương thức khác: một là ghi đè lên toán tử so sánh <=> (vì thế Array#sort có thể sắp xếp theo tuổi) và hai là là ghi đè lên phương thức to_s (vì thế Kernel#puts có thể định dạng đầu ra của nó). Ở đây, attr_accessor là một ví dụ của meta-programming trong Ruby: nó định nghĩa các phương thức dạng gettersetter của biến thực thể, trong khi attr_reader các phương thức dạng 'getter'. Và, câu lệnh cuối cùng trong một phương thức là giá trị trả về của nó, điều này cho phép bỏ qua lệnh return.

class Person attr_reader:name,:age def initialize(name, age) @name, @age = name, age end def <=>(person) # Định nghĩa toán tử so sánh @age <=> person.age end def to_s "#{@name} (#{@age})" end end

group = [ Person.new("Bob", 33), Person.new("Chris", 16), Person.new("Ash", 23) ]

puts group.sort.reverse

Đoạn mã trên in ra ba tên theo tuổi giảm dần:

Bob (33) Ash (23) Chris (16)

Ngoại lệ

Một trường hợp ngoại lệ được đưa ra với lệnh raise: raise

Có thể thêm một thông báo tùy chọn: raise "Đây là một thông báo" Ngoại lệ cũng có thể xác định bởi các lập trình viên: raise ArgumentError, "Tranh luận bất hợp pháp!" Ngoài ra, một thực thể của lớp Ngoại lệ có thể tạo ra được với biến raise như sau: raise ArgumentError.new("Tham số không phù hợp!")

Một vài ví dụ

Có thể tìm thấy các code mẫu của Ruby dưới dạng các thuật toán tại:

  • Exponentiating by squaring
  • Linear search
  • Quicksort

Hệ điều hành

Ruby có thể chạy trên các hệ điều hành sau:

  • Các họ hàng của Unix
  • DOS
  • Microsoft Windows 95/98/XP/NT/2000/2003
  • Mac OS X
  • BeOS
  • Amiga
  • Acorn RISC OS
  • OS/2
  • Syllable

Có thể còn thêm một số platform khác.

Cú pháp

Cú pháp trong Ruby tương tự như Perl and Python. Lớp và phương thức được định nghĩa thông qua các từ khóa, ngoài ra khối (block) còn có thể được định nghĩa bằng cặp dấu ngoặc nhọn {}. Khác với Perl, biến số (variable) không nhất thiết phải bắt đầu bằng dấu $, và nếu sử dụng sẽ thay đổi phạm vi của biến số. Các kí tự xuống dòng (line breaks) cũng như dấu chấm phẩy ; phân chia các mệnh đề (statement) với nhau.

Một trong những điểm khác biệt lớn nhất so với Perl và Python là Ruby ẩn hoàn toàn các biến của thực thể (instance) và chỉ có thể truy cập và chỉnh sửa chúng thông qua các phương thức (như attr_writer, attr_reader).

Các ứng dụng

Ruby Application Archive đóng vai trò là một kho lưu trữ đủ loại ứng dụng và các thư viện viết bằng Ruby, với hàng ngàn mục. Mặc dù số lượng ứng dụng sẵn có không lớn bằng với cộng đồng của Perl hay Python, vẫn có đủ loại công cụ và tiện ích nhằm hỗ trợ cho việc phát triển ngôn ngữ trong tương lai.

👁️ 3 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**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
phải|nhỏ|402x402px|[[Mã nguồn của một chương trình máy tính đơn giản được viết bằng ngôn ngữ lập trình C. Khi được biên dịch và chạy, nó sẽ cho kết quả "Hello, world!".]] **Ngôn ngữ lập trình**
nhỏ|Cbmain Trong khoa học máy tính, một **ngôn ngữ lập trình bậc cao** (tiếng Anh: _high-level programming language_) là một ngôn ngữ lập trình có sự trừu tượng hóa mạnh mẽ khỏi các chi tiết
**D** là một ngôn ngữ lập trình hệ thống hướng đối tượng, dùng câu lệnh, đa mẫu hình do Walter Bright của Digital Mars tạo ra và phát hành năm 2001. Quá trình thiết kế
**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,
Trong phần mềm máy tính, **lập trình đa năng** (tiếng Anh: **general-purpose programming language**) là ngôn ngữ lập trình được thiết kế để sử dụng cho việc Các ngôn ngữ lập trình ban đầu được
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ữ
**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à

**Ngôn ngữ kịch bản** () là ngôn ngữ lập trình cho môi trường thời gian chạy đặc biệt tự động hóa thực thi các tác vụ; các tác vụ thay thế có thể
**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
**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
**Đặc tính** (tiếng Anh: _property_), trong một số ngôn ngữ lập trình hướng đối tượng, là một loại đặc biệt của thành viên lớp, trung gian chức năng giữa một trường (hay thành viên dữ
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 khoa học máy tính, **reflection** (có thể dịch là "phản tỉnh", "tự xét mình") là việc tiến trình có khả năng xem xét, nội quan, và sửa đổi kết cấu cùng với hành trạng
**Thư viện chuẩn**, tiếng Anh: **standard library**, trong lập trình máy tính là thư viện được cung cấp sẵn thông qua các hiện thực của một ngôn ngữ lập trình. Các thư viện này được
nhỏ|[[Môi trường phát triển tích hợp (IDE) của Microsoft Visual Basic.]] **Visual Basic** (viết tắt **VB**) là một ngôn ngữ lập trình hướng sự kiện (_event-driven_) và môi trường phát triển tích hợp (IDE) kết
nhỏ| Một ví dụ cho thấy một hệ thống [[điện toán lưới kết nối nhiều máy tính cá nhân qua Internet bằng cách sử dụng giao tiếp mạng giữa các quá trình ]] Trong khoa
**SciTE** đang mở file mã nguồn viết bằng [[ngôn ngữ lập trình|ngôn ngữ Lua. ]] **SciTE** (_Scintilla-based Text Editor_ - trình soạn thảo văn bản dựa trên Scintilla) là trình soạn thảo văn bản tự
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
Quá trình phân tích từ vựng trong các giai đoạn xử lý. Trong ngành khoa học máy tính, **phân tích từ vựng** (Tiếng Anh: **lexical analysis**, còn được gọi là _scanning_ hoặc _lexing_) là một
**NetBeans** là một môi trường phát triển tích hợp (IDE) cho Java. NetBeans cho phép các ứng dụng được phát triển từ một tập hợp các thành phần phần mềm được gọi là _modules_. NetBeans
nhỏ|Ngôn ngữ lập trình TK **Tk** là bộ công cụ gồm các thành phần giao diện người dùng đồ họa (_GUI widget_). Sử dụng Tk với một ngôn ngữ lập trình, ta có thể viết
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
Trong lập trình hướng đối tượng và hàm, **đối tượng bất biến** (tiếng Anh: _immutable object_ hay _unchangeable object_) là một đối tượng mà trạng thái của nó không thể bị thay đổi sau khi
**Coraline Ada Ehmke** là nhà phát triển phần mềm và người ủng hộ nguồn mở có trụ sở tại Chicago, Illinois. Ehmke bắt đầu sự nghiệp với tư cách là một nhà phát triển web
**Heroku** là một nền tảng đám mây như một dịch vụ (PaaS) hỗ trợ một vài ngôn ngữ lập trình. Là một trong những nền tảng đám mây đầu tiên, Heroku đã được phát triển
**Vim** (; viết tắt của **Vi IMproved**) là một trình soạn thảo văn bản miễn phí và mã nguồn mở. Đó là một bản sao cải tiến của vi của Bill Joy cho Unix. Nó
**CD Baby, Inc.** là cửa hàng âm nhạc trực tuyến chuyên bán các đĩa compact, bản ghi vinyl và các bản nhạc tải về từ các nhạc sĩ tự do. Công ty cũng là nơi
**_Minecraft_** là trò chơi điện tử sandbox được phát triển và phát hành bởi Mojang Studio. Trò chơi được tạo bởi Markus "Notch" Persson bằng ngôn ngữ lập trình Java. Sau khi thử nghiệm một
Đây là danh sách **Phần mềm mã nguồn mở**: là phần mềm máy tính được cấp phép giấy phép mã nguồn mở. Bài viết này không có tham vọng liệt kê tất cả những phần
**Symbian** là một hệ điều hành đã ngừng phát triển được viết và sử dụng phổ biến cho hầu như điện thoại di động của những năm 90 và đầu thế kỉ 21. Symbian ban
**Microsoft Visual Studio** là một môi trường phát triển tích hợp (IDE) từ Microsoft. Microsoft Visual Studio còn được gọi là "Trình soạn thảo mã nhiều người sử dụng nhất thế giới ", được dùng
**JetBrains s.r.o.** (trước đây **IntelliJ Software s.r.o.**) là một công ty phát triển phần mềm Czech với các công cụ hướng đến các lập trình viên và quản lý dự án. , công ty có
**MediaWiki** là phần mềm wiki tự do nguồn mở được phát hành dưới Giấy phép Công cộng GNU (GPL). Nó được sử dụng trên Wikipedia và gần như tất cả các trang web Wikimedia khác,
nhỏ| Đoạn mã từ một mô-đun [[hạt nhân Linux, sử dụng quy tắc con rắn cho tên biến. ]] **Quy tắc con rắn** (, còn được viết cách điệu là **snake_case**) là một cách viết
**Cocoa** là giao diện lập trình ứng dụng hướng đối tượng gốc (API) của Apple cho hệ điều hành máy tính để bàn macOS. Cocoa bao gồm các khuôn khổ Foundation Kit, Application Kit và
Một số ngôn ngữ lập trình cung cấp **kiểu dữ liệu phức** để lưu và thực hiện các phép toán số học số phức dưới dạng một kiểu dữ liệu có sẵn (cơ bản). Trong
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
**ImageMagick** là bộ phần mềm (có thể gọi là thư viện) xử lý các file ảnh. ImageMagick là phần mềm tự do với một giấy phép riêng, tương đương với GPL. Tên gọi _ImageMagick_ ghép
Một **biến chưa khai báo** (tiếng Anh: **undefined variable**) trong mã nguồn của một chương trình máy tính là một biến được sử dụng trong mã nguồn nhưng chưa được chương trình khai báo trước
phải|nhỏ| Các phép toán đại số trong lời giải cho [[phương trình bậc hai. Dấu khai căn, √ biểu thị một căn bậc hai, tương đương với lũy thừa với số mũ ½. Dấu ±
**Apache Kafka** là một nền tảng theo kiến trúc phân tán cho phép lưu trữ sự kiện và xử lý dữ liệu luồng (streaming) mã nguồn mở được phát triển bởi Apache Software Foundation được
**IntelliJ IDEA** là một IDE Java để phát triển các phần mềm máy tính. Ứng dụng được phát triển bởi JetBrains (trước đây gọi là IntelliJ), với giấy phép Apache 2 cho phiên bản cộng
**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
**Raspberry Pi** là một dòng máy tính bo mạch đơn (hay còn gọi là máy tính nhúng) có kích thước chỉ bẳng một thẻ tín dụng được phát triển tại Anh bởi Raspberry Pi Foundation
Trang đầu của website [[Wikipedia tiếng Anh, xem bởi trình duyệt Mozilla Firefox trên Microsoft Windows.]] **Website** (còn được viết là **web site**) là tập hợp các trang web và nội dung liên quan được
**Lucene** là phần mềm mã nguồn mở, dùng để phân tích, đánh chỉ mục và tìm kiếm thông tin với hiệu suất cao bằng Java. Lucene được phát triển đầu tiên bởi Doug Cutting được
**Giấy phép MIT** là một loại giấy phép sử dụng cho các phần mềm mã nguồn mở được phát triển dựa trên một loại giấy phép có nguồn gốc tại Viện Công nghệ Massachusetts (MIT).
Một **monkey patch** (dịch: đắp vá kiểu khỉ) là một cách để một chương trình mở rộng hoặc sửa đổi phần mềm hệ thống một cách cục bộ (chỉ ảnh hưởng đến instance đang chạy
**Định dạng dấu phẩy động độ chính xác đơn** (đôi khi còn gọi là **FP32** hoặc **float32**) là một định dạng số máy tính, thường chiếm 32 bit trong bộ nhớ máy tính; nó có