LINUXTALKS.CO

Одни люди придумали C++, а потом пришлось придумывать умные указатели.

Другие люди придумали сборщик мусора, а потом пришлось вкорячивать dispose паттерн.

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

kevlarbeaver    

Windows / Chrome (DE)
Ответ на: комментарий от MrSugoma

Я не говорю, что в веб-разработке он нужен

Говоришь. Ты буквально сказал: «А надо было не отходить от C» на мой комментарий, где сказано в том числе про языки со сборкой мусора.

для HTTP-бекенда нужен PHP

PHP отошёл от C. В PHP есть сборка мусора и есть строки. А ещё он - говно. Для бекенда есть нормальные языки типа Java или C#.

Отсутствие строк — это плюс.

В PHP есть строки. Во всех нормальных языках есть строки. Кроме разве что C и всяких ассемблеров.

kevlarbeaver    

Windows / Chrome (DE)
Ответ на: комментарий от kevlarbeaver

Ты буквально сказал: «А надо было не отходить от C» на мой комментарий, где сказано в том числе про языки со сборкой мусора.

Я про программы, а не сайтики.

А ещё он - говно.

Почему? И вообще, ты на нем писал? На PHP Nocord и Noges сделаны.

Для бекенда есть нормальные языки типа Java или C#.

Эти языки вообще ни для чего не годятся. А PHP представляет собой удобный набор инструментов.

В PHP есть строки.

Когда надо быстро сайт сделать, они удобны.

Во всех нормальных языках есть строки.

В языке с указателями они не нужны.

MrSugoma    
★★
Windows / Firefox (RU)
Ответ на: комментарий от kevlarbeaver

с одним небольшим расширением (доступно в gcc/clang) сишка прекрасно годится и для уёб-разработки. Хотя null-terminated строки всё-таки не очень эффективно, это всё равно работает быстро на старых 486 компах (да, умельцы на них activitypub сервера пускают)
https://codeberg.org/grunfink/snac2/src/branch/master/html.c#L459
Суть расширения - аттрибут cleanup, который позволяет освобождать память автоматически.
Как это работает? В проекте выше реализованы контейнеры для строк, списков, словарей (типа json или dict в python) в виде линейной структуры. Когда буффер одного из этих типов присваеивается переменной типа xs* - время его жизни определяется блоком, в котором она определена. cleanup деструктор - просто функция free(), хотя по идее можно было динамически определять тип и ещё что-то делать. Для динамического определения типа буффера используется первый байт - контрольные символы определяют тип объекта (список/словарь/число), всё остальное - строка - это полезно к примеру при итерации по списку/словарю.
Дальше все функции которые изменяют объект - возвращают новый. Его всегда надо присвоить в xs* переменную, чтобы он потом удалился автоматически. Бонусом можно выводить строки обычным printf форматом.
Может показаться дико? Но код выглядит вполне читабельным и аккуратным, без огромного количества бойлерплейта, свойственного уёбу.

mittorn    

Последнее исправление: mittorn (всего исправлений: 2)

Linux / Firefox (RU)
Ответ на: комментарий от MrSugoma

php всё же, несмотря на свою быстроту и масштабируемость, больше препроцессор для html, а не полноценный язык.
Дотнет вполне годится для бэкенда и сервисов. Его не раздувает как яву, сборщик мусора достаточно быстрый, а SDK предоставляет богатую стандартную библиотеку. Так же он умеет r2r и aot компиляцию, хотя иногда jit может лучше справляться с задачей.
Вот для фронтенда его использовать - как минимум странно - здесь явно не лучший инструментарий, а тащить wasm или код в браузер - явно, не лучшая идея. При этом нередко получается всё равно быстрее и надёжнее лапши на всяких vue-hue-react-analgular-ах

mittorn    

Linux / Firefox (RU)
Ответ на: комментарий от MrSugoma

не выкинули, там как раз вся прелесть в том, что строка это просто нуль-терминированный буффер, а всё что не строка - хранится как строка с контрольным байтом в начале

mittorn    

Linux / Firefox (RU)
Ответ на: комментарий от MrSugoma

Вообще даже c++ сильно теряет от нулль-терминированных строк. string_view появился только в c++17, что очень поздно (да, STL - как всегда бесполезная фигня без задач)
Я пробовал в одном проекте переходить на строки в виде структуры из пары указателей (начало-конец) - удобно, zero-copy подстроки, владеть строками может единый пул-строка без всяких терминирующих нулей, так и можно писать их после структуры (например если (uintptr_t)begin == (uintptr_t)(&end + 1) - строка владеющая, иначе - нет). Но всё упирается в необходимость взаимодействия со внешним кодом. Пути в ядерных сисколах - готовь нуль-терминированную строку, imgui - тоже (хотя там есть ветка string_view, но похоже, что она никогда не попадёт в апстрим и так и останется feature branch). А в остальном, пока не надо взаимодействовать со внешним кодом - сравнение строк идёт куда быстрее (сначала сравнивается длина, потом memcmp), копирование - простой memcpy с заранее известной длиной, создание из литерала сразу по sizeof без всяких strlen(), нужна подстрока - просто запиши в структуру указатель на её начало и конец.
std::string имеет часть этих преимуществ, но всё равно заставляет нулль-терминировать буфер

mittorn    

Linux / Firefox (RU)
Ответ на: комментарий от mittorn

Кстати вот у жабки строки не нуль-терминированные, и substring раньше работало за O(1) без копирования, но начиная с какой-то версии от этого отказались (я так понимаю, решили, что много памяти жрёт, когда маленькие подстроки держат буферы от уже несуществующих больших строк), и сейчас substring всегда копирует буфер.

std::string имеет часть этих преимуществ, но всё равно заставляет нулль-терминировать буфер

так у неё и бесплатный c_str() имеется

TheAnonymous    
★★★★★★★★★★★
Linux / Firefox (T1)
Ответ на: комментарий от kevlarbeaver

было сделано копирование в отличии от жабы

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

На днях на лоре тред был про шестую жабу, там ещё Dimez писал, что у него где-то на каком-то проде производительность падала при переходе на java7/8 относительно java6.
https://www.linux.org.ru/forum/general/17940910?cid=17941339

TheAnonymous    
★★★★★★★★★★★
Linux / Firefox (T1)

Эх, не удалось тебе пожить в счастливое время первой половины 2000-х.
Тогда авторитет C был незыблем, да и почти безальтернативен. На CPP писали разве только прикладной софт (т.е. он был на тех же ролях что сейчас C# и Java).
SSL тогда была редкостью, если где и использовался так только для прохождения авторизации. Почти все коммуникации были без шифрования и весь интернет был доступен, интернет без цензуры, без ограничений доступа по территориальному признаку, с разговорами обо всем без последствий… был только один недостаток – скорость, 2-3 килобайта в секунду, 10 кбайт/сек в самом лучшем случае (IDSL) :)

Aber    
★★★★★★
Ubuntu / Firefox (UA)
Ответ на: комментарий от mittorn

Реклама успешно блокируется у меня по крайней мере. Смотреть новости обсуждать их обшаться с друзьями это не контантик и не одноглазники тем более. Но в вашей стране фейсбук запрещен же и на нем кроме ольгинских троллей и нет никого.

Holger    

Linux / Chrome (DK)
Ответ на: комментарий от MrSugoma

Продолжайте жрать вы же живете в РФ и у вас нет свободы выбора.
То то же в телеге так активно продаются симкарты иностранные для регистрации с них аккаунтов в фейсбуках для троллей для достоверности аккаунтов ибо фейсбук требует для верификации.
Ну подпишитесь в фейсбук на Раша тудэй свобода есть. Но только в выборе групп.

Holger    

Последнее исправление: Holger (всего исправлений: 1)

Linux / Chrome (DK)
Ответ на: комментарий от Holger

У меня нет зомбоящика, а риахтур есть. На риахтуре кстати есть 2 тематических раздела, так что можно смотреть тот который тебе ближе, или же читать оба

mittorn    

Последнее исправление: mittorn (всего исправлений: 1)

Linux / Firefox (RU)