The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

cproc - новый компактный компилятор для языка Си, opennews (??), 21-Авг-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


33. "cproc - новый компактный компилятор для языка Си"  +7 +/
Сообщение от zzxc (?), 21-Авг-21, 19:50 
printf это libc если что, а не C. Для printf'а там только variadic functions нужны.
Ответить | Правка | Наверх | Cообщить модератору

130. "cproc - новый компактный компилятор для языка Си"  –2 +/
Сообщение от adolfus (ok), 22-Авг-21, 13:00 
> printf это libc если что, а не C. Для printf'а там только
> variadic functions нужны.

Стандарт iso/iec 9899 утверждает, что libc -- это такая же часть С, как и, собственно, сам язык.
На стр. 17 читаем:

This International Standard is divided into four major subdivisions:
— preliminary elements (clauses 1−4);
— the characteristics of environments that translate and execute C programs (clause 5);
— the language syntax, constraints, and semantics (clause 6);
— the library facilities (clause 7).

Все это и составляет сегодня то, что называется языком си.


Ответить | Правка | Наверх | Cообщить модератору

174. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Аноним (-), 22-Авг-21, 17:16 
А почему ты не описал раздел, где пишется про встраиваемые системы?

И да, Деннис Ритчи с тобой не согласен. Исторически Стандартная библиотека не являлась частью языка. В стандарте языка описываются библиотеки, только ради того чтобы не было путаницы при реализации этих самых библиотек. Стандартная библиотека - это просто необходимый минимум функций, язык ведь высокоуровневый.

В чистом Си нет жёсткого сцепления библиотека-язык.

Ответить | Правка | Наверх | Cообщить модератору

187. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от adolfus (ok), 22-Авг-21, 21:23 
> А почему ты не описал раздел, где пишется про встраиваемые системы?

В стандарте нет такого раздела -- там есть подраздел 5.1.2 5.1.2 Execution environments, где описываются требования к реализациям hosted и freestanding, а также требования к функционалу libc    для каждой. Встраиваемые системы бывают как freestanding, так и hosted.

> И да, Деннис Ритчи с тобой не согласен. Исторически Стандартная библиотека не
> являлась частью языка. В стандарте языка описываются библиотеки, только ради того
> чтобы не было путаницы при реализации этих самых библиотек. Стандартная библиотека
> - это просто необходимый минимум функций, язык ведь высокоуровневый.

Денис Ричи вместе с Керниганом давно не у дел -- нынешний си это iso/iec 9899.

> В чистом Си нет жёсткого сцепления библиотека-язык.

Не вводите народ в заблуждение -- нет никакого чистого си, есть просто язык си и iso/iec 9899 -- его стандарт.

Ответить | Правка | Наверх | Cообщить модератору

193. "cproc - новый компактный компилятор для языка Си"  +1 +/
Сообщение от Аноним (-), 22-Авг-21, 22:04 
Не придуривайся, "чистым" Си называют, чтобы отличать его от Си++. А людей в заблуждение вводит абревиатура C/C++, которое распиарила Майкрософт в своём высере ВижуалСтудия.

>Денис Ричи вместе с Керниганом давно не у дел

Не противопостовляй Ритчи и его творение со стандартами. Стандарты пишут люди, которые уважают дух Си. И не придуривайся, тебе всё популярным языком объяснили.

Ответить | Правка | Наверх | Cообщить модератору

229. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от n00by (ok), 23-Авг-21, 11:32 
>> А почему ты не описал раздел, где пишется про встраиваемые системы?
> В стандарте нет такого раздела -- там есть подраздел 5.1.2 5.1.2 Execution
> environments, где описываются требования к реализациям hosted и freestanding, а также
> требования к функционалу libc    для каждой. Встраиваемые системы
> бывают как freestanding, так и hosted.

Требования к freestanding из n1570.pdf: <float.h>, <iso646.h>, <limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdint.h> and <stdnoreturn.h>

Ответить | Правка | К родителю #187 | Наверх | Cообщить модератору

176. "cproc - новый компактный компилятор для языка Си"  +4 +/
Сообщение от Аноним (177), 22-Авг-21, 18:43 
В разработке для микроконтроллеров libc обычно не используется, и код тем не менее остаётся на С, кто бы что там не утверждал.
Ответить | Правка | К родителю #130 | Наверх | Cообщить модератору

188. "cproc - новый компактный компилятор для языка Си"  –3 +/
Сообщение от adolfus (ok), 22-Авг-21, 21:32 
> В разработке для микроконтроллеров libc обычно не используется, и код тем не
> менее остаётся на С, кто бы что там не утверждал.

Смелое утверждение. А как ввод/вывод осуществляется? В языке же нет на сей счет ничего. Весь ввод-вывод, и даже типы данных фиксированной длины определены в libc.  
Или у Вас libc -- это библиотека, которая обязательно должна называться именно "libc"? Считайте, что в контексте языка си любая библиотека, требования к функционалу которой определены в стандарте, и есть libc, как бы она не называлась.


Ответить | Правка | Наверх | Cообщить модератору

192. "cproc - новый компактный компилятор для языка Си"  +3 +/
Сообщение от Аноним (190), 22-Авг-21, 21:56 
В микроконтроллерах часто используется статическая сборка приложения прямо вместе с небольшой специализированной операционной системой, из единых исходников в один блоб, и никакими стандартами там даже не пахнет.
Причём ОС может быть и самописная целиком, я как-то немного участвовал в таком проекте (давно было, такой крайне примитивный по нынешним меркам коммуникатор типа первых Палмов), делал tcp/ip стек (с нуля - та еще задачка, скажу я вам).
Впрочем, предоставляемые операционной системой функции - тоже в определенном смысле библиотека, конечно. Просто это все пачка кода, который собирается в единый бинарь, и на «ОС», «библиотеки», и «приложения» разделение чисто условное.
Ответить | Правка | Наверх | Cообщить модератору

207. "cproc - новый компактный компилятор для языка Си"  –3 +/
Сообщение от adolfus (ok), 23-Авг-21, 00:25 
> В микроконтроллерах часто используется статическая сборка приложения прямо вместе с небольшой
> специализированной операционной системой, из единых исходников в один блоб, и никакими
> стандартами там даже не пахнет.

Вы просто не понимаете, что такое стандарт на язык программирования, его цель и задачи, ну и не отличаете стандарт от частной реализации в соответствии со стандартом. Это часто встречается у нетерпеливых, кто вместо внимательного чтения документации перед использованием софта, в том числе и компиляторов, начинает их использовать методом бродячей мысли. И так попробовать и этак вместо того, чтобы сначала изучить мануалы.

Ответить | Правка | Наверх | Cообщить модератору

302. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от _kp (ok), 26-Авг-21, 18:53 
На самом деле в контролерах часто минимальные библиотеки используются, хотя бывает и без библиотек, но там далеко не весь libc, и недостающее функци описываются самостоятельно.

Например для printf делается типа такого:
#include <stdio.h>
Функции объявлены, но при линковке всплывет их отсутствие.
И далее сами реализуем функции read(), write(), putc()... можно и и printf свой простой вариант.

Ответить | Правка | К родителю #192 | Наверх | Cообщить модератору

201. "cproc - новый компактный компилятор для языка Си"  +4 +/
Сообщение от Эноним (?), 22-Авг-21, 23:27 
> А как ввод/вывод осуществляется?

unsigned char input = *((unsigned char*) ADDRESS_OF_MMAPPED_INPUT_PORT);

*((unsigned char*) ADDRESS_OF_MMAPPED_OUTPUT_PORT) = output;

Some microcontrollers use in()/out() Assembly instructions, but most modern controllers simply memory-map all their ports to avoid adding extra instructions into their set.

Ответить | Правка | К родителю #188 | Наверх | Cообщить модератору

204. "cproc - новый компактный компилятор для языка Си"  –2 +/
Сообщение от adolfus (ok), 22-Авг-21, 23:55 
>> А как ввод/вывод осуществляется?
> unsigned char input = *((unsigned char*) ADDRESS_OF_MMAPPED_INPUT_PORT);
> *((unsigned char*) ADDRESS_OF_MMAPPED_OUTPUT_PORT) = output;
> Some microcontrollers use in()/out() Assembly instructions, but most modern controllers
> simply memory-map all their ports to avoid adding extra instructions into
> their set.

Ну а in()/out() -- это часть языка или таки библиотека?
Собственно, дискуссия ни о чем -- использование части стандарта не отменяет сам стандарт. Тем более, в не hosted среде.
Вместо пустых возражений Вам бы следовало таки стандарт изучить, в том числе и в отношении терминов. Много полезного почерпнете, чего не найдете в книжках и никогда не поднимете на практике (жизни не хватит обучиться на собственных ошибках).

Ответить | Правка | Наверх | Cообщить модератору

216. "cproc - новый компактный компилятор для языка Си"  +1 +/
Сообщение от Аноним (216), 23-Авг-21, 05:57 
In и out, скорее всего, ни то, ни другое. Ни часть языка, ни часть стандарта Си. Это часть конкретного микроконтроллера
Ответить | Правка | Наверх | Cообщить модератору

236. "cproc - новый компактный компилятор для языка Си"  +2 +/
Сообщение от Ordu (ok), 23-Авг-21, 13:21 
> Ну а in()/out() -- это часть языка или таки библиотека?

Это часть программы. Это функции типа:

static inline int in(int port) {
   asm( ... );
}

Ответить | Правка | К родителю #204 | Наверх | Cообщить модератору

281. "cproc - новый компактный компилятор для языка Си"  +1 +/
Сообщение от Аноним (279), 24-Авг-21, 17:35 
> Смелое утверждение. А как ввод/вывод осуществляется? В языке же нет на сей счет ничего. Весь ввод-вывод, и даже типы данных фиксированной длины определены в libc.

Ввода-вывод как он сделан в libc в маленькой эмбеддовщине вообще не нужен. Там ввод-вывод - это дёрганье пинов, или коммуникации по i2c, в libc ничего не этого нет впомине. Типы фиксированной длины это горстка тайпдефов, libc чтобы их определить не нужен от слова вообще.

> Считайте, что в контексте языка си любая библиотека, требования к функционалу которой определены в стандарте, и есть libc, как бы она не называлась.

Повторюсь, можно писать на C с библиотекой вообще никаким требованиям из стандарта не отвечающей. А можно вообще без библиотеки.

Ответить | Правка | К родителю #188 | Наверх | Cообщить модератору

312. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от adolfus (ok), 31-Авг-21, 19:28 
>> Смелое утверждение. А как ввод/вывод осуществляется? В языке же нет на сей счет ничего. Весь ввод-вывод, и даже типы данных фиксированной длины определены в libc.
> Ввода-вывод как он сделан в libc в маленькой эмбеддовщине вообще не нужен.
> Там ввод-вывод - это дёрганье пинов, или коммуникации по i2c, в
> libc ничего не этого нет впомине. Типы фиксированной длины это горстка
> тайпдефов, libc чтобы их определить не нужен от слова вообще.
>> Считайте, что в контексте языка си любая библиотека, требования к функционалу которой определены в стандарте, и есть libc, как бы она не называлась.
> Повторюсь, можно писать на C с библиотекой вообще никаким требованиям из стандарта
> не отвечающей. А можно вообще без библиотеки.

Без библиотеки нельзя -- в языке, слава богу, нет никаких операторов ввода-вывода. Так что в любом случае Вам придется либо готовую libc брать под Ваш контроллер, либо самому ее под Ваши нужды изготавливать. Я думаю, что Вы просто не понимаете, ни что такое libc, ни что такое язык си, и даже вообще, что такое вычислительная система и как Ваш сишный код во что преобразуется и чем оборачивается перед тем, как передать ему управление. Просто задумайтесь, каким образом вообще "дергаются пины". Кто и как Вам отображает уровень сигнала на "пине" в ноль/единицу какого-то бита в байте по некоторому указателю или в переменной. Нет там никаких пинов -- есть исключительно мнгоразрядные регистры, скорее всего, на D-триггерах, в которые можно что-то записать с шины данных по фронту/спаду синхросигнала, используя машинные инструкции. И два варианта -- регистры эти существуют в отдельном адресном пространстве, или отображаются на память. Поскольку си не различает этих вариантов этого, ему на помощь приходит libc -- библиотека, расширяющая и дополняющая язык си, которая в вашем случае сводит все к "дерганью пинов". В случае полноценной host-среды к этой библиотеке предъявляются четкие требования. Мы ее просто называем libc. В случае не-hosted случая структура, функционал и даже именование файлов оставлены реализации, что ни отнимает у ьакой библиотеки названия libc. Просто потому, что ее кроме как с языком си использовать нигде не возможно.

Ответить | Правка | Наверх | Cообщить модератору

314. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Совершенно другой аноним (?), 01-Сен-21, 09:27 
>[оверквотинг удален]
> перед тем, как передать ему управление. Просто задумайтесь, каким образом вообще
> "дергаются пины". Кто и как Вам отображает уровень сигнала на "пине"
> в ноль/единицу какого-то бита в байте по некоторому указателю или в
> переменной. Нет там никаких пинов -- есть исключительно мнгоразрядные регистры, скорее
> всего, на D-триггерах, в которые можно что-то записать с шины данных
> по фронту/спаду синхросигнала, используя машинные инструкции. И два варианта -- регистры
> эти существуют в отдельном адресном пространстве, или отображаются на память. Поскольку
> си не различает этих вариантов этого, ему на помощь приходит libc
> -- библиотека, расширяющая и дополняющая язык си, которая в вашем случае
> сводит все к "дерганью пинов".

Скорее всего как-раз для этого никакая libc не нужна - чтение/запись по указателю уже и так есть в самом языке (для этого разные volatile и изобретали). А функций inp()/outp() наоборот ни в какой libc нет. В каком-то виде libc может потребоваться, если хочется писать как в обычном hosted-окружении - используя memset(), memcpy() и прочие функции, вместо каких-нибудь самодельных и нестандартных ZeroMemory() и CopyMemory(), но опять-же для freestanding - это не требование - как хотите так свои функции и называйте, разве-что, имхо, main() должен быть, а остальное - что хотите, то и городите. А так - любую библиотеку можно назвать libc, хоть даже libxml.

Ответить | Правка | Наверх | Cообщить модератору

233. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Ordu (ok), 23-Авг-21, 12:28 
Ты промазал против аргумента со своим контраргументом. Что бы там стандарт не думал на этот счёт, printf -- это не часть языка, printf реализован не в компиляторе, компилятор предоставляет язык разработчикам libc, чтобы те могли написать на нём printf.

gcc нихрена не реализует printf, он реализуется в glibc, musl, или ещё в какой реализации libc. llvm не реализует printf, потому что это не его проблема вовсе. Максимум специализированной поддержки printf, который может быть в компиляторе -- это валидация аргументов printf'а, на соответствие форматной строке, с выдачей варнингов, если валидация провалена.

Таким образом, если мы говорим о cproc, то вопросы, которые следует задавать -- это вопросы о поддержке этого cproc разными реализациями стандартных библиотек, а не о том, реализован ли printf в cproc.

> Все это и составляет сегодня то, что называется языком си.

Кого, прстите за мой французский, ипёт чужое горе. Вот кто называет это всё языком си, пускай и встраивает libc в компилятор.

Ответить | Правка | К родителю #130 | Наверх | Cообщить модератору

262. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Sony (?), 24-Авг-21, 05:19 
Вы вводите людей в заблуждение, обсуждаемый компилятор не только использует библиотеку си! но и его невозможно перенести на систему без libc! В своей сути си - это юникс, а либ-си прослойка совместимости необходимая для запуска "переносимых" приложений юникса, в том числе и компиляторов.
Ответить | Правка | Наверх | Cообщить модератору

266. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Аноним (-), 24-Авг-21, 07:22 
Это ты сам вводишь людей в заблуждение.

1. Аксиома: Библиотека не часть языка Си.
2. Использование библиотек опционально.
3. Если cproc не поддерживает libc, читай пункт 2.

Ответить | Правка | Наверх | Cообщить модератору

276. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Ordu (ok), 24-Авг-21, 14:24 
> Вы вводите людей в заблуждение, обсуждаемый компилятор не только использует библиотеку си! но и его невозможно перенести на систему без libc

Это у тебя в голове путаница, поэтому тебе и кажется, что тебя кто-то вводит в заблуждение. Ты, мне кажется, сейчас путаешь не просто библиотеку и компилятор, но ещё и host с target'ом.

bootstrap -- это вообще любопытная штука, в которой много рекурсии, поэтому надо очень чётко отточенное мышление иметь, и очень чёткими формализациями реальности пользоваться, чтобы не путаться в своих мыслях.

Ответить | Правка | К родителю #262 | Наверх | Cообщить модератору

241. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Шарп (ok), 23-Авг-21, 17:38 
> printf это libc если что, а не C. Для printf'а там только
> variadic functions нужны.

Спасибо, капитан. Но чтобы вызвать функцию из библиотеки, нужно заинклюдить хедер и слинковаться. Если компилятор анскильный, он может в хедере споткнуться об неподдерживаемую им фичу.

Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

264. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Аноним (-), 24-Авг-21, 07:10 
Хамить не надо, если не можешь опровергнуть аксиому, которая гласит: "библиотека не часть языка Си".
Ответить | Правка | Наверх | Cообщить модератору

269. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Шарп (ok), 24-Авг-21, 10:32 
> Хамить не надо, если не можешь опровергнуть аксиому, которая гласит: "библиотека не
> часть языка Си".

Где я утверждал обратное?

Ответить | Правка | Наверх | Cообщить модератору

278. "cproc - новый компактный компилятор для языка Си"  +1 +/
Сообщение от Аноним 80_уровня (ok), 24-Авг-21, 14:56 
> Хамить не надо, если не можешь опровергнуть аксиому

Аксиомы не подлежат доказательству или опровержению. Они или изначально принимаются, или нет.

Ответить | Правка | К родителю #264 | Наверх | Cообщить модератору

313. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от adolfus (ok), 01-Сен-21, 01:42 
> Хамить не надо, если не можешь опровергнуть аксиому, которая гласит: "библиотека не
> часть языка Си".

Аксиомы не опровергают, а принимаются без доказательств. Сегодня, как и всегда было раньше, рулит аксиома ISO/IEC 9899, которая гласит, что libc  является частью языка си. А ты кто такой, чтобы иметь на сей счет личное мнение? Мало того, так еще это мнение и озвучивать? Член секты свидетелей движения "всякое мнение имеет значение"?


Ответить | Правка | К родителю #264 | Наверх | Cообщить модератору

315. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от Совершенно другой аноним (?), 01-Сен-21, 09:38 
>> Хамить не надо, если не можешь опровергнуть аксиому, которая гласит: "библиотека не
>> часть языка Си".
> Аксиомы не опровергают, а принимаются без доказательств. Сегодня, как и всегда было
> раньше, рулит аксиома ISO/IEC 9899, которая гласит, что libc  является
> частью языка си. А ты кто такой, чтобы иметь на сей
> счет личное мнение? Мало того, так еще это мнение и озвучивать?
> Член секты свидетелей движения "всякое мнение имеет значение"?

Ни в коем случае не споря по поводу аксиом, посмотрите, что может предоставлять компилятор языка C для freestanding окружения:

A conforming freestanding implementation shall accept any strictly conforming program in which the ∗ use of the features specified in the library clause (clause 7) is confined to the contents of
the standard headers <float.h>, <iso646.h>, <limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdint.h>, and <stdnoreturn.h>. A conforming implementation may have extensions (including additional library functions), provided they do not alter the behavior of any strictly
conforming program.4)

Если правильно помню - ни в одном из заголовочных файлов там нет ни одной функции.

Ответить | Правка | Наверх | Cообщить модератору

316. "cproc - новый компактный компилятор для языка Си"  +/
Сообщение от n00by (ok), 01-Сен-21, 11:37 
Он уже смотрел, но проигнорировал. Более того, в случае freestanding даже точка входа может иметь отличное от main() наименование (N1570, 5.1.2.1/1).
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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