The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Компилятор для языка Си, написанный на Shell

03.04.2026 07:47 (MSK)

Александр Гомес Гайгалас (Alexandre Gomes Gaigalas), автор библиотеки coral для создания переносимых shell-скриптов, опубликовал C89cc.sh, компилятор для языка Си, написанный целиком на Shell. Компилятор поддерживает стандарт C89 и может генерировать исполняемые файлы в формате ELF64 для систем x86-64. Код содержит около восьми тысяч строк и открыт под лицензией ISC.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Anthropic опубликовал Си-компилятор, созданный AI-моделью Claude Opus и способный собрать ядро Linux
  3. OpenNews: cproc - новый компактный компилятор для языка Си
  4. OpenNews: Система распараллеливания shell-скриптов PaSh перешла под крыло Linux Foundation
  5. OpenNews: Доступен ShellCheck 0.9, статический анализатор для shell-скриптов
  6. OpenNews: В OpenBSD запретили использование нулевых символов в shell-скриптах
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65133-c89cc
Ключевые слова: c89cc, shell
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 07:51, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    >написанный целиком на Shell

    Какой же нечитаемый этот Shell

     
     
  • 2.6, _kp (ok), 08:52, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Читаемость зависит от того, в каком стиле написано.
    Писал как то на Bash  файл-менеджер и несколько простых игр..  Польза от ПО на скриптах, это чисто спортивный интерес, но с читаемостью все хорошо вышло.

    Что касается c89cc.sh, то оно - нечитаемая "портянка".
    Если уж и писать на скрипте, то можно частично снерировать исходник самим скриптом по правилам, сильно сократив его объем и улучшив понимаемость.

     
     
  • 3.30, Рандрик (?), 14:19, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > нечитаемая "портянка".

    там комментарии есть

     
  • 3.37, Аноним (37), 15:09, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    все нормально читается
     
  • 2.24, Аноним (24), 14:01, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Он не был написан чтобы его читать. Что вы там читать собрались?
    Он написан чтобы работать)
     
     
  • 3.26, Аноним (26), 14:09, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Люди пишут читаемый код, чтобы этот код можно было сопровождать в будущем
    При этом нет никакой гарантии, что написанное тут будет корректно работать при любых условиях - именно поэтому нужно стремиться к тому, чтобы код был читаемый
     
  • 2.35, Аноним (35), 14:47, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это наполовину блоб, со всеми вытекающими. Если в обычном компиляторе парсеры представлены в виде описания грамматик, то здесь они представлены в виде скомпилированных выражений. Скорее всего, данный код написан не руками, а кодогенератором.
     
     
  • 3.44, Аноним (44), 20:40, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > кодогенератором.

    Я как-то видел код формы для delphi (частично в dfm и частично в pas), который делался в excel ;) Что-то похожее было.

     

  • 1.2, Аноним (2), 08:00, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Компиляторы и на более приличных языках выглядят нечитаемо частенько, а тут просто кровь из глаз и ушей
     
  • 1.3, Аноним (-), 08:03, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Ну, теперь я в жизни видел все. Можно и ласты клеить.
     
  • 1.4, мяф (?), 08:12, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    была у меня идея компиляции из типо-шелла в КудаУгодно.
    по идеи должен был быть cs, но компиляемый под почти все.
    альтернатива coral тоже бтв была. и куда удачнее дизайном, производительностью, портабельностью.
    но.. кто в итоге пишет код и ридми на гх, а кто комменты на опеннете ?
     
  • 1.7, КунгфуПанда (?), 08:52, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Однажды старый учитель в монастыре Куй-ня попросил молодого послушника показать ему "хлопок одной ладонью". Долго думал молодой послушник как выполнить просьбу учителя, но ничего не приходило ему на ум.

    И вот на исходе дня молодой послушник предстал перед учителем, склонившись в глубоком поклоне:

    -- Простите учитель я не могу показать вам хлопок одной ладнью. Но я могу показать компилятор для языка Си, написанный на Shell!

    Старый учитель вздрогнул от неожиданности и упал замертво. Улыбка счастья навсегда замерла на его устах.

     
     
  • 2.13, Юрий (??), 11:02, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Хлопок одной ладонью..., легко-
    пощёчина
     
  • 2.15, Аноним (15), 11:39, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Пятница. Выпьем за улыбку счастья.
     

  • 1.8, Анонимчег (?), 08:53, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Следующий шаг - ShellOS?
     
  • 1.9, Аноним (-), 09:08, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > опубликовал C89cc.sh, компилятор для языка Си, написанный
    > целиком на Shell. Компилятор поддерживает стандарт C89

    Опоздал с датой релиза на 2 дня, было бы куда забавнее.

     
     
  • 2.20, Bottle (?), 13:11, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну то есть, он имел такую же скорость, как и сами шелл-скрипты.
     

  • 1.10, Илья (??), 09:09, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Сетевую прозрачность поддерживает?
     
     
  • 2.12, анон (?), 09:50, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее всего подать на вход /dev/tcp/*
     
  • 2.14, Аноним (14), 11:24, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Сетевую прозрачность поддерживает?

    Поддерживает! - Пишешь сетевое приложение и компилишь.

     
  • 2.21, 12yoexpert (ok), 13:18, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    только по оптоволокну
     

  • 1.18, Аноним (18), 12:20, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Жаль, что не Bash, а то бы поучился компилерству.
     
  • 1.19, Аноним (19), 12:56, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Макросы не поддерживает, увы.
     
     
  • 2.22, Аноним (22), 13:32, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Препроцессор в сделку не входил
     

  • 1.23, Аноним (23), 13:54, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Этот чувак наверное в реальной жизни этакий ходячий мем Рука лицо.
     
  • 1.25, Сладкая булочка (?), 14:07, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Теперь нужен компилятор раста на шеле.
     
     
  • 2.43, Аноним (43), 19:34, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Думаешь, на винтах пользователей есть столько свободного места?
     

  • 1.27, Аноним (27), 14:16, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Индийские братишки грызут локти от зависти:

    https://gist.github.com/alganet/2b89c4368f8d23d033961d8a3deb5c19#file-c89cc-sh
    https://gist.github.com/alganet/2b89c4368f8d23d033961d8a3deb5c19#file-c89cc-sh

     
  • 1.29, Tron is Whistling (?), 14:18, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Для бутстрапа - неплохая идея.
     
     
  • 2.31, Сладкая булочка (?), 14:20, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Для бутстрапа - неплохая идея.

    Для этого нужно, чтобы shell был реализован. А так ли его просто реализовать без си?

     
  • 2.32, funny.falcon (?), 14:28, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Для бутстрапа есть GNU компилятор на scheme и их же интерпретатор scheme на ассемблере.

    Интересно, сложно ли сделать интерпретатор scheme на shell?

     
     
  • 3.38, Сладкая булочка (?), 16:25, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Интересно, сложно ли сделать интерпретатор scheme на shell?

    Чтобы shell написать на асме?

     
     
  • 4.45, fazi (ok), 20:44, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    shell скрипты удобно в связке с любым ассемблер без монструозных библиотек
     
  • 2.39, OpenEcho (?), 16:54, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Это barebone компилятор, там не #include не stdio...

    Как сказал Доминик


    > This is Brazil!

    (c) Fast & furious

     
     
  • 3.47, Аноним (37), 21:11, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    #include - препроцессор, он никакого отношения к ЯП иметь не должен, а stdio.h библиотечный код, аналогично к компилятору отношения не имеет.
     
     
  • 4.49, premium user (?), 23:34, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Лол а ведь и вправду, можно ж сишный препроцессор в какой-нибудь котлин вкорячить. Даже немного жаль стало, что у меня нет такой работки чтобы там это провернуть.
     

  • 1.34, Аноним (34), 14:35, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я в своё студенческое время писал канпилер АСМа на Перле. Учитывая мощь регэкспов, шло всё на ура. Но уродская система работы с бинарными массивами всё убила. Так или иначе, написать - можно, но скорость... Лучше сгенерить Си-парсер на каких-нть грамматиках - так будет и быстрее, и надёжнее.
     
  • 1.40, Аноним (40), 17:05, 03/04/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Shell? Хм... Как он это делает? Для GCC бинарный код формирует GNU assembler (gas) имеющий синтаксис AT&T. В любом случае это shell вызывает gas.
     
     
  • 2.46, fazi (ok), 20:47, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Так это я думаю для связки с ассемблерами И задумывалось. Хотя если дальше Visual Studio не вылезать, то конечно это не очевидно.
     
  • 2.48, Аноним (37), 21:15, 03/04/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В любом случае это shell вызывает gas.

    код открой и посмотри, там сам он elf собирает


    # ============================================================
    # ELF64 Header Generation
    # ============================================================
    _BASE_ADDR=4194304  # 0x400000
    _HDR_SIZE=120       # 64 (ELF) + 56 (1 program header)

    _tool_c89cc_write_elf () {

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру