Re[10]: Упоротость С++
От: karbofos42 Россия  
Дата: 16.08.23 13:27
Оценка:
Здравствуйте, so5team, Вы писали:

S>Код на C++ сразу же сталкивается, например, с размером char-а, int-а и void*, которые на разных платформах могут быть слишком разные (вплоть до того, что sizeof(char) == sizeof(int) и в char 32 бита). Тогда как для Java или C# есть песочница с некоторыми гарантиями от JVM/.NET


А если я напишу программу только с использованием всяких int64_t, то C++ встанет на один уровень с C#, т.к. на разных платформах будет одинаковый размер?

S>Кто-то помнит старый афоризм о том, что "люди считают, что Java кроссплатформенный язык, на самом деле это язык одной платформы" (ну или как-то в этом духе).


А JavaScript под сколько платформ?
Re[2]: Упоротость С++
От: paucity  
Дата: 16.08.23 13:29
Оценка: +5 :))
Здравствуйте, Pzz, Вы писали:

Pzz>C++ умер.


Re[11]: Упоротость С++
От: so5team https://stiffstream.com
Дата: 16.08.23 13:34
Оценка:
Здравствуйте, karbofos42, Вы писали:

S>>Код на C++ сразу же сталкивается, например, с размером char-а, int-а и void*, которые на разных платформах могут быть слишком разные (вплоть до того, что sizeof(char) == sizeof(int) и в char 32 бита). Тогда как для Java или C# есть песочница с некоторыми гарантиями от JVM/.NET


K>А если я напишу программу только с использованием всяких int64_t, то C++ встанет на один уровень с C#, т.к. на разных платформах будет одинаковый размер?


Всяких int64_t может не быть, они опциональные. Тогда скорее уж int_fast64_t/int_least64_t, но тогда придется заморачиваться с их реальными размерностями в случае, если нужно их сериализовывать или как-то оптимально размещать в памяти (например, в разделяемой).

S>>Кто-то помнит старый афоризм о том, что "люди считают, что Java кроссплатформенный язык, на самом деле это язык одной платформы" (ну или как-то в этом духе).


K>А JavaScript под сколько платформ?


Re: Упоротость С++
От: B0FEE664  
Дата: 16.08.23 13:38
Оценка: 3 (1) +2
Здравствуйте, dmitry_npi, Вы писали:

S>>Вот они сделали, что std::strong_ordering::equal и прочие нельзя было запихнуть в switch case.

S>>Но это не проблема, пишем враппер!
_>/*много устрашающего кода*/
_>Иногда я думаю, не зря ли я ушёл в C# из C++, всё-таки проприетарщина, а у нас импортозамещение, санкции и всё такое... Но как гляну на это, и думаю — нет, не зря. Плюсовики, вы там совсем свихнулись, что ли? Нельзя это написать как-то попроще? Зачем это вообще? Как потом это разбирать пришедшему на проект?

Конечно можно написать проще:
#include <iostream>

int main()
{
  const auto cmp    = 0./0. <=> 1. ;
  const auto result = 
  [&]
  {
     if ( cmp == cmp.less      ) return "less";
     if ( cmp == cmp.greater   ) return "greater";
     if ( cmp == cmp.unordered ) return "unordered";
                                 return "equivalent";
  }();
   
  std::cout << result << std::endl;
  return 0;
}


Просто автор хотел заморочиться. Зачем — это к автору.
И каждый день — без права на ошибку...
Отредактировано 16.08.2023 14:20 B0FEE664 . Предыдущая версия .
Re[8]: Упоротость С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.08.23 13:43
Оценка:
Здравствуйте, so5team, Вы писали:



S>>>Можно посмотреть на C# работающий без .NET?


K>>Native AOT так-то имеется.


S>При этом подразумевается, что сам .NET должен там же быть скомпилирован в Native AOT.


В свое время когда появился .Net Native для UWP как раз и стали делать .Net Core для того, что бы дробить нетовские сборки.
Кроме того из сборок вырезают только связанный код. А затем переводится в C++ и компилируется с учетом сборки мусора

https://github.com/dotnet/runtimelab/blob/feature/NativeAOT-LLVM/docs/using-nativeaot/optimizing.md

Кстати в C# завезли Generic math
И
https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters#type-arguments-implement-declared-interface

Обрати внимание на static virtual метода или static abstract
Это нужно для использования статических методов
https://habr.com/ru/articles/572902/
и солнце б утром не вставало, когда бы не было меня
Отредактировано 16.08.2023 16:12 Serginio1 . Предыдущая версия . Еще …
Отредактировано 16.08.2023 13:52 Serginio1 . Предыдущая версия .
Re[2]: Упоротость С++
От: CRT  
Дата: 16.08.23 13:52
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE> const auto cmp = 0./0. <=> 1. ;


что такое <=> я примерно понял
а вот 0./0. выглядит как ноль деленное на ноль, что это?
Re[3]: Упоротость С++
От: Sheridan Россия  
Дата: 16.08.23 14:00
Оценка: :))) :)
Здравствуйте, paucity, Вы писали:

Pzz>>C++ умер.

P>Image: Again.jpg




Да и вообще, статья неплохая
Matrix has you...
Re[3]: Упоротость С++
От: B0FEE664  
Дата: 16.08.23 14:08
Оценка: +1
Здравствуйте, CRT, Вы писали:

BFE>> const auto cmp = 0./0. <=> 1. ;


CRT>что такое <=> я примерно понял

CRT>а вот 0./0. выглядит как ноль деленное на ноль,
Это и есть ноль деленное на ноль. Результат этого деления сравнивается с 1.

CRT> что это?

Это заморочки сравнения чисел с плавающей точкой.
Это чтобы получить NaN, т.е. нечисло — одно из особых состояний числа с плавающей запятой.
Сравнение числа с нечислом даёт unordered результат.
И каждый день — без права на ошибку...
Re[8]: Упоротость С++
От: Alekzander  
Дата: 16.08.23 15:25
Оценка: :)
Здравствуйте, so5team, Вы писали:

A>>Аргумент: ошибки в комитетовском дизайне C++ (сравнительно с C#) надо простить, потому, что C++ появился намного раньше C#.


S>А давайте вы приведете мою цитату, в которой озвучивался бы именно этот тезис. А?


Пожалуйста:

A>>Почему же в C#, который тоже поддерживает все те же самые парадигмы (static-методы, а главное — развитые инструменты импорта будем считать за процедурщину), всё нормально? Хотя там ФП (LINQ) похлеще будет.


S>А давайте пару-тройку причин сходу озвучим:

S>2. C# делался много позже C++ и с учетом проблем C++.
Re[9]: Упоротость С++
От: so5team https://stiffstream.com
Дата: 16.08.23 15:31
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>>>Аргумент: ошибки в комитетовском дизайне C++ (сравнительно с C#) надо простить, потому, что C++ появился намного раньше C#.


S>>А давайте вы приведете мою цитату, в которой озвучивался бы именно этот тезис. А?


A>Пожалуйста:


A>>>Почему же в C#, который тоже поддерживает все те же самые парадигмы (static-методы, а главное — развитые инструменты импорта будем считать за процедурщину), всё нормально? Хотя там ФП (LINQ) похлеще будет.


S>>А давайте пару-тройку причин сходу озвучим:

S>>2. C# делался много позже C++ и с учетом проблем C++.

И? Где здесь про ошибки в дизайне? Где здесь про прощение?
Re: Упоротость С++
От: SkyDance Земля  
Дата: 16.08.23 15:43
Оценка:
_>Но его и так в край усложнили за последние 20 лет, зачем усугублять?

Потому что People systematically overlook subtractive changes.

Этот феномен иногда еще формулируют как "любую проблему в software engineering можно решить путем добавления слоя абстракции".
Re[10]: Упоротость С++
От: Alekzander  
Дата: 16.08.23 15:53
Оценка:
Здравствуйте, so5team, Вы писали:

A>>>>Аргумент: ошибки в комитетовском дизайне C++ (сравнительно с C#) надо простить, потому, что C++ появился намного раньше C#.


S>>>А давайте вы приведете мою цитату, в которой озвучивался бы именно этот тезис. А?


A>>Пожалуйста:


A>>>>Почему же в C#, который тоже поддерживает все те же самые парадигмы (static-методы, а главное — развитые инструменты импорта будем считать за процедурщину), всё нормально? Хотя там ФП (LINQ) похлеще будет.


S>>>А давайте пару-тройку причин сходу озвучим:

S>>>2. C# делался много позже C++ и с учетом проблем C++.

S>И? Где здесь про ошибки в дизайне? Где здесь про прощение?


Ты зачем-то решил включить юриста? Ну хорошо.

1. Топикстартер назвал C++ упоротым (доказательство: см. заголовок).
2. Лаптев ему ответил, что C++ упорот из-за своей мультипарадигменности (доказательство: "Просто С++ поддерживает 4 парадигмы ... Вот оно и получается такое" — "оно" это "C++", а "такое" это "упоротое").
3. Я возразил Лаптеву: если дело в мультипарадигменности, цитирую, "Почему же в C#, который тоже поддерживает все те же самые парадигмы, всё нормально?" ("всё нормально" == "он не упорот", причём, в отличие от C++). Иными словами, я спросил Лаптева, почему мультипарадигменный C# не упорот, а мультипарадигменный C++ упорот. Только в более культурных выражениях. Ещё можно заменить слово "упорот" на другое культурное выражение — "содержит ошибки в дизайне". Это ответ на твой вопрос: "Где здесь про ошибки в дизайне".
4. Приходишь ты и отвечаешь на мой вопрос: "А давайте пару-тройку причин сходу озвучим". То есть, ты сходу предлагаешь причины того, почему мультипарадигменный C# не упорот, а мультипарадигменный C++ упорот. Я назвал это поиском причин для прощения. И так оно и есть.

Таков контекст моего диалога с Лаптевым. Если ты его не понял и имел в виду что-то другое, это уже не мои проблемы. Надо сначала понять, о чём говорят два человека, прежде, чем вступать в разговор.
Отредактировано 16.08.2023 15:56 Alekzander . Предыдущая версия .
Re[2]: Упоротость С++
От: SkyDance Земля  
Дата: 16.08.23 16:04
Оценка: +1
LVV>- функциональное

Ну уж нет. Это точно не про С++
Re[2]: Упоротость С++
От: SkyDance Земля  
Дата: 16.08.23 16:05
Оценка:
Pzz>Я бы порекомендовал изучать Go или Rust

Rust еще ладно, но Go каким боком тут? Язык существует лишь пока Google как контора имеет большой вес. Если уж на то пошло, C# на порядок лучше.
Re[4]: Упоротость С++
От: SkyDance Земля  
Дата: 16.08.23 16:06
Оценка: +2
S>1. C# -- это язык с GC, заточенный под одну платформу.

Под какую "одну платформу"?
Re[7]: Упоротость С++
От: SkyDance Земля  
Дата: 16.08.23 16:13
Оценка: +1
A>Аргумент: ошибки в комитетовском дизайне C++ (сравнительно с C#) надо простить, потому, что C++ появился намного раньше C#.

Нормальный аргумент. Первая версия чего-бы-то-ни-было всегда, гм, комом. Как тот блин.
Re[11]: Упоротость С++
От: so5team https://stiffstream.com
Дата: 16.08.23 16:23
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>2. Лаптев ему ответил, что C++ упорот из-за своей мультипарадигменности (доказательство: "Просто С++ поддерживает 4 парадигмы ... Вот оно и получается такое" — "оно" это "C++", а "такое" это "упоротое").


Я вовсе не уверен, что Лаптев потразумевал именно это. Ну да разговор о другом.

A>4. Приходишь ты и отвечаешь на мой вопрос: "А давайте пару-тройку причин сходу озвучим". То есть, ты сходу предлагаешь причины того, почему мультипарадигменный C# не упорот, а мультипарадигменный C++ упорот.


Не-а. Я назвал причины почему C# получился удачнее C++. Про причины "упоротости" С++ речи не было.

A>Я назвал это поиском причин для прощения.


Т.е. это вы выдумали тезис за меня, а далее по классике "сам тезис оппонента выдумал, сам его и опроверг".

На всякий случай: в языке C++ есть проблемы, при C# эти проблемы учитывали. Все. Из этого не следует ни то, что "проблемы" == "ошибки", ни, тем более, то, что кого-то за что-то нужно прощать.

Если голоса в вашей голове таки диктуют, что "проблемы == ошибки", и "за проблемы нужно прощать", то продолжайте-ка вы разговаривать с этими вашими голосами.

A>Таков контекст моего диалога с Лаптевым.


Или с голосами в вашей голове.
Re[3]: Упоротость С++
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.08.23 16:29
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Rust еще ладно, но Go каким боком тут? Язык существует лишь пока Google как контора имеет большой вес. Если уж на то пошло, C# на порядок лучше.


Я думаю, Go выживет без Гугля. Пока все, к чему прикасался Пайк, в том или ином виде выжило.
Re[8]: Упоротость С++
От: SkyDance Земля  
Дата: 16.08.23 16:30
Оценка: +2
S>Мне другое интересно: может ли C# быть скомпилирован в результирующий код без промежуточного MSIL (или как он там)?

А зачем? Compiler passes — нормальная практика во всех компиляторах. У того же GCC с десяток проходов, после каждого из которых представление меняется в нечто специфическое-промежуточное.
Более того, байт-код — хороший вариант для last minute optimization, когда он компилируется в машинный код непосредственно на той машине, где предполагается исполнение.
Re[9]: Упоротость С++
От: so5team https://stiffstream.com
Дата: 16.08.23 16:42
Оценка: :)
Здравствуйте, SkyDance, Вы писали:

S>>Мне другое интересно: может ли C# быть скомпилирован в результирующий код без промежуточного MSIL (или как он там)?


SD>А зачем? Compiler passes — нормальная практика во всех компиляторах. У того же GCC с десяток проходов, после каждого из которых представление меняется в нечто специфическое-промежуточное.


Тем не менее, в случае C++ для портирования на новую платформу нужно портировать только компилятор и минимальную часть run-time библиотеки. При этом язык к компилятору не прикручен вообще никак: хочешь gcc, хочешь clang, хочешь msvc, хочешь icc и еще какую-нибудь экзотику.

В случае платформы типа .NET (или JVM) кроме портирования компилятора нужно еще и платформу портировать. Вот и получается, что C# существует в рамках .NET.

Ну а вообще все это отсылки к старому высказыванию (вроде бы Страуструпа), которое звучало как-то так: люди думают, что Java -- это кросс-платформенный язык, а на самом деле Java -- это и есть платформа. Ну или как-то так, за дословную точность, увы, не ручаюсь.

SD>Более того, байт-код — хороший вариант для last minute optimization, когда он компилируется в машинный код непосредственно на той машине, где предполагается исполнение.


Я не копенгаген в компиляторостроении, но, помнится в адрес Java со стороны Вирта и Ко в свое время раздавалась критика не только в том, что Sun-овцы скомуниздили идеи из Oberon-а и Component Pascal-я. Но и в том, что в Java использовалась стековая VM, которая удобна для интерпретации байт-кода, но вызывает сложности при трансляции байт-кода на реальные архитектуры процессоров (типа в том же Component Pascal их промежуточное представление в этом смысле было более удачным).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.