cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
91 stars 0 forks source link

Разрешить shebang в C++ #580

Open sergii-rybin-tfs opened 1 year ago

sergii-rybin-tfs commented 1 year ago

Разрешить shebang в C++ препроцессоре

Пожалуй C++ один из немногих популярных языков программирования где компилятор всё ещё запрещает shebang.

В итоге на C++ проектах можно увидеть целый зоопарк разных скриптов написанных на bash/ch/perl/python/go для решения задач связанных со сборкой, тестированием или деплоем.

Эта фича вместе с #558 может открыть новую сферу для применения C++ которую до этого занимали скриптовые языки.

Полезные ссылки:

eoan-ermine commented 1 year ago

Зачем это нужно, если всё и так работает?

/usr/bin/c++shell

#!/bin/bash

msg_file=/dev/null
#msg_file=/dev/stdout

tmp_path=$HOME"/.cache/c++/"
mkdir -p $tmp_path
tmp_file=$1".c++"
exe_file=$1".bin"
if test $1 -nt  $tmp_path$exe_file; then
    echo "Need to recompile.." > $msg_file
    tail -n +2 $1 > $tmp_path$tmp_file
    eval "g++ -o $tmp_path$exe_file $tmp_path$tmp_file > /dev/null 2>&1"
    if [ $? -eq 0 ]
    then
    echo "Compiled ok" > $msg_file
    else
    echo "Compile error" > $msg_file
    exit 255
    fi
fi
eval "$tmp_path$exe_file $@1"

test.cpp

#!/usr/bin/c++shell

#include <iostream>

int main() {
   std::cout << "Hello, world!\n";
}

Shell

eoanermine@eoanermine: ~$ ./test.cpp
Hello, world!
sergii-rybin-tfs commented 1 year ago

Зачем это нужно, если всё и так работает?

Есть более красивое решение в 2 комментария в cpp файле. Без дополнительного скрипта.

Но сам файл от этого не станет валидным cpp файлом.

incoder1 commented 9 months ago

Лучше тогда уже делать еще один ISO стандарт на СMake.