- 1
- 2
- 3
#!/bin/sh
[ ${SHELL} = "/bin/bash" ] || exit "Bash required!"
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
#!/bin/sh
[ ${SHELL} = "/bin/bash" ] || exit "Bash required!"
Support 24.06.2022 20:48 # 0
KOHCOjlbHblu_nemyx 25.06.2022 23:22 # +2
Steve_Brown 27.06.2022 11:10 # 0
guest6 27.06.2022 14:44 # 0
БАШИЗМ НЕ ПРОЙДЕТ!
БАШИЗМ НЕ ПРОЙДЕТ!
Заебал этот ГНУшно-линуксовый шовинизм, если честно. Пишите код так, что бы он на любом позиксовом sh работал
kcalbCube 27.06.2022 15:25 # 0
guest6 27.06.2022 15:44 # 0
я действительно бывает использую gnu make и gcc, но стараюсь по максимуму писать платформонезависимо
но конечно не всигда получается
Steve_Brown 27.06.2022 15:14 # 0
guest6 27.06.2022 15:44 # 0
но не надо так
Steve_Brown 27.06.2022 16:03 # 0
guest6 27.06.2022 16:14 # 0
а что из баш-спесифик ты использовал?
Steve_Brown 27.06.2022 16:26 # 0
CBuHOCO6AKA 27.06.2022 17:01 # 0
guest6 27.06.2022 17:03 # 0
Используй башизмы только если необходимо.
И если уж используешь, то конечно проверяй (как ты и сделал)
ну либо забубень баш в шебанг
#!/bin/bash
Кстати, если в коде есть бошизм, то в шебанг точно нужно указать баш, потому что на прыще могут быть обычный sh и рядом bash, так что лучше явно попросить баш
kcalbCube 27.06.2022 17:08 # 0
guest6 27.06.2022 17:09 # 0
kcalbCube 27.06.2022 17:10 # 0
guest6 27.06.2022 17:18 # 0
Он тебе сгенерит cproj, и ты соберешь его VC
Он же сгенерит тебе Makefile, и ты соберешь его gcc
У тебя будут два нативных бинаря под Linux и windows, и всё будет заебись
Я мог бы еще посоветовать всякие mingw, но ты заранее предупредил, что ты не пидор.
Учти, что ничего сложнее лабы ты всё равно в рамках чистого ANSI C не напишешь, а значит придется дергать API операционок, а делать кондишенал компилешен.
Либо можно взять С++, там чуть больше всего в стандартной либе
CBuHOCO6AKA 27.06.2022 17:22 # −1
guest6 27.06.2022 17:26 # 0
Разве там не эмулят позиксовый апи поверх виндового?
то есть у тебя конечно PE получается (в отличие от цигвина) но в том PE у тебя код-то все равно под юникс, или я путаю?
CBuHOCO6AKA 27.06.2022 17:39 # +2
1. Cygwin — самый толстый. Мумулирует почти всё.
2. MSYS — почти как Cygwin, но полегче. Не стали мумулировать то, что заняло бы много ресурсов.
3. Голый mingw без MSYS — по толщине сопоставим с CRT MSVC или Борманда. Т. е. для лаб годится. Но Мац умудрился под него Руби скомпилировать, не прибегая к MSYS и тем более к Cygwin.
В общем, смотреть нужно, что именно из позиксового API поддерживается каждым рантаймом.
guest6 27.06.2022 17:57 # 0
Просто невозможно написать высокоперформансый код в ОСЬ-АГНОСТИК стиле
Навязжий в зубах уже пример это async io
* kqueue на бзд
* epoll на Linux
* CompletionPorts на Windows
С сипайтоне они это сделали, nodejs сделал это на libuv и пр.
А еще многотредовать, а еще всякие API для работы с дисковым IO...
CBuHOCO6AKA 27.06.2022 18:09 # 0
j123123 28.06.2022 10:16 # 0
ХЕРНЯ.
Если твой код делает некоторую числодробительную хуйню, например у тебя библиотека, которая перемножает матрицы, ей на ОС примерно насрать. Для многопоточности есть кроссплатформенный OpenMP.
А всякое там IO тебя вообще не ебет т.к.
1. Это уже не проблема твоей библиотеки
2. Это не боттлнек
CBuHOCO6AKA 27.06.2022 17:44 # 0
CBuHOCO6AKA 27.06.2022 17:47 # 0
А вот если захочешь форкать или симлинкать, то тебе нужен рантайм потолще.
guest6 27.06.2022 17:54 # 0
Например про write, про питреды, про форк, и прочее isatty
CBuHOCO6AKA 27.06.2022 18:03 # +1
Голый mingw их не поддерживает, нужно дёргать API ОС. Авторам гита не понравилось, что операционки до Висты не поддерживают новые симлинки, они поддерживают только directory junctions, а совсем старые операционки и junctions не поддерживают.
MSYS поддерживает симлинки, но не виндовые, а... собственную мумуляцию. Он создаёт маленький файл с сигнатурой вроде <!symlink>, в котором лежит ссылка на оригинал. Естественно, программы, которые собраны не с MSYS, а с другим рантаймом, воспринимают такие костыли не как симлинк, а как мусор. Этот вариант тоже не понравился авторам гита, хотя они и использовали MSYS при портировании на Винду.
guest6 27.06.2022 19:02 # 0
Там есть джанкшены (но только для папок) и есть симлинки на основе репрс поинтс но не работает без юак
CBuHOCO6AKA 27.06.2022 19:19 # 0
guest6 27.06.2022 19:28 # −1
Support 27.06.2022 20:09 # 0
kcalbCube 29.06.2022 09:23 # 0
KALLLEu 30.06.2022 12:40 # 0
guest6 30.06.2022 13:58 # 0
В них солнце мая, В них любви расцвет!
CBuHOCO6AKA 27.06.2022 17:14 # 0
Ещё бывают скрипты-полиглоты, которые могут выполняться несколькими интерпретаторами.