ГЛЕБ ГЛЕБОВ и да, не переусердствуйте с заливкой бинарников в гит. Если разработка коллективная (более 3-х человек), возможно даже стоит поднять свой nuget-фид. Стандартное название для папки с библиотеками, которых нет в nuget - lib.
ГЛЕБ ГЛЕБОВ могли бы догадаться посмотреть, как сам nuget прописывает, когда устанавливает пакеты). он делает ровно то же самое: создаёт папку packages рядом с солюшеном и прописывает ..\packages\foobar.X.X.X.\lib\версиядотнета\foobar.dll в файле проекта.
Максим Ванюшкин
> Т.е. подменяете понятия.
Уточню, что и в том и в другом случае я говорил о библиотеке времени выполнения, под "подсистемой" я понимал только библиотеку, но не ОС. Я не имел в виду подсистемы ОС, так или иначе обеспечивающие выполнение пользовательских программ.
Да, я согласен, что вполне возможно пользоваться языком Си в таком режиме, что его рантаймом будет сама ОС, однако же прочём еще раз вопрос автора: "Когда вызывается malloc() или new, то на самом деле вызывается какая-то win api функция?"
Итак, мы имеем платформу Windows (точнее, конкретный API, доступный userspace-программе, а именно WinAPI), и мы имеем функцию malloc, поведение которой автор желает уточнить. Я не пытался дать автору ответ в случае запуска кода на Linux или на микроконтроллере. Это довольно непросто (дать такой ответ), и не имеет смысла в контексте поставленного вопроса и формата данного ресурса.
Насколько мне известно, в WinAPI нет функции malloc в том виде, в котором она есть в стандарте языка Си. Зато есть другие функции работы с памятью и адресным пространством процесса (их уже упомянул Владимир Дубровин ), которые следует использовать, если программа заявляет, что работает в подсистеме Win32 (т.е. пользуется WinAPI. Для других подсистем Windows, например для Native, будут другие функции).
Можно заявить, что нам требуется некий программный модуль, реализующий malloc тем или иным образом, но так, что в конце концов будут вызываться функции WinAPI. Модуль, выполняющий такую функцию, мне известен под термином "библиотека времени выполнения", он же "сишный рантайм" на жаргоне. Я согласен с Владимиром, что реализация действительно может различаться, в том числе от выбранной конфигурации при сборке, однако абсолютно точно нельзя утверждать то, о чём изначально спросил автор: то, что каждый вызов malloc это "на самом деле" вызов winapi-функции. Выражение "на самом деле" я понял как соответствие один-к-одному, т.е. как понимание malloc-а в виде некоей обертки над WinAPI-вызовом. На что я ответил - нет не всегда. И добавил, что в большинстве случаев мы будем иметь дело с такой реализацией malloc, которая сама участвует в управлении кучей и не тупо пробрасывает вызов в WinAPI. Равно как и с реализацией free.
Более того, я даже процитировал часть вопроса автора, чтобы подчеркнуть, на что конкретно я отвечаю (т.е. что я не говорю про другие ОС и тем более платформы без ОС).
Кроме того, т.к. автор спрашивал еще и про оператор new, то насколько мне известно, ни одно ядро и ни одно API операционной системы не предоставляет реализацию оператора new. Что, безусловно, логично, т.к. эта довольно высокоуровневая фича конкретного языка (C++).
Другой ответивший посчитал нужным указать, что это зависит от операционной системы. Это его право и вполне разумно. Я же думаю, что это излишне, т.к. раз автор так формулирует вопрос, то ему будет сложно переварить обобщенный ответ для различных случаев. Я думаю, что автору нужно сначала обдумать конкретный случай, а если он сочтёт нужным, задаст другой вопрос уже не в контексте конкретного API.
Максим Ванюшкин > И кем он управляем?
И да, я нигде не писал, что сишный рантайм кем-то управляем. Я указал, что сишная куча управляется такой подсистемой, как рантайм. Вы внимательно прочли написанное? Да, я согласен с Владимир Дубровин , что моё описание не покрывает всех вариантов и случаев в различных реализациях, но тем не менее оно утверждает главное: вызов malloc это не всегда системный вызов.
Если для вас это недостаточно авторитетный источник, поищите сами, я думаю вы найдете его упоминание много где. Это я про "сишный райнтайм". Вы кажется об этом спросили.
Согласен со всем, только поднял бы повыше EF/NH - имхо сейчас в основном доступ к БД осуществляется через ORM, и знать какой-нибудь из них это уже почти обязательно. А вот query execution plan это наоборот слишком круто для джуна. По кр. мере джун не будет знать это и "приоритет селекторов в CSS" одновременно :)
Сергей Протько хм, т.е. они достаточно похожи, чтобы сделать конвертацию реальной? Это интересно, что ж, ознакомлюсь с OpenAPI детально) Конвертация - это хороший запасной путь)
Сергей Протько ясно, ну в общем вы решили что пора выбрать что-то более богатое, чем blueprint)
Интересуюсь, т.к. хотелось бы прикрутить то или другое к одному из рабочих стеков (а именно, к новому asp.net), но как вы и сказали, много чего еще сыровато, и сидишь думаешь, в какой язык описания API вкладывать время и допиливать тулзы.
О, вы тоже переходите на RAML? А OpenAPI смотрели? Честно говоря RAML мне нравится значительно больше, в частности введением типов, но все-таки хочется больше мнений)
Немного беспокоит сосредоточение сильных мира сего вокруг OpenAPI - не хочется чтобы RAML загнулся...
Самый нормальный ответ. А то тут пошли то примеры с кодом на Go, то какие-то вопросы о стабильности (видимо только у меня Винда не бсодит каждые полчаса).