Матрёшка Си на АШ

Аватар пользователя СПбДмитрий

Периодическая система для программистов.

Сердечно благодарю за благосклонное прочтение вчерашней статьи про русский язык и программирование. Я был слишком непонятен, но не был обруган. Спешу исправиться.

Чужой язык терминов (!) навязывает нам чужое понимание предметной области. Русский язык позволяет построить свое, ясное и точное понимание - в том числе, англизированного языка Си. (Речь пойдёт о терминах (!), не о переводе Си на русский.) 

Книга "Матрёшка Си. Слойная система языка программы" представляет весь язык программирования на одной странице и потом коротко и ясно его описывает.

В это смысле Слойная система подобна Периодической системе Менделеева (ПСМ). Как и ПСМ, это не самая очевидная и простая вещь, но она лучше беспорядочной кучи сведений. Как и ПСМ, она исправляет ошибочные представления и восполняет очевидные пробелы. И как ПСМ, позволяет развивать научную мысль в смежных областях.

Таким развитием является речевая модель программы, также представленная в книге. Бессодержательное слово "алгоритм" (выдуманный синоним "программы") заменяется настоящим и действенным словом "речь". Модель показывает, как надо писать программу, как кодировать её и как разбирать на машинные команды.

Речевая модель и Cлойная система позволяют избавиться от пережитков машинного подхода в программировании, при котором происходит нездоровая сосредоточенность на сложностях устройства машины и машинных языков. Это состояние свойственно 50-м годам XX века, когда машины и языки были сложными, а программы - простыми.

Сейчас положение  строго обратное. Программы - сложны, а языки - просты и вторичны. Но устаревший машинный подход  стремится сделать простое сложным, потому что так привычнее и выгоднее по деньгам (да, это оскал капитализма, товарищи). Это можно  сравнить с научным убеждением, что Земля вращается вокруг Солнца, при том, что большинство уверено в обратном.  Они же не слепые, вон Солнце - оно двигается, и святая римская церковь так учит… Но Земля действительно вращается. Предшествующее описание и понимание языка Си было неполным, о чём и говорит обсуждаемая книга.

Книга обращена к подготовленному читателю, который сможет и поможет вынести обоснованное суждение - все-таки вертится, или нет.

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

Авторство: 
Авторская работа / переводика

Комментарии

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Напоминает одну рекламу: я не люблю кошачьих - нет, ты просто не умеешь их готовить. 

Вкусно приготовленные malloc() и free() - настоящий праздник для ума. Не в смысле применения, а в смысле понимания красоты языка. А вот то, что  в Яве все как поки повторяют "автоматическая уборка мусора", но даже не понимают, про что речь - вот это не дело. 

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

особенно вкусен malloc, когда он вызывается много раз, при различных условиях, он тогда вызывает мощнейшую отрыжку в виде "memory leak". а иногда возникает непреодолимое желание поюзать еще раз уже отфрииеннный указатель, и тогда вместо отрыжки случается смерть. и это одна из серьезных обсуждаемых в узких кругах проблем языка c. собственно, так как понимающие люди чего-то там обсуждают про меморилиик и гарбажколлекторы, то и решения они какие-то придумывают, и реализуют (в Яве той же). ну а уж потом непонимающие начинают связывать меморилики с автогарбажколлекторами (ниче, что я на русском?) уже не понимая, про что речь.

я вот не понимаю, чем вам красиво malloc() и free() в прекрасном С и некрасиво GetMem() / FreeMem() в беспонтовом ObjectPascal? как это помогает "оценить красоту языка"?

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Давайте как нибудь приведём отдельный батл Си vs Pascal. Мне надо будет подготовится, площадка думаю не АШ, а хабр. 

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

Вы серьезно? Тролль или придурок?

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

По-моему, вы переутомились. Я не могу быть троллем в своей статье. Обзывать автора тоже как-то перебор. Могут ведь и забанить. 

Аватар пользователя wblk
wblk(7 лет 4 месяца)

Да их нечего готовить. Я этим не ради красоты кода, или самоутверждения занимаюсь. Мне главное - как я быстро напишу, сколько времени у меня на отладку уйдет. А ошибка в malloc и free может здорово усложнить жизнь. И отсрочить оплату труда ;)

ООП и современные языки сильно упростило профессию. И даже больше, позволяет писать весьма объемные проекты, не сильно заморачиваясь с архитектурой, ведь в ООП исправить - просто. Ты не думаешь о коде, ты думаешь о результате. В Си же, я думал именно что о коде. 

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Плюсы также имеют malloc(), а без Си и Плюсов невозможно полностью понять, как работает Ява или ПХП. Так что программируют пжл на Яве, но правильно понимайте  основы. 

Аватар пользователя wblk
wblk(7 лет 4 месяца)

Знать как это работает, и постоянно думать об этом - не одно и тоже.

Аватар пользователя PigPog
PigPog(12 лет 3 месяца)

По моим наблюдениям, стиль программирование вырабатывается первым, хорошо освоенным языком, на котором начинаешь думать, все остальные изученные языки будут "подгоняться" под первый, например, мой первый язык С/С++, когда я начинаю писать на С#, уши сишника не спрячешь, поэтому задача решается выработанным стилем (читай язык программирования) и теми наработками и  приемами, которые накопились за время практики решения задач. Поэтому Ваше утверждение "Потом надо выбрать подходящий язык и понять его.", лично меня шокирует, тк если нет ограничений по языку, то я буду решать задачу не на наиболее удобном для решения задачи языке, а на наиболее удобном мне, тк это освободит меня от усилий по изучения другого языка,  да и толком изучить его в приемлемые сроки не получится, скорее постановщик задачи будет подбирать программиста на выбранном им языке, чем требовать доучиваться новому языку. Хотя всякое бывает,  Я за 2 недели начал писать на шарпе (было такое требование от заказчика), но все равно, я писал на С++ используя синтаксис и возможности шарпа.

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Вы сводите широкое понятие "программирование" к более узкому понятию "кодирования". Навыки кодирования действительно чувствительны к выбору и смене языка. 

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

а что такое "программирование" в Вашем понимании? и чем оно отличается от "кодирования". :-).

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Программирование - поиск и описание решения. 

Кодирование - запись найденного и кратко описанного решения на языке программы, например, Си. 

Обратите внимание, как забавно получается, когда эти понятия отождествляют. Программу с кодом и без решения лучше сразу переписать, чем немножко подправить. А отождествляют их почти всегда. 

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

Вот это поворот (С) Вы уж определитесь.

Суть решения задачи программы не связана с языком. С этим надо определиться прежде всего

если она не связана- то и нафига городить "си" на русском? а если есть необходимость городить русскую матрешку Си- то получается, что связано решение-то задачи с языком. а то вчера связана, сегодня нет. детсад какой-то.

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Не уверен, что вы правильно поняли мою мысль. Я подчеркнул в начале, что никакого русского Си я не предлагаю. 

Вы можете написать программу шахматы и на Си, и на Питоне? Значит, решение не зависит от языка. Код будет отличаться, возможно, быстродействие, но ходы будут одинаковы.  

Аватар пользователя PigPog
PigPog(12 лет 3 месяца)

Не стоит обновлять свой пост без явного указания об этом.

Спасибо

Аватар пользователя gridd
gridd(7 лет 11 месяцев)

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

Впрочем, это нормально. Вы не знаете истории, и плохо уже - вот это.

У языка С ( а равно, его предшественнике B, про который вообще никто ничего, кроме специалистов, не знает), была одна очень важная задача.

На ту пору, новые аппаратные системы кто только не лепил. Это мог быть intel с его гиперкубом (всего-то какие-то сраные 16 i286 по ребрам куба (и один куб внутри) и iapx432(tm)), какие-нибудь ребята с VLIW, и какой-нибудь сраный National Semiconducter, про который сейчас вообще никто  не вспомнит. 

И Multics, тудыть его в качель. но он был!. - первая система с разделением времени. и Unix, as an opposite to Multics cretinisms.

С. Си был хорошо тем, что соскочить на него, с ассемблера было легко, потому что он максимально был близок к исходной архитектуре. Была масса превентивных мер - типа приведеня типов, так чтобы исходный код был пригодно компилируем. И это работало!!! С был первым переносимым языком, потому что с его помощью можно было принести пользу на новое железо.

И очень быстро.

 

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Могли бы вы оказать мне услугу и сообщить 3-5 словами, что именно я должен знать, чтобы не было так очень плохо. Чур не говорить "историю", меня расстраивают отдельные периоды, вроде Английской и Французской революции. 

Я думаю, что основная польза языка Си для современного студента в том, что он является полноправным начальником языков семейства Си. Это не связано с программированием PDP-11 (хотели скрыть эти сведения?) или другой архитектуры, и не с ассемблером, а именно с новым подходом к программированию, который, начиная с Си, стал повсеместным.  

Аватар пользователя wblk
wblk(7 лет 4 месяца)

уровни абстракции - это не слои? Да и книги толстые, из-за больших "детских" шрифтов. А так, концепция ООП укладывается в пару страниц. 

А язык - важен. То что делается на С не всегда можно сделать на С# и наоборот. Даже в обучающих целях.

Аватар пользователя iStalker
iStalker(12 лет 3 месяца)

Что такое "составной образ" ?

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Вот для таких вопросов и есть Ма3. В словаре ищем "образ", в образе ищем "составной". 

Аватар пользователя mk2
mk2(8 лет 6 месяцев)

А на хоть что-то более сложное эта ваша система переносится? Хотя бы на С++?

Аватар пользователя igorzh
igorzh(11 лет 8 месяцев)

Всецело солидарен с автором, хотя последний раз что-то писал на Си лет 20 назад.

Аватар пользователя stil
stil(10 лет 12 месяцев)

Значение на каком языке написаны операторы не имеют значение от слова совсем. Попытка придумать свой язык на русском полный бред. Язык силен не тем что на нем можно что то написать, а тем что можно воспользоваться готовыми модулями и библиотеками написанные другими. Не кто в мире писать на вашем языке не будет. И вообще в большинстве случаев пишешь не языке, а под апи. А там вообще выбора особо нет.

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Спасибо за прочтение статьи. Мой язык - Си. Русский язык нужен для его описания, правильного понимания и преподавания, а не переписывания. 

Аватар пользователя vladik
vladik(5 лет 2 недели)

Все равно, пока квантовые компы(ну или гибриды) прочно не войдут в нашу жизнь, от ассемблеров ты никуда не денешься, а изучить ассемблер дано не только лишь всем, мало кто может это сделать..)))

Комментарий администрации:  
*** Отключён (лидер бан-рейтинга, маты) ***
Аватар пользователя sadnikoff
sadnikoff(10 лет 3 месяца)

Самое простое это и есть ассемблер,

А вот сложность в том что бы изучить конкретный процессор саму машину (его архитектуру) , без этого на асме не напишешь. Переход на 286 и 386 , от 086 явно показывает что...

Видеокарты ускорители...то же вроде асм.

А интересные комментарии встречаются, гы гы гы,. Но есть те кто суть не понял...

Давненько я не брала в руки шашек... Гы гы гы

Самое интересное это кванти и ИИ.

Последний раз программировал когда ещё были 586... ( Плисы, контроллеры , risk, и и же..)

Странно что никто не начал с фоннеймана( архитектура) и неначал обсуждать какие ещё варианты были и есть и может будут - вот тут можно и русский применить

 

 

Аватар пользователя Карлито
Карлито(5 лет 2 недели)

А Вы "переведите" С на русский, заменив ключевые слова - и всё как в 1С получится, люди будут рады smiley. Правда, нечто подобное уже пробовали - "ершол" был в 80-х, пытались на нём советским школьникам мозги портить.

Комментарий администрации:  
*** Отключен (агрессивный инфомусор) ***
Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

Алгол же еще был! и Диспак!

Аватар пользователя qwweer
qwweer(8 лет 8 месяцев)

Откройте уже для себя лисп - вот где рай для лингвиста. Язык С и знание аппаратной части отлично друг друга дополняют. То, что вы называете устаревшим "машинным подходом" - это существенная часть языка и не надо пытаться от неё избавиться.

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

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

А Солнце вертится вокруг Земли, "every fool can see". 

Язык Си был создан при написании программной игры (Space Travel)  в 1969 как прикладной язык. В 1972 он был использован для переписывания ОС Unix и стал считаться машинным и системным, но это побочное и неверно понятое назначение. Отсюда нежелание объяснять Си просто, хотя именно простота - его главное достижение. Поэтому он стал родоначальником семейства Си языков - самых востребованных среди всех. 

Паскаль и питон по сравнении с Си - неуклюжи и малораспространены. 

Аватар пользователя Another_jim
Another_jim(9 лет 1 месяц)

Вы бы из лабы выходили бы иногда))

Java EE отлично применяется для бизнеса.

Я не видел особого распространения Си для web. Да и под виндовые проложения тот еще гемморой на си писать.

По распостраненности, по поддержки сообществом python и java стабильно лидируют.

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Привет велико-британцам! )) Ява - язык семейства Си, отсюда его красота и богатство. 

Питон менее распространен, чем другой потомок Си - ПХП. Но у него есть свои сильные стороны, о которых я, к сожалению, знаю только по наслышке. 

Аватар пользователя Another_jim
Another_jim(9 лет 1 месяц)

Как вы их так лихо объединили?

также вы зачем-то предлагаете менять именно синтаксис, хотя, и php и Java имеют не очень сходных синтаксис, и особенности. Строгая типизация, например.

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Ничего я не объединял. И Java, и PHP - языки семейства Си. 

Спрошу вас на полном серьёзе: почему вы решили, что я хочу что-то изменить в синтаксисе каких-то языков? Какое именно место в статье, пусть и косвенно, навело на эту мысль? 

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

И Java, и PHP - языки семейства Си.

вот это поворот (С). с чего это? неужели языки по семействам раскладываются на основе того, begin end, { } или DO ENDDO у них для выделения блоков используется?

Си- компилируемый, статически типизированный, общего назначения. Java - типизированный объектно-ориентированный без статических переменных, указателей нормальных нет. PHP- вообще интерпретируемый c динамической типизацией. 

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

Си- уклюжий, а питон- неуклюжий? вот это поворот (С). Есть альтернативное мнение- что причина распространения Си заключается только в том, что его куцего по выразительности языка для него очень просто реализовать компилятор, а для всяких встроенных контроллеров этого простого куцего компилятора хватает. Поэтому именно из-за микроконтроллеров Си до сих пор и живет. А для чего-то более толстого спецом на Си нагродили два плюса. и на этом С++ винда была писана. а так как она давненько стала основной ОСью по массовости, то если ты хочешь писать софт под винду- то тебе придется контачить с кодом, писанным на Си++, ну так и нечего геморроить себе всякие врапперы и прокладки между интерфейсами, проще писать под виндой на Си++. Была бы винда писана на паскале- то сейчас интел-компайлер использовал бы в качестве основного языка паскаль, а про С/С++ знал бы тот же круг, что и про кобол и лисп- увлеченных динозавров, не более.

 

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Язык Си - образцово красив и крут. Поэтому он стал образцом для всех успешных промышленных языков. Это так. 

Аватар пользователя blkpntr
blkpntr(8 лет 5 месяцев)

Вы на нём вызов функции по адресу 0 напишете без подглядывания? И так везде.

Между прочим, совсем небольшого изменения синтаксиса (команда POKE) достаточно, чтобы полностью избавиться от точек с запятой. И это сделано, например, в языке NedoLang. Обращаю ваше внимание, речь не об использовании форматирования текста, форматирование при этом не важно. Просто язык Си разработали через одно место (даже чисто левый контекст для авторов был пустым звуком) и форсировали как стандарт. Молиться там не на что.

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Функция по адресу 0 - этот blkpntr? Нет, я не вызывал пока. Попробую)) 

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

это я так понимаю, для Фортрана и для Кобола он стал образцом? да?

Обратите внимание: интел выпускает свои оптимизирующие офигенские компиляторы с поддержкой всех своих суперпупер инструкций для двух языков: C++/Fortran. Причина? а потому что C++ это компилятор ядра винды, а Фортран- это компилятор для математических расчетов, с которого математики не слезают и слезать не хотят. почему не хотят? а потому что у них куча библиотек написана давным давно на фортране, и переписывать этот функционал заново им тупо влом. А кобол живет до сих пор по той причине, что куча банковского софта писана на коболе, работает до сих пор, а переписывать его никто не рискует- слишком дорогие будут ошибки, а то, что есть- выполняет свои функции и приносит реальные прибыли- зачем это ломать?

Си образцово красив и крут? да ладно. почему же при его красоте и крутости его удел на сегодня- встраиваемые системы, и все? Почему все с него бегут куда угодно при первой возможности?  почему на Си пишут только бородатые железячники? Почему разрабы тяжелого софта сидят на С++? Только не повторяйте мне, что c++ выгоден кому-то с точки зрения денег и какие-то злыдни продают кому-то ООП. (хочу купить немножко ООПа. где продавцы!? ауууу!!! компиляторы бесплатны. IDE- бесплатны). Вся образцовость и крутость Си заключается в том, что именно его использовали 70 лет назад для создания ядра unix в Bell Labs. Просто инженеры электронщики как смогли сколотили себе какой-то язычок для упрощения своего тогдашнего ассемблера, и на этом "первоблинкомовом" языке слепили ядро операционки. А язык слепили для того, чтобы ускорить разработку на ассемблере. специально делали так, чтобы язык был максимально приближен к железу и к ассемблерным операциям, которые на тот момент были у них под рукой. "++" == "inc"; "--" == "dec". "*" = "addr". "+=" == "add" (а вы говорите, что зря рассказывают про си вместе с ассемблером). Томсон сначала ассемблер завернул в обертку языка B (был же ассемблер- А, значит, у нас следующая буква- Б!). А Риччи потом немножко оптимизировал получившееся поделие, чтобы оно генерило чуть покомпактнее код (их тогдашние ЦПУ в подметки не годились современным PIC с 2кб ОЗУ), и назвал его следующей буквой алфавита- "С". Проектирование компиляторов? не не слышали. такого еще никто никогда не произносил. это через 40 лет только придумают. а пока- как умеем, так и проектируем. И вот этот костыль и инвалид (си) стал стандартом просто потому что оказался на нужном месте в нужное время.

Вероятно, именно в силу красоты и крутости его запрещено использовать при разработке ответственных систем военного назначения для армии США. На Аде и Модуле можно, а на Си/С++- нельзя.

Аватар пользователя iStalker
iStalker(12 лет 3 месяца)

Паскаль и питон по сравнении с Си - неуклюжи и малораспространены. 

Ну паскаль не промышленный язык, а вот то что питон не распространен - тут я поржал :)

Аватар пользователя blkpntr
blkpntr(8 лет 5 месяцев)

Первая версия Photoshop написана на Паскале (диалект с = вместо :=). Основные командеры - тоже.

Совершенно очевидно, что a,b,c: pointer to byte выглядит нагляднее, чем unsigned char *a, *b, *c. Просто есть лобби (в данном случае против Европы).

Аватар пользователя tiriet
tiriet(11 лет 2 месяца)

да нету никакого лобби. есть инерция. куча легаси на c/c++, и эту кучу надо толкать в перед. и проще ее толкать мелкими кусочками на с/с++, чем переписывать сразу все на что-то другое, тем более, что в текущем виде при всех недостатках и проблемах с/с++ это не только и не столько язык. это язык + стандарт + стандартизированные библиотеки ну и + "прежних ошибок груз"- то есть куча всяких утилитарных библиотек, типа IMKL той же самой! есть какая-никакая переносимость и какая-никакая стабильность. хотя бы и в косяках, но стабильность.

На pascale, помимо коммерческого фотошопа, еще коммерческий AltiumDesigner, и килотонны всякого локального софта в куче мелких и средних контор. Все-таки делфи для создания пользовательского виндового софта- недостижимый до сих пор почему-то идеал по удобству и скорости разработки. и это очень даже промышленный софт. только не "ширпотребный".

Аватар пользователя ShadowCat
ShadowCat(8 лет 3 месяца)

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

Аватар пользователя Txip
Txip(11 лет 4 месяца)

А почему не начать с арифметики заменив французские больше, меньше?

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Кому и какая от этого польза? 

Аватар пользователя Txip
Txip(11 лет 4 месяца)

Всем и большая. Лучше понимать будут про плюс и минус.

Аватар пользователя СПбДмитрий
СПбДмитрий(8 лет 8 месяцев)

Так это был не стёб? Тогда на что заменить? 

Скрытый комментарий Повелитель Ботов (без обсуждения)
Аватар пользователя Повелитель Ботов

Перспективный чат детектед! Сим повелеваю - внести запись в реестр самых обсуждаемых за последние 4 часа.

Комментарий администрации:  
*** Это легальный, годный бот ***
Аватар пользователя AndreyTemp
AndreyTemp(8 лет 6 месяцев)

Нанимаешь таких вот утырков, а в результате ... да всем насрать на чем вы кодите, делайте это грамотно

Комментарий администрации:  
*** отключен (систематические набросы) ***

Страницы