Tham dự Tech Lounge

Tham dự Tech Lounge


Bitcode, vũ khí giúp Apple thoải mái triển khai kiến trúc CPU mới mà không lo vấn đề tương thích app

Duy Luân
17/6/2015 13:30Phản hồi: 94
94 bình luận
Chia sẻ

Xu hướng

mấy bạn hackintosh-er sắp chế ra "cái gì đấy" để đối phó với bitcode rồi 😁
namsuper
ĐẠI BÀNG
9 năm
bitcode sẽ cần thời gian để phổ biến và được tích hợp vào bên trong nhiều app
tethien
CAO CẤP
9 năm
Thứ nhất ở đây chả có chú cháu gì ở đây sất. Đừng giở giọng trịch thượng như thế!

Thứ 2 là ART không phải là giả lập JVM mà nó là bộ biên dịch. Nó biên dịch chương trình từ mã bytecode sang mã máy.

Đại khái thì ART và bitcode là tương đương. Khác nhau ở thời điểm dịch chương trình ra mã máy thôi. Bitcode của Appstote dịch chương trình ra mã máy trước khi chương trình đưa lên Appstote để tải về. ART biên dịch chương trình ra mã máy sau khi chương trình được tải về từ Playstore.

- Dalvik: mã nguồn -->biên dịch sang mã bytecode--> PlayStore (mã bytecode) --->Cài đặt : điện thoại (mã bytecode)---> Chạy : mỗi lần chạy thì Dalvik dịch từng đoạn chương trình ra mã máy rồi chạy.
- ART : mã nguồn --biên dịch sang mã bytecode ---> Play Store (mã bytecode) ---> Cài đặt : ART dịch mã bytecode ra mã máy ----> chạy.

- Ứng dụng IOS hiện tại : mã nguồn -->biên dịch sang mã máy---> AppStore (mã máy) ---> Cài đặt : iPhone/iPad (mã máy) ---> chạy.
- Bitcode : mã nguồn --biên dịch sang mã bytecode --->Đưa lên AppStore -->Bitcode dịch mã bytecode sang mã máy---> Cài đặt : iPhone/iPad (mã máy) ---> chạy.

ART là cái đã được đưa vào sử dụng còn bitcode là cái chưa có nên chưa thể khằng định kiểu "Còn độ tối ưu phần cứng thì còn khuya mới đú nổi với bitcode"

Bitcode cũng có lợi thế là được chạy trên Appstote mà Appstote là cả một hệ thống server nên tài nguyên dư dả thì có khả năng mã kết quả sẽ được tối ưu tốt hơn so với mã do ART sinh ra khi ART phải chạy ngay trên điện thoại tài nguyên đương nhiên hạn chế hơn hẳn.

Chưa chắc nhé. App/Game trên IOS luôn được dịch sẵn và chạy bằng mã máy từ lâu nay. Giờ chỉ tăng thêm 01 bước trung gian chứ có bớt được bước nào đâu mà đòi mượt hơn ?
Dr. Ho
ĐẠI BÀNG
9 năm
@vitconbonmat C++ Runtime là do tùy chọn nhé. Khi compile trên Visual Studio có hai chế độ để chọn một compile k có xài runtime hay là có. Dùng runtime có lợi thế là có thể share memory giữa các module với nhau.
tethien
CAO CẤP
9 năm
@Dr. Ho Tùy chọn hay không tùy chọn thì runtime cũng không đồng nghĩa với máy ảo hay thông dịch.
Chuyện anh cu căn cứ vào chữ runtime trong cái tên ART để phán nó không phải là biên dịch là không có cơ sở.
vitconbonmat
ĐẠI BÀNG
9 năm
@Dr. Ho Haiz. Cái bạn nói là runtime library. Còn runtime thì ngôn ngữ nào cũng có cả, chỉ có thiết kế là khác nhau thôi.
Dr. Ho
ĐẠI BÀNG
9 năm
@vitconbonmat Không nhé runtime library là tùy chọn. Mình có quyền compile code native, truy xuất API trực tiếp. Nói ngôn ngữ nào cũng có vậy chắc có Assembly Runtime Library nữa sao?
x_chien
TÍCH CỰC
9 năm
mặc dù ít xài đồ apple nhưng cái này thấy rất hay, làm cho intel cảm thấy bị kề dao vô cổ thì nó mới có cpu ngon được.
Dr. Ho
ĐẠI BÀNG
9 năm
---> Cái này là anh kêu chú đi nghiên cứu nhá. Google đâu có bị kém kiến thức như chú đâu mà tự dưng gắng cái từ RUNTIME vô.

Chú em non kém quá, bị bắt bí rồi. Từ đầu chú em đánh đồng hai công nghệ ART & Bitcode, bảo Android có từ đời nào, ifan tung hê các thứ. Hoá ra quá thiếu kiến thức công nghệ không phân biệt nổi Runtime với Compiler.
tethien
CAO CẤP
9 năm
@Dr. Ho Ha ha.

Vậy hóa ra bạn chỉ căn cứ vô mỗi chữ Runtime đó để kết luận ART không biên dịch?
Vậy cái mã kết quả do ART sinh ra khi cài đặt phần mềm là mã gì?
Bạn cần nói rõ đó là mã gì? Không nói được mã gì thì nhận thua và về đi học lại đi.

Còn tôi từ đầu đến giờ chưa bao giờ nhắc đến chữ "ifan" nhé. Ai đó trích dẫn tôi để nói là chuyện của họ, đừng gán ghép hết cho tôi.
Nhà tôi có xài iPhone và iPad. Đang định mua thêm 01 cái iPad nữa đây.
Không là ifan nhưng tôi cũng không anti. Đồ gì tốt thì tôi xài thôi. Không thần tượng với anti ai hết.
Dr. Ho
ĐẠI BÀNG
9 năm
Thế từ đầu tới giờ chú em thấy comment nào của anh nói ART không biên dịch. Mọi máy ảo JVM đều phải biên dịch mã bytecode để execute hết. Anh chỉ chém chú cái tội dám phán công nghệ bitcode tương đương với ART. Trong khi bitcode hỗ trợ biên dịch tất cả ngôn ngữ phía trên Assembly ra mã native. ART có làm được vậy k?
tethien
CAO CẤP
9 năm
Vậy câu này của anh cu nên hiểu thế nào ?

Hay trí nhớ quá kém ? Nói trước quên sau ?

Chuyện bitcode biên dịch cái gì ra mã máy khi nào nó ra rồi tính. Nhưng tôi không tin nó biên dịch mọi thứ. Vì nếu làm như thế mọi lập trình viên phải đưa mã nguồn cho Apple! Chắc không nhiều lập trình viên làm điều này.
Do đó sẽ phải biên dịch ra 01 mã trung gian (bytecode). Bitcode sẽ dịch mã bytecode đó sang mã máy.
Dr. Ho
ĐẠI BÀNG
9 năm
@tethien Compile code cho ART là ứng dụng dex2oat nhé. Nếu ART chỉ compile code ra native thì nó là Compiler rồi. Không ai gọi nó là runtime cả. Runtime engine phải đảm nhiệm phần quản lý bộ nhớ (garbage collector), quản lý thông tin của class.

Thế trả lời anh thử, ứng dụng compile từ bitcode có cần một cái runtime nào để làm garbage collector, truy xuất thông tin của class không?
theanhnt
ĐẠI BÀNG
9 năm
Tranh luận ghê quá nhỉ 😁. Mình nghĩ bitcode này giống như một dạng library thì hợp lý hơn là một dạng compiler. Hiểu nôm na thì nó tựa như một quyển từ điển như kiểu tiếng quốc tế chẳng hạn, dev sẽ viết một ứng dụng dựa trên nó như kiểu viết ra một văn bản, rồi Apple sẽ dịch nó ra thứ tiếng khác như tiếng Anh, tiếng Việt... Còn ART hay Dalvik thì tương tự như JVM trên máy tính thôi mà. Vì tham vọng của google độc lập nền tảng, cũng như việc có quá nhiều cấu hình cho thiết bị android mới phải sinh ra thằng máy ảo này chạy song song cùng hệ điều hành. Như bài viết có nói bitcode chỉ là một dạng khung, vậy thì nó giống như các thành phần thôi ( layout, component...). Hiểu nôm na vậy, chưa dùng bao giờ nên k biết cụ thể sẽ như nào, sai các bác đừng gạch em :p
vitconbonmat
ĐẠI BÀNG
9 năm
xin lỗi mình nói vậy hơi không chính xác lắm. Nhưng thực tế là objective c/swift compile ra chạy nhờ dịch vụ của runtime trên hệ điều hành cung cấp. Bạn gọi code của ios là native, nhưng đem nó ra khỏi objectiveC runtime/swift runtime, nó đâu có chạy được.
Ngay cả những hàm căn bản nhất, nó cũng dùng cpu scheduler do hệ điều hành cung cấp, chứ nó đâu có tự quản lí cả cái cpu circle.
Dr. Ho
ĐẠI BÀNG
9 năm
@vitconbonmat Cái là chú em nói là API chứ không phải runtime library nhé. Đại khái là một lớp đệm giữa API và ứng dụng. Native là truy xuất thẳng xuống API. App iOS truy xuất thẳng xuống API nhé.
vitconbonmat
ĐẠI BÀNG
9 năm
@Dr. Ho Objective C cần có runtime để chạy.
The Objective-C language defers as many decisions as it can from compile time and link time to runtime. Whenever possible, it does things dynamically. This means that the language requires not just a compiler, but also a runtime system to execute the compiled code. The runtime system acts as a kind of operating system for the Objective-C language; it’s what makes the language work.
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html

Quay lại chủ đề chính thì bài viết nói thằng bitcode này là ngôn ngữ cấp thấp, ngang ngang với assembly. apple sẽ dùng optimizer để dịch cái bitcode này ra assembly của các cpu khác nhau.
Giống art quá đi chứ. Khác là làm chỗ nào thôi.

Mem tinh tế toàn già dữ vậy sao.
blackyaa
TÍCH CỰC
9 năm
@vitconbonmat Hay, nói có sách, mách có chứng. Mình đang bàn về khoa học máy tính nên phải có rõ ràng định nghĩa. Mình code cũng 10 năm rồi, rất khâm phục bạn, còn trẻ mà có background tốt vậy. Phải đăng nhập like bạn.
tethien
CAO CẤP
9 năm
Vậy chứ dex2oat không phải là thành phần của ART sao ?

Không ai phản đối ART là một Runtime engine hết. Tôi chỉ phản đối chuyện anh cu căn cứ vào chữ Runtime để rồi nói rằng ART không biên dịch chương trình ra mã máy (mà thông dịch lúc chạy).
Còn chuyện dọn rác (garbage collector) thì bộ biên dịch ngôn ngữ nào chả có ? Hệ điều hành cũng có. iOS không có garbage collector để dọn bộ nhớ chắc ?

Lúc đầu anh cu phán thế này:

Nhắc lại để anh cu con nhớ vì hình như anh cu con mắc bệnh hay quên. Nói ra rồi không nhớ.
vitconbonmat
ĐẠI BÀNG
9 năm
@tethien Objective C runtime ko có garbage collector. Apple bảo là để chạy cho lẹ.
Dr. Ho
ĐẠI BÀNG
9 năm
@tethien Này cái này là chú sai rồi nhé. Bộ nhớ trên iOS không phải quản lý theo kiểu garbage collector trên JVM, khi chú khởi tạo một object trên java nó sẽ tồn tại cho tới khi nào System.gc() được gọi. Còn Objective-c sẽ quản lý memory theo reference, cơ chế lập trình này gọi là smart pointer nhé. Một object sẽ hủy khi reference bằng 0. Còn nếu code được biên dịch bằng C/C++ thì ứng dụng tự hủy vùng nhớ thông qua lệnh delete + free. Chú em mù mờ khái niệm runtime & API. Runtime engine sẽ quản lý tới mức object. Còn OS chỉ quản lý theo process, nó cấp vùng nhớ cho process, rồi nó tự quản lý truy xuất miễn sao không phạm tới vùng hệ thống hoặc ứng dụng khác. Không phải khơi khơi người ta đặt ra khái niệm runtime engine.
somee
ĐẠI BÀNG
7 năm
Hay, mặc dù mình làm bên lĩnh vực IT nhưng đọc mở mang được rất nhiều

Xu hướng

Bài mới









  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2024 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: Số 70 Bà Huyện Thanh Quan, P. Võ Thị Sáu, Quận 3, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019