The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"GitHub опубликовал статистику за 2020 год"
Отправлено Ordu, 03-Дек-20 21:04 
> "проектноспецифичная вещь" - согласен, ну и где тут "Оптимизации очень зависят от
> языка."? поэтому и задал вам вопрос, чтобы вы дали определение понятию
> "оптимально" перед тем как утверждать об "очень зависит". Согласны?
> пс: добавлю ссылочек и цитат, по теме

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

Тебе одного примера с common-lisp'ом мало? Выше там был такой пример, ты видел его?

Хочешь я сравню printf из C и println! из rust'а? В rust'е println! разбирает форматную строку на этапе компиляции, чтобы потом в динамике при каждом вызове этого println! не парсить её заново. В C этого не происходит, как ты думаешь, почему?

Моя теория, что это из-за того, что в C нет ни макроязыка, ни константных функций, которые можно выполнять на этапе компиляции. Поэтому в C, чтобы получить разбор форматной строки на этапе компиляции, придётся писать специально заточенный препроцессор. Всем на это плевать, и поэтому если в C реально нужна скорость вывода, ты будешь в процессе оптимизации заменять printf'ы на вручную записанную последовательность вызовов типа:

print_string("Size is ");
print_int(x);
print_string("Mb\n");
...

Это вряд ли понадобится, потому как printf это как правило к выводу, а ввод-вывод тормозит больше парсинга. Но всё же.

Или возьми async/await, и прикинь каково выбрать архитектуру программы с async вызовами лямбд, если твой язык -- это C. Для пользователя языка, в котором есть async/await использовать их -- это вполне себе опция доступная на этапе принятия решений об оптимальной архитектуре программы. Для пользователя C это конечно опция, но она будет сопряжена с таким количеством проблем, что лучше её опустить для ясности. Есть другие способы асинхронно выполнять код, плюс можно немного пожертвовать latency, и если быть осторожным и внимательным, то не получить залипаний программы на несколько секунд.

Тебе нужны ещё примеры, или трёх хватит?

А, давай приведу. Возьмём C и C++. В них значения можно передавать либо по указателю/ссылке, либо по значению. С точки зрения производительности, const ссылка -- самая удачная вещь: компилятор, оптимизируя, может полагаться на то, что значение по ссылке не менялось в вызываемой функции, и оптимизировать согласно этому. Но когда мы начинаем говорить о возвращении значений из функции, то тут встаёт вопрос: если я в функции создал объект, то как его вернуть? Есть два варианта -- выделить объект на куче, или вернуть по значению. Какой из них и когда лучше? Этот вопрос существует не в любом языке, во многих он нерелевантен вообще, потому что там, например, всё передаётся по ссылке, и поэтому там даже специального синтаксиса для ссылок нет, потому что когда всё -- ссылка, это не нужно.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру