LINUX.ORG.RU

Человеческая замена C для своих задач

 ,


0

6

Хочется найти простой кроссплатформенный компилируемый язык для программирования всякой мелочи для себя. Отправной точкой можно назвать C, но хочется поменьше рутины, возможностей на ровном месте выстрелить в ногу и наличия удобных базовых структур, вроде строк, динамических массивов и прочих списков. В кандидатурах сейчас пока C++ (не хочется лезть в дебри именно плюсов, с другой стороны писать в духе C с классами кажется как-то не комильфо), Pascal (начинал с Delphi когда-то, но уже почти не помню), Vala (тыкал немного, напрягает, что надо тянуть Glib и с поддержкой + кроссплатформой не очень), Go, D (на первый взгляд тоже ситуация с поддержкой и библиотеками не радует), Rust (какой-то инопланетный, но идея с управлением памятью интересна).


Ответ на: комментарий от eao197

Ну если для Вас...

Код приложухи для gnome не прикладной, то что такое прикладной софт я тогда и спрашивать боюсь, чесслово. =)

Ну вот те же файлы с данными из одного формата в другой преобразовывать.

Даже по сети. Т.е., сетевой демон ловит файлы (скриншоты) и собирает из них видео. Довольно просто и быстро. Более простые конвертилки и не рассматриваем.

Проблема все так же в головах и язык C по умолчанию все так же лучший выбор?

Да. Проблема в том, что программист на языке Х будет метаться-искать либо новый фреймворк, либо новый язык. Либо что ещё.

А программист на С просто напишет с применением существующих библиотек. Если чел хреново знает свою предметную область, то первый код получится не очень. А дальше чел просто будет совершенствоваться. Но сам по себе язык не такой и сложный, героических усилий тут ненужно.

Moisha_Liberman ★★
()
Ответ на: комментарий от Eddy_Em

выразительность

Чуть чаем не подавился! У этого говна не может быть выразительности. Ты через 3 года если свои исходники откроешь, ничего понять не сможешь

Ты явно квасишь, а не чай пьешь. Видел я твой код на Python. Скажем так, «на любом ЯП можно писать на Fortran», только в твоем случае Фортран надо заменить на Си. Естественно, получается гогно.

Virtuos86 ★★★★★
()
Ответ на: комментарий от eao197

Их предыдущий проект BitSquid Engine был написан на C++.

В геймдеве иногда звучат призывы использовать Orthodox C++. Не знаю, как вам такое.

Возвращаясь к вопросу ТС: лично я у него причин к использованию именно чистого C не увидел.

Тут тоже согласен, просто изначально дискуссия перешла в обсуждение о целесообразности реализации структур данных на C, и тут началось...

goto-vlad
()
Ответ на: комментарий от slapin

Я привёл Перл ввиду того, что он самый зрелый и прагматичный в подходе. Вдобавок XS позволяет даже в Си не лезть с головой для того, чтоб писать быстрые модули. Лучшее из скриптовых сочетание, имхо.

Но да, любой скриптовый язык сочетается с си. Бесспорно.

Deleted
()
Ответ на: комментарий от eao197

А с чего Вы взяли?

Поскольку если человек кроме C ничего не умеет, то это одно. Выбора особо нет. А если умеет, но все равно в современных условиях выбирает чистый C, то для этого должны быть какие-то веские причины.

Нет. Не так. Вы по наиву думаете что сишники ни чего другого не смотрят?

Как говорится на одном известном сайте, «прочное знание С позволяет троллить программистов на других языках». Как минимум, знакомимся с новомодными веяниями.

И причина сознательного выбора С сейчас это выбор и сравнение. Почему-то сравнивают те или иные языки именно с С, реже с С++. Но если сравнивают с С, то зачем что-то, кроме С?

Moisha_Liberman ★★
()
Ответ на: Вы это не серьёзно же? =))) от Moisha_Liberman

Есть такое слово как «абстракция». Слышали? И для различных предметных областей эти самые абстракции и выражение их в коде различны.

И как наличие понятия «абстракция» соотносится с глубокомысленным пуком:

Что предметных областей может быть более чем одна. А язык как раз нет.

Пока не понятно. Что подтверждает подозрение, что связно выражать свои мысли вы не можете. Может быть из-за отсутствия оных.

Ндэ?

Представьте себе. Это сложно, вряд ли у вас получится, но попытаться вы можете: есть языки, на которых даже довольно низкоуровневые вещи пишутся быстрее и надежнее, чем на чистом C. В том числе и работают шустрее и устойчивее.

Ну и, как я понимаю, из экосистемы указанного языка их отковырять, если мне они не нужны в принципе, да?

Вам об этом, наверное, никто не рассказывал, но таки да. И, что характерно, отколупывают. А уж C++ные шаблоные классы вообще не обязаны за собой жирный рантайм таскать.

Для контроллеров бывает полезно иметь сухой и не жирный рантайм.

А теперь обратите внимание, что ТС ничего про микроконтроллеры не говорил.

Есть вещи, которые в приличных местах лучше не упоминать.

Правда? И какие у вас претензии к GC и RAII? Вряд ли вы гнапишете по существу, скорее попытаетесь несмешно пошутить в очередной раз. Но спросить я должен. Вдруг сможете из себя что-то выдавить.

По поводу RAII маленькая демонстрация: это удобный способ не забывать делать то, что должно. Вот Эдди выше сподобился написать программку, которую вы не смогли, и облажался с очисткой памяти. Тогда как RAII помогает в случае подобной забывчивости.

Но вряд ли вы поймете о чем речь, в микроконтроллерах не принято в такие материи заходить.

И много кода на D под Windows мне было бы интересно на linux.org.ru пообсуждать?

При чем здесь Windows?

Ожидаю от Вас отказа от Linux, данного web-сервера (что поделать, они на С) и показа миру и мне своей ОС, веб-сервера на D.

Мне незачем отказываться от того, что уже написано и работает. Как и, например, от Docker-а, написанного на Go. Или от GCC и clang-а, написанных на C++. Или Chrome на том же C++.

Если я выбираю язык для стоящей передо мной задачи, то я не оглядываюсь на то, написано ли ядро Linux-а на C. Особенно если задача с ядром Linux-а не связана ну вообще.

Пока этого нет корона мне впору.

А, так вы идиот в короне. Ну теперь понятно.

eao197 ★★★★★
()
Ответ на: комментарий от goto-vlad

В геймдеве много чего есть, там в каждой конторе свои догмы, еще на раннем этапе собеседования стоит узнать какие религии там приняты, чтоб вдруг в лужу не сесть. DoD там и прочее. Кто-то за stl - кто-то против. Хорошо хоть можно сказать, что будет какое-то подмножество C++ и будут хотеть паттерны и пореже мозг включать, главное выяснить что там да как, а то на собеседовании можно случайно не совпасть с ожиданиями... :)

slapin ★★★★★
()
Ответ на: комментарий от Deleted

На любом более-менее приличном ЯП полно «отличных библиотек». И на питоне, и на перле в том числе. Видимо, дело в погромистах, а не в ЯП. Кстати, про замусоривание головы с приведением типов хорошая была шутка, выдающая клинического перловика).

Virtuos86 ★★★★★
()
Ответ на: комментарий от goto-vlad

В геймдеве иногда звучат призывы использовать Orthodox C++.

Я далек от геймдева. Но даже до меня доходят призывы отказаться от ООП в пользу ECS, а так же то, что вещи, вроде RTTI и исключения там под запретом (в основном).

Ситуация может поменяться, если Саттер продавит свое предложение по более дешевым исключениям. Тогда часть претензий к C++ со стороны gamedev и HFT будут сняты.

Хотя и сейчас в том же HFT на C++ используют аналоги Rust-овского Restult-а (например, в виде Boost.Outcome).

eao197 ★★★★★
()
Ответ на: А с чего Вы взяли? от Moisha_Liberman

Почему-то сравнивают те или иные языки именно с С, реже с С++.

Что-то мне не доводилось встречать сравнения Kotlin-а с С. Или Scala с C.

Встречались сравнения Haskell-я c C, но разве что в плане быстродействия.

Но если сравнивают с С, то зачем что-то, кроме С?

Писать софт быстрее, дешевле, надежнее?

eao197 ★★★★★
()
Ответ на: комментарий от Virtuos86

На любом более-менее приличном ЯП полно «отличных библиотек».

Инфраструктуру уровня metacpan покажешь? Или профайлер уровня nytprof?

Кстати, про замусоривание головы с приведением типов хорошая была шутка, выдающая клинического перловика).

А про однострочники понравилась? Как питонщик, я думаю ты отлично посмеешься с метапрограммирования. Вот уж где смешно так смешно: о проведении типов думать надо, а о метапрограммировании нет. 😁

Deleted
()
Ответ на: комментарий от Virtuos86

Видел я твой код на Python

Лучше бы ты его не видел. И я — тоже. Это был мой нетрадиционный сексуальный опыт. Нафиг! Я теперь пхытона даже длинной палкой касаться не буду. Еще не хватало совсем «этим» стать!

Eddy_Em ☆☆☆☆☆
()

тыкал немного, напрягает, что надо тянуть Glib

Как мне показалось, можно GLib и не тянуть, обходиться компактными классами, писать интерфейсы до сишных библиотек и радоваться жызни. И не пользоваться GLib, конечно же.

Владимир

anonymous
()
Ответ на: комментарий от slapin

Так абдуринщик — это же имя нарицательное для дебила, который в эмбеддед тащит десктопщину. Пишет с применением жирных говнолиб, тащит всякий пхытон туда и т.д., и т.п. Ну и, понятное дело, абдуринщик не вникает в то, что пишет — просто копирует куски кода с разных ресурсов и удивляется, чего это оно у него вместе не работает.

Eddy_Em ☆☆☆☆☆
()
Ответ на: Ну если для Вас... от Moisha_Liberman

Даже по сети. Т.е., сетевой демон ловит файлы (скриншоты) и собирает из них видео. Довольно просто и быстро. Более простые конвертилки и не рассматриваем.

Это прекрасно делается и на C++, и на D, и на Rust-е, и на Go. И даже, вы не поверите, на Erlang-е.

Да. Проблема в том, что программист на языке Х будет метаться-искать либо новый фреймворк, либо новый язык. Либо что ещё.
А программист на С просто напишет с применением существующих библиотек

Не вижу в чем различия между C программистом и не-C-программистом. И тот и другой применяет существующие библиотеки.

Только С программист приседает больше.

Но сам по себе язык не такой и сложный, героических усилий тут ненужно.

Язык простой. Программы на нем сложно писать. Особенно если не для микроконтроллеров.

eao197 ★★★★★
()
Ответ на: комментарий от slapin

Ну если задаться целью ОС можно хоть на javascript'е написать...

К слову обсуждения в соседней ветке Фабриса Беллара с QuickJS, подвиг по написанию эмулятора PC он повторил во второй раз, на... javascript! https://bellard.org/jslinux/

gag ★★★★★
()
Ответ на: комментарий от Deleted

Я как-то видел чужую портянку на XS и мой маленький ffi-тычок под guile. XS показался страшным.

Владимир

anonymous
()
Ответ на: комментарий от eao197

Писать софт быстрее, дешевле, надежнее?

Разве что надежней. А первые два пункта — явная ложь. Я уже говорил о пхытонщиках, которые даже с использованием всех своих говнолиб пишут так же долго, как и я на С. И при этом мой результат значительно шустрей работает. Да, я — не программист, у меня бывает утечка памяти и еще какие косяки. Зато мой код работает и делает то, что мне нужно! А косяки я при необходимости исправлю, а может и не исправлю, а как это принято, объявлю их фичами.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от slapin

Дык, а чего ж не на аврках под абдуриной тогда? Вообще классно можно сэкономить: абдуринщик за миску риса набыдлокодит за пару вечеров какую-нибудь НĒХ…

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от goto-vlad

C++ шаблоны засоряют заголовочные файлы деталями реализации, замедляют компиляцию, и, зачастую, сообщения об ошибках сложны для восприятия

Все пункты так себе, но этот вообще фейспалм. Можно подумать, в си есть лучшая альтернатива шаблонам. А в C++ будто бы её же нет.

anonymous
()
Ответ на: Вы это не серьёзно же? =))) от Moisha_Liberman

Ожидаю от Вас отказа от Linux, данного web-сервера (что поделать, они на С) и показа миру и мне своей ОС, веб-сервера на D.

Кстати, на C++ оно есть: Genode, BeOS, Fuchsia, Ghost, Haiku, IncludeOS, OSv, Palm OS, ReactOS, Syllable.

gag ★★★★★
()
Ответ на: комментарий от eao197

За Вас надо всё делать? =)))

Что-то мне не доводилось встречать сравнения Kotlin-а с С.

А это что? https://www.slant.co/versus/113/1543/~c_vs_kotlin

Или Scala с C.

https://www.slant.co/versus/113/116/~c_vs_scala

Писать софт

В Вашем случае это ненужно. Поверьте моему опыту... =)))

Moisha_Liberman ★★
()
Ответ на: комментарий от Deleted

На любом более-менее приличном ЯП полно «отличных библиотек».

Инфраструктуру уровня metacpan покажешь? Или профайлер уровня nytprof?

Я не знаю, что там за уровень перечисленных вундервафлей, но не вижу ничего удивительного, что на неком ЯП сделано что-то, чего не сподобились создать на прямых конкурентах. Ответь мне только, зиждется ли моща Метаспана на однострочниках? Или на XS модулях? Ну, чтобы я проникся этими киллерфичами. Иначе придется признать, что перечисленные тобой инструменты были просто написаны на Перле, потому что их авторам захотелось написать их на Перле, а не на Руби, например).

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Выбор есть: RPerl, inline::C, ffi, XS, C. Как душе угодно. Вырвиглазно можно писать и на питоне)

Deleted
()
Ответ на: комментарий от eao197

Преклоняюсь перед Вашим опытом.

Но в таком случае:

Только С программист приседает больше.

Справедлива поговорка что если не доходит через голову, то дойдёт через жо... эээ... через руки.

Как правило, у нормального программиста для его предметной области всё готово и сниппеты и набор либ. Больше областей, с которыми он знаком, больше либо и сниппетов в активе.

Сколько там остальные по клаве барабанят, это не важно. =)))

Не вижу в чем различия между C программистом и не-C-программистом.

Вы действительно хотите чтобы я Вам это сказал? Там выше Ваши комменты, я на них позже отвечу. Но ответ Вам не понравится. =)))

Moisha_Liberman ★★
()
Ответ на: комментарий от Deleted

Вроде либ много но постоянно какая то дичь! Вечные wide character in X, для XML::Simple нужно подбирать флаги что бы оно просто смогло в себя загрузить xml, Date::Time (если прально помню название модуля) умеет работать онли с koi-8, новых модулей почти нету, итд.

Deleted
()
Ответ на: комментарий от Virtuos86

Ответь мне только, зиждется ли моща Метаспана на однострочниках? Или на XS модулях?

Моща метакпана - прямое следствие мощи языка, который включает в себя удобство однострочников, связки с Си через самые разные подходы, и не только Си (можно инлайнить питон, руби, етц).

Ну, чтобы я проникся этими киллерфичами.

Вероятно тебе они не нужны. В любом треде, где разговор пойдёт о мощи языков, их выразительности, питонисты могу ответить разве что «ненужно». Больше крыть нечем.

А, ещё везде видят способ отстрелить себе голову, или руки и ноги. 😁

Deleted
()
Ответ на: комментарий от Eddy_Em

Мало нёха влезает в аврку. Тем более что на под абдурину сейчас чаще пишгут нормальные такие эмбеддед сишники, так как делать свою плату в маленькой партии дорого, а можно взять 100 китайских «ардуин» за $3 штука и сделать шилдики к ним лутом. А на Qt пишут в основном когда GUI нужен и какой-то моск. Ну вот некоторые вообще пилят что-то на вебне и к этому прикручивают GUI на Qt, в итоге железкой можно по http рулить или с своего экранчика. У нас конечно умеют взять 10 аврок с обвесом и сделать то, что можно на каком-нить allwinner-a13 запилить на одной плате с себестоимостью одной штуки при одноштучном производстве за $50, сделать монстра на аврках за $300 при обновлении экрана раз в 10 секунд (видел прототип рекламной панели).

Просто когда нужны фичи embedded linux и более мощные процы заруливают аврки по цене. Конечно можно факапить при разработке, и если нет людей, способныхь кодить под что-то кроме аврок, тут выбора нет, видел и такое, тут риск слишком большой.

Люди часто ставят себе такие ограничения - прожить всю жизнь и умереть в одном городе, одной стране, не выезжая за пределы, изучать только один язык программирования, писать только под одну платформу. И таких полно успешных, так что не могу сказать, что это плохой выбор, вон жабщики как отдельная каста, они практически элита в своем мире, пишут банковский софт и получают за это бабло. Так что люди, умеющие только аврки, достаточно востребованы и работают, пилят железки, решая весь спектр железячных задач на них, иногда прикручивая FPGA и техасовсовское старье для DSP.

Они нехило экономят бюджет RnD, да, железо получается не слишком эффективным, но результат получается более предсказуемым, что очень радует менеджмент.

slapin ★★★★★
()
Ответ на: комментарий от gag

Не совсем С++.

Вообще-то, в 1996г., когда она на свет появилась, С++ был не слишком распространён. Да и SDK под неё, насколько я помню, в большей степени был ориентирован на С. Так что, насчёт «чистого С++» я тут как минимум не уверен. И уж точно что в 1996г. С++ был несколько не таков, как сейчас.

И да, я просил на D.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: комментарий от Deleted

Зависит от кода. Иногда достаточно включить юникод. Иногда вывод std перевести в юникод. Иногда строку закодировать/перекодировать явно.

Deleted
()
Ответ на: комментарий от Deleted

Начни с кэмелбук. И дичь исчезнет.

Deleted
()
Ответ на: комментарий от ugoday

А CL или TCL надо от кого-то защищать? tcl - встренный язык, CL это лисп вроде. Да и C вроде как в защите не особо нуждается...

slapin ★★★★★
()
Ответ на: комментарий от Deleted

Чаще всего этого не нужно. Тогда просто запускай программу с подгрузкой модулей:

perl -X -Mutf8 -Mopen':std :utf8' program.pl

Если код написан без учёта уникода, тогда да, правь код. Ну а как ещё?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: Это, к сожалению, правда. от Moisha_Liberman

Отрицать убогость сишки как-то странно. Я молчу про безопасность. Дайте мне хотя бы нормальную систему сборки, модули, неймспейсы, методы у структур и raii.

RazrFalcon ★★★★★
()
Ответ на: комментарий от eao197

А нет, особо одаренные для RAII расширения из GNU C смогут использовать.

Разве оно отработает для union (ака костыльный ADT)?

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

Отрицать убогость сишки как-то странно.

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

методы у структур

Это было бы странно, когда разрабатываются алгоритмы, работающие со структурами, а не наоборот.

gag ★★★★★
()
Ответ на: комментарий от eao197

Ведь выставить из C++ного или Rust-тового кода чисто C-шный API — это сложно, тут думать нужно, разделять интерфейс и реализацию.

Но зачем? Ведь можно мешать C и C++, как это делает blend2d (по ссылке очень специфический код) или harfbuzz. Последний хотя бы legacy, можно понять.

RazrFalcon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.