Чи існує мова, яка перекладається на C, з кращим синтаксисом? [зачинено]


19

CoffeeScript - це мова, яка перетворюється на JavaScript, із чистим синтаксисом, натхненним Рубі. Чи існує схожа мова, яка перекладається на C, що дозволяє отримати більш читабельний код без шкоди для продуктивності? Якщо нічого подібного не існує, чи є вагомі причини не створити його?


10
Однак зауважте, що "компілюється в C" не є синонімом "швидкості, як оригінальні програми C". Коли щось компілюється в C, він часто генерує код, досить (або повністю), відмінний від того, що пише нормальна людина в C. Це може бути значно повільніше (а іноді і швидше), ніж те, що ви зазвичай пишете вручну.
Джеррі Труну

4
Що мені не подобається в жодній із цих відповідей, це те, що вони пропонують абсолютно різні мови, наприклад, Vala. Справа в CoffeeScript полягає в тому, що він є Javascript, але з іншим синтаксисом.
Проф. Фолкен підтримує Моніку


5
Я дуже хочу, щоб "транскомпіляція" (слово) просто померла. Це "компілювати" і "компілятор". Нове слово вам не потрібно лише тому, що мова виводу не x86 (і якщо ви вважаєте, що це так, ви не розумієте компіляторів).
Левшенко

2
Слово transpile означає (або останнім часом означає) перекласти код у вихідний код іншої мови з тією ж семантикою , як правило, заява для еквівалентного оператора (що дозволяє також створити карту джерела). Ніхто не стверджує, що транспілятори роблять щось інше, ніж компілятори. Транспілятори - це специфічний тип компілятора.
Карл Сміт

Відповіді:


23

CoffeeScript компілюється в JavaScript з дуже простої причини, JavaScript є фактичною мовою клієнтської сторони, і було б нерозумно очікувати, що постачальники браузерів вдруге підтримують CoffeeScript, коли все, що він пропонує, є альтернативним синтаксисом.

У дуже схожий спосіб головна суть мови високого рівня для перекладачів C - це негайне перенесення, оскільки є компілятор C майже для кожної платформи та велика кількість бібліотек C. Наприклад, Вала був розроблений для :

  1. бути компілятором для GObject ,
  2. створювати власні виконувані файли (через компілятор машини C),
  3. автоматизувати підрахунок довідок та
  4. як і раніше доступні програмістам GNOME C

GNOME - це традиційно орієнтований на C проект, а GObject спеціально написаний на мові C, Vala, мабуть, не знайде великої любові серед розробників GNOME, якби він компілювався до машинного коду, незалежно від його дружнішого характеру (та синтаксису). Не всім здавалося, що синтаксис подобається, що інша мова, Genie , була побудована для вдосконалення.

Для прикладу C ++ Facebook розробив HipHop , перекладача PHP на C ++. Вони намагалися вирішити дуже конкретну проблему - використання процесора, не потребуючи заміни всіх своїх PHP-кодів та перепідготовки своїх інженерів (або, що найгірше, замінити їх). Це набагато конкретніший приклад, оскільки проблеми масштабованості у Facebook є унікальними, і знову-таки доступ до проміжного коду C ++ може бути корисним, оскільки розширення PHP записуються на C та C ++.

Тож перекладач з мови високого рівня на іншу є гарною ідеєю здебільшого, коли потрібен доступ до проміжного коду. Для CoffeeScript код JavaScript необхідний через його широке використання браузера, а для Vala, Genie та HipHop - через існуючу базу коду. Очевидно, що доступ до проміжного коду означає, що ви можете додатково оптимізувати його за потреби.

Але загалом кажучи, не було б такою хорошою ідеєю будувати мову, що перекладається на C, або будь-яку іншу мову, якби ви не використовували отриманий код. Тут так багато мов, якщо ви не можете впоратися з C, просто виберіть іншу. Випадково перший компілятор C ++, написаний Bjarne Stroustrup, CFront, був перекладачем C з Classes to C, але це було головним чином тому, що як нова мова, неможливо завантажувати C з класів.


3
Там також Нім.
noɥʇʎԀʎzɐɹƆ

Swift може також компілювати на C.
Куазі Ірфан

9

Я хочу висвітлити кілька моментів, які Янніс Різос не відповів у своїй інакшій чудовій відповіді.

Так, існує багато мов. C - це загальна ціль для компіляторів, оскільки вона неймовірно портативна і сильно оптимізована, хоча з LLVM це не так багато сенсу.

Я знаю кілька реалізацій, які роблять це:

  • C ++ (принаймні, в перші дні)
  • GHC Haskell (Хоча основним генератором коду є C--)
  • Схема гамбіта / курки / біглу
  • ECL (звичайний Lisp)
  • Perl
  • Vala & Genie

так само швидко, як оригінальні програми на С

Ні, тільки те, що він використовує C як проміжну мову, не означає, що ви досягнете його швидкості. Причина C швидка - в тому, що метод написання коду очевидно відрізняється від інших мов. Це просто портативна збірка, нічого особливого.


1
C знаходиться дуже далеко від зборів ...
Сержант Борш

1
Деякі люди вважають С як "асемблером високого рівня". Це досить близько до машини, але, звичайно, це не купа опкодів.
dstromberg

6

Rock - компілятор ooc, який генерує джерело C99. OOC-Ланг це мова програмування з об'єктами, функціями першого класу і рожевих єдинорогів. МНК є динамічний мову і йде так далеко. Він генерує жирніші та повільніші коди с. вам потрібно більше модифікованих, щоб відповідати вашим вимогам. Але це хороший вихідний момент.


4

Vala та Genie - це обидві мови, які компілюються у компіляцію C. haxe в C ++, але я не впевнений, що саме цього ви хочете.


2
Ви б не хотіли трохи розширити те, що має кожен із цих ресурсів, і чому ви рекомендуєте їх відповідати на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на біржі стеків
gnat

4

OCaml може скласти в байт - код, в машинний код, можна інтерпретувати безпосередньо, або може скласти до С .


1
Ви б не хотіли пояснити детальніше про те, що це робить, і чому ви рекомендуєте це відповісти на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на Stack Exchange
gnat

3
Я не бачу, як моя відповідь є "відповіддю лише на посилання". Насправді я міг би видалити посилання, і це все одно буде дійсною відповідь. Питання "Чи існує мова, яка робить X", і моя відповідь - "мова Y робить X". Цей коментар стосується і відповіді Білійка.
barjak

3
  • Оригінальний компілятор C ++ Bjarne Stroustrop, "cfront", компілював C ++ на C, після чого, можливо, запустив компілятор C для створення об'єктного коду. C ++ приблизно такий "нетеоретичний", як ви можете отримати :-)
  • Компілятори-компілятори Unix "yacc" і GNU "Bison" перекладають свої вхідні мови на C. Багато, багато складних систем написано з ними.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.