2009-05-03 28 views
10

Tôi đã tự hỏi tại sao hệ điều hành điện thoại thông minh/thiết bị di động không được viết để cho phép ngôn ngữ động là ngôn ngữ được lựa chọn? iPhone sử dụng Objective-C, Google Android sử dụng Java, Windows Mobile sử dụng bất kỳ cách nào của ngôn ngữ .NET.Python/Ruby là hệ điều hành di động

Điều gì sẽ là lý do đằng sau một hệ điều hành di động được viết bằng Python, Ruby hoặc bất kỳ ngôn ngữ động nào khác? Tôi hiểu rằng ở mức độ thấp, họ sẽ không cắt nó nhưng C hoặc C++ sẽ tốt cho điều đó và Python, ví dụ, có thể là lớp trên cùng để tương tác với nó. Ý tôi là, có Jython hoặc CPython.

Tôi đã tự hỏi tại sao chúng tôi không thấy hỗ trợ ngôn ngữ năng động hơn trong hệ điều hành di động ngày nay.

Trả lời

14

Nói chung, đó là tất cả những điều này. Bộ nhớ, tốc độ, và có lẽ quan trọng nhất là lập trình viên quen thuộc. Apple có một khoản đầu tư khổng lồ vào Objective C, Java được mọi người biết đến, và C# cũng rất phổ biến. Nếu bạn đang cố gắng thu hút sự tham gia của các lập trình viên hàng loạt, bạn nên bắt đầu với một thứ gì đó phổ biến, ngay cả khi nó khá nhàm chán.

Thực sự không có bất kỳ yêu cầu kỹ thuật nào ngăn chặn nó. Chúng ta có thể viết một ngăn xếp Ruby toàn bộ và để cho lập trình viên tái triển khai các bit chậm trong C và nó sẽ không phải là một vấn đề lớn. Nó sẽ là một khoản đầu tư cho bất kỳ công ty nào đang tạo ra hệ điều hành di động, và vào cuối ngày tôi không chắc họ có được nhiều lợi nhuận từ việc này hay không.

Cuối cùng, đó là khởi đầu của thiết bị di động. Trong 5 năm tới, tôi sẽ không ngạc nhiên khi thấy một ngăn xếp di động rộng hơn nhiều.

0

Tôi nghi ngờ lý do cơ bản là sự kết hợp giữa bảo mật và độ tin cậy. Bạn không muốn ai đó có thể dễ dàng hack điện thoại và bạn muốn kiểm soát những gì đang được cài đặt.

+0

không liên quan - bạn có thể xóa thư viện chuẩn python và tạo một tập hợp con an toàn và đáng tin cậy. – Francis

+2

Ồ, đừng ngớ ngẩn. Hủy bỏ các thư viện chuẩn python và bạn * vẫn * có thể cài đặt không kiểm soát được, mã chưa được kiểm tra. –

+0

vậy thì sao? nếu bạn không có bất kỳ thư viện nào để chạm vào hạt nhân, làm thế nào bạn có thể "hack điện thoại"? Nếu bạn muốn mọi mã được kiểm tra và kiểm soát, nó được quản lý bởi các chữ ký số, như Apple đã làm, vì vậy nó vẫn không liên quan đến chính ngôn ngữ đó. – Francis

1

iPhone bị bẻ khóa có thể đã cài đặt python và tôi thực sự sử dụng python rất thường xuyên trên máy của tôi.

1

Tôi nghĩ rằng các mối quan tâm về hiệu suất có thể là một phần của, nhưng không phải tất cả, lý do. Thiết bị di động không có phần cứng rất mạnh để hoạt động.

Mặc dù vậy, tôi không chắc chắn về điều này.

0

Bộ nhớ cũng là một yếu tố quan trọng. Thật dễ dàng để ăn bộ nhớ bằng Python, thật không may.

1

Một trong những vấn đề cấp bách nhất là thu gom rác thải. Việc thu gom rác thường xuyên giới thiệu những tạm dừng không thể đoán trước trong các máy nhúng mà đôi khi cần có hiệu suất thời gian thực.

Đây là lý do tại sao có một phiên bản Java Micro có bộ thu gom rác khác nhau giúp giảm tạm dừng để đổi lấy chương trình chậm hơn.

Bộ đếm rác đếm rác (giống như trong CPython) cũng ít bị tạm dừng nhưng có thể phát nổ khi dữ liệu có nhiều con trỏ lồng nhau (như danh sách được liên kết) bị xóa.

+0

Nhưng iPhone làm cho bạn quản lý "rác" của riêng bạn bằng cách sử dụng số lượng giữ lại. Bạn phải thực sự phát hành các đối tượng của bạn hoặc bạn sẽ gây ra rò rỉ của riêng bạn. – Tacoman667

+0

@Tacoman, được gọi là tính tham chiếu. Bạn đang làm nó theo cách thủ công, nhưng nó được phân loại là giống nhau. – Unknown

0

Có nhiều lý do. Trong đó:

  • lý do kinh doanh, chẳng hạn như phần mềm chiến lược lock-in,
  • hiệu quả: các ngôn ngữ động thường được coi là chậm (và trong một số trường hợp thực sự là chậm hơn, hoặc ít nhất là cung cấp một giới hạn cho lượng tối ưu bạn có thể làm.Trên thiết bị di động, việc tối ưu hóa mã là cần thiết thường xuyên hơn trên PC) và có xu hướng sử dụng nhiều bộ nhớ hơn, đây là vấn đề quan trọng trên thiết bị di động có bộ nhớ hạn chế và bộ nhớ cache nhỏ,
  • giữ sự phát triển đơn giản: nền tảng hỗ trợ nói Python và Ruby và Java ra khỏi hộp:
    • nghĩa ba lần công việc viết tài liệu hướng dẫn và cung cấp hỗ trợ,
    • chia nỗ lực phát triển thành ba; nó mất nhiều thời gian cho các tài liệu hữu ích để xuất hiện trên các trang web và có những nhà phát triển ít người sử dụng ngôn ngữ giống như bạn trên nền tảng của bạn,
    • đòi hỏi lưu trữ hơn trên thiết bị để hỗ trợ tất cả các thứ tiếng,
  • quản lý cần để được thuyết phục. Tôi luôn cảm thấy rằng những giá trị của Java dễ dàng được giải thích cho một đối tượng phi kỹ thuật. Net và Obj-C cũng có vẻ là một sự lựa chọn rất tự nhiên cho một nền tảng của Microsoft và Apple, tương ứng.
2

Trái ngược với tiền đề của câu hỏi: Một trong những thiết bị di động chính đầu tiên là Newton, được thiết kế để sử dụng ngôn ngữ động chuyên dụng được gọi là NewtonScript để phát triển ứng dụng. Môi trường và ngôn ngữ phát triển Newton làm cho nó đặc biệt dễ dàng cho các ứng dụng làm việc cùng nhau và chia sẻ thông tin - gần như ngược lại với trải nghiệm iPhone hiện tại. Mặc dù nhiều nhà phát triển viết các ứng dụng Newton mới từ đầu rất thích nó - NewtonScript "cảm thấy" rất giống Ruby - Newton có một số vấn đề về hiệu suất và chuyển mã hiện tại không dễ dàng, ngay cả sau khi Apple thêm khả năng kết hợp mã C vào một chương trình NewtonScript. Ngoài ra, rất khó để bảo vệ tài sản trí tuệ của một người trên Newton - các nhà phát triển khác có thể trong hầu hết các trường hợp nhìn vào bên trong mã của bạn và thậm chí ghi đè các bit của nó theo một ý thích - một cơn ác mộng an ninh.

Newton là một thất bại thương mại.

Palm đã lấy một vài ý tưởng hay nhất của Apple - và cải thiện chúng - nhưng hỗ trợ ngôn ngữ năng động như một phần của sự đơn giản hóa tổng thể mà cuối cùng dẫn đến PalmOS chiếm đa số thị phần di động (trong nhiều năm) các nhà phát triển phần mềm di động đổ xô đến nền tảng mới.

Có nhiều lý do lý do tại sao Newton là một thất bại, nhưng một số có thể đổ lỗi cho NewtonScript. Apple đang "suy nghĩ khác" với iPhone, và một trong những quyết định ban đầu mà họ dường như đã làm là tận dụng tối đa cơ sở phát triển cốt lõi hiện tại của họ và giúp mọi người dễ dàng phát triển trong Mục tiêu C. Nếu iPhone chính thức hỗ trợ cho ngôn ngữ động, đó sẽ là một bổ sung sau này sau khi xem xét cẩn thận và lâu dài về cách tốt nhất để làm điều đó trong khi vẫn cung cấp một nền tảng an toàn và hiệu suất cao.

Và 5 phút sau khi thực hiện, những người khác sẽ theo dõi. :-)

+1

NewtonScript yêu cầu nhiều tài nguyên (CPU và bộ nhớ) cho một thiết bị cầm tay tại thời điểm đó; hiệu suất là hoàn toàn chấp nhận được, mặc dù. Cuối cùng, MessagePad 2100 đạt gần 1000 USD, StrongARM 100MHz với RAM 4MB trong khi Palm Pilot rẻ hơn nhiều, chạy trong RAM <1MB với bộ xử lý 68K dẫn xuất chậm. Trong số các ngôn ngữ chính hiện nay, NewtonScript liên quan nhiều nhất đến JavaScript - chúng đều dựa trên nguyên mẫu. Các nền tảng nguy hiểm/Android có lẽ là gần nhất với lý tưởng này ngày hôm nay, vì cả hai máy ảo Java của họ thực hiện một bước tiền xử lý trên máy chủ và tương đối đơn giản. –

+2

Trên thực tế, NewtonScript là ngôn ngữ * thứ hai * cho dự án Newton của Apple: Đầu tiên thậm chí còn năng động hơn, Dylan [có thể là một cách chơi chữ năng động], được triển khai trong Macintosh Common Lisp. Dự án đó đã bị giết chết, thay thế bằng một thứ có hiệu suất không thể chấp nhận được. (Tôi yêu Newton như một lập trình viên, nhưng thậm chí tôi phải thừa nhận rằng đối với người dùng, nó quá chậm.) Thời gian sẽ cho biết liệu các đối thủ cạnh tranh của Apple có lặp lại sai lầm của Apple hay không. –

+1

Một trong những tính năng của NewtonScript, thừa kế vi phân, cho phép ngôn ngữ lập trình hướng đối tượng rất năng động này (cũng có thể được biên dịch thành mã byte) để hoạt động với các yêu cầu bộ nhớ rất _low_, xem xét. Nó có nghĩa là các đối tượng con/liên quan chỉ cần thiết để lưu trữ dữ liệu khác với các đối tượng cha/có liên quan. Tất nhiên, việc tìm kiếm để thực hiện điều này dẫn đến một số vấn đề hiệu suất. [io] (http://iolanguage.com/), một người anh em họ NewtonScript, cũng thực hiện thừa kế vi phân. – morgant

0

webOS - hệ điều hành mới từ Palm, sẽ ra mắt trên ứng dụng Pre - bạn có viết ứng dụng dựa trên thời gian chạy webkit trong JavaScript không. Thời gian sẽ cho biết nó thành công như thế nào, nhưng tôi nghi ngờ nó sẽ không phải là người đầu tiên đi xuống con đường này. Khi thiết bị di động trở nên mạnh mẽ hơn, bạn sẽ thấy ngôn ngữ động trở nên phổ biến hơn.

2

Tình huống cho nhiều ngôn ngữ trên thiết bị di động tốt hơn câu hỏi ngụ ý. Java (trong hóa thân J2ME của nó) có sẵn những ngày này ngay cả trong điện thoại khá rẻ. Symbian S60 chính thức hỗ trợ Python, và Javascript for widgets, và có một cổng Ruby mặc dù nó vẫn còn khá thử nghiệm. Charles Nutter đã thử nghiệm với getting JRuby running on Android.rhomobile tuyên bố cho phép phát triển ứng dụng trong Ruby, sau đó sẽ chạy trên tất cả các hệ điều hành điện thoại thông minh chính, mặc dù loại xác nhận quyền sở hữu đó ngụ ý những hạn chế về những ứng dụng đó có thể đạt được.

Điều quan trọng là phải phân biệt giữa hệ điều hành di động (hệ điều hành như chia sẻ và bảo vệ tài nguyên) và nền tảng thời gian chạy (cung cấp môi trường làm việc và một bộ API cho ứng dụng được viết bằng tay). Một hệ điều hành có thể hỗ trợ nhiều runtimes, chẳng hạn như cách bạn có thể chạy cả hai ứng dụng C++ và Java trong Windows, mặc dù bản thân Windows được viết bằng C++.

Thời gian chạy sẽ có các đặc tính hiệu suất khác nhau và làm lộ khả năng của hệ điều hành và phần cứng ở mức độ lớn hơn hoặc thấp hơn. Ví dụ, J2ME có sẵn trên tấn thiết bị, nhưng trên nhiều thiết bị, thời gian chạy J2ME không cung cấp quyền truy cập vào máy ảnh hoặc khả năng thực hiện cuộc gọi. Thời gian chạy "gốc" (nghĩa là thời gian chạy ứng dụng được viết bằng cùng một ngôn ngữ với OS) không khác nhau về mặt này: ứng dụng "gốc" có thể làm gì phụ thuộc vào thời gian chạy.

0

Palm của tôi có một Lua implementation cho phép bạn để làm ảnh minh hoạ hợp lý, một khá vô dụng cũ Python 1.5, một superb Forth (mà cho phép bạn tạo ra các ứng dụng biên soạn) và một Scheme cho phép copmlete GUI dev.

Tại gần đây của Apple WWDC 2009, liên minh Symbian đã tổ chức một sự kiện ngày đầu tiên trong một tòa nhà liền kề với lời trêu ghẹo của một miễn phí Nokia 5800 cho tất cả mọi người đến thậm chí chỉ cần cho ăn trưa với sân marketing - Mỹ $ 350 điện thoại. Sự kiện này là để phát triển sân cho Ovi Store và họ có các nhà phát triển ở đó và một cuộc thi lập trình vào buổi chiều.

Ba ngôn ngữ mà họ đã nhấn mạnh để phát triển cho Symbian là Java, Flash (lite) và Python. Python là tùy chọn duy nhất cho phép bạn làm việc trên thiết bị or a PC và bao gồm các mẫu với OpenGL ES và các tính năng điện thoại khác.

Với tiện ích sắp xếp các ứng dụng Python vào các standalones có thể được lưu trữ trên cửa hàng, tôi nói Python trên S60 ở ngay trên đó như một đối thủ cho ngôn ngữ động nghiêm trọng trên nền tảng chi phối (vẫn).

0

Có bản phân phối Linux cho OpenMoko Freerunner được gọi là SHR. Hầu hết các thiết lập của nó và mã khung được viết bằng python và ... tốt, nó không phải là rất nhanh. Nó có thể chịu đựng được, nhưng nó đã được lên kế hoạch ngay từ đầu để viết lại nó trong Vala.

Ở phía bên kia, một số ứng dụng nhỏ của tôi hoạt động đủ nhanh (với nhược điểm duy nhất có thời gian khởi động lớn) để xem xét python phát triển các ứng dụng của người dùng.

Để ghi lại: Freerunner có ARM-400MHz và RAM 128MB. Tôi đoán rằng một khi các thiết bị di động vượt qua 1GHz, các ngôn ngữ như Python sẽ đủ nhanh cho các công cụ ở mức trung bình (mức thấp là hạt nhân).

0

Nguồn mở của Rhomobile Rhodes khung cung cấp này ngay hôm nay. Triển khai Ruby đầu tiên trên thế giới cho tất cả các điện thoại thông minh.

Các vấn đề liên quan