Daha iyi sözdizimi ile C'ye aktarılan bir dil var mı? [kapalı]


19

CoffeeScript, Ruby'den esinlenilen temiz bir sözdizimiyle JavaScript'e aktarılan bir dildir. Performanstan ödün vermeden daha okunabilir koda izin veren C'ye aktarılan benzer bir dil var mı? Böyle bir şey yoksa, onu yaratmamak için iyi bir neden var mı?


10
Ancak, "C derleme" ile "orijinal C programları kadar hızlı" ile eş anlamlı olmadığını unutmayın . Bir şey C derlediğinde, genellikle normal bir insanın C'ye yazacağı koddan çok (veya tamamen) farklı kod üretir. Normalde elle yazdığınızdan çok daha yavaş (veya bazen daha hızlı) olabilir.
Jerry Coffin

4
Bu cevapların hiçbiri hakkında sevmediğim şey, Vala gibi tamamen farklı diller önermeleri. CoffeeScript ile ilgili olan şey, Javascript olması, ancak farklı bir sözdizimine sahip olmasıdır.
Prof Falken Monica destekler

2
pascal mı, fortran mı?

5
Gerçekten "transcompile" kelimesinin ölmesini diliyorum. "Derleme" ve "derleyici". Çıktı dili x86 olmadığı için yeni bir kelimeye ihtiyacınız yok (ve bunu düşünüyorsanız, derleyicileri anlamıyorsunuz).
Leushenko

2
Transpile kelimesi , kodu aynı anlamsallığa sahip başka bir dilin kaynak koduna çevirmek anlamına gelir (veya son zamanlarda ortaya çıkmıştır ) , tipik olarak eşdeğer ifade ifadesi (kaynak haritanın da oluşturulmasına izin verir). Hiç kimse, transpillerin derleyicilerden farklı bir şey yaptığını iddia etmiyor. Transpiller belirli bir derleyici türüdür.
Carl Smith

Yanıtlar:


23

CoffeeScript, JavaScript'i çok basit bir nedenden dolayı derler, JavaScript de facto istemci tarafı dilidir ve sunduğu tüm alternatif bir sözdizimi olduğunda tarayıcı satıcılarının yerel olarak CoffeeScript'i desteklemesini beklemek mantıklı olmaz.

Çok benzer bir şekilde, C çevirmenleri için üst düzey dilin ana noktası hemen taşınabilirliktir, çünkü neredeyse her platform için bir C derleyicisi ve bol miktarda C kütüphanesi vardır. Vala , örneğin, olduğu için tasarlanmış :

  1. GObject için bir derleyici olun ,
  2. yerel yürütülebilir dosyalar oluşturma (makinenin C derleyicisi aracılığıyla),
  3. referans saymayı otomatikleştirin ve
  4. hala GNOME C programcıları tarafından erişilebilir

GNOME geleneksel olarak C odaklı bir projedir ve GObject özellikle C dilinde yazılmıştır, Vala, daha doğal doğası (ve sözdizimi) ne olursa olsun, makine koduna derlenirse GNOME geliştiricileri arasında muhtemelen çok fazla sevgi bulamaz. Herkes sözdiziminden hoşlanmıyor gibiydi, başka bir dil olan Genie'nin bunu geliştirmek için inşa edildiği noktaya kadar.

C ++ örneği için Facebook , PHP'den C ++ 'ya çevirmen olan HipHop'u geliştirdi . Tüm PHP kodlarını değiştirmek ve mühendislerini yeniden eğitmek zorunda kalmadan (veya en kötüsü, onları değiştirmeden) çok özel bir sorunu, CPU kullanımını çözmeye çalışıyorlardı. Facebook ölçeklenebilirlik sorunları iyi, benzersiz olduğundan ve yine ara C ++ koduna erişime sahip olduğundan, PHP uzantıları C ve C ++ ile yazıldığı için bu çok daha spesifik bir örnektir.

Bu nedenle, üst düzey bir dilden diğerine bir çevirmen, çoğunlukla ara koda eriştiğinizde iyi bir fikirdir. CoffeeScript için, geniş tarayıcı uyarlaması nedeniyle JavaScript kodu ve mevcut kod tabanı nedeniyle Vala, Genie ve HipHop için gereklidir. Açıkçası ara koda erişim, gerekirse kodu daha da optimize edebileceğiniz anlamına gelir.

Ancak genel olarak konuşursak, sonuçta ortaya çıkan kodu kullanmadıysanız, C'ye veya başka bir dile çeviren bir dil oluşturmak iyi bir fikir olmaz. Orada çok fazla dil var, eğer C ile başa çıkamazsan, sadece başka bir dil seç. Tesadüfen, Bjarne Stroustrup, CFront tarafından yazılan ilk C ++ derleyicisi, Classes to C çevirmenine sahip bir C idi, ancak bunun nedeni esas olarak yeni bir dil olarak C Classes ile önyükleme yapmak imkansızdı .


3
Bir de Nim var.
noɥʇʎԀʎzɐɹƆ

Swift de C'ye derlenebilir.
Quazi Irfan

9

Yannis Rizos'un başka türlü büyük cevabında vermediği birkaç noktayı ele alacağım .

Evet, birçok dil var. C, derleyici arka uçları için ortak bir hedeftir, çünkü inanılmaz derecede taşınabilir ve yoğun bir şekilde optimize edilmiştir, ancak LLVM ile bunun pek bir anlamı yoktur.

Bunu bildiğim birkaç uygulama:

  • C ++ (En azından ilk günlerde)
  • GHC Haskell (Ana kod üreticisi C-- olmasına rağmen)
  • Gambit / Tavuk / Bigloo Düzeni
  • ECL (Ortak Lisp)
  • Perl
  • Vala ve Cin

orijinal C programları kadar hızlı

Hayır, sadece C'yi bir ara dil olarak kullanması, hızına erişeceğiniz anlamına gelmez. C'nin hızlı olmasının nedeni, diğer diller için açıkça farklı olan kod yazma yöntemidir. Sadece taşınabilir bir montaj, özel bir şey değil.


1
C montajdan çok uzakta ...
Sarge Borsch

1
Bazı insanlar C'yi "üst düzey montajcı" olarak düşünür. Makineye oldukça yakın, ama tabii ki bir grup opcode değil.
dstromberg

6

Rock , C99 kaynağı üreten bir ooc derleyicisidir. Ooc-lang nesneler, birinci sınıf fonksiyonları ve pembe tek boynuzlu at ile bir programlama dilidir. Ooc dinamik dil ve şimdiye kadar uzaklaşır. Daha yağlı ve daha yavaş c kodları üretir. u ihtiyaç paketi için daha fazla modifiye gerekir. Ancak bu iyi bir başlangıç ​​noktasıdır.



4

OCaml bayt kodunu derleyebilir, yerel koda çevirebilir, doğrudan yorumlanabilir veya C'ye derleyebilir .


1
ne yaptığını ve neden sorulan soruya cevap vermesini öneriyorsunuz? "Yalnızca bağlantı yanıtları" Stack Exchange'de pek hoş karşılanmıyor
gnat

3
Cevabımın "yalnızca bağlantı yanıtı" olduğunu göremiyorum. Aslında, bağlantıyı kaldırabilirim ve yine de geçerli bir cevap olurdu. Soru "X yapan bir dil var mı" ve cevabım "Y'nin X yapıyor". Bu yorum Bilijk'in cevabı için de geçerlidir.
barjak

3
  • Bjarne Stroustrop'un orijinal C ++ derleyicisi "cfront", C ++ 'dan C'ye derledi ve bu da isteğe bağlı olarak nesne kodunu üretmek için C derleyicisini çalıştırıyordu. C ++ alabileceğiniz gibi "teorik olmayan" hakkında
  • Unix "yacc" ve GNU "Bison" derleyici-derleyicileri giriş dillerini C'ye çevirir. Birçok, onlarla birlikte birçok karmaşık sistem yazılmıştır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.