Если кто-то себя чувствует системным программистом, и думает, что много знает, просто откройте сырцы glibc, и почитайте в районе elf/rtld.c и связанных с ними файлами.
struct rtld_global _rtld_global =
{
/* Get architecture specific initializer. */
#include <dl-procruntime.c>
/* Generally the default presumption without further information is an
* executable stack but this is not true for all platforms. */
._dl_stack_flags = DEFAULT_STACK_PERMS,
#ifdef _LIBC_REENTRANT
._dl_load_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
._dl_load_write_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
._dl_load_tls_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER,
#endif
._dl_nns = 1,
._dl_ns =
{
#ifdef _LIBC_REENTRANT
[LM_ID_BASE] = { ._ns_unique_sym_table
= { .lock = _RTLD_LOCK_RECURSIVE_INITIALIZER } }
#endif
}
};
Такая инициализация полей структуры - это круто. А вот выделенный кусок я ваще не понял. [LM_ID_BASE] = {...} - это как ваще?? Ну прикольно. Я смотрю синтаксис Си тоже на месте не стоит. Но на С++ получилось бы короче и понятнее
Это значит, что в массиве, который лежит в поле _dl_ns, нужно всё забить нулями, а один элемент с индексом LM_ID_BASE проинициализировать структурой, которая там указана далее (поле _ns_unique_sym_table и т.д.)
Ну прикольно. Век живи век учись. Как-то я пропустил С99. Но я С почти не пользуюсь, а в С++ такого, похоже, нету. По крайней мере MSVC точно не понимает.
Тот факт, что компилятор от мокросовт научился поддерживать стандарт C11 в 2019 году, лишний раз доказывает, что M$FT — это раковая опухоль IT-индустрии.
Да ладно? Если мне склероз не измнеяет мы еще в 2015 писали на С++14 и все он прекрасно понимал Ну и если есть чо заместо MSVS такое же удобное но не MS - буду очень признателен за подсказку
Если мне склероз не измнеяет мы еще в 2015 писали на С++14 и все он прекрасно понимал
Мы вообще-то C обсуждали.
Я ошибся, поддержка последнего стандарта там даже не в 19 году появилась, а в 20-м, буквально недавно: https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/
Ну и если есть чо заместо MSVS такое же удобное но не MS - буду очень признателен за подсказку
GNU Emacs, рачительно настроенный в каждой мелочи под себя, свои пальцы и свой attention span. Я в нём уже больше пяти лет пишу вообще весь код, и чувствую себя, как в утробе матери. Времена, когда я в начале 10-х использовал по нужде MSVS, вспоминаю с содроганием.
Intellisense, это кобольная версия language server'а?
не знаю что такое "кобольная версия language server'а", но это когда ты пишешь ptr->get - а оно тебе подсказывает все методы класса начинающиеся с 'get'. удобно. но и не только это, там много чего подсказывает. плюс можно например одним кликом вставить все pure virtual методы базового класса - ничего не пропустишь.
Да, я про это. Это называется language server, и существует де-факто стандартный протокол работы language server. Один сервер может использоваться всеми редакторами (vscode, vim, emacs, whatever), и каждый язык программирования предоставляет свой language-server. Это куда более здравый подход, чем поддержка всех языков программирования во всех редакторах.
И именно этим она и занимается. Даёт подсказки, структуру кода (что функция, а что класс), показывает ошибки (и подсказки а-ля clippy).
А вот доисторическая версия language-server'а, aka "кобольная версия", называлась intellisense.
Достаточно давно, чтобы не быть bleeding edge. Я понимаю, что люди, с воспоминанием о дисциплине очереди ощущают, что это что-то едва появившееся, но они были ещё до ковида и до войны, и до появления chatgpt, то есть давно.
А чо, так можно?
Date: 2023-05-30 08:01 pm (UTC)struct rtld_global _rtld_global = { /* Get architecture specific initializer. */ #include <dl-procruntime.c> /* Generally the default presumption without further information is an * executable stack but this is not true for all platforms. */ ._dl_stack_flags = DEFAULT_STACK_PERMS, #ifdef _LIBC_REENTRANT ._dl_load_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER, ._dl_load_write_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER, ._dl_load_tls_lock = _RTLD_LOCK_RECURSIVE_INITIALIZER, #endif ._dl_nns = 1, ._dl_ns = { #ifdef _LIBC_REENTRANT [LM_ID_BASE] = { ._ns_unique_sym_table = { .lock = _RTLD_LOCK_RECURSIVE_INITIALIZER } } #endif } };Такая инициализация полей структуры - это круто.
А вот выделенный кусок я ваще не понял. [LM_ID_BASE] = {...} - это как ваще??
Ну прикольно. Я смотрю синтаксис Си тоже на месте не стоит.
Но на С++ получилось бы короче и понятнее
Re: А чо, так можно?
Date: 2023-05-31 04:34 am (UTC)Этому синтаксису так-то 24 года)))
Re: А чо, так можно?
Date: 2023-05-31 08:00 am (UTC)Re: А чо, так можно?
Date: 2023-05-31 09:34 am (UTC)Re: А чо, так можно?
Date: 2023-05-31 10:10 am (UTC)Ну и если есть чо заместо MSVS такое же удобное но не MS - буду очень признателен за подсказку
Re: А чо, так можно?
Date: 2023-06-01 08:25 am (UTC)Мы вообще-то C обсуждали. Я ошибся, поддержка последнего стандарта там даже не в 19 году появилась, а в 20-м, буквально недавно: https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/
GNU Emacs, рачительно настроенный в каждой мелочи под себя, свои пальцы и свой attention span. Я в нём уже больше пяти лет пишу вообще весь код, и чувствую себя, как в утробе матери. Времена, когда я в начале 10-х использовал по нужде MSVS, вспоминаю с содроганием.
Re: А чо, так можно?
Date: 2023-06-01 01:28 pm (UTC)Извиняюсь, недопонял
GNU Emacs
Intellisense там есть?
Re: А чо, так можно?
Date: 2023-06-01 02:04 pm (UTC)Intellisense, это кобольная версия language server'а? Видимо, да. По крайней мере, я не слышал, чтобы у emacs'а были бы проблемы с language server.
(не то, чтобы я сильный фанат емакса, я больше по виму, но LS - это стандарт сейчас).
Re: А чо, так можно?
Date: 2023-06-01 02:14 pm (UTC)не знаю что такое "кобольная версия language server'а", но это когда ты пишешь ptr->get - а оно тебе подсказывает все методы класса начинающиеся с 'get'. удобно. но и не только это, там много чего подсказывает. плюс можно например одним кликом вставить все pure virtual методы базового класса - ничего не пропустишь.
Re: А чо, так можно?
Date: 2023-06-01 02:19 pm (UTC)Да, я про это. Это называется language server, и существует де-факто стандартный протокол работы language server. Один сервер может использоваться всеми редакторами (vscode, vim, emacs, whatever), и каждый язык программирования предоставляет свой language-server. Это куда более здравый подход, чем поддержка всех языков программирования во всех редакторах.
И именно этим она и занимается. Даёт подсказки, структуру кода (что функция, а что класс), показывает ошибки (и подсказки а-ля clippy).
А вот доисторическая версия language-server'а, aka "кобольная версия", называлась intellisense.
Re: А чо, так можно?
Date: 2023-06-01 02:27 pm (UTC)Re: А чо, так можно?
Date: 2023-06-02 04:28 am (UTC)Re: А чо, так можно?
Date: 2023-06-02 09:29 am (UTC)Достаточно давно, чтобы не быть bleeding edge. Я понимаю, что люди, с воспоминанием о дисциплине очереди ощущают, что это что-то едва появившееся, но они были ещё до ковида и до войны, и до появления chatgpt, то есть давно.
Re: А чо, так можно?
Date: 2023-06-01 02:11 pm (UTC)Мы говорили про чистый C, вы внезапно вспоминаете C++
> Intellisense там есть?
Целая россыпь различных видов плагинов для автодополнения на любой вкус, включая упомянутый выше Language Server.
Re: А чо, так можно?
Date: 2023-06-01 02:16 pm (UTC)Я же извинился. Что мне еще сделать?
Re: А чо, так можно?
Date: 2023-06-01 02:26 pm (UTC)no subject
Date: 2023-06-02 04:27 am (UTC)