2013-03-23 4 views
6

मैं पाइथनिक सेमेन्टिक्स के साथ लिखे गए कोड को स्वचालित रूप से संकलित/परिवर्तित करने की कोशिश कर रहा हूं, मूल और तेज़ जावास्क्रिप्ट कोड में।पाइथन/बू/रूबी को सी/सी ++/एलएलवीएम/जावास्क्रिप्ट (गति के लिए जेएस अर्रेबफर का उपयोग करके) के सिंटैक्स की तरह संकलित करने के लिए उपकरण

जावा इत्यादि जैसे अच्छे डिबगिंग समर्थन के साथ, कौन से टूल्स यह कर सकते हैं?

क्या किसी ने ऐसा किया है?

क्यों?

मैं एक जटिल मुख्य पाश, एक समयरेखा, कुछ भौतिकी सिमुलेशन, और कुछ जटिल बातचीत के साथ कुछ विज़ुअलाइजेशन कोड लिखने की कोशिश कर रहा हूं। आईई: यह एक वास्तविक सीपीयू बाध्य समस्या है।

जावास्क्रिप्ट के साथ लेखन और ब्राउज़र के वातावरण में परीक्षण करना, जावा, .NET या पायथन एक सभ्य आईडीई में चलने से डीबग करना कठिन है। लेकिन जटिल क्लाइंट साइड कोड के साथ वास्तविक बड़े पैमाने पर वेब विकास करने के लिए, कम से कम इसमें लिखने के लिए, जावास्क्रिप्ट को कम से कम संकलित करना आवश्यक है।

पृष्ठभूमि: हाल के अग्रिमों

Emscripten की अनुमति देता है संकलन C/C++ जावास्क्रिप्ट को, कि ASM.js रूप ArrayBuffer के द्वारा लिखा गया सरणी समर्थन और नई ब्राउज़र जे एस इंजन की वजह से ब्राउज़र में दक्षता में वृद्धि के साथ चला सकते हैं, और LLJS लाभ लेने मोज़िला के हालिया गति सुधार (जो अन्य विक्रेताओं की जल्द ही पालन करेंगे)।

Altjs.org में जावास्क्रिप्ट वैकल्पिकता की एक कपड़े धोने की सूची है, लेकिन अभी तक हाल ही में गति सुधार या अच्छे अर्थशास्त्र पर ध्यान केंद्रित नहीं किया गया है, लेकिन लोगों के लिए बेहतर उपकरण वाले ब्राउज़र के लिए कोड करना आम बात हो रही है। विशेष रूप से Emscripten loads of amazing demos है।

संभावित विकल्पों को पहले से ही माना जाता है:

  • Shedskin - वर्तमान में मैं काम कर रहा Shedskin हो रही कोशिश की है, लेकिन मैं सी ++/सी कौशल सीमित है (Emscripten केवल एक सी एपीआई को उजागर करता है बोहम के लिए कचरा कलेक्टर इसे इस्तेमाल करता है प्रेरित, और शेडस्किन को इसकी वस्तुओं के लिए एक सी ++ कचरा संग्रहण वर्ग की आवश्यकता होती है, जो अभी तक मौजूद नहीं है)।
  • Unladen निगल/RPython, LLVM के लिए - नहीं सेटअप करने में सक्षम Ubuntu पर सही ढंग से अभी तक
  • बू जावा के लिए तो LLVM (अभी तक मेरी Ubuntu पर सेटअप करने के लिए सक्षम किया गया)

अतिरिक्त करने के लिए किया गया है बाधाएं:

  • मुझे इसे अपने उबंटू सिस्टम पर उपयोग करने की आवश्यकता है।
  • संकलित जावास्क्रिप्ट शायद 1 एमबी
  • मूल भाषा में डिबगिंग जो संकलित भी है, को मौजूदा डीबग टूल का लाभ उठाने की अनुमति देनी चाहिए, अभी भी संभव होनी चाहिए।

"निर्देश टेबल के निर्माण की यह प्रक्रिया बहुत ही आकर्षक होना चाहिए। इसके बारे में कोई वास्तविक खतरा कभी एक परिश्रम से काम बनने, किसी भी प्रक्रिया है कि काफी यांत्रिक मशीन ही खत्म कर दिया जा सकता है के लिए वहाँ होना चाहिए।" - एलन एम ट्यूरिंग, 1 9 46

+0

आपकी प्रेरणा ("क्यों") [Google वेब टूलकिट] द्वारा बहुत अच्छी तरह से कवर की जाती है (https://developers.google.com/web-toolkit/सिंहावलोकन) (जावा के बावजूद, पायथन नहीं), क्या आपने इसे एक विचार दिया है? – Oak

+0

हां, मैंने GWT और PlayN विचार जैसे टूल दिए हैं लेकिन वे अभी तक ASM.js अनुकूलन का समर्थन नहीं करते हैं। @ ओक –

उत्तर

2

क्या आप एक उच्च स्तर की गतिशील भाषा चाहते हैं जो कुशल निम्न स्तर की जावास्क्रिप्ट को संकलित करे? ऐसी कोई बात नहीं है। यदि गतिशील भाषाएं तेज़ी से होती हैं तो हमें asm.js की आवश्यकता नहीं होती पहली जगह

यदि आप कोड लिखना चाहते हैं जो कुशल जावास्क्रिप्ट को संकलित करता है तो आपको निम्न स्तर की भाषा सीखनी होगी। कारण इमस्क्रिप्टन तेज़ है क्योंकि यह निम्न स्तर की भाषा (सी/सी ++) से संकलित करता है जो अनुमति देता है नियमित जावास्क्रिप्ट की तुलना में अधिक कंपाइलर अनुकूलन के लिए। यही कारण है कि asm.js और LLVM तेज हो सकते हैं। उन्हें गतिशील प्रकार, कचरा संग्रह नहीं है (यह विशेष रूप से स्मृति के लिए ऐरेबफर का उपयोग करना संभव बनाता है) अन्य उच्च स्तरीय विशेषताएं

नीचे की रेखा है। मूल और तेज़ जावास्क्रिप्ट कोड में पाइथोनिक अर्थशास्त्र के साथ एक भाषा संकलित करने के लिए कोई उपकरण मौजूद नहीं है। और अर्थशास्त्र द्वारा आपके मतलब के आधार पर यह असंभव है कि ऐसी चीज दिखाई देगी क्योंकि पाइथन स्वयं में एक धीमी भाषा है।

तेजी से जावास्क्रिप्ट उत्पन्न करने के लिए अभी सबसे अच्छा विकल्प Emscripten है। आप एलएलजेएस पर भी विचार कर सकते हैं या तेजी से जावास्क्रिप्ट लिख सकते हैं (क्रोम के लिए डिबगिंग टूल्स हैं)।

इसके अलावा, आपके प्रश्न के शीर्षक पर विचार करते हुए आप वाक्यविन्यास के बारे में बहुत चिंतित हैं। तुम नहीं होना चाहिए। नौकरी के लिए सही भाषा चुनते समय वाक्यविन्यास कम से कम महत्वपूर्ण कारकों में से एक है।

+0

कोई अपराध नहीं, लेकिन आपको यह समझना होगा कि आपके ज्ञान में ऐसी कोई चीज़ नहीं है। जो काफी अलग है ... शेडस्किन की तरह दिखता है जो नियमित पायथन से 200x तेज हो सकता है, इसलिए आपका बिंदु सही नहीं है और जो मैंने पहले ही इंगित किया है उसे आकर्षित करता है। शेडस्किन एकमात्र तरीका नहीं है, यह केवल कई प्रयासों में से एक है। –

+0

मैं उच्च स्तरीय गतिशील भाषाओं के बारे में बात कर रहा था जो शेडस्किन नहीं है (कोई गतिशील टाइपिंग आदि नहीं है)। यह निश्चित रूप से सच है कि पाइथन का एक प्रतिबंधित सबसेट फास्ट कोड को संकलित कर सकता है। और हां, जाहिर है, मैं केवल अपने वर्तमान ज्ञान के विस्तार से बात कर रहा हूं और तथ्य यह है कि asm.js अभी भी एक बहुत ही युवा परियोजना है। – paldepind

+0

आपको लगता है कि एक गतिशील भाषा को कार्यान्वित करना संभव नहीं है जो कार्य कर सकता है जैसे कि चीजें स्थैतिक और कुशल हों। देरी के लिए आपका मानसिक मॉडल सिर्फ एक मॉडल है। सच्चाई कार्यक्रम और कंपाइलर विशेष रूप से चीजों को तेजी से बनाने के लिए सभी प्रकार की चीजें कर सकते हैं। क्या आप उदाहरण के लिए पीपीपी के बारे में जानते हैं?कच्ची असेंबली भाषा में भाषा बदलने का कोई तरीका नहीं है, कई तरीके हैं। इसके अलावा, शेडस्किन वास्तव में कम से कम कुछ गतिशील टाइपिंग कर सकता है। –

1

चूंकि आपने shedskin स्वयं का उल्लेख किया है, इसलिए मैं इमेजिंग करूँगा कि आप अपने कुछ अनुभव साझा कर सकते हैं (और समझाएं कि आपकी राय में वास्तव में क्या है, इसके अलावा शेडस्किन गुम है, सिवाय इसके कि यह इनपुट एक प्रतिबंधित पायथन व्याकरण है)। मैं यह भी मान सकता हूं कि साइथन/पायरेक्स स्वीकार्य नहीं हैं (कारण भी व्याकरण प्रतिबंध)।

तो shedskin आप के लिए अल्फा चरण में बहुत अधिक है, तो आप Numba परियोजना है, जिसमें LLVM में गतिशील अजगर के साथ-साथ LLVM-py की एक संकलक जो LLVM से जोड़ने के लिए अनुमति देता है की तरह कुछ की तलाश में हो सकता है उजागर रूप में इसी तरह बाईटकोड ctypes साझा पुस्तकालयों को जोड़ने और एलएलवीएम आईआर संकलक बनाने की अनुमति देता है।

यहाँ blog से एक कट जहां यह कैसे एक numpy के लिए JIT के रूप में उपयोग कर सकते हैं Numba दिखाया जाता है (सहित बराबर Cython कोड के साथ प्रदर्शन की तुलना।):

import numpy as np 
from numba import double 
from numba.decorators import jit 

@jit(arg_types=[double[:,:], double[:,:]]) 
def pairwise_numba(X, D): 
    M = X.shape[0] 
    N = X.shape[1] 
    for i in range(M): 
     for j in range(M): 
      d = 0.0 
      for k in range(N): 
       tmp = X[i, k] - X[j, k] 
       d += tmp * tmp 
      D[i, j] = np.sqrt(d) 

Emscripten आप को बेनकाब करने के लिए अनुमति चाहिए और कॉल आपके पायथन -> llvm -> जेएस कोड जैसा वर्णन किया गया है: https://github.com/kripken/emscripten/wiki/Interacting-with-code

+0

दिलचस्प विचार। शेडस्किन वास्तव में प्रयोग योग्य हो सकता है। मैं मौजूदा Emscripten Numba प्रयासों के लिए Googled और किसी भी नहीं मिला। तो क्या इसके लिए पाइथन को एलएलवीएम के साथ-साथ नुम्बा के आउटपुट को एलएलवीएम के रूप में संकलित करने की आवश्यकता होगी? यह काफी बड़ा उत्पादन हो सकता है? –

संबंधित मुद्दे

 संबंधित मुद्दे