Lua và hầu hết các ngôn ngữ kịch bản cho vấn đề đó, không hỗ trợ hình thức tổng quát nhất của "trao đổi nóng" khi bạn xác định nó. Tức là, bạn không thể bảo đảm thay đổi tệp trên đĩa và có bất kỳ thay đổi nào trong đó tự lan truyền vào chương trình thực thi.
Tuy nhiên, Lua và hầu hết các ngôn ngữ kịch bản cho vấn đề đó, hoàn toàn có khả năng được kiểm soát các hình thức hoán đổi nóng. Các chức năng toàn cục là các chức năng toàn cầu. Mô-đun chỉ đơn giản là tải các chức năng toàn cầu (nếu bạn sử dụng chúng theo cách đó). Vì vậy, nếu một mô-đun tải các chức năng toàn cầu, bạn có thể tải lại mô-đun một lần nữa nếu nó được thay đổi, và các tham chiếu hàm toàn cục này sẽ thay đổi thành các hàm mới được nạp.
Tuy nhiên, Ngôn ngữ và hầu hết các ngôn ngữ kịch bản cho vấn đề đó, không đảm bảo về điều này. Tất cả những gì đang xảy ra là sự thay đổi của dữ liệu trạng thái toàn cầu. Nếu ai đó đã sao chép một hàm cũ vào một biến cục bộ, thì họ vẫn có thể truy cập nó. Nếu mô-đun của bạn sử dụng dữ liệu trạng thái cục bộ, phiên bản mới của mô-đun không thể truy cập trạng thái của mô-đun cũ. Nếu một mô-đun tạo ra một loại đối tượng nào đó có các hàm thành viên, trừ khi các thành viên đó được lấy từ các hình cầu, các đối tượng này sẽ luôn luôn tham chiếu đến các hàm cũ, chứ không phải các hàm mới. Và kể từ đó trở đi.
Ngoài ra, Lua không phải là chủ đề an toàn; bạn không thể chỉ làm gián đoạn một số lua_State
tại một số điểm và thử tải lại mô-đun. Vì vậy, bạn sẽ phải thiết lập một số điểm cụ thể trong thời gian cho nó để kiểm tra các công cụ và tải lại các tập tin thay đổi.
Vì vậy, bạn có thể làm điều đó, nhưng nó không được "hỗ trợ" theo nghĩa là nó chỉ có thể xảy ra. Bạn phải làm việc cho nó, và bạn phải cẩn thận về cách bạn viết những thứ và những gì bạn đưa vào các chức năng cục bộ so với toàn cầu.
Nguồn
2012-02-20 23:07:53
Bạn có ý nghĩa gì với "mã hoán đổi nóng"? –
http://en.wikipedia.org/wiki/Hot_swapping#Software – DynamiteReed
Tôi đã tạo mẫu thử nghiệm này https://github.com/meric/l2l/tree/master/samples/sample09 debugger.lua cho phép bạn hotswap mã và duy trì trạng thái. Đó là một nguyên mẫu và có thể sẽ có lỗi hoặc trường hợp khi nó không hoạt động, nhưng nó thể hiện khái niệm. Nó sẽ giải quyết một số vấn đề được minh họa bởi câu trả lời của Nicol. – Eric