Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÁÄÁÄÒÆ¶¯¶Ë¿çƽ̨¿ª·¢µÄ¸÷ÖÖ¼¼Êõ
 
  2008  次浏览      28
2019-5-22
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcnblogs£¬ÎÄÕÂÖ÷Òª·ÖΪWeb Á÷£¬´úÂëת»»Á÷£¬±àÒëÁ÷£¬ÐéÄâ»úÁ÷4 ´óÁ÷ÅɽéÉÜÁË¿çÆ½Ì¨¿ª·¢¼¼ÊõµÄ¼¸ÖÖ½â¾ö·½°¸¡£

½éÉÜ

×î½ü³öÏÖµÄ React Native ÔÙ´ÎÈÃ¿çÆ½Ì¨ÒÆ¶¯¶Ë¿ª·¢Õâ¸ö»°Ìâ»ðÆðÀ´ÁË£¬Ôø¾­´ó¼ÒÒÔΪÔÚÊÖ»úÉÏ¿ÉÒÔÏñ×ÀÃæÄÇÑùͨ¹ý Web ¼¼ÊõÀ´ÊµÏÖ¿çÆ½Ì¨¿ª·¢£¬È´´ó¶àÒòΪÐÔÄÜ»ò¹¦ÄÜÎÊÌâ¶ø·ÅÆú£¬²»µÃ²»Õë¶Ô²»Í¬Æ½Ì¨¿ª·¢¶à¸ö°æ±¾¡£

µ«ÕⲢûÓÐ×èÖ¹ÈËÃÇ¶Ô¿çÆ½Ì¨¿ª·¢¼¼ÊõµÄ̽Ë÷£¬±Ï¾¹Ë­²»Ïë½µµÍ¿ª·¢³É±¾£¬Ò»´Î±àд¾Í´¦´¦ÔËÐÐÄØ£¿³ýÁË React Native£¬Õ⼸Ä껹³öÏÖ¹ýÐí¶àÆäËü½â¾ö·½°¸£¬±¾ÎÄÎÒ½«»á¶ÔÕâЩ·½°¸½øÐм¼Êõ·ÖÎö£¬¹©¸ÐÐËȤµÄ¶ÁÕ߲ο¼¡£

ΪÁË·½±ãÌÖÂÛ£¬ÎÒ½«ËüÃÇ·ÖΪÁËÒÔÏ 4 ´óÁ÷ÅÉ£º

Web Á÷£ºÒ²±»³ÆÎª Hybrid ¼¼Êõ£¬Ëü»ùÓÚ Web Ïà¹Ø¼¼ÊõÀ´ÊµÏÖ½çÃæ¼°¹¦ÄÜ

´úÂëת»»Á÷£º½«Ä³¸öÓïÑÔת³É Objective-C¡¢Java »ò C#£¬È»ºóʹÓò»Í¬Æ½Ì¨ÏµĹٷ½¹¤¾ßÀ´¿ª·¢

±àÒëÁ÷£º½«Ä³¸öÓïÑÔ±àÒëΪ¶þ½øÖÆÎļþ£¬Éú³É¶¯Ì¬¿â»ò´ò°ü³É apk/ipa/xap Îļþ

ÐéÄâ»úÁ÷£ºÍ¨¹ý½«Ä³¸öÓïÑÔµÄÐéÄâ»úÒÆÖ²µ½²»Í¬Æ½Ì¨ÉÏÀ´ÔËÐÐ

Web Á÷

Web Á÷ÊÇ´ó¼Ò¶¼±È½ÏÁ˽âµÄÁË£¬±ÈÈçÖøÃûµÄ PhoneGap/Cordova£¬Ëü½«Ô­ÉúµÄ½Ó¿Ú·â×°ºó±©Â¶¸ø JavaScript£¬¿ÉÒÔÔËÐÐÔÚϵͳ×Ô´øµÄ WebView ÖУ¬Ò²¿ÉÒÔ×Ô¼ºÄÚǶһ¸ö Chrome ÄÚºË ¡£

×÷ΪÕ⼸ÄêÕùÂÛµÄÈÈµã£¬ÍøÉÏÒѾ­ÓÐºÜ¶à¹ØÓÚËüµÄÌÖÂÛÁË£¬ÕâÀïÎÒÖØµãÁÄÁÄ´ó¼Ò×î¹ØÐĵÄÐÔÄÜÎÊÌâ¡£

Web Á÷×î³£±»Í²۵ľÍÊÇÐÔÄÜÂý£¨ÕâÀïÖ¸ÄÚǶ HTML µÄÐÔÄÜ£¬²»¿¼ÂÇÍøÂç¼ÓÔØÊ±¼ä£©£¬¿ÉΪʲôÂýÄØ£¿³£¼ûµÄ¿´·¨ÊÇÈÏΪ¡¸DOM ºÜÂý¡¹£¬È»¶ø´Óä¯ÀÀÆ÷ʵÏֽǶÈÀ´¿´£¬Æäʵ DOM ¾ÍÊǽ«¶ÔÎĵµ²Ù×÷µÄ API ±©Â¶¸øÁË JavaScript£¬¶ø JavaScript µÄµ÷ÓÃÕâЩ API ºó¾Í½øÈëÄÚ²¿µÄ C++ ʵÏÖÁË£¬ÕâÖм䲢ûÓжàÉÙÐÔÄÜÏûºÄ£¬ËùÒÔ´ÓÀíÂÛÉÏÀ´Ëµä¯ÀÀÆ÷µÄ DOM ¿Ï¶¨±È Android µÄ¡¸DOM¡¹¿ì£¬ÒòΪ Android µÄÕ¹Ïּܹ¹´ó²¿·Ö¹¦ÄÜÊÇÓà Java дµÄ£¬ÔÚʵÏÖÏàͬ¹¦ÄܵÄǰÌáÏ£¬C++ ²»´ó¿ÉÄÜ±È Java Âý£¨Ä³Ð©Çé¿öÏ JIT ±àÒëÓÅ»¯È·ÊµÓпÉÄÜ×öµÃ¸üºÃ£¬µ«ÄÇÖ»ÊÇÉÙÊýÇé¿ö£©¡£

ËùÒÔ´Ó×ÖÃæÒâ˼ÉÏ¿´¡¸DOM ºÜÂý¡¹µÄ˵·¨ÊÇ´íÎóµÄ£¬Õâ¸ö¿´·¨Ö®ËùÒÔºÜÆÕ±é£¬¿ÉÄÜÊÇÒòΪ´ó²¿·ÖÈ˶Ôä¯ÀÀÆ÷ʵÏÖ²»Á˽⣬ֻ֪µÀä¯ÀÀÆ÷ÓÐ DOM£¬ËùÒÔ²»¹ÜʲôÎÊÌâ¶¼Ö»Äܱ§Ô¹ËüÁË¡£

ÄÇôÎÊÌâÔÚÄÄÄØ£¿ÔÚÎÒ¿´À´ÓÐÈý·½ÃæµÄÎÊÌ⣺

ÔçÆÚä¯ÀÀÆ÷ʵÏֱȽϲûÓнøÐÐÓÅ»¯

CSS ¹ýÓÚ¸´ÔÓ£¬¼ÆËãÆðÀ´¸üºÄʱ

DOM ÌṩµÄ½Ó¿ÚÌ«ÓÐÏÞ£¬Ê¹µÃÄÑÒÔ½øÐÐÓÅ»¯

µÚÒ»¸öÎÊÌâÊÇ×î¹Ø¼üÒ²ÊÇ×îÄѽâ¾öµÄ£¬ÏÖÔÚ˵µ½ Web ÐÔÄܲîÖ÷Ҫ˵µÄÊÇ Android ϱȽϲÔÚ iOS ÏÂÒѾ­ºÜÁ÷³©ÁË£¬ÔÚ Android 4 ֮ǰµÄ WebView ÉõÖÁ¶¼Ã»ÓÐʵÏÖ GPU ¼ÓËÙ£¬Ã¿´ÎÖØ»æÕû¸öÒ³Ãæ£¬Óж¯»­µÄʱºò²»¿¨²Å¹Ö¡£

ä¯ÀÀÆ÷ʵÏÖµÄÓÅ»¯¿ÉÒÔµÈ Android 4.4 ÂýÂýÆÕ¼°ÆðÀ´£¬ÒòΪ 4.4 ÒÔºó¾ÍʹÓà Chrome À´äÖȾÁË¡£

¶ø¶ÔÓÚ×îеÄä¯ÀÀÆ÷À´Ëµ£¬äÖȾÂýµÄÔ­Òò¾ÍÖ÷ÒªÊǵڶþ¸öÎÊÌ⣺CSS ¹ýÓÚ¸´ÔÓ£¬ÒòΪ´ÓʵÏÖÔ­ÀíÉÏ¿´ Chrome ºÍ Android View ²¢Ã»Óб¾ÖÊÉϵIJî±ð£¬µ« CSS Ì«Áé»î¹¦ÄÜÌ«¶àÁË£¬ËùÒÔ¼ÆËã³É±¾ºÜ¸ß£¬×ÔÈ»¾Í¸üÂýÁË¡£

ÄÇÊDz»ÊÇ¿ÉÒÔͨ¹ý¼ò»¯ CSS À´½â¾ö£¿Êµ¼ÊÉÏ»¹ÕæÓÐÈËÕâô³¢ÊÔÁË£¬±ÈÈç Famo.us£¬Ëü×î´óµÄÌØÉ«¾ÍÊDz»ÈÃÄãд CSS£¬Ö»ÄÜʹÓù̶¨µÄ¼¸ÖÖ²¼¾Ö·½·¨£¬ÍêÈ«¿¿ JavaScript À´Ð´½çÃæ£¬ËùÒÔËüÄÜÓÐЧ±ÜÃâд³öµÍЧµÄ CSS£¬´Ó¶øÌáÉýÐÔÄÜ¡£

¶ø¶ÔÓÚ¸´ÔӵĽçÃæ¼°ÊÖ»úϳ£¼ûµÄ³¬³¤µÄ ListView À´Ëµ£¬µÚÈý¸öÎÊÌâ»á¸üÍ»³ö£¬ÒòΪ DOM ÊÇÒ»¸öºÜÉϲãµÄ API£¬Ê¹µÃ JavaScript ÎÞ·¨×öµ½Ïñ Native ÄÇÑùϸÁ£¶ÈµÄ¿ØÖÆÄÚ´æ¼°Ị̈߳¬ËùÒÔÄÑÒÔ½øÐÐÓÅ»¯£¬ÔòÔÚÓ²¼þ½Ï²îµÄ»úÆ÷ÉÏ»á±È½ÏÃ÷ÏÔ¡£¶ÔÓÚÕâ¸öÎÊÌ⣬ÎÒÃÇÒ»ÄêÇ°Ôø¾­³¢ÊÔ¹ýǶÈëÔ­Éú×é¼þµÄ·½Ê½À´½â¾ö£¬²»¹ýÕâ¸ö·½°¸ÐèÒªÒÀÀµÓ¦Óö˵ÄÖ§³Ö£¬»òÐíÒÔºóä¯ÀÀÆ÷»á×Ô´ø¼¸¸öÓÅ»¯ºóµÄ Web Components ×é¼þ£¬Ê¹ÓÃÕâЩ×é¼þ¾ÍÄܺܺýâ¾öÐÔÄÜÎÊÌâ¡£

ÏÖ½×¶ÎÕâÈý¸öÎÊÌâ¶¼²»ºÃ½â¾ö£¬ËùÒÔÓÐÈËÏë¸É´à²»Óà HTML/CSS£¬×Ô¼ºÀ´»­½çÃæ£¬±ÈÈç React canvas Ö±½Ó»­ÔÚ Canvas ÉÏ£¬µ«ÔÚÎÒ¿´À´ÕâÖ»ÊÇÏֽ׶νâ¾ö²¿·ÖÎÊÌâµÄ·½·¨£¬ÔÚºóÃæµÄÕ½ÚÎÒ»áÏêϸ½éÉÜ×Ô¼º»­ UI µÄ¸÷ÖÖÎÊÌ⣬ÕâÀï˵¸öÀúÊ·°É£¬6 Äêǰä¯ÀÀÆ÷»¹±È½ÏÂýµÄʱºò£¬Bespin ¾ÍÕâô¸É¹ý£¬ºóÀ´Õâ¸öÏîÄ¿±»Ê¹Óà DOM µÄ ACE È¡´úÁË£¬Ä¿Ç°°üÀ¨ TextMirror ºÍ Atom ÔÚÄÚµÄÖ÷Á÷±à¼­Æ÷¶¼ÊÇÖ±½ÓʹÓà DOM£¬ÉõÖÁ W3C ÓÐÈËרÃÅдÁËÆªÎÄÕÂͲÛÓà Canvas ×ö±à¼­Æ÷µÄÖÖÖÖȱµã£¬ËùÒÔʹÓà Canvas Òª½÷É÷¡£

ÁíÍâ³ýÁË Canvas£¬»¹ÓÐÈËÒÔΪ WebGL ¿ì£¬¾Í³¢ÊÔ»æÖƵ½ WebGL ÉÏ£¬±ÈÈç HTML-GL£¬µ«ËüĿǰµÄʵÏÖ̫͵ÀÁÁË£¬¼òµ¥À´Ëµ¾ÍÊÇÏÈÓÃhtml2canvas ½« DOM ½ÚµãäÖȾ³ÉͼƬ£¬È»ºó½«Õâ¸öͼƬ×÷ΪÌùͼ·ÅÔÚ WebGL ÖУ¬ÕâµÈÓÚ½«ä¯ÀÀÆ÷ÖÐÓà C++ дµÄ¶«¶«ÔÚ JavaScript ÀïʵÏÖÁËÒ»±é£¬äÖȾËٶȿ϶¨·´¶ø¸üÂý£¬µ«µ¹ÊÇÄÜÓà GLSL ×öÌØÐ§À´ºöÓÆÈË¡£

Ó²¼þ¼ÓËÙ²»µÈͬÓÚ¡¸¿ì¡¹£¬Èç¹ûÄãÒÔΪӲ¼þ¼ÓËÙÒ»¶¨±ÈÈí¼þ¿ì£¬ÄÇÄã¸Ã³é¿Õѧѧ¼ÆËã»úÌåϵ½á¹¹ÁË

Æäʵ³ýÁËÐÔÄÜÎÊÌ⣬ÎÒÈÏΪÔÚ Web Á÷¸üÑÏÖØµÄÎÊÌâÊǹ¦ÄÜȱʧ£¬±ÈÈç iOS 8 ¾ÍÐÂÔö 4000+ API£¬¶ø Web ±ê×¼ÐèÒªÂþ³¤µÄ±àдºÍÆÀÉó¹ý³Ì£¬Ôö¼Ó 4000 API ÎÒÕâ±²×ÓÊǵȲ»µ½ÁË£¬¼´±ãÊÇ Cordova ÕâÑù×Ô¼º·âװҲæ²»¹ýÀ´£¬ËùÒÔΪÁ˸üºÃµØÊ¹ÓÃϵͳй¦ÄÜ£¬Ð´ Native ´úÂëÊDZØÐëµÄ¡£

P.S. ËäÈ»Ç°ÃæÌáµ½ HTML/CSS ¹ýÓÚ¸´ÔÓµ¼ÖÂÐÔÄÜÎÊÌ⣬µ«ÆäʵÕâÕýÊÇ Web ×î´óµÄÓÅÊÆËùÔÚ£¬ÒòΪ Web ×î³õµÄÄ¿µÄ¾ÍÊÇÏÔʾÎĵµ£¬Èç¹ûÄãÏëÏÔʾ·á¸»µÄͼÎÄÅŰ棬ËäÈ» iOS/Android ¶¼Óи»Îı¾×é¼þ£¬µ«±ÈÆð CSS ²î̫ԶÁË£¬ËùÒÔÔںܶà Native Ó¦ÓÃÖÐÊDz»¿É±ÜÃâҪǶ Web µÄ¡£

´úÂëת»»Á÷

Ç°ÃæÌᵽд Native ´úÂëÊDZØÐëµÄ£¬µ«²»Í¬Æ½Ì¨ÏµĹٷ½ÓïÑÔ²»Ò»Ñù£¬Õâ»áµ¼ÖÂͬÑùµÄÂß¼­ÒªÐ´Á½´ÎÒÔÉÏ£¬ÓÚÊǾÍÓÐÈËÏëµ½ÁËͨ¹ý´úÂëת»»µÄ·½Ê½À´¼õÉÙ¹¤×÷Á¿£¬±ÈÈ罫 Java ת³É Objective-C¡£

ÕâÖÖ·½Ê½ËäÈ»ÌýÆðÀ´²»ÊǺܿ¿Æ×£¬µ«ËüÈ´Êdzɱ¾ºÍ·çÏÕ¶¼×îСµÄ£¬ÒòΪ´úÂëת»»ºó¾Í¿ÉÒÔÓùٷ½ÌṩµÄ¸÷ÖÖ¹¤¾ßÁË£¬ºÍÆÕͨ¿ª·¢Çø±ð²»´ó£¬Òò´Ë²»Óõ£ÐÄÓöµ½¸÷ÖÖ¹îÒìµÄÎÊÌ⣬²»¹ýÐèҪעÒâÉú³ÉµÄ´úÂëÊÇ·ñ¿É¶Á£¬²»¿É¶ÁµÄ·½°¸¾Í±ð¿¼ÂÇÁË¡£

½ÓÏÂÀ´¿´¿´Ä¿Ç°´æÔڵļ¸ÖÖ´úÂëת»»·½Ê½¡£

½« Java ת³É Objective-C

j2objc Äܽ« Java ´úÂëת³É Objective-C£¬¾Ý˵ Google ÄÚ²¿¾ÍÊÇʹÓÃËüÀ´½µµÍ¿çƽ̨¿ª·¢³É±¾µÄ£¬±ÈÈç Google Inbox ÏîÄ¿¾ÍºÅ³ÆÍ¨¹ýËü¹²ÓÃÁË 70% µÄ´úÂ룬Ч¹ûºÜÏÔÖø¡£

¿ÉÄÜÓÐÈË»á¾õµÃÆæ¹Ö£¬ÎªºÎ Google ҪרÃÅ¿ª·¢Ò»¸ö°ïÖú´ó¼Òд Objective-C µÄ¹¤¾ß£¿»¹ÓÐýÌå˵ Google ×öÁ˼þºÃÊ£¬Æäʵ°É£¬ÎÒ¾õµÃ Google ÕâËãÅÌ´òµÃ²»´í£¬ÒòΪ»ù±¾ÉÏÖØÒªµÄÓ¦Óö¼»áͬʱ¿ª·¢ Android ºÍ iOS °æ±¾£¬ÓÐÁËÕâ¸ö¹¤¾ß¾ÍÒâζ×Å£¬Äã¿ÉÒÔÏÈ¿ª·¢ Android °æ±¾£¬È»ºóÔÙ¿ª·¢ iOS °æ±¾¡£¡£¡£

¼ÈÈ»¶¼Óгɹ¦°¸ÀýÁË£¬Õâ¸ö·½°¸È·ÊµÖµµÃ³¢ÊÔ£¬¶øÇҹؼüÊÇ»á Java µÄÈ˶డ£¬¿ÉÒÔͨ¹ýËüÀ´¿ìËÙÒÆÖ²´úÂëµ½ Objective-C ÖС£

½« Objective-C ת³É Java

³ýÁËÓÐ Java ת³É Objective-C£¬»¹ÓÐ Objective-C ת³É Java µÄ·½°¸£¬ÄǾÍÊÇ MyAppConverter£¬±ÈÆðÇ°ÃæµÄ j2objc£¬Õâ¸ö¹¤¾ß¸üÓÐÒ°ÐÄ£¬Ëü»¹´òË㽫 UI ²¿·ÖÒ²°üº¬½øÀ´£¬´ÓËüÒÑת»»µÄÁбíÖпÉÒÔ¿´µ½»¹ÓÐ UIKit¡¢CoreGraphics µÈ×é¼þ£¬Ê¹µÃÓÐЩӦÓÿÉÒÔ²»¸Ä´úÂë¾ÍÄÜת³É¹¦£¬²»¹ýÕâµãÎÒ²¢²»¿´ºÃ£¬¶ÔÓڴ󲿷ÖÓ¦ÓÃÀ´Ëµ²¢²»ÏÖʵ¡£

ÓÉÓÚĿǰÊÇÊÕ·ÑÏîÄ¿£¬ÎÒûÓг¢ÊÔ¹ý£¬¶Ô¼¼Êõϸ½ÚÒ²²»Á˽⣬ËùÒÔÕâÀï²»×öÆÀ¼Û¡£

½« Java ת³É C#

Mono ÌṩÁËÒ»¸ö½« Java ´úÂëת³É C# µÄ¹¤¾ß Sharpen£¬²»¹ýËÆºõÓõÄÈ˲»¶à£¬Star ²Å 118£¬ËùÒÔ¿´ÆðÀ´²»¿¿Æ×¡£

»¹ÓÐ JUniversal Õâ¸ö¹¤¾ß¿ÉÒÔ½« Java ת³É C#£¬µ«Ä¿Ç°Ëü²¢Ã»Óз¢²¼¹«¿ª°æ±¾£¬ËùÒÔ¾ßÌåÇé¿ö»¹´ýÁ˽⣬ËüµÄÒ»¸öÌØÉ«ÊÇ×Ô´øÁ˼òµ¥µÄ¿çƽ̨¿â£¬ÀïÃæ°üÀ¨Îļþ´¦Àí¡¢JSON¡¢HTTP¡¢OAuth ×é¼þ£¬¿ÉÒÔ»ùÓÚËüÀ´¿ª·¢¿É¸´ÓõÄÒµÎñÂß¼­¡£

±ÈÆðת³É Objective-C ºÍ Java µÄ¹¤¾ß£¬×ª³É C# µÄÕâÁ½¸ö¹¤¾ß¿´ÆðÀ´¶¼·Ç³£²»³ÉÊ죬¹À¼ÆÊÇÓà Windows Phone µÄÈËÉÙ¡£

½« Haxe ת³ÉÆäËüÓïÑÔ

˵µ½Ô´Âëת»»¾Í²»µÃ²»Ìá Haxe Õâ¸öÆæÌØµÄÓïÑÔ£¬ËüûÓÐ×Ô¼ºµÄÐéÄâ»ú»ò¿ÉÖ´ÐÐÎļþ±àÒëÆ÷£¬ËùÒÔÖ»ÄÜͨ¹ýת³ÉÆäËüÓïÑÔÀ´ÔËÐУ¬Ä¿Ç°Ö§³Öת³É Neko£¨×Ö½ÚÂ룩¡¢Javascript¡¢Actionscript 3¡¢PHP¡¢C++¡¢Java¡¢C# ºÍ Python£¬¾¡¹ÜÓÐÈËʵÏÖÁËת³É Swift µÄÖ§³Ö£¬µ«»¹ÊǷǹٷ½µÄ£¬ËùÒÔÒªÏëÖ§³Ö iOS ¿ª·¢Ä¿Ç°Ö»ÄÜͨ¹ý Adobe AIR À´ÔËÐС£

ÔÚÓÎÏ·¿ª·¢·½Ãæ×öµÃ²»´í£¬Óиö¿çƽ̨µÄÓÎÏ·ÒýÇæ OpenFL µÄ£¬×îÖÕ¿ÉÒÔʹÓà HTML5 Canvas¡¢OpenGL »ò Flash À´½øÐлæÖÆ£¬OpenFL µÄ¿ª·¢ÌåÑé×öµÃÏ൱²»´í£¬Í¬Ò»ÐдúÂë²»ÐèÒªÐ޸ľÍÄܱàÒë³ö²»Í¬Æ½Ì¨ÏµĿÉÖ´ÐÐÎļþ£¬ÒòΪÊÇͨ¹ýת³É C++ ·½Ê½½øÐбàÒëµÄ£¬ËùÒÔÔÚÐÔÄܺͷ´±àÒë·½Ãæ¶¼ÓÐÓÅÊÆ£¬¿ÉÏ§Ä¿Ç°ËÆºõ²¢²»¹»Îȶ¨£¬²»È»¿ÉÒÔ³ÉΪ Cocos2d-x µÄÓÐÀû¾ºÆ·¡£

ÔÚ OpenFL »ù´¡ÉÏ»¹Óиö¿çƽ̨µÄ UI ×é¼þ HaxeUI£¬µ«½çÃæ·ç¸ñÎÒ¾õµÃÌØ±ð³ó£¬Ò²¾ÍÖ»ÄÜÔÚÓÎÏ·ÖÐÓÃÁË¡£

ËùÒÔĿǰÀ´¿´ Haxe ×ö¿çƽ̨ÓÎÏ·¿ª·¢»òÐí¿ÉÐУ¬µ« APP ¿ª·¢¾Í±ðÖ¸ÍûÁË£¬¶ø»ùÓÚËüÀ´¹²ÓôúÂëʵÔھ͸ü²»¿¿Æ×ÁË£¬ÒòΪÊìϤËüµÄ¿ª·¢Õß¼«ÉÙ£¬·´¶øÔö¼Ó³É±¾¡£

XMLVM

³ýÁËÇ°ÃæÌáµ½µÄÔ´Âëµ½Ô´ÂëµÄת»»£¬»¹ÓÐ XMLVM ÕâÖÖÓëÖÚ²»Í¬µÄ·½Ê½£¬ËüÊ×ÏȽ«×Ö½ÚÂëת³ÉÒ»ÖÖ»ùÓÚ XML µÄÖмä¸ñʽ£¬È»ºóÔÙͨ¹ý XSL À´Éú³É²»Í¬ÓïÑÔ£¬Ä¿Ç°Ö§³ÖÉú³É C¡¢Objective-C¡¢JavaScript¡¢C#¡¢Python ºÍ Java¡£

ËäÈ»»ùÓÚÒ»¸öÖмä×Ö½ÚÂë¿ÉÒÔ·½±ãÖ§³Ö¶àÓïÑÔ£¬È»¶øËüÒ²µ¼ÖÂÉú³É´úÂë²»¿É¶Á£¬ÒòΪºÜ¶àÓïÑÔÖеÄÓï·¨ÌÇ»áÔÚ×Ö½ÚÂëÖб»Ä¨µô£¬ÕâÊDz»¿ÉÄæµÄ£¬ÒÔÏÂÊÇÒ»¸ö¼òµ¥Ê¾ÀýÉú³ÉµÄ Objective-C ´úÂ룬¿´ÆðÀ´¾ÍÏñ»ã±à£º

XMLVM_ENTER_METHOD("org.xmlvm.
tutorial.ios.helloworld.portrait.HelloWorld", "didFinishLaunchingWithOptions", "?")
XMLVMElem _r0;
XMLVMElem _r1;
XMLVMElem _r2;
XMLVMElem _r3;
XMLVMElem _r4;
XMLVMElem _r5;
XMLVMElem _r6;
XMLVMElem _r7;
_r5.o = me;
_r6.o = n1;
_r7.o = n2;
_r4.i = 0;
_r0.o = org_xmlvm_iphone_UIScreen_mainScreen__();
XMLVM_CHECK_NPE(0)
_r0.o = org_xmlvm_iphone_UIScreen_getApplicationFrame__
(_r0.o);
_r1.o = __NEW_org_xmlvm_iphone_UIWindow();
XMLVM_CHECK_NPE(1)
...

ÔÚÎÒ¿´À´Õâ¸ö·½°¸Ï൱²»¿¿Æ×£¬ÍòÒ»Éú³ÉµÄ´úÂëÓÐÎÊÌâ»ù±¾Ã»·¨Ð޸ģ¬Ò²Ã»·¨µ÷ÊÔ´úÂ룬ËùÒÔ²»ÍƼö¡£

С½á

ËäÈ»´úÂëת»»ÕâÖÖ·½Ê½·çÏÕС£¬µ«ÎÒ¾õµÃ¶ÔÓںܶàС APP À´Ëµ¹²Ïí²»Á˶àÉÙ´úÂ룬ÒòΪÕâÀàÓ¦Óôó¶àÊýÎ§ÈÆ UI À´¿ª·¢µÄ£¬´ó²¿·Ö´úÂë¶¼ºÍ UI ñîºÏ£¬ËùÒÔ¹«¹²²¿·Ö²»¶à¡£

ÔÚĿǰµÄËùÓоßÌå·½°¸ÖУ¬Ö»ÓÐ j2objc ¿ÉÒÔ³¢ÊÔ£¬ÆäËü¶¼²»³ÉÊì¡£

±àÒëÁ÷

±àÒëÁ÷±ÈÇ°ÃæµÄ´úÂëת»»¸ü½øÒ»²½£¬ËüÖ±½Ó½«Ä³¸öÓïÑÔ±àÒëΪÆÕͨƽ̨ϵĶþ½øÖÆÎļþ£¬ÕâÖÖ×ö·¨ÓÐÃ÷ÏÔµÄÓÅȱµã£º

Óŵã

¿ÉÒÔÖØÓÃһЩʵÏֺܸ´ÔӵĴúÂ룬±ÈÈç֮ǰÓà C++ ʵÏÖµÄÓÎÏ·ÒýÇæ£¬ÖØÐ´Ò»±é³É±¾Ì«¸ß

±àÒëºóµÄ´úÂë·´±àÒëÀ§ÄÑ

»òÐíÐÔÄÜ»áºÃЩ£¨¾ßÌåÒª¿´ÊµÏÖ£©

ȱµã

Èç¹ûÕâ¸ö¹¤¾ß±¾ÉíÓÐ Bug »òÐÔÄÜÎÊÌ⣬¶¨Î»ºÍÐ޸ijɱ¾»áºÜ¸ß

±àÒëºóÌå»ý²»Ð¡£¬ÓÈÆäÊÇÈç¹ûÒªÖ§³Ö ARMv8 ºÍ x86 µÄ»°

½ÓÏÂÀ´ÎÒÃÇͨ¹ýÇø·Ö²»Í¬ÓïÑÔÀ´½éÉÜÕâ¸öÁ÷ÅÉϵĸ÷ÖÖ·½°¸¡£

C++ Àà

C++ ÊÇ×î³£¼ûµÄÑ¡Ôñ£¬ÒòΪĿǰ Android¡¢iOS ºÍ Windows Phone ¶¼ÌṩÁË C++ ¿ª·¢µÄÖ§³Ö£¬Ëüͨ³£ÓÐÈýÖÖ×ö·¨£º

Ö»Óà C++ ʵÏַǽçÃæ²¿·Ö£¬ÕâÊǹٷ½±È½ÏÍÆ³çµÄ·½°¸£¬Ä¿Ç°ÓкܶàÓ¦ÓÃÊÇÕâô×öµÄ£¬±ÈÈç Mailbox ºÍ Microsoft Office¡£

ʹÓà 2D ͼÐοâÀ´×Ô¼º»æÖƽçÃæ£¬ÕâÖÖ×ö·¨ÔÚ×ÀÃæ±È½Ï³£¼û£¬ÒòΪºÜ¶à½çÃæ¶¼ÓиöÐÔ»¯ÐèÇ󣬵«ÔÚÒÆ¶¯¶ËÓõû¹²»¶à¡£

ʹÓà OpenGL À´»æÖƽçÃæ£¬³£¼ûÓÚÓÎÏ·ÖС£

ʹÓà C++ ʵÏַǽçÃæ²¿·Ö±È½Ï³£¼û£¬ËùÒÔÕâÀï¾Í²»Öظ´½éÉÜÁË£¬³ýÁËÄÜÌáÉýÐÔÄܺ͹²ÓôúÂ룬»¹ÓÐÈËʹÓÃÕâÖÖ·½Ê½À´Òþ²ØÒ»Ð©¹Ø¼ü´úÂ루±ÈÈçÃÜÔ¿£©£¬Èç¹ûÄã²»ÖªµÀÈçºÎ¹¹½¨ÕâÑùµÄ¿çƽ̨ÏîÄ¿£¬¿ÉÒԲο¼ Dropbox ¿ªÔ´µÄ libmx3 ÏîÄ¿£¬Ëü»¹ÄÚǶÁË json ºÍ sqlite ¿â£¬²¢Í¨¹ýµ÷ÓÃϵͳ¿âÀ´ÊµÏÖ¶Ô¼òµ¥ HTTP¡¢EventLoop ¼°´´½¨Ï̵߳ÄÖ§³Ö¡£

¶øÈç¹ûÒªÓà C++ ʵÏÖ½çÃæ²¿·Ö£¬ÔÚ iOS ºÍ Windows Phone Ï¿ÉÒÔ·Ö±ðʹÓà C++ µÄ³¬¼¯ Objective-C++ ºÍ C++/CX£¬ËùÒÔ»¹±È½ÏÈÝÒ×£¬µ«ÔÚ Android ÏÂÎÊÌâ¾Í±È½ÏÂé·³ÁË£¬Ö÷ÒªÔ­ÒòÊÇ Android µÄ½çÃæ¾ø´ó²¿·ÖÊÇ Java ʵÏֵģ¬ËùÒÔÓà C++ ¿ª·¢½çÃæ×î´óµÄÌôÕ½ÊÇÈçºÎÖ§³Ö Android£¬ÕâÓÐÁ½ÖÖ×ö·¨£ºÍ¨¹ý JNI µ÷ÓÃϵͳÌṩµÄ Java ·½·¨»òÕß×Ô¼º»­ UI¡£

µÚÒ»ÖÖ×ö·¨ËäÈ»¿ÉÐУ¬µ«´úÂëÌ«ÈßÓàÁ˱ÈÈçÒ»¸ö¼òµ¥µÄº¯Êýµ÷ÓÃÐèҪдÄÇô¶à´úÂ룺

JNIEnv* env;
jclass testClass = (*env)->FindClass(env, "com/your/package/name/Test"); // get Class
jmethodID constructor = (*env)->GetMethodID(env, cls, "<init>", "()V");
jobject testObject = (*env)->NewObject(env, testClass, constructor);
methodID callFromCpp = (*env)->GetMethodID(env, testClass, "callFromCpp", "()V"); //get methodid
(*env)->CallVoidMethod(env, testObject, callFromCpp);

ÄÇ×Ô¼º»­ UI ÊÇ·ñ»á¸ü·½±ãµã£¿±ÈÈç JUCE ºÍ QT ¾ÍÊÇ×Ô¼º»­µÄ£¬ÎÒÃÇÀ´¿´¿´ QT µÄЧ¹û£º

¿´ÆðÀ´ºÜ²»´íÊǰɣ¿²»¹ýÔÚ Android 5 Ͼͱ¯¾çÁË£¬ºÜ¶àЧ¹û¶¼Ã»³öÀ´£¬±ÈÈ簴ťûÓÐÁ°äôЧ¹û£¬ÉõÖÁ±ß¿ò¶¼Ã»ÁË£¬¸ù±¾Ô­ÒòÔÚÓÚËüÊÇͨ¹ýQt Quick Controls µÄ×Ô¶¨ÒåÑùʽÀ´Ä£ÄâµÄ£¬¶ø²»ÊÇʹÓÃϵͳ UI ×é¼þ£¬Òò´ËËüÏíÊܲ»µ½ÏµÍ³Éý¼¶×Ô¶¯´øÀ´µÄ½çÃæÓÅ»¯£¬Ö»ÄÜ×Ô¼ºÔÙʵÏÖÒ»±é£¬¹¤×÷Á¿²»Ð¡¡£

·´¶øÈç¹û×ʼÓõÄÊÇ Android Ô­Éú×é¼þ¾Íʲô¶¼²»ÐèÒª×ö£¬¶øÇÒ»¹ÄÜÓÃÐ嵀 AppCompat ¿âÀ´ÔÚ Android 5 ÒÔÏÂʵÏÖ Material Design Ч¹û¡£

×îºóÒ»ÖÖ×ö·¨ÊÇʹÓà OpenGL À´»æÖƽçÃæ£¬ÒòΪ EGL+OpenGL ±¾Éí¾ÍÊÇ¿çÆ½Ì¨£¬ËùÒÔ»ùÓÚËüÀ´ÊµÏÖ»áºÜ·½±ã£¬Ä¿Ç°´ó¶àÊý¿çƽ̨ÓÎÏ·µ×²ã¶¼ÊÇÕâô×öµÄ¡£

¼ÈÈ»¿ÉÒÔ»ùÓÚ OpenGL À´¿ª·¢¿çƽ̨ÓÎÏ·£¬ÊÇ·ñÄÜÓÃËüÀ´ÊµÏÖ½çÃæ£¿µ±È»ÊÇ¿ÉÐе쬶øÇÒ Android 4 µÄ½çÃæ¾ÍÊÇ»ùÓÚ OpenGL µÄ£¬²»¹ýËü²¢²»ÊÇÖ»Óà OpenGL µÄ API£¬ÄÇÑùÊDz»ÏÖʵµÄ£¬ÒòΪ OpenGL API ×î³õÉè¼Æ²¢²»ÊÇΪÁË»­ 2D ͼÐεģ¬ËùÒÔÁ¬»­¸öÔ²Ðζ¼Ã»ÓÐÖ±½ÓµÄ·½·¨£¬Òò´Ë Android 4 ÖÐÊÇͨ¹ý Skia ½«Â·¾¶×ª»»ÎªÎ»ÖÃÊý×é»òÎÆÀí£¬È»ºóÔÙ½»¸ø OpenGL äÖȾµÄ¡£

È»¶øÒªÍêȫʵÏÖÒ»±é Android µÄ UI ¼Ü¹¹¹¤×÷Á¿²»Ð¡£¬ÒÔÏÂÊÇÆäÖв¿·ÖÏà¹Ø´úÂëµÄ´úÂëÁ¿£º

ÆäÖйâÊÇÎÄ×ÖäÖȾ¾Í·Ç³£¸´ÔÓ£¬Èç¹ûÄã¾õµÃ¼òµ¥£¬ÄÇÖ»ÄÜ˵Ã÷Äãû¿´¹ýÕâ¸öÊÀ½çÓжà´ó£¬»òÐíÄãÖªµÀÖÐÎÄÓбàÂëÎÊÌâ¡¢Ó¢ÓïÓÐÁ¬×Ö·û(hyphen)ÕÛÐУ¬µ«ÄãÊÇ·ñÖªµÀ·±ÌåÖÐÎÄÓÐÊúÅŰ桢°¢À­²®ÎÄÊÇ´ÓÓÒµ½×óµÄ¡¢ÈÕÓïÓÐÆ½¼ÙÃû×¢Òô(¥ë¥Ó)¡¢Ó¡¶ÈÓïÓÐÔªÒô¸½±êÎÄ×Ö(abugida ????)¡­¡­£¿

¶øÏà±ÈÖ®ÏÂÈç¹ûÿ¸öƽ̨µ¥¶À¿ª·¢½çÃæ£¬¿´Ëƹ¤×÷Á¿²»Ð¡£¬µ«Ä¿Ç°ÔÚ¸÷¸öƽ̨϶¼»áÓÐÁ¼ºÃµÄ¹Ù·½Ö§³Ö£¬Ïà¹Ø¹¤¾ßºÍÎĵµ¶¼ºÜÍêÉÆ£¬ËùÒÔÆäʵ³É±¾Ã»ÄÇô¸ß£¬¶øÇÒ¿ÉÒÔ¸øÓû§ºÍϵͳ·ç¸ñ±£³ÖÒ»ÖµÄÁ¼ºÃÌåÑ飬ËùÒÔÎÒÈÏΪ¶ÔÓÚ´ó¶àÊýÓ¦ÓÃÀ´Ëµ×Ô¼º»­ UI ÊǺܲ»»®ËãµÄ¡£

²»¹ýÒ²ÓÐÌØÀý£¬¶ÔÓÚ UI ±È½Ï¶ÀÌØµÄÓ¦ÓÃÀ´Ëµ£¬×Ô¼º»­Ò²ÊÇÓкô¦µÄ£¬³ýÁ˸üÁé»îµÄ¿ØÖÆ£¬Ëü»¹ÄÜʹµÃ²»Í¬Æ½Ì¨Ï·ç¸ñͳһ£¬ÕâÔÚ×ÀÃæÓ¦ÓÃÖкܳ£¼û£¬±ÈÈç Windows ÏÂÄã»á·¢ÏÖ¼¸ºõÿ¸ö±Ø±¸Èí¼þµÄ UI ¶¼²»Ì«Ò»Ñù£¬¶øÇҺö඼Óл»·ô¹¦ÄÜ£¬ÔÚÕâÖÖÇé¿öϺÜÊʺÏ×Ô¼º»­ UI¡£

Xamarin

Xamarin ¿ÉÒÔʹÓà C# À´¿ª·¢ Android ¼° iOS Ó¦Óã¬ËüÊÇ´Ó Mono ·¢Õ¹¶øÀ´µÄ£¬Ä¿Ç°¿´ÆðÀ´ÉÌÒµÔË×÷µÃ²»´í£¬Ïà¹Ø¹¤¾ß¼°Îĵµ¶¼Í¦½¡È«¡£

ÒòΪËüÔÚ iOS ÏÂÊÇÒÔ AOT µÄ·½Ê½±àÒëΪ¶þ½øÖÆÎļþµÄ£¬ËùÒÔ°ÑËü¹éµ½±àÒëÁ÷À´ÌÖÂÛ£¬ÆäʵËüÔÚ Android ÊÇÄÚǶÁË Mono ÐéÄâ»ú À´ÊµÏֵģ¬Òò´ËÐèҪװһ¸ö 17M µÄÔËÐл·¾³¡£

ÔÚ UI ·½Ã棬Ëü¿ÉÒÔͨ¹ýµ÷ÓÃϵͳ API À´Ê¹ÓÃϵͳÄÚÖõĽçÃæ×é¼þ£¬»òÕß»ùÓÚ Xamarin.Forms ¿ª·¢¶¨ÖÆÒªÇó²»¸ßµÄ¿çÆ½Ì¨ UI¡£

¶ÔÓÚÊìϤ C# µÄÍŶÓÀ´Ëµ£¬Õâ»¹ÕæÊÇÒ»¸ö¿´ÆðÀ´ºÜ²»´íµÄ£¬µ«ÕâÖÖ·½°¸×î´óµÄÎÊÌâ¾ÍÊÇÏà¹Ø×ÊÁϲ»×㣬Óöµ½ÎÊÌâºÜ¿ÉÄÜËѲ»µ½½â¾ö·½°¸£¬ÆäÖÐ̸µ½ËüµÄÓÅȱµãÊÇ£º

Óŵã

¿ª·¢ app ËùÐèµÄ»ù±¾¹¦ÄÜÈ«²¿¶¼ÓÐ

ÓÐÉÌÒµÖ§³Ö£¬¶øÇÒÕâ¸öÏîÄ¿¶Ô Windows Phone ºÜÓÐÀû£¬Î¢Èí»á´óÁ¦Ö§³Ö

ȱµã

Èç¹ûÉîÈëºó»á·¢ÏÖ¹¦ÄÜȱʧ£¬ÓÈÆäÊǶ¨ÖÆ UI£¬ÒòΪδ¿ªÔ´Ê¹µÃÓöµ½ÎÊÌâʱ²»ÖªµÀÈçºÎÐÞ¸´

Xamarin ±¾ÉíÓÐЩ Bug

Ïà¹Ø×ÊÔ´Ì«ÉÙ£¬Ã»ÓÐÔ­Éúƽ̨ÄÇô¶àµÚÈý·½¿â

Xamarin studio ±ÈÆð Xcode ºÍ Android Studio ÔÚ¹¦ÄÜÉÏ»¹Óкܴó²î¾à

Objective-C ±àÒëΪ Windows Phone

΢ÈíÖªµÀ×Ô¼ºµÄ Windows Phone Ì«·ÇÖ÷Á÷£¬ËùÒԺܶ®ÊµØÍƳöÁ˽« Objective-C ÏîÄ¿±àÒëµ½ Windows Phone ÉÏÔËÐеŤ¾ß£¬Ä¿Ç°Õâ¸ö¹¤¾ßµÄÏà¹Ø×ÊÁϺÜÉÙ£¬¼øÓÚ Visual Studio Ö§³Ö Clang£¬ËùÒÔ¼«ÓпÉÄÜÊÇʹÓà Clang µÄǰ¶ËÀ´±àÒ룬ÕâÑù×î´óµÄºÃ´¦ÊÇÒÔºóÖ§³Ö Swift »áºÜ·½±ã£¬Òò´ËÎҹ鵽±àÒëÁ÷¡£

¶ø¶ÔÓÚ Android µÄÖ§³Ö£¬Î¢ÈíÓ¦¸ÃʹÓÃÁËÐéÄâ»úµÄ·½Ê½£¬ËùÒԷŵ½Ï¸öÕ½ڽéÉÜ¡£

RoboVM

RoboVM ¿ÉÒÔ½« Java ×Ö½ÚÂë±àÒëΪ¿ÉÔÚ iOS ÏÂÔËÐеĻúÆ÷Â룬ÕâÓеãÀàËÆ GCJ£¬µ«ËüµÄ¾ßÌåʵÏÖÊÇÏÈʹÓà Soot ½«×Ö½ÚÂë±àÒëΪ LLVM IR£¬È»ºóͨ¹ý LLVM µÄ±àÒëÆ÷±àÒë³É²»Í¬Æ½Ì¨ÏµĶþ½øÖÆÎļþ¡£

±ÈÈç¼òµ¥µÄ new UITextField(new CGRect(44, 32, 232, 31)) ×îºó»á±äÈçϵĻúÆ÷Âë(x86)£º

call imp___jump_table__[j]org.robovm.
apple.uikit.UITextField[allocator][clinit]
mov esi, eax
mov dword [ss:esp], ebx
call imp___jump_table__[j]org.robovm.
apple.coregraphics.CGRect[allocator][clinit]
mov edi, eax
mov dword [ss:esp+0x4], edi
mov dword [ss:esp], ebx
mov dword [ss:esp+0xc], 0x40460000
...

 

»ùÓÚ×Ö½ÚÂë±àÒëµÄºÃ´¦ÊÇ¿ÉÒÔÖ§³Ö¸÷ÖÖÔÚ JVM ÉϹ¹½¨µÄÓïÑÔ£¬±ÈÈç Scala¡¢Kotlin¡¢Clojure µÈ¡£

ÔÚÔËÐл·¾³ÉÏ£¬ËüʹÓÃµÄ GC ºÍ GCJ Ò»Ñù£¬¶¼ÊÇ Boehm GC£¬ÕâÊÇÒ»¸ö±£ÊØ GC£¬»áÓÐÄÚ´æÐ¹Â¶ÎÊÌ⣬¾¡¹Ü¹Ù·½ËµÒѾ­ÓÅ»¯¹ýÁËÓ°Ïì²»´ó¡£

ÔÚ UI µÄÖ§³Ö·½Ã棬ËüºÍ Xamarin ͦÏñ£¬¿ÉÒÔÖ±½ÓÓà Java µ÷ÓÃϵͳ½Ó¿ÚÀ´´´½¨½çÃæ£¨×î½üÖ§³Ö Interface Builder ÁË£©£¬±ÈÈçÉÏÃæµÄʾÀý¾ÍÊÇ¡£ÁíÍ⻹ºÅ³ÆÄÜʹÓà JavaFX£¬ÕâÑù¾ÍÄÜÔÚ iOS ºÍ Android ÉÏʹÓÃͬһÌ× UI ÁË£¬²»¹ýĿǰ¿´ÆðÀ´ºÜ²»¿¿Æ×¡£

ÔÚÎÒ¿´À´ RoboVM Ŀǰ×î´óµÄÓÃ;¾ÍÊÇʹÓà libGDX ¿ª·¢ÓÎÏ·ÁË£¬¾¡¹ÜÔÚ¹¦ÄÜÉÏÔ¶²»Èç Cocos2d-x£¨ÓÈÆäÊdz¡¾°¼°¶ÔÏó¹ÜÀí£©£¬µ«²»¹ÜÔõô˵Óà Java ±È C++ »¹ÊÇ·½±ãºÜ¶à£¨±ð¸úÎÒ˵ûÈËÓà Java ×öÓÎÏ·£¬¼ÛÖµ 25 ÒÚÃÀÔªµÄ Minecraft ¾ÍÊÇ£©£¬²»¹ý±¾ÎÄÖ÷Òª¹ØÐĵÄÊÇ UI ¿ª·¢£¬ËùÒÔÕâ·½ÃæµÄ»°Ìâ¾Í²»ÉîÈëÌÖÂÛÁË£¬

RoboVM ºÍ Xamarin ºÜÏñ£¬µ« RoboVM ·çÏÕ»áСЩ£¬ÒòΪËüÖ»ÐèÒª°Ñ iOS Ö§³ÖºÃ¾ÍÐÐÁË£¬¶ÔÓÅÏÈ¿ª·¢ Android °æ±¾µÄÍŶÓͦÊÊÓ㬵«Ä¿Ç°¹Ù·½ÎĵµÌ«ÉÙÁË£¬¶øÇÒ²»Çå³þ RoboVM ÔÚ iOS ÉϵÄÐÔÄܺÍÎȶ¨ÐÔÔõÑù¡£

Swift - Apportable/Silver

apportable ¿ÉÒÔÖ±½Ó½« Swift/Objective-C ±àÒëΪ»úÆ÷Â룬µ«Ëü¹ÙÍøµÄ³É¹¦°¸ÀýÈ«²¿¶¼ÊÇÓÎÏ·£¬ËùÒÔÓÃÕâ¸öÀ´×ö APP ¸Ð¾õºÜ²»¿¿Æ×¡£

ËùÒÔºóÀ´ËüÓÖÍÆ³öÁË Tengu Õâ¸öרÃÅÕë¶Ô APP ¿ª·¢µÄ¹¤¾ß£¬ËüµÄ±ÈÆð֮ǰµÄ·½°¸¸üÁé»îЩ£¬±¾ÖÊÉÏÓеãÀàËÆ C++ ¹«¹²¿âµÄ·½°¸£¬Ö»²»¹ýÓïÑÔ±ä³ÉÁË Swift/Objective-C£¬Ê¹Óà Swift/Objective-C À´±àÒëÉú³É¿çƽ̨µÄ SO Îļþ£¬Ìṩ¸ø Android µ÷Óá£

ÁíÒ»¸öÀàËÆµÄÊÇ Silver£¬²»¹ýĿǰûÕýʽ·¢²¼£¬Ëü²»½öÖ§³Ö Swift£¬»¹Ö§³Ö C# ºÍ×Ô´´µÄ Oxygene ÓïÑÔ£¨¿´ÆðÀ´Ïñ Pascal£©£¬ÔÚ½çÃæ·½ÃæËü»¹Óиö¿çƽ̨·Ç UI ¿â Sugar£¬È»¶øÄ¿Ç° Star ÊýÖ»ÓÐ 17£¬Ì«·ÇÖ÷Á÷ÁË£¬ËùÒÔʵÔÚÀÁµÃÑо¿Ëü¡£

ʹÓà Swift ±àÒëΪ SO ¸ø Android ÓÃËäÈ»¿ÉÐУ¬µ«Ä¿Ç°Ïà¹Ø¹¤¾ß¶¼²»Ì«³ÉÊ죬ËùÒÔ²»ÍƼöʹÓá£

Go

Go ÊÇ×î½ü¼¸ÄêºÜ»ðµÄºó¶Ë·þÎñ¿ª·¢ÓïÑÔ£¬ËüÓï·¨¼òµ¥ÇÒ¸ßÐÔÄÜ£¬Ä¿Ç°ÔÚ¹úÄÚÓв»ÉÙÓû§¡£

Go ´Ó 1.4 °æ±¾¿ªÊ¼Ö§³Ö¿ª·¢ Android Ó¦Ó㨲¢½«ÔÚ 1.5 °æ±¾Ö§³Ö iOS£©£¬²»¹ýǰֻÄܵ÷ÓúÜÉÙ µÄ API£¬±ÈÈç OpenGL µÈ£¬ËùÒÔÖ»ÄÜÓÃÀ´¿ª·¢ÓÎÏ·£¬µ«ÎҸоõ²¢²»¿¿Æ×£¬ÏÖÔÚ»¹ÓÐË­Ö±½Ó»ùÓÚ OpenGL ¿ª·¢ÓÎÏ·£¿´ó²¿·ÖÓÎÏ·¶¼ÊÇ»ùÓÚij¸ö¿ò¼ÜµÄ£¬¶ø Go ÔÚÕâ·½ÃæÌ«È±·¦ÁË£¬ÎÒÖ»¿´µ½Ò»¸ö×ÀÃæ¶Ë Azul3D£¬¶øÇҷdz£²»³ÉÊì¡£

ÒòΪ Android µÄ View ²ãÍêÈ«ÊÇ»ùÓÚ Java дµÄ£¬ÒªÏëÓà Go À´Ð´ UI ²»¿É±ÜÃâÒªµ÷Óà Java ´úÂ룬¶øÕâ·½Ãæ Go »¹Ã»Óмò±ãµÄ·½Ê½£¬Ä¿Ç° Go µ÷ÓÃÍⲿ´úÂëÖ»ÄÜʹÓà cgo£¬Í¨¹ý cgo ÔÙµ÷Óà jni£¬ÕâÐèҪдºÜ¶àÖмä´úÂ룬ËùÒÔĿǰ Go 1.4 ²ÉÓõÄÊÇÀàËÆ RPC ͨѶµÄ·½Ê½À´×ö£¬´ÓËüÔ´ÂëÖÐÀý×Ó¿ÉÒÔ¿´³öÕâÖÖ·½Ê½ÓжàÂé·³£¬ÐÔÄܿ϶¨Óв»Ð¡µÄËðʧ¡£

¶øÇÒ cgo µÄʵÏÖ±¾Éí¾Í¶ÔÐÔÄÜÓÐËðʧ£¬³ýÁ˸÷ÖÖÎ޹غ¯ÊýµÄµ÷Óã¬Ëü»¹»áËø¶¨Ò»¸ö Go µÄϵͳỊ̈߳¬Õâ»áÓ°ÏìÆäËü gorountine µÄÔËÐУ¬Èç¹ûͬʱÔËÐÐÌ«¶àÍⲿµ÷Óã¬ÉõÖÁ»áµ¼ÖÂËùÓÐ gorountine µÈ´ý¡£

Õâ¸öÎÊÌâµÄ¸ùÔ´ÔÚÓÚ Go µÄÕ»ÊÇ¿ÉÒÔ×Ô¶¯À©³äµÄ£¬ÕâÖÖ·½Ê½ÓÐÀûÓÚ´´½¨ÎÞÊý gorountine£¬µ«È´Ò²µ¼ÖÂÁËÎÞ·¨Ö±½Óµ÷Óà C ±àÒëºóµÄº¯Êý£¬ÐèÒª½øÐÐÕ»Çл»¡£

ËùÒÔʹÓà Go ¿ª·¢¿çÆ½Ì¨ÒÆ¶¯¶ËÓ¦ÓÃĿǰ²»¿¿Æ×¡£

»°Ëµ Rust ûÓÐ Go µÄÐÔÄÜ£¬Ëüµ÷Óà C º¯ÊýÊÇûÓÐÐÔÄÜËðºÄµÄ£¬µ«Ä¿Ç° Rust »¹Ã»Ìṩ¶Ô iOS/Android µÄ¹Ù·½Ö§³Ö£¬¾¡¹ÜÓÐÈË»¹Êdz¢ÊÔ¹ýÊÇ¿ÉÐе쬵«ÏÖÔÚ»¹²»Îȶ¨£¬´Ó Rust ÓïÑÔ±¾ÉíµÄÉè¼ÆÀ´¿´£¬ËüͦÊʺÏÈ¡´ú C++ À´×öÕâÖÖ¿çÆ½Ì¨¹«¹²´úÂ룬µ«ËüµÄȱµãÊÇÓï·¨¸´ÔÓ£¬»áÏÅÅܺܶ࿪·¢Õß¡£

Xojo

ÎÒ֮ǰһֱÒÔΪ BASIC ¹ÒÁË£¬Ã»Ïëµ½»¹ÓÐÕâôһ¸öÌØÀý£¬Xojo ʹÓõľÍÊÇ BASIC£¬ËüÓп´ÆðÀ´ºÜÇ¿´óµÄ IDE£¬ÈÃÈ˸оõÏñÊÇÔÚÓà VisualBasic¡£

ËüµÄ¶¨Î»Ó¦¸ÃÊǸøÐ¡ÅóÓÑ»òÒµÓ࿪·¢ÕßÓõģ¬ÒòÎªËÆºõ¿´ÆðÀ´Ñ§Ï°³É±¾µÍ£¬µ«ÎÒ²»ÕâôÈÏΪ£¬ÒòΪÓõÃÈËÉÙ£¬·´¶øÍøÉÏ×ÊÁÏ»áºÜÉÙ£¬ËùÒÔ¿Öųɱ¾»á¸ü¸ß¡£

ÒòΪʱ¼ä¹ØÏµ£¬ÒÔ¼°¶Ô BASIC ÎÞ°®£¬ÎÒ²¢Ã»ÓÐÔõôÑо¿Ëü¡£

С½á

´ÓĿǰ·ÖÎöµÄÇé¿ö¿´£¬C++ ÊDZȽÏÎÈÍ×µÄÑ¡Ôñ£¬µ«Ëü¶ÔÍŶӳÉÔ±ÓÐÒªÇó£¬Èç¹û´ó¼Ò¶¼Ã»Ð´¹ý C++£¬¿ÉÒÔÊÔÊÔ Xamrin »ò RoboVM¡£

ÐéÄâ»úÁ÷

³ýÁ˱àÒëΪ²»Í¬Æ½Ì¨ÏµĶþ½øÖÆÎļþ£¬»¹ÓÐÁíÒ»ÖÖ³£¼û×ö·¨ÊÇͨ¹ýÐéÄâ»úÀ´Ö§³Ö¿çƽ̨ÔËÐУ¬±ÈÈç JavaScript ºÍ Lua ¶¼ÊÇÌìÉúµÄÄÚǶÓïÑÔ£¬ËùÒÔÔÚÕâ¸öÁ÷ÅÉÖкܶ෽°¸¶¼Ê¹ÓÃÁËÕâÁ½¸öÓïÑÔ¡£

²»¹ýÐéÄâ»úÁ÷»áÓöµ½Á½¸öÎÊÌ⣺һ¸öÊÇÐÔÄÜËðºÄ£¬ÁíÒ»¸öÊÇÐéÄâ»ú±¾ÉíÒ²»áÕ¼²»Ð¡µÄÌå»ý¡£

Java ϵ

˵µ½¿çƽ̨ÐéÄâ»ú´ó¼Ò¶¼»áÏëµ½ Java£¬ÒòΪÕâ¸öÓïÑÔÒ»¿ªÊ¼¾ÍÊÇΪÁË¿çÆ½Ì¨Éè¼ÆµÄ£¬Sun µÄ J2ME ÔçÔÚ 1998 Äê¾ÍÓÐÁË£¬ÔÚ iPhone ³öÀ´Ç°µÄÊÖ»úÉÏ£¬ºÜ¶àСÓÎÏ·¶¼ÊÇ»ùÓÚ J2ME ¿ª·¢µÄ£¬Õâ¸öÏîÄ¿ÖÁ½ñ»¹»î×Å£¬ÄÜÔËÐÐÔÚ Raspberry Pi ÉÏ¡£

Ç°ÃæÌᵽ΢ÈíÌṩÁ˽« Objective-C ±àÒëÔÚ Windows Phone ÉÏÔËÐеŤ¾ß£¬ÔÚ¶Ô Android µÄÖ§³ÖÉÏÎÒûÕÒµ½µÄÏêϸ×ÊÁÏ£¬ËùÒÔ¾ÍÔÝʱÈÏΪËüÊÇÐéÄâ»úµÄ·½Ê½£¬´Ó Astoria ÏîÄ¿µÄ½éÉÜÉÏ¿´Ëü×öµÃ·Ç³£ÍêÉÆ£¬²»½öÄÜÖ§³Ö NDK ÖÐµÄ C++£¬»¹ÊµÏÖÁË Java µÄ debug ½Ó¿Ú£¬Ê¹µÃ¿ÉÒÔÖ±½ÓÓà Android Studio µÈ IDE À´µ÷ÊÔ£¬Õû¸ö¿ª·¢ÌåÑéºÍÔÚ Android ÊÖ»úÉϼ¸ºõÃ»Çø±ð¡£

ÁíÍâ BlackBerry 10 Ò²ÊÇͨ¹ýÄÚǶÐéÄâ»úÀ´Ö§³ÖÖ±½ÓÔËÐÐ Android Ó¦Ó㬲»¹ý¾Ý˵±È½Ï¿¨¡£

²»¹ýÇ°ÃæÌáµ½ C# ºÍ Java ÔÚ iOS ¶ËµÄ·½°¸¶¼ÊÇͨ¹ý AOT µÄ·½Ê½ÊµÏֵģ¬Ä¿Ç°»¹Ã»¼ûµ½ÓÐ Java ÐéÄâ»úµÄ·½°¸£¬ÎÒÏëÖ÷ÒªÔ­ÒòÊÇ iOS µÄÏÞÖÆ£¬ÆÕͨ app ²»Äܵ÷Óà mmap¡¢mprotect£¬ËùÒÔÎÞ·¨Ê¹Óà JIT À´ÓÅ»¯ÐÔÄÜ£¬Èç¹û iOS ¿ª·Å£¬»òÐíÄÄÌìÓÐÈË¿ª·¢Ò»¸öÏñ΢ÈíÄÇÑùÄÜÖ±½ÓÔÚ iOS ÉÏÔËÐÐ Android Ó¦ÓõÄÐéÄâ»ú£¬¾Í²»ÐèÒª¿çƽ̨¿ª·¢ÁË£¬´ó¼ÒÖ»ÐèҪѧ Android ¿ª·¢¾Í¹»ÁË¡£¡£¡£

Titanium/Hyperloop

Titanium Ó¦¸Ã²»ÉÙÈËÌý¹ý£¬ËüºÍ PhoneGap ¼¸ºõÊÇͬʱÆÚµÄÖøÃû¿çƽ̨·½°¸£¬ºÍ PhoneGap ×î´óµÄÇø±ðÊÇ£ºËüµÄ½çÃæÃ»ÓÐʹÓà HTML/CSS£¬¶øÊÇ×Ô¼ºÉè¼ÆÁËÒ»Ì×»ùÓÚ XML µÄ UI ¿ò¼Ü Alloy£¬´úÂëÀàËÆÏÂÃæÕâ¸öÑù×Ó£º

app/styles/index.tss
".container": {
backgroundColor:"white"
},
// This is applied to all Labels in the view
"Label": {
width: Ti.UI.SIZE,
height: Ti.UI.SIZE,
color: "#000", // black
transform: Alloy.Globals.rotateLeft // value is defined in the alloy.js file
},
// This is only applied to an element with the id attribute assigned to "label"
"#label": {
color: "#999" /* gray */
}

app/views/index.xml
<Alloy>
<Window class="container">
<Label id="label" onClick="doClick">Hello, World</Label>
</Window>
</Alloy>

Ç°ÃæÎÒÃÇ˵¹ýÓÉÓÚ CSS µÄ¹ýÓÚÁé»îÍÏÀÛÁËä¯ÀÀÆ÷µÄÐÔÄÜ£¬ÄÇÊÇ·ñ×Ô¼º½¨Á¢Ò»Ì× UI »úÖÆ»á¸ü¿¿Æ×ÄØ£¿¾¡¹ÜÕâô×ö¶ÔÐÔÄÜȷʵÓкô¦£¬È»¶øËüÓÖ´øÀ´ÁËѧϰ³É±¾ÎÊÌ⣬×ö¼òµ¥µÄ½çÃæÎÊÌâ²»´ó£¬Ò»µ©ÒªÉîÈë¶¨ÖÆ¿ª·¢¾Í»á·¢ÏÖÏà¹Ø×ÊÁÏÌ«ÉÙ£¬ËùÒÔ»¹ÊDz»¿¿Æ×¡£

Titanium »¹ÌṩÁËÒ»Ì×¿çÆ½Ì¨µÄ API À´·½±ãµ÷Óã¬Õâô×öÊÇËüµÄÓŵã¸üÊÇȱµã£¬ÓÈÆäÊÇÏÂÃæÈý¸öÎÊÌ⣺

API ÓÐÏÞ£¬ÒòΪÕâÊÇÓÉ Titanium ÌṩµÄ£¬Ëü¿Ï¶¨»á±È¹Ù·½ API ÉÙÇÒÓÐÑÓ³Ù£¬Titanium Êǿ϶¨¸ú²»¹ýÀ´µÄ

Ïà¹Ø×ÊÁϼ°ÉçÇøÓÐÏÞ£¬±ÈÆð Android/iOS ²îÔ¶ÁË£¬Óöµ½ÎÊÌâ¶¼²»ÖªµÀÈ¥ÄÄÕÒ´ð°¸

ȱ·¦µÚÈý·½¿â£¬µÚÈý·½¿â¿Ï¶¨²»»áרÃÅΪ Titanium Ìṩһ¸ö°æ±¾£¬ËùÒÔ²»¹ÜÓÃʲô¶¼µÃ×Ô¼º·â×°

Titanium Ò²Òâʶµ½ÁËÕâ¸öÎÊÌ⣬ËùÒÔĿǰÔÚ¿ª·¢ÏÂÒ»´úµÄ½â¾ö·½°¸ Hyperloop£¬Ëü¿ÉÒÔ½« JavaScript ±àÒëΪԭÉú´úÂ룬ÕâÑùµÄºÃ´¦Êǵ÷ÓÃÔ­Éú API »á±È½Ï·½±ã£¬±ÈÈçËüµÄ iOS ÊÇÕâÑùдµÄ

@import("UIKit");
@import("CoreGraphics");
var view = new UIView();
view.frame = CGRectMake(0, 0, 100, 100);

Õâ¸ö·½°¸ºÍ֮ǰµÄ˵µÄ Xamarin ºÜÏàËÆ£¬»ù±¾ÉϵÈÓÚ½« Objective-C ·­ÒëΪ JavaScript ºóµÄÑù×Ó£¬Òâζ×ÅÄã¿ÉÒÔ¶Ô×Å Apple µÄ¹Ù·½Îĵµ¿ª·¢£¬²»¹ýÈç¹û·¢ÏÖijЩ Objective-C Óï·¨·¢ÏÖ²»ÖªµÀ¶ÔÓ¦µÄ JavaScript Ôõôдʱ¾Í±¯¾çÁË£¬Ö»ÓÐ×Ô¼ºÃþË÷¡£

µ«´Ó Github ÉϵÄÌá½»ÀúÊ·¿´£¬ÕâÏîÄ¿¶¼¿ì¿ª·¢Á½ÄêÁË£¬µ«ÖÁ½ñÈÔÈ»ÊÇÊÔÑé½×¶Î£¬´Ó¸üÐÂÆµÂÊÀ´¿´£¬×î½üÒ»ÄêÖ»Ìá½»ÁË 8 ´Î£¬ËùÒÔ¿ÖÅÂÊÇÒªÆú¿ÓÁË£¬·Ç³£²»¿¿Æ×¡£

Òò´ËÎÒÈÏΪ Titanium/Hyperloop ¶¼·Ç³£²»¿¿Æ×£¬²»ÍƼöʹÓá£

NativeScript

֮ǰ˵µ½ Titanium ×Ô¶¨Òå API ´øÀ´µÄ¸÷ÖÖÎÊÌ⣬ÓÚÊǾÍÓÐÈË»»Á˸ö˼·£¬±ÈÈçǰ¶Îʱ¼äÍÆ³öµÄ NativeScript£¬ËüµÄ·½·¨Ëµ°×Á˾ÍÊÇÓù¤¾ßÀ´×Ô¶¯Éú³É wrapper API£¬ºÍϵͳ API ±£³ÖÒ»Ö¡£

ÓÐÁËÕâ¸ö×Ô¶¯Éú³É wrapper µÄ¹¤¾ß£¬Ëü¾ÍÄÜ·½±ã»ùÓÚϵͳ API À´¿ª·¢¿çƽ̨×é¼þ£¬ÒÔ¼òµ¥µÄ Button ΪÀý£¬Ô´ÂëÔÚ cross-platform-modules/ui/button ÖУ¬ËüÔÚ Android ÏÂÊÇÕâÑùʵÏֵģ¨TypeScript Ê¡ÂÔÁ˺ܶà´úÂ룩

export class Button extends common.Button {
private _android: android.widget.Button;
private _isPressed: boolean;

public _createUI() {
var that = new WeakRef(this);
this._android = new android.widget.Button(this._context);
this._android.setOnClickListener(new android.view.View.OnClickListener({
get owner() {
return that.get();
},
onClick: function (v) {
if (this.owner) {
this.owner._emit(common.knownEvents.tap);
}
}
}));
}
}

¶øÔÚ iOS ÏÂÊÇÕâÑùʵÏֵģ¨Ê¡ÂÔÁ˺ܶà´úÂ룩

export class Button extends common.Button {
private _ios: UIButton;
private _tapHandler: NSObject;
private _stateChangedHandler: stateChanged.ControlStateChangeListener;

constructor() {
super();
this._ios = UIButton.buttonWithType(UIButtonType.
UIButtonTypeSystem);

this._tapHandler = TapHandlerImpl.new()
.initWithOwner(this);
this._ios.addTargetActionForControlEvents
(this._tapHandler, "tap", UIControlEvents.UIControlEventTouchUpInside);

this._stateChangedHandler = new stateChanged.ControlStateChangeListener(this._ios,
(s: string) => {
this._goToVisualState(s);
});
}

get ios(): UIButton {
return this._ios;
}
}

¿ÉÒÔ¿´µ½Ó÷¨ºÍ¹Ù·½ SDK Öеĵ÷Ó÷½Ê½ÊÇÒ»ÑùµÄ£¬Ö»²»¹ýÓïÑÔ»»³ÉÁË JavaScript£¬²¢ÇÒд·¨¿´ÆðÀ´±È½Ï¹îÒì°ÕÁË£¬·ç¸ñÀàËÆÇ°ÃæµÄ Hyperloop ÀàËÆ£¬ËùÒÔҲͬÑù»áÓÐÓ﷨ת»»µÄÎÊÌâ¡£

Õâô×ö×î´óµÄºÃ´¦¾ÍÊÇÄÜÍêÕûÖ§³ÖËùÓÐϵͳ API£¬¶ÔÓÚµÚÈý·½¿âÒ²ÄܺܺÃÖ§³Ö£¬µ«ËüĿǰ×î´óȱµãÊÇÉú³ÉµÄÎļþÌå»ý¹ý´ó£¬¼´±ãʲô¶¼²»×ö£¬Éú³ÉµÄ apk ÎļþÒ²ÓÐ 8.4 MB£¬ÒòΪËü½«ËùÓÐ API binding ¶¼Éú³ÉÁË£¬¶øÇÒÕâÒ²µ¼ÖÂÔÚ Android ÏÂÊ״δò¿ªËٶȺÜÂý¡£

´Óµ×²ãʵÏÖÉÏ¿´£¬NativeScript ÔÚ Android ÏÂÄÚǶÁË V8£¬¶øÔÚ iOS ÏÂÄÚǶÁË×Ô¼º±àÒëµÄ JavaScriptCore£¨ÕâÒâζ×ÅûÓÐ JIT ÓÅ»¯£¬¾ßÌåÔ­ÒòÇ°ÃæÌáµ½ÁË£©£¬ÕâÑùµÄºÃ´¦ÊÇÄܵ÷Óøüµ×²ãµÄ API£¬Ò²±ÜÃâÁ˲»Í¬²Ù×÷ϵͳ°æ±¾Ï JS ÒýÇæ²»Ò»Ö´øÀ´µÄÎÊÌ⣬µ«ºó¹ûÊÇÉú³ÉÎļþµÄÌå»ý±ä´óºÍÔÚ iOS ÏÂÐÔÄܲ»Èç WKWebView¡£

WKWebView ÊÇ»ùÓÚ¶à½ø³ÌʵÏֵģ¬ËüÔÚ iOS µÄ°×Ãûµ¥ÖУ¬ËùÒÔÄÜÖ§³Ö JIT¡£

ËüµÄʹÓÃÌåÑéºÜ²»´í£¬×öµ½ÁËÒ»¼ü±àÒëÔËÐУ¬¶øÇÒ»¹ÓÐ MVVM µÄÖ§³Ö£¬ÄܽøÐÐÊý¾ÝË«Ïò°ó¶¨¡£

ÔÚÎÒ¿´À´ NativeScript ºÍ Titanium ¶¼ÓиöºÜ´óµÄȱµã£¬ÄǾÍÊÇÅÅËüÐÔ̫ǿ£¬Èç¹ûÄãÒªÓÃÕâÁ½¸ö·½°¸£¬¾ÍµÃÍêÕû»ùÓÚËüÃǽøÐпª·¢£¬²»ÄÜÔÚijЩ View ϽøÐг¢ÊÔ£¬Ò²²»Ö§³ÖÖ±½ÓǶÈëµÚÈý·½ View£¬ÓÐûÓз½°¸Äܺܺõؽâ¾öÕâÁ½¸öÎÊÌ⣿ÓУ¬ÄǾÍÊÇÎÒÃǽÓÏÂÀ´Òª½éÉÜµÄ React Native¡£

React Native

¹ØÓÚ React Native Ä¿Ç°ÍøÉÏÓкܶàÌÖÂÛÁË£¬ÖªºõÉÏÒ²Óв»Éٻش𣬾¡¹ÜÓÐЩ»Ø´ð´Óµ×²ãʵÏֽǶȿ´²¢²»×¼È·£¬µ«´ó²¿·Ö¹Ø¼üµãµ¹ÊǶ¼Ìáµ½ÁË¡£

¼øÓÚÎÒ²»Ï²»¶Öظ´±ðÈË˵¹ýµÄ»°£¬ÕâÀï¾ÍÁĵã±ðµÄ¡£

React Native µÄ˼·¼òµ¥À´Ëµ¾ÍÊÇÔÚ²»Í¬Æ½Ì¨ÏÂʹÓÃÆ½Ì¨×Ô´øµÄ UI ×é¼þ£¬Õâ¸ö˼·²¢²»ÐÂÆæ£¬Ê®¼¸ÄêǰµÄ SWT ¾ÍÊÇÕâô×öµÄ¡£

´ÓÍŶÓÉÏ¿´£¬Facebook µÄ iOS ÍŶÓÖв»ÉÙ³ÉÔ±ÊÇÀ´×Ô Apple µÄ£¬±ÈÈç Paper ÍŶӵľ­Àí¼°ÆäÖв»ÉÙ³ÉÔ±¶¼ÊÇ£¬ÒòΪ iOS ²»¿ªÔ´£¬ËùÒÔ´Ó Apple ÖгöÀ´µÄ¿ª·¢Õß»¹ÊÇÓÐÓÅÊÆµÄ£¬±ÈÈçǰ Apple ¿ª·¢Õ߸ã³öÀ´µÄ Duet ¾ÍÃëɱÁËÊÐÃæÉÏËùÓÐÆäËû·½°¸£¬¶øÇÒ´Ó Facebook ÔÚ iOS ÉÏ¿ªÔ´µÄÏîÄ¿¿´ËûÃÇÔÚ iOS ·½ÃæµÄ¾­ÑéºÍ¼¼Êõ¶¼²»´í£¬ËùÒÔ´ÓÍŶӽǶȿ´ËûÃÇ×ö³öÀ´µÄ¶«Î÷²»»áÌ«²î¡£

ÔÚ×ö React Native ·½°¸µÄͬʱ£¬Æäʵ Facebook »¹ÔÚ×öÒ»¸ö Objective-C++ ÉÏÀàËÆ React µÄ¿ò¼Ü ComponentKit£¬ÒÔÏÂÊÇËüµÄ´úÂëʾÀý£º

@implementation ArticleComponent

+ (instancetype)newWithArticle:(ArticleModel *)article
{
return [super newWithComponent:
[CKStackLayoutComponent
newWithView:{}
size:{}
style:{
.direction = CKStackLayoutDirectionVertical,
}
children:{
{[HeaderComponent newWithArticle:article]},
{[MessageComponent newWithMessage:article.message]},
{[FooterComponent newWithFooter:article.footer]},
}];
}

@end

ËüµÄ¿É¶ÁÐÔ±È JSX ÖÐµÄ XML ²îÁ˲»ÉÙ£¬¶øÇÒËæ×Å´ó¼ÒÖð²½½ÓÊÜ Swift£¬ÕâÖÖ»ùÓÚ Objective-C++ µÄ·½°¸¿ÖÅÂû¼¸Äê¾Í¹ýʱÁË£¬ËùÒÔ Facebook Ѻ±¦ React ÊDZȽÏÕýÈ·µÄ¡£

ÎÒ¿´µ½ÓÐÈË˵ÕâÊÇ Facebook »Ø¹é H5£¬µ«Æäʵ React Native ºÍ Web ³¶²»ÉÏÌ«¶à¹ØÏµ£¬ÎÒËùÀí½âµÄ Web ÊÇÖ¸ W3C ¶¨ÒåµÄÄÇЩ¹æ·¶£¬±ÈÈç HTML¡¢CSS¡¢DOM£¬¶ø React Native Ö÷ÒªÊÇ½è¼øÁË CSS ÖÐµÄ Flexbox д·¨£¬»¹ÓÐ navigator¡¢XMLHttpRequest µÈ¼¸¸ö¼òµ¥µÄ API£¬¸ü±ð˵ÍêȫûÓÐ Web µÄ¿ª·ÅÐÔ£¬ËùÒÔ React Native ºÍ HTML 5 ÍêÈ«²»ÊÇÒ»»ØÊ¡£

Facebook Groups µÄ iOS °æ±¾ºÜ´óÒ»²¿·Ö»ùÓÚ React Native ¿ª·¢£¬ÆäÖÐÓõ½Á˲»ÉÙÄÚ²¿Í¨¹ý×é¼þ£¬±ÈÈç ReactGraphQL£¬ÕâÀïÎÒ¾Í°ËØÔÒ»ÏÂËü£¬GraphQL ÕâÊÇÒ»¸ö½á¹¹»¯Êý¾Ý²éѯµÄÓï·¨£¬¾ÍÏñ MongoDB ²éѯÓï·¨ÄÇÑù²éѯ JSON Êý¾Ý£¬²»¹ýËü²¢²»ÊÇÒ»ÖÖÎĵµÐÍÊý¾Ý¿â£¬¶øÖ»ÊÇÒ»¸öÖмä²ã£¬¾ßÌåµÄÊý¾ÝÔ´¿ÉÒÔÁ¬ÆäËüÊý¾Ý¿â£¬ËüÏëÈ¡´úµÄÓ¦¸ÃÊÇ RESTful ÄÇÑùµÄǰºó¶Ë¼òµ¥ HTTP ЭÒ飬ÈÃǰ¶Ë¸ü·½±ãµÄ»ñÈ¡Êý¾Ý£¬¾Ý˵½«»á¿ªÔ´£¨¿´ÆðÀ´´òËãÓà Node ʵÏÖ£©¡£

дÎÄÕÂÍÏʱ¼äÌ«³¤µÄÎÊÌâ¾ÍÊÇÕâÆÚ¼ä»á·¢ÉúºÜ¶àÊÂÇ飬±ÈÈç GraphQL ÔÚÎÒ¿ªÊ¼Ð´µÄʱºòÍâ½ç¶¼²»ÖªµÀ£¬ËùÒÔÐèÒª°ËØÔһϣ¬½á¹ûÏÖÔÚ¹Ù·½ÒѾ­Ðû²¼ÁË£¬²»¹ý¹Ù·½²¢Ã»Ìáµ½ÎÒ˵µÄÄǸö Node ʵÏÖ£¬ËüĿǰ»¹ÔÚÇÄÇÄ¿ª·¢½×¶Î

React Native µÄ¹Ù·½ÊÓÆµÖÐ˵ËüÄÜ×öµ½ App ÄÚʵʱ¸üУ¬ÆäʵÕâÊÇ Apple Ã÷ÎĽûÖ¹µÄ£¨App Store Review Guidelines ÖÐµÄ 2.7£©£¬Òª×öµÃµÍµ÷¡£

ÆÀÂÛÖÐÓÐÈËÌáµ½ Apple ¾ÓÈ»ÔÚ iOS 8.2 ÖиÄÌõ¿îÁË£¬¿ÉÒÔÏÂÔØÖ´ÐÐ JavaScript£¬¶øÇÒ UIKit µÄ×÷Õß¶¼¾õµÃ React Native ºÜÔÞ

ÎұȽÏϲ»¶µÄÊÇ React Native ÖÐÓõ½ÁË Flow£¬ËüÖ§³Ö¶¨Ò庯Êý²ÎÊýµÄÀàÐÍ£¬¼«´óÌáÉýÁË´úÂë¿É¶ÁÐÔ£¬ÁíÍ⻹ÄÜʹÓà ES6 µÄÓï·¨£¬±ÈÈç class ¹Ø¼ü×ֵȡ£

React Native ±È´«Í³ Objective-C ºÍ UIView µÄѧϰ³É±¾µÍ¶àÁË£¬ÊìϤ JavaScript µÄ¿ª·¢ÕßÓ¦¸Ã°ëÌìÄÚ¾ÍÄÜд¸öʹÓñê×¼ UI µÄ½çÃæ£¬¶øÇÒÓà XML+CSS »­½çÃæÒ²Ô¶±È UIView ÖÐÓà Frame ½øÐÐÊÖ¹¤²¼¾Ö¸üÒ×¶Á£¨ÎÒûÓùý Storyboards£¬ËüËäÈ»¿´ÆðÀ´Ö±¹Û£¬µ«¶àÈ˱༭ºÜÈÝÒ׳åÍ»£©£¬¸ÐÐËȤ¿ÉÒÔ³é¿Õ¿´¿´Õâ¸öÏêϸµÄÈëÃŽ̳̣¬Ç××Ô¶¯ÊÖÊÔÊÔ¾ÍÄÜÌå»áµ½ÁË£¬Command + R ¸üдúÂë¸Ð¾õºÜÉñÆæ¡£

ËüĿǰÒѾ­ÓÐ×é¼þ²Ö¿âÁË£¬¶øÇÒÔÚ github É϶¼ÓÐ 500 ¶à²Ö¿âÁË£¬ÆäÖÐÓÐ sqlite¡¢Camera µÈÔ­Éú×é¼þ£¬Ëæ×ÅÕâЩµÚÈý·½×é¼þµÄÍêÉÆ£¬»ùÓÚ React Native ¿ª·¢Ô½À´Ô½²»ÐèҪдԭÉú´úÂëÁË¡£

²»¹ý»µÏûÏ¢ÊÇ React Native µÄ Android °æ±¾»¹ÒªµÈ°ëÄ꣬Õâ¿ÉÒÔÀí½â£¬ÒòΪÔÚ Android ÉÏÎÊÌâÒª¸´Ôӵö࣬ÓÐ Dalvik/ART À¹ÔÚÖм䣬ʹµÃ½»»¥ÆðÀ´ºÜÂé·³¡£

NativeScript ºÍ React Native ÔÚ²àÖØµãÉÏÓкܴóµÄ²»Í¬£¬Ê¹µÃÕâÁ½¸ö²úƷĿǰ×ßÏòÁ˲»Í¬µÄ·½Ïò£º

React Native Òª½â¾öµÄÊÇ¿ª·¢Ð§ÂÊÎÊÌ⣬Ëü²¢Ã»Ö¸ÍûÍêȫȡ´ú Native ¿ª·¢£¬ËüµÄ rootView ¼Ì³Ð×Ô UIView£¬ËùÒÔ¿ÉÒÔÔÚ²¿·Ö View ÊÇʹÓ㬺ܷ½±ã»ì×Å£¬²»ÐèÒªÖØÐ´Õû¸ö app£¬¶øÇÒ»ìÓõÄʱºò»¹ÐèÒªÏÔʾµØ½« API ±©Â¶¸ø JavaScript

NativeScript ÔòÏñÊÇ Titanium ÄÇÑùÆóͼÍêȫʹÓà JavaScript ¿ª·¢£¬½«ËùÓÐϵͳ API ¶¼±©Â¶¸øÁË JavaScript£¬Èà JavaScript ÓïÑÔĬÈϾÍÓµÓÐ Native ÓïÑԵĸ÷ÖÖÄÜÁ¦£¬È»ºóÔٴλù´¡ÉÏÀ´¿ª·¢

·½ÏòµÄ²»Í¬µ¼ÖÂÕâÁ½¸ö²úÆ·½«»áÓв»Í¬µÄ½á¾Ö£¬ÎÒÈÏΪ React Native ¿Ï¶¨»áÍêʤ NativeScript£¬ÒòΪËüµÄʹÓ÷çÏÕҪСºÜ¶à£¬Äã¿ÉÒÔËæÊ±½«²¿·Ö View ʹÓà React Native À´ÊÔÑ飬Óöµ½ÎÊÌâ¾Í¸Ä»Ø Native ʵÏÖ£¬·çÏտɿأ¬¶øÓà NativeScript ¾Í²»ÐÐÁË£¬Õâµ¼Ö´ó¼ÒÔÚ¼¼ÊõÑ¡Ð͵Äʱºò²»¸ÒʹÓà NativeScript¡£

»°Ëµ Angular ÍŶӿ´µ½ React Native ºó±íʾ²»µ­¶¨ÁË£¬ÓÚÊÇ¿ªÊ¼ÖØÐÂÉè¼Æ Angular 2 µÄÕ¹Ïּܹ¹£¬½«ÏÖÓÐµÄ Render ²ã¶ÀÁ¢³öÀ´£¬ÒÔ±ãÓÚ×öµ½Ïñ React ÄÇÑùÊÊÓ¦²»Í¬µÄÔËÐл·¾³£¬¿ÉÒÔÔËÐÐÔÚ NativeScript ÉÏ¡£

×ÛºÏÀ´¿´£¬ÎÒ¾õµÃ React Native ºÜÖµµÃ³¢ÊÔ£¬¶øÇÒ·çÏÕÒ²²»¸ß¡£

ÓÎÏ·ÒýÇæÖеĽű¾

ÓÎÏ·ÒýÇæ´ó¶à¶¼ÄÜ¿çÆ½Ì¨£¬ÎªÁËÌáÉý¿ª·¢Ð§ÂÊ£¬²»ÉÙÒýÇæ»¹ÄÚǶÁ˶Խű¾Ö§³Ö£¬±ÈÈ磺

Ejecta£¬ËüʵÏÖÁË Canvas ¼° Audio µÄ API£¬¿ÉÒÔ¿ª·¢¼òµ¥µÄÓÎÏ·£¬µ«Ä¿Ç°»¹²»Ö§³Ö Android

CocoonJS£¬ÊµÏÖÁË WebGL µÄ API£¬¿ÉÒÔÔËÐÐ Three.js дµÄÓÎÏ·

Unreal Engine 3£¬¿ÉÒÔʹÓà UnrealScript À´¿ª·¢£¬Õâ¸öÓïÑÔµÄÓï·¨ºÜÏñ Java

Cocos2d-js£¬Cocos2d-x µÄ JavaScript binding£¬ËüÄÚ²¿Ê¹ÓÃµÄ JS ÒýÇæÊÇ SpiderMonkey

Unity 3D£¬¿ÉÒÔʹÓà C# »ò JavaScript ¿ª·¢ÓÎÏ·Âß¼­

Corona£¬Ê¹Óà Lua À´¿ª·¢

...

ĿǰÕâÖÖ·½Ê½Ö»ÓÐ Unity 3D ·¢Õ¹±È½ÏºÃ£¬Cocos2d-JS ¾Ý˵»¹ÐУ¬ÓÐЩСÓÎÏ·ÔÚʹÓã¬Corona ¸Ð¾õ±È½Ï·ÇÖ÷Á÷£¬ËäÈ»ËüÒ²Ö§³Ö¼òµ¥µÄ°´Å¥µÈ½çÃæÔªËØ£¬µ«ÓÃÀ´Ð´ APP ÎÒ²»¿´ºÃ£¬ÒòΪ²»¿ªÔ´ËùÒÔûÑо¿£¬Ä¿Ç°¿´À´×î´óµÄºÃ´¦ËƺõÊÇÐéÄâ»úÌå»ýС£¬ÄÚǶ°æ±¾¹Ù·½ºÅ³ÆÖ»ÓÐ 1.4M£¬ÕâÊÇ Lua ÒýÇæ±È½Ï´óµÄÓÅÊÆ¡£

¶øÊ£Ï嵀 3 ¸ö¶¼»ù±¾ÉϹÒÁË£¬Ejecta ÖÁ½ñ»¹²»Ö§³Ö Android£¬CocoonJS תÐÍΪÀàËÆ Crosswalk µÄ WebView ·½°¸£¬¶ø Unreal Engine 4 ¿ªÊ¼²»ÔÙÖ§³Ö UnrealScript£¬¶øÊÇתÏòÁËʹÓà C++ ¿ª·¢£¬¸ÐÐËȤ¿ÉÒÔΧ¹ÛһϠEpic ´´Ê¼È˽âÊÍΪʲôҪÕâô×ö¡£

µ±È»£¬ÕâЩÓÎÏ·ÒýÇæ¶¼²»ÊʺÏÓÃÀ´×ö APP£¬Ò»·½ÃæÊÇ»áÓöµ½Ç°ÃæÌáµ½µÄ½çÃæ»æÖÆÎÊÌ⣬ÁíÒ»·½ÃæÓÎÏ·ÒýÇæµÄʵÏÖÒ»°ã¶¼Òª²»¶ÏÖØ»æ£¬Õâ¿Ï¶¨±ÈÆÕͨ App ¸üºÄµç£¬ºÜÈÝÒ×±»Óû§·¢ÏÖºóŭɾ¡£

Adobe AIR

´ÓÎÒÖܱßÁ˽⵽µÄÇé¿ö¿´£¬¼¸ºõËùÓÐÈ˶¼ÒÔΪ Flash ³¹µ×·ÅÆúÒÆ¶¯¶ËÁË£¬²»µÃ²»Ëµ Adobe µÄÐû´«ÕæÊÇʧ²ß£¬Ã÷Ã÷Ö»ÊÇ·ÅÆúÒÆ¶¯ä¯ÀÀÆ÷¶Ë²å¼þ£¬Flash »¹ÊÇ¿ÉÒÔÔÚ iOS ÏÂÔËÐеĺò»ºÃ£¬ÄǾÍÊÇ Adobe AIR£¬¶ÔÓÚÊìϤ ActionScript µÄÍŶÓÀ´Ëµ£¬ÕâÊÇÒ»ÖÖͦºÃµÄ¿çƽ̨ÓÎÏ·¿ª·¢½â¾ö·½°¸£¬¹úÄÚÓÎÏ·¹«Ë¾Ö®Ç°ÓÐÓã¬ÏÖÔÚ»¹ÓÐûÈËÓÃÎҾͲ»ÖªµÀÁË£¬²»¹ý¿¼Âǵ½ºÜ¶à²»Ã÷ÕæÏàµÄСÅóÓѶ¼ÒÔΪ Flash ÔÚÒÆ¶¯¶Ë¹ÒÁË£¬ËùÒÔºó±¸Á¦Á¿¿Ï¶¨ÑÏÖØ²»×㣬Á¬È˶¼Õв»µ½£¬ÆäËü¾Í±ðÏëÁË¡£

ÆÀÂÛÖÐÓÐÈËÖ¸³öÔÚ iOS ÏÂÊÇͨ¹ý±àÒëʵÏֵģ¬¿´À´ºÍ Xamarin RoboVM ºÜÀàËÆ¡£

µ«¿ª·¢ APP ·½Ã棬ËüͬÑùȱ·¦ºÃµÄ UI ¿â£¬Flex ʹÓÃÌåÑéºÜ²î£¬Ä¿Ç°»ù±¾ÉÏËã¹ÒÁË£¬Ä¿Ç°Ö»ÓÐ Feathers »¹ËãÄÜ¿´£¬²»¹ýÖ÷ÒªÊǸøÓÎÏ·ÖÐµÄ UI Éè¼ÆµÄ£¬²¢²»ÊʺÏÓÃÀ´¿ª·¢ APP¡£

Dart

Dart ÔÚ Web »ù±¾ÉÏʧ°ÜÁË£¬ÓÚÊÇ¿ªÊ¼×ªÕ½Òƶ¯¿ª·¢£¬Ä¿Ç°ÓÐÁ½¸ö˼·£¬Ò»¸öÊÇÀàËÆ Lua ÄÇÑùµÄǶÈëÓïÑÔÀ´Í³Ò»¹«¹²´úÂ룬µ«ÒòΪ Dart ÐéÄâ»úÔ´×Ô V8£¬ÔÚÒ»¿ªÊ¼Éè¼ÆµÄʱºò¾ÍÖ»ÓÐ JIT ¶øÃ»ÓнâÊÍÆ÷£¬ÉõÖÁÁ¬×Ö½ÚÂ붼ûÓУ¬ËùÒÔËüÎÞ·¨ÔÚ iOS ÏÂÔËÐУ¬ÓÚÊÇ Dart ÍŶÓÓÖ×öÁ˸öСÇɵÄÐéÄâ»ú Fletch£¬Ëü»ùÓÚ´«Í³µÄ×Ö½ÚÂë½âÊÍÖ´Ðз½Ê½À´ÔËÐУ¬Ä¿Ç°´úÂëÖ»ÓÐ 1w ¶àÐУ¬ºÍ Lua Ò»ÑùÇáÁ¿¼¶¡£

ÁíÒ»¸ö¾ÍÊÇ×î½ü±È½ÏÈÈÃÅµÄ Sky£¬ÕâÀïͲÛһϹúÄÚÍâµÄýÌ壬ÎÒ¿´µ½µÄ±¨µÀ¶¼ÊÇ˵ Google ÏëÒªÓà Dart È¡´ú Android Ï嵀 Java ¿ª·¢¡£¡£¡£Õâ¸ö¶«¶«È·ÊµÊÇ Google µÄ Chrome ÍŶӿª·¢µÄ£¬µ« Google ÊÇÒ»¸öºÜ´óµÄ¹«Ë¾ºÃ²»ºÃ£¬ÄÚ²¿ÓÐÎÞÊýСÍŶӣ¬Ä³¸öСÍŶӲ¢²»ÄÜ´ú±í¸ö Google£¬Èç¹ûÕæÊÇ Google ¸ß²ãµÄ¾ö¶¨£¬Ëü½«»áÔÚ Google I/O ´ó»áÖ÷ÌâÑݽ²ÉÏÍÆ³öÀ´£¬¶ø²»ÊÇ Dart Developer Summit ÕâÑù·ÇÖ÷Á÷µÄ¼¼Êõ·ÖÏí¡£

Óб¨µÀ³Æ Sky Ö»Ö§³ÖÔÚÏßÓ¦Ó㬲»Ö§³ÖÀëÏߣ¬Õâ´íµÃÌ«ÀëÆ×ÁË£¬È˼ÒÖ»ÊÇΪÁËÑÝʾËüµÄÔÚÏ߸üÐÂÄÜÁ¦£¬ÄãÒªÏ뽫´úÂëÄÚǶµ½ app ÀﵱȻÊÇ¿ÉÒԵġ£

Sky µÄ¼Ü¹¹ÈçÏÂͼËùʾ£¬Ëü²Î¿¼ÁË Chrome£¬ÒÀ¿¿Ò»¸öÏûϢϵͳÀ´ºÍ±¾µØ»·¾³½øÐÐͨѶ£¬Ê¹µÃ Dart µÄ´úÂëºÍƽ̨Î޹أ¬¿ÉÒÔÔËÐÐÔÚ¸÷ÖÖÆ½Ì¨ÉÏ¡£

Èç¹ûÄã¶Á¹ýÇ°ÃæµÄÎÄÕ£¬ÄÇÄãÒ»¶¨ºÍÎÒÒ»Ñù·Ç³£¹ØÐÄÒ»¸öÎÊÌ⣺Sky µÄ UI ÊÇÔõô»æÖƳöÀ´µÄ£¿Ê¹ÓÃϵͳ»¹ÊÇ×Ô¼º»­£¿Ò»¿ªÊ¼¿´ Sky ½éÉÜÊÓÆµµÄʱºò£¬ÎÒ»¹ÒÔΪËüµ×²ã»æÖÆ»ùÓÚ Chrome£¬ÒòΪÕâ¸öÊÓÆµµÄÑݽ²ÕßÊÇ Eric Seidel£¬ËûÊÇ WebKit ÏîÄ¿Öзdz£ÓÐÃûµÄ¿ª·¢Õߣ¬ÔçÄêÔÚ Apple ¿ª·¢ WebKit£¬2008 ÄêÌø²ÛÈ¥ÁË Chrome ÍŶӣ¬µ«ËûÔÚÑݽ²Öв¢Ã»ÓÐÌáµ½ WebView£¬¶øÇÒÑÝʾµÄʱºò½çÃæ·Ç³£ÏñÔ­Éú Material Design Ч¹û£¨±ÈÈçµã»÷ÓÐÁ°äôЧ¹û£©£¬ËùÒÔÎÒÓÖ¾õµÃËüÊÇÀàËÆ React Native ÄÇÑùʹÓÃÔ­Éú UI¡£

È»¶øµ±ÎÒÏÂÔØÄǸöÓ¦Ó÷ÖÎöºó·¢ÏÖ£¬Ëü¼ÈûʹÓà Chrome/WebView ҲûʹÓÃÔ­Éú UI ×é¼þ£¬ÄѲ»³ÉÊÇ×Ô¼º»æÖƵģ¿

´Ó Sky SDK µÄ´úÂëÉÏ¿´£¬ËüÆäÖÐÓзdz£¶à Web µÄºÛ¼££¬±ÈÈçÖ§³Ö±ê×¼µÄ CSS¡¢ºÜ¶à DOM API£¬µ«Ëü±àÒëºóµÄÌå»ý·Ç³£Ð¡£¬libsky_shell.so Ö»ÓÐ 8.7 MB£¬ÎÒ֮ǰ³¢ÊÔ¾«¼ò¹ý Chrome Äںˣ¬½« WebRTC µÈÖܱ߹¦ÄÜɾµôÒ²Òª 22 MB£¬ÕâôСµÄÌå»ý¿Ï¶¨ÒªÉ¾ Web ºËÐŦÄÜ£¬±ÈÈç SVG ºÍ²¿·Ö CSS3£¬ËùÒÔÎÒ»³ÒÉËüʵÏÖÁ˼ò°æµÄ Chrome ÄÚºËäÖȾ¡£

ºóÀ´ÎÞÒâ¼ä¿´ÁËһϠMojo µÄ´úÂ룬²Å֤ʵȷʵÈç´Ë£¬Ô­À´Ç°ÃæÄÇÕÅͼÖнéÉÜµÄ Mojo Æäʵ²¢²»ÍêÕû£¬Mojo ²»½ö½öÊÇÒ»¸öÏûϢϵͳ£¬ËüÊÇÒ»¸ö¼ò°æµÄ Chrome Äںˣ¡Ê¹Óà cloc ͳ¼Æ´úÂë¾Í±©Â¶ÁË£º

12508 text files.
11973 unique files.
2299 files ignored.
-----------------------------------------------------------
Language files blank comment code
-----------------------------------------------------------
C++       3485 129830 107745 689089
C/C++ Header  3569 92435 125742 417655
C       266 37462 63659 269220
...

C++ ²»°üº¬×¢Ê͵ĴúÂ벿·Ö¾ÍÓнü 70w Ðа¡£¬¶øÇÒÒ»¿´Ä¿Â¼½á¹¹¾ÍÊÇŨŨµÄ Chromium ·ç¸ñ£¬ÖÁÉÙ´Ó¼¼ÊõÄѶÈÀ´Ëµ¾ø¶ÔÃëµôÇ°ÃæËùÓз½°¸£¬Ò²Ó¡Ö¤ÁËÎÒÇ°ÃæËµ¹ýÈç¹ûÓмò»¯°æ CSS/HTML ¾ÍÄܺܺýâ¾öÐÔÄÜÎÊÌâ¡£

ÕâÒ²ÈÃÎÒÀí½âÁËΪʲô Eric ÔÚ̸µ½ Mojo µÄʱºòÓïÑɲ»Ï꣬ÈÃÈËÎóÒÔΪ½ö½öÊÇÒ»¸öÏûϢϵͳ£¬ËûÒªÊÇÃ÷ȷ˵ÕâÊÇÒ»¸ö¾«¼ò°æ Chrome£¬ÄǵÃÒýÆð¶à´óµÄÎó»á°¡£¬Ã»×¼»áÓÐС±àÓá¸Google Ðû²¼¿ª·¢ÏÂÒ»´úä¯ÀÀÆ÷ÄÚºËÈ¡´ú Blink¡¹ÕâÑùµÄ±êÌâÁË¡£

֮ǰ Dart ¾ö¶¨²»½« Dart VM ·Åµ½ Chrome ÀԭÀ´²¢²»ÊÇÒòΪ±»ÖÚÈË·´¶Ô¶øËÀÐÄÁË£¬¶øÊÇÒòΪ fork ÁËÒ»¸ö Chrome ×Ô¼ºÄÃÀ´ÍæÁË¡£

×ÛºÏÀ´¿´£¬Ä¿Ç° Dart µÄÕâÁ½¸ö·½°¸¶¼·Ç³£²»³ÉÊ죬Sky ËäÈ»ÔÚ¼¼ÊõÉÏ¿´ºÜÇ¿´ó£¬µ« Dart ÓïÑÔĿǰ½ÓÊܶȷdz£µÍ£¬±ÈÆðËüËù´øÀ´µÄ¿çƽ̨Óŵ㣬ËüµÄȱµã¸ü´ó£¬±ÈÈçÎÞ·¨Ê¹ÓõÚÈý·½ Native UI ¿â£¬Ò²ÎÞ·¨Ê¹ÓõÚÈý·½ Web UI ¿â£¬Õâµ¼ÖÂËüµÄÉçÇø»á·Ç³£ÄÑ·¢Õ¹£¬ÃüÖÐ×¢¶¨·ÇÖ÷Á÷£¬Õæ¿ÉϧÁËÕâ°ï¼¼Êõ´óÅ££¬µ«·½Ïò±ÈŬÁ¦¸üÖØÒª£¬Ï£ÍûËûÃÇÄܾ¡ÔçÐÑÎò£¬Èà Sky Ò²Ö§³Ö JavaScript¡£

ÎҵĽáÂÛ

¿´µ½ÕâÀï¹À¼Æ²»ÉÙ¶ÁÕßÔÎÁË£¬ÓÐÄÇô¶àÖÖ·½°¸£¬×îºóµ½µ×Äĸö×îÊʺÏ×Ô¼º£¿¸ÃѧÄĸö£¿ÕâÀï¼òµ¥ËµËµÎҵĿ´·¨¡£

Èç¹ûÄãÖ»»á JavaScript£¬ÄÇĿǰ×îºÃµÄ·½°¸ÊÇ React Native£¬ÓÐÁËËüÄ㼴ʹ²»Á˽â Native ¿ª·¢Ò²ÄÜд³öºÜ¶àÖÐСӦÓ㬷´Õý¶à°ë²»»á»ð£¬»¨Ì«¶à¾«Á¦Ò²Ã»ÒâÒ壬µÈÍòÒ»»ðÁËÔÙѧ Native ¿ª·¢Ò²²»³Ù°¡¡£

Èç¹ûÄãÖ»»á Java£¬ÄÇ¿ÉÒÔ³¢ÊÔ RoboVM »ò j2objc£¬j2objc ËäȻĿǰ¸üÎȶ¨¿¿Æ×£¬µ«Ëü²»ÄÜÏñ RoboVM ÄÇÑùÍêÈ«Óà Java ¿ª·¢£¬ËùÒÔÄ㻹µÃѧ Objective-C À´Ð´½çÃæ£¬¶ø RoboVM µÄȱµã¾ÍÊÇÃ²ËÆ»¹²»Ì«Îȶ¨£¬¶øÇÒËÆºõ³ýÁËÓÎÏ·ÒÔÍ⻹û¼ûµ½±È½ÏÖªÃûµÄÓ¦ÓÃʹÓ㬶øËüÕâÖÖ·½°¸×¢¶¨»á±È j2objc ¸üÈÝÒ׳öÎÊÌ⣬ËùÒÔÄãµÃ×öºÃ²È¿ÓµÄÐÄÀí×¼±¸¡£

Èç¹ûÄãÖ»»á C#£¬ÄÇΨһµÄÑ¡Ôñ¾ÍÊÇ Xamarin ÁË¡£

Èç¹ûÄãÖ»»á Objective-C£¬ºÜ±­¾ßĿǰûÓбȽϿ¿Æ×µÄ·½°¸£¬ÎÒ½¨ÒéÄ㻹ÊÇѧѧ Java °É£¬¶àѧһÃÅÓïÑÔûɶ»µ´¦¡£

Èç¹ûÄãÖ»»á C++£¬¿ÉÒÔ×ö×öÓÎÏ·»ò·Ç UI µÄ¹«¹²²¿·Ö£¬ÎÒ²»½¨ÒéʹÓà QT »ò×Ô¼º»­½çÃæ£¬»¹ÊÇѧѧ Native ¿ª·¢°É¡£

Èç¹ûÄãÖ»»á Go£¬»¹±ðÖ¸ÍûÓÃËü¿ª·¢Òƶ¯¶Ë£¬ÒòΪĿǰµÄʵÏֺܵÍЧ£¬¶øÇÒÕâºÍ Go µ×²ãµÄʵÏÖ»úÖÆÃÜÇÐÏà¹Ø£¬µ¼ÖºÜÄÑÓÅ»¯£¬ËùÒÔÔ¤¼ÆºÜ³¤Ò»¶Îʱ¼äÄÚÒ²²»»áÓиĹۡ£

Èç¹ûÄã»á Rust£¬ËµÃ÷ÄãºÜϲ»¶ÕÛÌÚ£¬¶à°ëÒ²»áÇ°ÃæËùÓÐÓïÑÔ£¬×Ô¼º×ö¾ö¶¨°É¡£¡£¡£

µ±È»£¬ÉÏÃæ¶¼ÊÇÕë¶Ô¸öÈ˵쬶ÔÓÚÍŶÓÀ´Ëµ£¬ÄDz»ÓÃÏëÁË£¬¿Ï¶¨Óà Native£¬È»ºó»ìÓÃÄÚǶµÄ·½°¸£¬±ÈÈç Lua¡¢React Native£¬Ç°ÃæÄÇЩÅÅËüµÄ·½°¸£¨±ÈÈç Titanium£©Ç§Íò±ðÑ¡£¬»áËÀºÜ²Ò¡£

 

P.S. ±¾ÎÄ˵µÄÊÇÒÆ¶¯¶Ë£¬ºÜ¶àÈ˾õµÃ¿çƽ̨´ÓÀ´¶¼²»¿¿Æ×£¬µ«ÆäʵÊÇÓеģ¬ÄǾÍÊÇ Web£¬Õâ¸öÀúÊ·ÉÏ×î³É¹¦µÄÀý×Ó£¬Ì«³É¹¦ÒÔÖÂÓÚ´ó¼Ò¶¼Ï°ÒÔΪ³£ÁË£¬´óÊ÷֮ϣ¬´ç²Ý²»Éú£¬Ëü¼·µôÁËÆäËü·½°¸µÄÉú´æ¿Õ¼ä£¬Ê®¼¸Äêǰ»¹ÓÐ B/S ºÍ C/S Ö®ÕùÄØ¡£

 
   
2008 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì