2011-08-18 21 views
31

Büyük Python modüllerim var (+8000 satır). Temel olarak, donanım sicillerini okuyarak ve yazarak, seri bağlantı noktası aracılığıyla bir donanım platformuyla etkileşim için tonlarca işlev var.Cython'u Python olarak C Dönüştürücüsü olarak kullanın

Sayısal algoritmalar değildirler. Yani uygulama sadece okuma/yazma için yazmaç kayıtlarına/belleğe. Özel kütüphaneler yazmak için bu kütüphaneleri kullanıyorum. Sonunda, daha iyi bir kontrole sahip olmak için donanımımdaki gömülü bir işlemcide çalıştırılmak üzere tüm bu şeyleri hareket ettirmem gerekiyor, o zaman ben sadece olayı PC'den başlatıyorum ve gerisi donanımda.

Bu nedenle, C dosyasına dönüştürmem gerekiyor. Komut dosyalarının otomatik bir araçla C'ye dönüştürülmesini sağlayabilirim, bu da bana çok zaman kazandıracak. Bu yüzden Cython'a çekildim. Verimlilik önemli değil benim kodlarım saymcı değil. Ancak üretilen kod sınırlı belleğime (birkaç yüz Kilobayt) sığacak kadar küçük olmalıdır.

Cython'u özel Python komut dosyalarım için dönüştürücü olarak kullanabilir miyim? Tahminim evet, hangi durumda donanımımda çalıştırılacak bu .c dosyalarını kullanabilirim? Tahminimce, donanımımda Cython'um olması ve çalıştırmaları gerekiyor. Ama sadece bazı .c dosyaları oluşturursak, kod Python'un pek çok özelliğini kullanmıyor, sadece komut dosyasını uygulamak için hızlı bir şekilde kullanabileceğinden, bunu yapabilir ve tek başına yapabilirim.

+0

Gerçekten bunu yapan hiç kim başarılı oldu? Bunun hata ayıklaması çok zor olacağını hissediyorum. Ben gerçekten Cython/PyPy ile kendimi yapmak istiyorum, ama bu test etmek çok ilginç olabilir gibi görünüyor ... – radix07

cevap

40
  1. Evet, özünde, bu Cython'un yaptığı şeydir. Ama ...
  2. Cython'a ihtiyacınız yok, ancak libpython'a ihtiyacınız var. Bu pek çok Python özelliğini kullanmıyormuş gibi hissedebilirsiniz, ancak sanırım bunu denerseniz, bunun doğru olmadığını göreceksiniz - Python'u kullanırken programınızı libpython bağımlılığından ayıramayacaksınız. dil.

Diğer bir seçenek, özellikle de translation toolchain, DEĞİL PyPy Python yorumlayıcısı var, PyPy olduğunu. Bu, Python dilinin bir alt kümesi olan RPython'u C'ye çevirmenize izin verir. Çok sayıda Python dili özelliği veya kitaplığı gerçekten kullanmıyorsanız, bu işe yarayabilir.

PyPy çoğunlukla alternatif bir Python uygulaması olarak bilinir, ancak aynı zamanda dinamik dilleri çeşitli biçimlerde derlemek için bir takım araçlardır. Bu, Python'un (R) Python'da yazılan PyPy uygulamasının makine koduna derlenmesini sağlayan şeydir.

C++ kullanılabilirse, Nuitka, sadece Python için çalışan bir Python'dan C++ derleyicisidir, yalnızca RPython'a değil (Shedskin ve PyPy'nin kullanımı).

+0

Yani size veren bir çevirmen mi? Ben hızlı yapmak için python özel bir uygulama olduğunu düşündüm.Ben hızlı benim endişem değil. –

+0

Cevabı daha yakından okuyun. PyPy, __two things__, Python'un bir uygulaması ve bir Python çevirmeni/derleyicisi. İlkini sen istemiyorsun, ikincisini istiyorsun. Bağladığım çeviri araç zinciri, ne istediğiniz hakkında ayrıntılara sahiptir. – agf

+1

Sorularıma doğrudan yanıtlar eklemek için yayınımı güncelledim. – agf

2

Bu gömülü platform için C++ kullanılabilirse, shed skin vardır, python'u C++ 'ya dönüştürür.

+2

ShedSkin hakkında duydum ama güvenemiyorum.Cython daha sağlam ve çok olumlu eleştiriler ile yaygın olarak kullanılan görünüyor . –

+0

C++ için Pythran da var. – boardrider

İlgili konular