Касательно простоты голого C (vsb призывается)
От: Shmj Ниоткуда  
Дата: 14.09.24 21:48
Оценка: :)
В продолжение темы
Автор: vsb
Дата: 12.09 09:43
.

Вот, vsb говорит что C простой язык — 45 слов всего нужно выучить. И ни тебе классов ни тебе виртуальных методов ни тебе шаблонов.

Но вот глянуть на стандартную библиотеку — там же нет даже списков (динамических массивов) и словарей. Или я не увидел? А ведь без этого практически ни один проект не обходится.

И вопрос — будете ли вы это писать с нуля каждый раз? Или же заранее знаете о существовании готового кода? Так же о готовом коде — ведь знание этих библиотек, как и что применить — фактически входит в набор минимально необходимого знания, без которого ничего полезного сделать не получится.
Re: Касательно простоты голого C (vsb призывается)
От: DiPaolo Россия  
Дата: 15.09.24 06:00
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>ни тебе классов

зачем?

S>ни тебе виртуальных методов

зачем?

S>ни тебе шаблонов

зачем?

S>списков (динамических массивов)

зачем?

S>словарей

зачем?

S>А ведь без этого практически ни один проект не обходится.

какой проект? не стоит писать на Си перекладывание из базы в ДЖСОН и обратно, вот не стоит. просто поиграться для себя, поизвращаться, устроить себе боль, страдания и мучения, БДСМ и вот это вот все... да пожалста! писать такое в проде – нафейхоа бы оно надо было?!?!?

короче, отвечай для себя на вопросы выше и думай...

не ООП единым и иже с ними депенденсями ижекшнами и прочими паттернами живет мир разработки... ну так, к сведению
Патриот здравого смысла
Re[2]: Касательно простоты голого C (vsb призывается)
От: Shmj Ниоткуда  
Дата: 16.09.24 04:31
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>зачем?

DP>зачем?
DP>зачем?
DP>зачем?
DP>зачем?

Слишком много банального нужно объяснять, и так все знают зачем — вводите в гугле и получаете.

S>>А ведь без этого практически ни один проект не обходится.

DP>какой проект? не стоит писать на Си перекладывание из базы в ДЖСОН и обратно, вот не стоит. просто поиграться для себя, поизвращаться, устроить себе боль, страдания и мучения, БДСМ и вот это вот все... да пожалста! писать такое в проде – нафейхоа бы оно надо было?!?!?

Так и юзер-интефейс пишут, а юзер-интерфейс это всегда дерево объектов, фактически. Пишут все.
Re[2]: Касательно простоты голого C (vsb призывается)
От: Doom100500 Израиль  
Дата: 16.09.24 06:14
Оценка:
Здравствуйте, DiPaolo, Вы писали:

S>>А ведь без этого практически ни один проект не обходится.

DP>какой проект? не стоит писать на Си перекладывание из базы в ДЖСОН и обратно, вот не стоит. просто поиграться для себя, поизвращаться, устроить себе боль, страдания и мучения, БДСМ и вот это вот все... да пожалста! писать такое в проде – нафейхоа бы оно надо было?!?!?

Ну вот есть redis , например. Не то, чтобы мне было понятно почему они избрали именно C, но есть и такое. Там и списки и словари, и, по-моему, джсоны тоже.
Спасибо за внимание
Re[3]: Касательно простоты голого C (vsb призывается)
От: DiPaolo Россия  
Дата: 16.09.24 10:47
Оценка:
S>Слишком много банального нужно объяснять, и так все знают зачем — вводите в гугле и получаете.

Шымж, вот я например пишу видео-енкодер: тот кусок, где голая математика, числодробилка. Надо макси-переносимо на более чем 3 платформы. Плюс свести все с SIMD-ами. Мне вот твои хипстотошно-модные паттерн в пень не уперлись. Мне процедурно нужно все запрограммить. Нафейхоа, еще раз спрашиваю, мне там ООП и прочее???

Ты попробуй пошире помыслить, еще раз те повторяю! не все пишут перекладывания из ДЖСОНа в базку и обратно!

S>>>А ведь без этого практически ни один проект не обходится.

DP>>какой проект? не стоит писать на Си перекладывание из базы в ДЖСОН и обратно, вот не стоит. просто поиграться для себя, поизвращаться, устроить себе боль, страдания и мучения, БДСМ и вот это вот все... да пожалста! писать такое в проде – нафейхоа бы оно надо было?!?!?

S>Так и юзер-интефейс пишут, а юзер-интерфейс это всегда дерево объектов, фактически. Пишут все.

Я тебе про Фому, ты мне про Ерему. Еще раз: сходи и попробуй поперекладывать из БД в ДЖСОН и обратно, где объекты по 30-50 филдов содержат и надо в 3-5-7 табличек сходить. Контроллеры то бишь пописать. Десктоп тут не при чем. Там иначе.
Патриот здравого смысла
Re[3]: Касательно простоты голого C (vsb призывается)
От: DiPaolo Россия  
Дата: 16.09.24 11:00
Оценка:
D>Ну вот есть redis , например. Не то, чтобы мне было понятно почему они избрали именно C, но есть и такое. Там и списки и словари, и, по-моему, джсоны тоже.

Все верно! Редиска должна быть мега-быстрой. И там нет никакой бизнес-логики в ДЖСОНах.

Ну и кстати сейчас глянул: так модуль для работы с ДЖСОНом на касте вообще написан – https://github.com/redisjson/redisjson

Я говорил о том, что у тебя есть сущности системы, которые лежат в базе. Тебе нужно сделать АПИшку, к ней доку сгенерить, и это все отделается наружу на фронт и мобилки, допустим. Нужно написать тонны бойлерплейта на Си, чтобы это все взлетело!

На всех же современных языках, для этого предназначенных, уже все есть! Описал структуру – и она сама умеет через ОРМку или фреймворк ходить в базу и перекладывать с языка базы (любой! почти) в язык моделей. Другая функция – и у тебя есть маршаллинг/демаршаллинг/сериализация/как угодно в ДЖСОН/XML/ini/csv/что угодно еще...

На Си это писать мучение! На плюсах полегче, но и там – трата времени, высокая вероятность ошибки. В общем, дорого.

Вот для примера АПИшка к одной-единственной сущности User. 105 строк с учетом кода сервера. Сколько сотен и тысяч строк кода надо будет на Си и сколько писать+отлаживать?

  https://gist.github.com/mashingan/4212d447f857cfdfbbba4f5436b779ac
package main

import (
    "fmt"
    "net/http"
    "strconv"

    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
    "github.com/labstack/echo"
)

type User struct {
    gorm.Model `json:"model"`
    Name       string `json:"name"`
    Email      string `json:"email"`
}

func handlerFunc(msg string) func(echo.Context) error {
    return func(c echo.Context) error {
        return c.String(http.StatusOK, msg)
    }
}

func allUsers(db *gorm.DB) func(echo.Context) error {
    return func(c echo.Context) error {
        var users []User
        db.Find(&users)
        fmt.Println("{}", users)

        return c.JSON(http.StatusOK, users)
    }
}

func newUser(db *gorm.DB) func(echo.Context) error {
    return func(c echo.Context) error {
        name := c.Param("name")
        email := c.Param("email")
        db.Create(&User{Name: name, Email: email})
        return c.String(http.StatusOK, name+" user successfully created")
    }
}

func deleteUser(db *gorm.DB) func(echo.Context) error {
    return func(c echo.Context) error {
        name := c.Param("name")

        var user User
        db.Where("name = ?", name).Find(&user)
        db.Delete(&user)

        return c.String(http.StatusOK, name+" user successfully deleted")
    }
}

func updateUser(db *gorm.DB) func(echo.Context) error {
    return func(c echo.Context) error {
        name := c.Param("name")
        email := c.Param("email")
        var user User
        db.Where("name=?", name).Find(&user)
        user.Email = email
        db.Save(&user)
        return c.String(http.StatusOK, name+" user successfully updated")
    }
}

func usersByPage(db *gorm.DB) func(echo.Context) error {
    return func(c echo.Context) error {
        limit, _ := strconv.Atoi(c.QueryParam("limit"))
        page, _ := strconv.Atoi(c.QueryParam("page"))
        var result []User
        db.Limit(limit).Offset(limit * (page - 1)).Find(&result)
        return c.JSON(http.StatusOK, result)
    }
}

func handleRequest(db *gorm.DB) {
    e := echo.New()

    e.GET("/users", allUsers(db))
    e.GET("/user", usersByPage(db))
    e.POST("/user/:name/:email", newUser(db))
    e.DELETE("/user/:name", deleteUser(db))
    e.PUT("/user/:name/:email", updateUser(db))

    e.Logger.Fatal(e.Start(":3000"))
}

func initialMigration(db *gorm.DB) {

    db.AutoMigrate(&User{})
}

func main() {
    fmt.Println("Go ORM tutorial")
    db, err := gorm.Open("sqlite3", "sqlite3gorm.db")
    if err != nil {
        fmt.Println(err.Error())
        panic("failed to connect database")
    }
    defer db.Close()
    initialMigration(db)
    handleRequest(db)
}
Патриот здравого смысла
Re[4]: Касательно простоты голого C (vsb призывается)
От: Shmj Ниоткуда  
Дата: 16.09.24 12:26
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Шымж, вот я например пишу видео-енкодер: тот кусок, где голая математика, числодробилка. Надо макси-переносимо на более чем 3 платформы. Плюс свести все с SIMD-ами. Мне вот твои хипстотошно-модные паттерн в пень не уперлись. Мне процедурно нужно все запрограммить. Нафейхоа, еще раз спрашиваю, мне там ООП и прочее???


Я думал у нас тут таких нету, обычно подобные вещи пишут в высшей цивилизации а простым смертным достается работа попроще.
Re[4]: Касательно простоты голого C (vsb призывается)
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 16.09.24 12:59
Оценка: 1 (1) +2
Здравствуйте, DiPaolo, Вы писали:

DP>Шымж, вот я например пишу видео-енкодер: тот кусок, где голая математика, числодробилка. Надо макси-переносимо на более чем 3 платформы. Плюс свести все с SIMD-ами. Мне вот твои хипстотошно-модные паттерн в пень не уперлись. Мне процедурно нужно все запрограммить. Нафейхоа, еще раз спрашиваю, мне там ООП и прочее???


Я бы предпочёл наличие стандартной очереди. Близкая задача, имплементация на С (не моя, конечно). Делают очередь вручную:
static int packet_queue_put(PacketQueue *q, AVPacket *pkt)
{
    AVPacket *pkt1;
    int ret;

    pkt1 = av_packet_alloc();
    if (!pkt1) {
        av_packet_unref(pkt);
        return -1;
    }
    av_packet_move_ref(pkt1, pkt);

    SDL_LockMutex(q->mutex);
    ret = packet_queue_put_private(q, pkt1);
    SDL_UnlockMutex(q->mutex);

    if (ret < 0)
        av_packet_free(&pkt1);

    return ret;
}


Тут же в файле делают вторую чередь вручную:
static Frame *frame_queue_peek(FrameQueue *f)
{
    return &f->queue[(f->rindex + f->rindex_shown) % f->max_size];
}

static Frame *frame_queue_peek_next(FrameQueue *f)
{
    return &f->queue[(f->rindex + f->rindex_shown + 1) % f->max_size];
}

static Frame *frame_queue_peek_last(FrameQueue *f)
{
    return &f->queue[f->rindex];
}


Когда я переписывал этот год пару лет назад на С++, он уменьшился раза в 2 точно при полном сохранении функциональности. Медленнее работать при этом не стал.
Re[5]: Касательно простоты голого C (vsb призывается)
От: DiPaolo Россия  
Дата: 16.09.24 13:14
Оценка: +1
DP>>Шымж, вот я например пишу видео-енкодер: тот кусок, где голая математика, числодробилка. Надо макси-переносимо на более чем 3 платформы. Плюс свести все с SIMD-ами. Мне вот твои хипстотошно-модные паттерн в пень не уперлись. Мне процедурно нужно все запрограммить. Нафейхоа, еще раз спрашиваю, мне там ООП и прочее???

S>Я думал у нас тут таких нету, обычно подобные вещи пишут в высшей цивилизации а простым смертным достается работа попроще.


Это было для примера. Я сам енкодер не пишу. Но я из этой темы и много что приходилось делать.

И нет, я не считаю, что это какая-то "высшая каста". Я говорил лишь о том, что где-то выгоднее и все еще используют Си и там не нужны ООП и прочие современные мейнстримовые модные посылы.
Патриот здравого смысла
Re[2]: Касательно простоты голого C (vsb призывается)
От: пффф  
Дата: 16.09.24 21:01
Оценка:
Здравствуйте, DiPaolo, Вы писали:

S>>ни тебе классов

DP>зачем?

Инкапсуляция


S>>ни тебе виртуальных методов

DP>зачем?

Полиморфизм. Иногда нужно (в каждом втором проекте на сишечке изобретают виртуальные методы)


S>>ни тебе шаблонов

DP>зачем?

Чтобы не писать десять раз одно и тоже, и не городить шаблоны на макросах


S>>списков (динамических массивов)

DP>зачем?

Всё равно придётся писать, а когда есть готовое и отлаженное — это удобно


S>>словарей

DP>зачем?

Всё равно придётся писать, а когда есть готовое и отлаженное — это удобно


S>>А ведь без этого практически ни один проект не обходится.

DP>какой проект? не стоит писать на Си перекладывание из базы в ДЖСОН и обратно, вот не стоит. просто поиграться для себя, поизвращаться, устроить себе боль, страдания и мучения, БДСМ и вот это вот все... да пожалста! писать такое в проде – нафейхоа бы оно надо было?!?!?

ООП нужен только для перекладывания из базы в ДЖСОН и обратно?


DP>короче, отвечай для себя на вопросы выше и думай...


И ты думай


DP>не ООП единым и иже с ними депенденсями ижекшнами и прочими паттернами живет мир разработки... ну так, к сведению


К сведению, ООП так или иначе везде применяется, просто если в языке нет его нативной поддержки, то изобретают свой ООП через костыли, боль и страдание
Re[4]: Касательно простоты голого C (vsb призывается)
От: пффф  
Дата: 16.09.24 21:03
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Шымж, вот я например пишу видео-енкодер: тот кусок, где голая математика, числодробилка. Надо макси-переносимо на более чем 3 платформы. Плюс свести все с SIMD-ами. Мне вот твои хипстотошно-модные паттерн в пень не уперлись. Мне процедурно нужно все запрограммить. Нафейхоа, еще раз спрашиваю, мне там ООП и прочее???


Тут шаблоны явно напрашиваются.


DP>Ты попробуй пошире помыслить, еще раз те повторяю! не все пишут перекладывания из ДЖСОНа в базку и обратно!


Это ты попробуй пошире мыслить, и понять, что бывают не только числодробилки с голой математикой и перекладывание из ДЖСОНа в базку и обратно
Re[4]: Касательно простоты голого C (vsb призывается)
От: Слава  
Дата: 17.09.24 04:59
Оценка: -1
Здравствуйте, DiPaolo, Вы писали:

DP>Шымж, вот я например пишу видео-енкодер: тот кусок, где голая математика, числодробилка. Надо макси-переносимо на более чем 3 платформы. Плюс свести все с SIMD-ами.


Потом твой энкодер-декодер поломают специально подсунутым битым видеофайлом, запустят трояна, а затем человека, у которого этот троян запустили, например посадят.

Дали же вам, инженеграм, Аду, ещё в 83 году — так ведь нет — на сишечке корябать продолжаете.
Re[5]: Касательно простоты голого C (vsb призывается)
От: so5team https://stiffstream.com
Дата: 17.09.24 05:57
Оценка:
Здравствуйте, Слава, Вы писали:

С>Дали же вам, инженеграм, Аду, ещё в 83 году


И 640Kb на все про все. Так ведь нет же, все вам, инженеграм, мало.
Re[4]: Касательно простоты голого C (vsb призывается)
От: Doom100500 Израиль  
Дата: 17.09.24 06:18
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Вот для примера АПИшка к одной-единственной сущности User. 105 строк с учетом кода сервера. Сколько сотен и тысяч строк кода надо будет на Си и сколько писать+отлаживать?


DP> https://gist.github.com/mashingan/4212d447f857cfdfbbba4f5436b779ac


Не справедливости ради, а холивара для, солько сотен и тысяч строк кода в следующих пакетах?:
"github.com/jinzhu/gorm"
"github.com/jinzhu/gorm/dialects/sqlite"


Плюс в пакетах, которые туда импортируются.

Значит вопрос лишь в наличии/отсутствии библиотек.
Спасибо за внимание
Re[6]: Касательно простоты голого C (vsb призывается)
От: Слава  
Дата: 17.09.24 06:32
Оценка:
Здравствуйте, so5team, Вы писали:

С>>Дали же вам, инженеграм, Аду, ещё в 83 году


S>И 640Kb на все про все. Так ведь нет же, все вам, инженеграм, мало.


Вы вроде должны быть в курсе технических подробностей Ады и её версий. Ну и причём тут 640килобайт? На Аде просто ковбойствовать не столь круто, как на Си segfault ловить. Как, знаете, в российском БДСМ-сообществе от бедности любят вместо покупки чего-то нормального изобретать свою кривую ерунду, из деревянных табуреток и бельевых прищепок. Зато творчество. Программисты любят творчество. И покупать ничего не надо, свобода же, если у вас есть тьюринг-полное говно, то значит можно на нём писать, а кто этим брезгует — тот, стало быть, плохой программист. Именно поэтому мы наблюдаем такой прогресс в разработке софта, от Вин95 на 16мб оперативки, до современного сайтостроительства.
Re[7]: Касательно простоты голого C (vsb призывается)
От: so5team https://stiffstream.com
Дата: 17.09.24 06:50
Оценка:
Здравствуйте, Слава, Вы писали:

С>>>Дали же вам, инженеграм, Аду, ещё в 83 году


S>>И 640Kb на все про все. Так ведь нет же, все вам, инженеграм, мало.


С>Вы вроде должны быть в курсе технических подробностей Ады и её версий. Ну и причём тут 640килобайт?


При том, что как 640Kb не хватило, так и возможностей Ada для широкого круга проектов не хватало еще в 1980-х.
Тот же ООП туда, емнип, только в Ada 95 запихнули. А в 1995-ом C++ за счет нужного тогда ООП был уже настоящим мейнстримом и даже Java уже была на подходе.
Re[5]: Касательно простоты голого C (vsb призывается)
От: DiPaolo Россия  
Дата: 17.09.24 08:37
Оценка:
D>Не справедливости ради, а холивара для, солько сотен и тысяч строк кода в следующих пакетах?:
D>
D>"github.com/jinzhu/gorm"
D>"github.com/jinzhu/gorm/dialects/sqlite"
D>


D>Плюс в пакетах, которые туда импортируются.


D>Значит вопрос лишь в наличии/отсутствии библиотек.


Сорняк, третий раз я не буду пытаться донести свою мысль. Непонятно так непонятно
Патриот здравого смысла
Re: Касательно простоты голого C (vsb призывается)
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.09.24 09:20
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Но вот глянуть на стандартную библиотеку — там же нет даже списков (динамических массивов) и словарей. Или я не увидел? А ведь без этого практически ни один проект не обходится.


S>И вопрос — будете ли вы это писать с нуля каждый раз?


Так и происходит — каждый раз с нуля.

Была интересная хохма с GC дотнета. Выложили в интернет его код, ровно один файл 1мб+ весом, и там полный фарш — базовые сишные структуры данных, с нуля, алгоритмы типа сортировок итд На этом фоне сам GC где то потерялся
Re[2]: Касательно простоты голого C (vsb призывается)
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.09.24 09:26
Оценка:
Здравствуйте, DiPaolo, Вы писали:

S>>ни тебе классов

DP>зачем?

S>>ни тебе виртуальных методов

DP>зачем?

S>>ни тебе шаблонов

DP>зачем?

S>>списков (динамических массивов)

DP>зачем?

S>>словарей

DP>зачем?

Это все инструменты для управления сложностью. В Си у вас ничего подобного нет, а потому каждый старается во что горазд. Если приходится писать что нибудь прикладное, код быстро превращается в непойми что.
Т.е. для управления сложность в Си есть функции, массивы, указатели. И всё. В принципе, почти всё то же, что и в ассемблере, только кроссплатформенность получше.
Re: Касательно простоты голого C (vsb призывается)
От: sergii.p  
Дата: 17.09.24 09:36
Оценка: 1 (1) +1
Здравствуйте, Shmj, Вы писали:

S>И ни тебе классов ни тебе виртуальных методов ни тебе шаблонов.


ну плюс же! Никаких проблем с виртуальным деструктором, нет проблем с шаблонами.

В первую очередь, Линус говорит, что использование C++ неизменно приводит программиста к плохим решениям вроде использования библиотек STL или Boost, которые считаются прекрасными.

Однако на деле, по мнению Линуса, они постоянно ломаются, отладка кода становится испытанием, а сам код нестабильный и не портируемый.

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

Если же программист захочет написать хорошее, эффективное и портируемое приложение на C++, он будет ограничен рамками, которые уже хорошо реализованы на языке Си.

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

Линус признался, что в 1992 году они уже пытались использовать C++ для написания Linux. С тех пор, по его мнению, мало что изменилось.


Нельзя не согласиться. Для такого монстра как Linux уже написаны базовые вещи типа списка и переписывание в С++ парадигме ломает совместимость и кучу кода.

Также бесспорно, что для нового проекта использовать С не имеет смысла. Хотя я бы попробовал: интересно. Язык с челенжем. Как раз после универа была возможность, но я её упустил, потому как мозг был засран ООП.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.