Системное программирование, какой язык программирования выбрать? — Хабр Q&A
Здравствуйте, я отвечу на часть вопроса:
Программированием никогда не занимался, поэтому хотелось бы получить развернутый ответ, с чего лучше начать и что изучать, чтобы было полегче, заранее благодарю.
Писал быстро, возможны ошибки.
Или, Какие языки выбрать, что бы впоследствии без труда писать на 10-ти языках. (важно, проверно, не теряется время).
************************************************************************************************************
Я несколько лет обучаю языку программирования.
Наблюдал за разными людьми. Как правило выбранная тематика приводит человека к языку.
Кому-то нравятся игры, кому-то программы. кто-то хочет писать ботов и т .д.
Как правило, после начала изучения языка наступает момент, когда человек узнаёт больше о языке и ему уже хочется писать совсем другие приложения.
Это не значит, что он передумал, просто начинает понимать возможности.
Тогда и начинаются сомнения, а тот ли язык программирования выбрал и т .д.
Я думал над этим вопросом несколько лет и пришёл к такому выводу.
1. Ошибка. Нельзя выбирать узкопрофильный язык.
Нужно выбирать язык общего назначения первый для изучения. Более подходит для этого Пайтон.
Пайтон откроет дорогу к любому софту, так как содержит большое количество библиотек.
Например, можно писать сайты используя Джанго. Или можно писать графические программы, например, использую PyQt (библиотека написанная на С++, под управлением пайтон).
Можно заняться тестированием или машинным обучением (то есть делать сайты и программы умными, которые способны принимать решения сами. Все эти пакеты используют библиотеку NumPy написанную на Си. И их ряд большой.
Skipy — пакет, которые собирает в себе сборку программ, для любой сколь сложной обработки всего чего угодно.
Посмотрите здесь . Анаконда.
Я надеюсь возможности понятны.
Пайтон язык с динамической типизацией. то есть пол работы делает за вас.
Изучив пайтон, вы вообще въедете в программирование и уже будете делать софт, возможно зарабатывать.
Если, вы поймёте, что вам это интересно, то можно идти дальше.
Помните я говорил в начале, что важно выбрать язык общего назначения.
Так вот второе правило, если всё-таки решите стать профессионалом высокого уровня, второй язык нужно выбрать, который лежит в основе большинства других языков.
Это язык Си.
Си довольно просто, понятный язык, очень лаконичный и быстрый.
Нужен он для того, что бы открыть дорогу ко всем другим Си подобным языкам.
По сути, например, что бы понять С++ нужно будет просмотреть только отличия.
Я к этому пришёл сам за многие годы, не так давно наткнулся на одно видео с Гарварда, меня очень порадовало, что я был прав.
Этот подход использует во многих университетах.
Почему работает эта схема?
1. Пайтон, как язык общего назначения, даст вам познакомится с разным программным обеспечением.
Вы разберётесь, что вы хотите не выходя за рамки языка. Я говорю именно о времени, так как его потеря слишком дорого обходится.
2. Вы познакомитесь с парадигмами, которые есть в каждом языке, тип объекта (например список, строка и т .д).
Вы познакомитесь с переменными. с операциями над объектами и вам станет понятно, что есть язык изнутри.
Объясню проще. Каждый день мы свою голову используем, как компьютер.
Например, жена послала в магазин, так как собралась варить борщ.
Как правило большинство людей записывают, купить свеклу, морковь и т .д.
То есть в голове вы быстро расставили все действия.
Пойти в магазин. Достать список, прочитать, найти прилавки с продуктами, положить в карзину, оплатить, принести домой. отдать жене.
В вашей голове прошло много операций.
Тоже самое и в компьютере, только компьютеру нужно объяснить.
Например, если б мы писали программу. похода в магазин, то нам бы понадобилось нечто что способно объяснить компьютеру, что делать.
Именно, для этого и были придуманы языки программирования.
Часто говорю, своим ученикам, что каждый уже программист, так как совершает некие действия, каждый день.
Для программы был тот же список, вернее тип данных, или тип объекта, который и называется список.
Просто в язык он обозначается, например, в пайтон двумя квадратными скобками [‘свекла’, ‘морковь’]
Обратите внимание, язык программирование, как правило уже придуман под нужны людей.
В список можно добавить что угодно, например соль.
Это область называется операции над объектами.
Если в голове мы быстро просчитали, подошли к прилавку, протянули руку и положили, например морковь в корзину.
То, компьютеру нужно объяснить. То есть мы понимаем. что нужно добавить ту же морковь в корзину, но компьтео поймёт только свою команду, например добавить в пайтон звучало бы add.
Процесс думаю понятен.
Тогда вернусь к выше утверждениям.
Так вот Пайтон даст возможность начать писать всё что угодно, программы. игры, программы под андроид, сайты.
Если вам кто-то скажет (повторюсь), что пайтон медленный, не верьте.
Вы пользуетесь Ютуб? Так вот в большинстве он написан на пайтон. (источник М. Лутц).
Второе, как я говорил ранее, пайтон имеет огромное количество библиотек, к примеру, возьмём PyQt, написание графических программ. Сама библиотека написана на С++ (самый быстрый язык на сегодня). А управляем мы при помощи Пайтон.
Суть программирования проста. Взял виджет, в котором уже заложена много действий и программа готова.
Но есть ещё одна важная вещь, которая вам нужна.
До начала программирования у вас есть только желание, но остаются внутри вопросы, а какой язык выбрать, потом сомнения, а тот ли язык выбран??
Именно для этого и важно взять первый пайтон. Это будет уже точно тот язык, потому что приведёт вас к пониманию, а что собственно вы будете программировать.
После написания приложений на пайтон, примерно через 1-1,5 года, вы начнёте понимать себя самого, то есть понимать, что вы вообще хотите.
У вас начнут проявляться реальные конкретные желания.
То есть вы точно например будете понимать, что вы будет писать сайты. вам больше чем достаточно будет Фреймворка Джанго.
Здесь остановлюсь.
Связка Джанго пайтон очень опасный подход.
так как Джанго это настолько большой мир, что увлекаясь им, человек начинает обретать, такую склонность, как фреймворко зависимость. Что это такое?
Человек начинает терять способность писать на пайтон, так как Джанго это полностью автономный фреймфорк имеет свои модули, классы, архитектуру и структуру.
И начинает забываться сам пайтон.
Важно. Изучать например Джанго и PyQt. В чём суть?
Обязательно изучать то, что будет вас развивать в чистом пайтон. Я рекомендую android, так как не только полезно, но и перспективно.
Кстати, попутно отвечу на вопрос, нужно ли изучать пайтон, для Джанго?
Да нужно. Что нужно изучать? По минимуму типы объектов и начальное понимание ООП.
Типы объектов нужны, чтобы по минимуму не терять время.
Например, я наблюдал как новичок неделю боролся. а потом заявил, что не поставил одинарную кавычку.
Если б он изучил типы объектов, то сразу бы увидел, что в фрагменте кода, строки (тип объекта), они обозначаются одинарными или двойными кавычками.
Второе, не будет понятна справка джанго, потому что там объясняется именно типами данных.
И наконец закончу. так как уже несколько раз подвожу вк Си, но всё откладываю.
К тому времени, как вы будете писать на пайтон, у вас будет понимание что вы хотите.
Поэтому следующий язык программирования вы будете выбирать уже осознано.
Что бы не прогадать после пайтон нужно изучить Си.
Так как такие языки. как PHP, Джава. С++, Си шарп и многие другие имею в своей основе Си подобный синтаксис.
Само изучение следующего Языка это просто просмотр и сразу применение отличий.
Вот так изучение всего двух языков даст выход к десятку языков.
Повторяю, важное в этом подходе — это прогресс без потери времени.
Начать можно с просмотра бесплатного курса,
методика моментально понимания python.
Прочитайте на картинке, что это
Выше рассказывал процесс похода в магазин. И не просто так. Многие не понимают, что язык придуман для облегчения жизни. (вот что написала девушка Анна, как она выразилась это от неё ускользало. ).
А ведь непонимание этого простого момента не даёт выучить язык большинсту людей. У них разлад в голове, язык сам по себе, а мышление изучающего само по себе. И человек начинает думать, а как же мыслить, как программист, в то время. как он уже мыслит, как программист.
Я высказал своё мнение, принимать решение вам.
Я показал вам многие факторы. которые вы ранее не учитывали..
Но по крайне мере, для меня это работает.
Надеюсь статья получилась простой и всеобъемлющей.
Ещё одна деталь.
Важно сделать язык частью жизни.
Как происходит понимание языка с ноля, до промышленного программирования? (пояснил здесь)
Успехов Вам.
Спасибо за доверие.
Востребованные языки программирования
Василий Кулаженков
DevOps-инженер компании «Эвотор»
IT-рынок постоянно развивается: появляются новые языки программирования, дорабатываются старые, разрабатываются новые фишки и возможности.
Программист — это человек, который может быстро усваивать большие объемы информации и постоянно учиться. Если сразу этого не понять, то ваша ценность как специалиста постепенно сводится к нулю.
Поговорим о семи популярных языках программирования, которые нужно знать, чтобы вольготно себя чувствовать на мировом рынке труда. Усаживайтесь поудобнее, будет интересно.
JavaScript (веб-разработка)
Это крайне популярный и востребованный язык программирования, использующийся для веб-разработки, создания мобильных приложений и программ под Windows, MacOS, Linux (с участием сторонних фреймворков).
У языка масса библиотек и фреймворков, которые расширяют стандартные возможности. Несмотря на кажущуюся сложность, JS — это один из самых простых языков.
По всей России сегодня более 10 000 вакансий на JS-разработчиков. Так что дерзайте.
Python (веб-разработка, машинное обучение)
Это известный язык для новичков и профессионалов своего дела. За счет обилия библиотек и фреймворков, таких как Flask или Django, создавалась браузерная версия Pinterest. Сегодня Пайтон используют также для разработки ИИ, систем с машинным обучением.
На HH сегодня более 8000 вакансий на Python-разработчика. Чтобы расширить область компетенции, лучше изучить и популярные библиотеки.
Dart (среда Flutter для создания кроссплатформенных приложений на телефон)
Для многих разработчиков платформа Flutter от Google стала вторым домом для создания мобильных приложений. Специалисты Гугл создали и язык программирования Dart, который относится к ООП-сегменту. Начинающему программисту мы бы однозначно посоветовали Flutter вместо React Native по нескольким причинам:
- созданные приложения работают на порядок быстрее;
- проще освоить синтаксис;
- высокая производительность работы над проектом.
На HH не более 200 вакансий, что объясняется недоверием отечественного бизнеса к этому языку программирования. Однако перспективы у проекта колоссальные. Можно выйти и на международный рынок, где о Flutter и Dart знают.
Java (веб-разработка, создание приложений под Android)
Это более низкоуровневый язык, чем описанные выше, хоть и строится на ООП. Программы, написанные на Java, запускаются везде, где есть одноименная виртуальная машина.
Java используют для создания крупных веб-проектов и разработки мобильных приложений. На HH более 8000 вакансий для Java-разработчиков, что говорит о востребованности таких специалистов на отечественном рынке труда.
Учитывая, что Java относится к старым языкам, это отличный результат. Поэтому и в 2021-2022 гг. нужно учить классику, на которой в интернете и на смартфонах много что работает.
Swift (приложения для iOS, macOS, watchOS)
Вам обязательно нужно знать Swift, если хотите стать профессиональным разработчиком приложений под операционную систему от Apple. Свифт представили в 2014 году разработчики из «яблочной корпорации».
На отечественном рынке мы нашли 1000 вакансий на HH. Остаётся ждать популяризации приложений под iOS в СНГ, либо выходить на американский рынок, где менее распространен Android.
Если вы твердо решили стать разработчиком приложений под операционные системы Apple, без языка Swift не обойтись.
Go (настольные приложения, системное программирование)
Это низкоуровневый язык программирования, созданный в Google. Он отлично подойдёт для создания консольных приложений. Разработчики любят использовать Go для кластерных и облачных вычислений.
Если вы уже изучили C++ или C, то освоить Go будет крайне легко, а если начинали с Python, то переучиваться будет долго и трудно.
На HH нашлось более 2000 вакансий системных программистов с хорошими окладами. Go в ру-сегменте только набирает обороты, поэтому есть шанс оседлать волну.
C# (разработка игр на движке Unity, настольные приложения)
Это ООП-язык, созданный инженерами Microsoft в 2000 году. C# прошел длительный путь развития от приложений для Windows до создания программ под технология виртуальной реальности.
Синтаксис языка похож на Java, поэтому знание одного поможет освоить другой.
Раньше C# использовался для создания настольных приложений под Windows, сейчас же разработчики переориентировали его возможности под разработку игр на движке Unity. Также без C# не обойтись при создании веб-приложений.
Мы нашли на HH более 4 000 вакансий с хорошими окладами. Это отличный показатель для языка, которому более 20 лет. Поэтому изучите классику, она всегда будет вас кормить.
***
Изучив даже несколько языков из перечня выше, вы уже увеличите свои компетенции и доход. Конечно, придется перестроить свой мозг, разобраться в синтаксисе и попрактиковаться, но оно того стоит. Поэтому успехов вам в изучении.
Посмотрите также ответы экспертов на вопрос о том, какой язык программирования лучше выбрать первым для изучения новичку.
Системное программирование
Приложение, делающее системные вызовы getchar()
и putchar()
для взаимодействия с оборудованием. Источник: Weiss 2020, рис. 1.1.
Системы состоят из аппаратных и программных компонентов. Системное программирование — это реализация этих компонентов, их интерфейсов и общей архитектуры. Отдельные компоненты выполняют предписанные им функции и в то же время работают вместе, образуя стабильную и эффективную систему.
Системное программирование отличается от прикладного программирования. Системные программы предоставляют услуги другому программному обеспечению. Через абстракции они предоставляют API для упрощения разработки приложений. Они часто оптимизируются для низкоуровневой машинной архитектуры. В отличие от прикладного программного обеспечения, большая часть системного программного обеспечения не используется конечными пользователями напрямую.
Ассемблер и язык C исторически использовались для системного программирования. Го, Ржавчина, Swift и WebAssembly — более новые языки, подходящие для системного программирования.
Обсуждение
- Чем системное программирование отличается от прикладного?
Сравнение системного программного обеспечения с прикладным программным обеспечением. Источник: Lithmee 2018.
Примерами системного программного обеспечения являются операционные системы, драйверы устройств, BIOS и другие микропрограммы, компиляторы, отладчики, веб-серверы, системы управления базами данных, протоколы связи и сетевые утилиты. Как часть операционной системы, управление памятью, планирование, обработка событий и многие другие важные функции выполняются системным программным обеспечением. Примерами прикладного программного обеспечения являются Microsoft Office, веб-браузеры, игры и графическое программное обеспечение.
Прикладное программное обеспечение обычно не имеет прямого доступа к оборудованию и не управляет низкоуровневыми ресурсами. Они делают это через вызовы системного программного обеспечения. Таким образом, мы можем рассматривать системное программное обеспечение как вспомогательное прикладное программное обеспечение с низкоуровневым доступом и управлением.
Таким образом, разработчики приложений могут сосредоточиться на бизнес-логике своих приложений.Хотя разработчики приложений могут не создавать системное программное обеспечение, они могут стать лучшими разработчиками, зная больше о разработке и реализации системного программного обеспечения. В частности, зная и правильно используя систему API , они могут избежать реализации аналогичных функций в своих приложениях.
Например, приложение C в UNIX/Linux вызывает систему API
. ОС создает процесс, выделяет память и назначает идентификатор процесса. - Каковы основные проблемы системного программирования?
Основы системного программирования. Источник: Донован 1972, рис. 1.1.
Операционная система, такая как Linux, представляет собой набор системных программ. Они имеют дело с файлами и каталогами, управляют процессами для исполняемых программ, разрешают ввод-вывод для этих программ и выделяют/освобождают память по мере необходимости. OS управляет пользователями, группами и соответствующими разрешениями. ОС не позволяет обычным пользовательским программам выполнять привилегированные операции. Оболочка — это специальная системная программа, позволяющая пользователям взаимодействовать с системой.
Если процессам необходимо обмениваться данными или реагировать на внешние события, сигналы (также известные как программные прерывания) облегчают это.Существуют системные программы, преобразующие другие программы в инструкции машинного уровня для выполнения: компиляторы, ассемблеры, макропроцессоры, загрузчики и компоновщики. Их цель — генерировать инструкции, оптимизированные для скорости или памяти. В этих системных программах рассматривается использование регистров, циклов, структур данных и алгоритмов.
Языки программирования, редакторы и отладчики также являются системными программами. Это инструменты для написания хороших и надежных системных программ. Они должны быть простыми в освоении и продуктивными для разработчика, а также эффективными и безопасными с точки зрения системы.
- Является ли системный программист системным администратором?
Системный программист — это тот, кто пишет системное программное обеспечение, и эта задача называется системным программированием или системным программированием. Но есть более старое определение, которое используется в контексте мейнфреймов с 1960-х годов.
На мейнфрейме системный программист устанавливает, обновляет, настраивает и обслуживает операционную систему. Она занимается планированием мощностей и оценивает новые продукты. Она также умеет оптимизировать систему для повышения производительности, устранять неполадки и анализировать дампы памяти.
С другой стороны, системный администратор выполняет повседневные операции, такие как добавление/удаление пользователей, настройка доступа, установка программного обеспечения и мониторинг производительности. Она имеет дело с приложениями, тогда как системный программист лучше разбирается в оборудовании мэйнфреймов.
В небольших ИТ-организациях обе роли может выполнять один человек.
- Какие языки подходят для системного программирования?
В Википедии перечислены более дюжины языков: C/C++, Ada, D, Nim, Go, Rust, Swift и другие. Примечательно, что отсутствуют следующие популярные языки: JavaScript, Java, C#, Python, Visual Basic, PHP, Perl и Ruby. Реализованный на Haskell, COGENT — это язык функционального программирования, который также подходит для системного программирования.
Языки системного программирования необходимы для обеспечения прямого доступа к оборудованию, включая доступ к памяти и вводу-выводу. Производительность, явное управление памятью и детальное управление на битовом уровне являются важными возможностями.
Поскольку такие языки предоставляют доступ к низкоуровневым аппаратным функциям, существует риск появления ошибок. Rust был создан, чтобы сбалансировать аспекты безопасности и контроля. C жертвует безопасностью ради контроля , в то время как Java делает обратное.
Языки сценариев, такие как Python, JavaScript и Lua, не предназначены для системного программирования. Однако введение статической типизации (для безопасности) и компиляции Just-in-Time ( JIT ) (для скорости) привело к тому, что эти языки стали использоваться для системного программирования.
- Что такое системное программирование в контексте Интернета?
В Интернете приложения используют архитектуру клиент-сервер. Логика на стороне сервера может быть реализована в виде множества микросервисов, распределенных на облачной платформе. Приложения используют API , обслуживаемые разными конечными точками. В этом контексте у нас есть системные программы, которые помогают создавать распределенные приложения для облака. Системные программы должны быть разработаны с учетом изменений топологии сети, проблем безопасности , больших задержек и плохих сетевых подключений.
Роб Пайк заметил, что разработчики думали, что Go предназначен для системного программирования.
Бунарджич заметил, что «единственный способ запрограммировать систему — это запрограммировать сеть». Системы должны быть спроектированы для параллелизма, инкапсуляции/обнаружения/восстановления сбоев, обновления без простоев, наблюдения и асинхронной связи. Разработчики, использующие системные службы и API , должны быть свободны в выборе собственного стека технологий. Один сервис не должен зависеть от других.
- Каковы лучшие практики системного программирования?
Системный программист должен хорошо знать систему API . Кроме того, она должна знать, как ядро ОС , программы и пользователи взаимодействуют друг с другом.
Разработка хорошей системы — это не разовая задача. Система должна быть рассчитана на итерации и постепенные улучшения. Разработчики систем должны быть открыты для обратной связи. Исторически сложилось так, что многие системные программисты Linux обвиняли разработчиков приложений в сбоях программ вместо того, чтобы рассматривать их как возможность улучшить ядро Linux или системные инструменты.
Все допущения должны быть явными. Системное программное обеспечение должно правильно использовать абстракции, минимизировать, если не избегать дырявых абстракций. Другими словами, его пользователям не нужно знать детали реализации. Например, фреймворки ORM , которые взаимодействуют между приложениями и базами данных, часто негерметичны из-за концептуального несоответствия между объектами и отношениями.
Перед внедрением рекомендуется выполнить моделирование, анализ и моделирование системы. Единый язык моделирования ( UML ) может помочь. Небольшие и простые системы поддаются формальному анализу. Что-нибудь еще, мы должны применить статистический анализ. Чем больше компонентов, тем сложнее становится система.
Вехи
До начала и даже середины 1960-х годов при проектировании компьютерных систем в первую очередь обращалось внимание на само аппаратное обеспечение. Их программирование становится второстепенной задачей. Методы программирования хаотичны. Часто они не такие, как предполагалось разработчиками аппаратного обеспечения. Системное программирование как дисциплина только начинает зарождаться.
Переводчики являются системными программами. Источник: Шоу 1966, с. я-3.
Шоу считает ассемблеры, интерпретаторы, компиляторы и мониторы трансляторами ; то есть они переводят код из одной формы в другую. Ссылаясь на рисунок, переводчик T переводит A в B. Он определяет следующее:
Системное программирование — это наука о проектировании и создании трансляторов.
окт.
1968
На конференции НАТО по программной инженерии достоинства 9Обсуждаются 0172 языка высокого уровня : стоимость, ремонтопригодность, корректность. Однако системные программисты возражают против языков высокого уровня. Им не нравится, когда что-то встает между ними и машиной. Примирение этих двух проблем является основной задачей при разработке подходящего языка системного программирования.
Операционная система Unix изобретена в Bell Laboratories, сначала в сборке на PDP-7 (1969), а затем перенесена на C на PDP-11 (1971). Десять лет спустя один из его изобретателей, Деннис Ритчи, отмечает, что только ассемблер все еще написан на ассемблере. Большинство других системных программ написано на языке Си.
«Указатель» в BLISS для доступа к битам в слове. Источник: Вульф и др. 1971, стр. 786.
Исследователи из Университета Карнеги-Меллона изобрели новый язык системного программирования, который они назвали BLISS . Они описывают его как язык высокого уровня общего назначения для написания больших программных систем для конкретных машин. В них перечислены требования к любому хорошему языку системного программирования: экономия пространства/времени, доступ к аппаратным функциям, структурам данных, структурам управления, понятность, отладка и т. д. На рисунке показан пример того, как BLISS обеспечивает доступ на уровне битов. Такой низкоуровневый доступ типичен для системного программного обеспечения.
Weicker предлагает Dhrystone в качестве эталона для системного программирования. В настоящее время у нас есть эталонный тест Whetstone, настроенный для измерения арифметических операций с плавающей запятой. Системные программы часто используют перечисления, записи и типы данных указателя. По сравнению с числовыми программами системные программы имеют меньше циклов, более простые операторы вычисления, больше условных ветвлений и больше вызовов процедур. Тест Dhrystone учитывает это.
В исследовательском отчете IBM подробно описаны проблемы и ловушки при программировании многопроцессорных и многопоточных сред. Они относятся к архитектуре System/370. С общей памятью и структурами данных следует обращаться осторожно. Следовательно, 9Параллелизм 0172 — новая проблема системного программирования. Однако мультипрограммирование учитывалось при разработке Unix еще в начале 1970-х годов.
В этом десятилетии широкое распространение получили языка сценариев , такие как Perl, Tcl, Ruby, PHP, Python и JavaScript. Они рассматриваются как языки, которые «склеивают» различные компоненты, тогда как языки системного программирования используются для создания этих компонентов. В 2010-х границы стираются, поскольку некоторые языки сценариев используются для создания программного обеспечения для больших систем.
Вулф предлагает изменить методы обучения студентов системному программированию. Учебная программа будет включать небольшие задачи по различным аспектам системного программирования, а не только ассемблеры и компиляторы. В настоящее время студенты воспринимают системное программирование как скучное, сами методы устарели, а курсы не связаны с работой по системному программированию.
Брюэр и др. обратите внимание, что спустя 35 лет после изобретения языка C у нас все еще нет подходящей альтернативы системному программированию. Шапиро высказывает аналогичную жалобу в 2006 году. Достижения в области языков программирования не побудили системных программистов принять их.
Mozilla начинает спонсировать разработку Rust . Rust анонсирован миру в 2010 году. Первая стабильная версия языка выходит в мае 2015 года. Сегодня Rust широко известен как язык системного программирования.
Крайтон из Стэнфордского университета предлагает, чтобы студенты, изучающие языки программирования, обучались системному программированию. Курсы не должны быть посвящены только теории и формальным методам. Они должны включать практическое программирование, а также предоставлять эффективные ментальные модели вычислений и формальных рассуждений. Он включает WebAssembly и Rust в предлагаемую учебную программу.
Каталожные номера
- Бек, Леланд Л. 1997. «Системное программное обеспечение: Введение в системное программирование». Третье издание, Аддисон-Уэсли. Проверено 23 мая 2022 г.
- Бунарджич, Алекс. 2022. «Руководство разработчика с открытым исходным кодом по системному программированию». Opensource.com, 29 апреля. По состоянию на 23 мая 2022 г.
- Крайтон, Уилл. 2018. «Что такое системное программирование на самом деле?» 9 сентября. Проверено 23 мая 2022 г.
- Крайтон, В. 2019. «От теории к системам: обоснованный подход к обучению языку программирования». arXiv, v1, 14 апреля. По состоянию на 23 мая 2022 г.
- Донован, Джон Дж. 1972. «Системное программирование». Tata McGraw-Hill Edition (1991), The McGraw-Hill, Inc., по состоянию на 23 мая 2022 г.
- Эберхардт, Колин. 2022. «WebAssembly и современные языки системного программирования». QCon London, 12 мая. По состоянию на 24 мая 2022 г.
- Британская энциклопедия. 2021. «Системное программирование». Encyclopaedia Britannica, 2 августа. По состоянию на 23 мая 2022 г.
- Фаркас Т., К. Нейманн и А. Хиннерихс. 2009. «Интегративный подход к разработке встроенного программного обеспечения с UML и Simulink/», 33-я ежегодная международная конференция IEEE по компьютерному программному обеспечению и приложениям, стр. 516-521. дои: 10.1109/КОМПСАК.2009.185. Проверено 30 мая 2022 г.
- Документы GoLang. 2020. «Системное программирование в Go — 1.» GoLang Docs, 17 сентября. По состоянию на 24 мая 2022 г.
- ИБМ. 2008. «Концепции мэйнфреймов». Информационный центр основных навыков работы с z/OS, корпорация IBM. Проверено 23 мая 2022 г.
- Юнг, Ральф, Жак-Анри Журдан, Робберт Кребберс и Дерек Дрейер. 2021. «Безопасное системное программирование на Rust». Сообщения ACM, vol. 64, нет. 4, стр. 144-152, апрель. Проверено 24 мая 2022 г.
- Керр, Лука. 2020. «Расширение чисто функционального языка для обеспечения низкоуровневого системного программирования». БЫТЬ. Диссертация, Университет Нового Южного Уэльса, 11 декабря. По состоянию на 23 мая 2022 г.
- Ли, Пэн. 2004. «Языки программирования безопасных систем». Департамент компьютерных и информационных наук Пенсильванского университета, 6 октября. По состоянию на 23 мая 2022 г.
- Литми. 2018. «Разница между системным программным обеспечением и прикладным программным обеспечением». Педиаа, 22 июня. По состоянию на 24 мая 2022 г.
- С любовью, Роберт. 2013. «Системное программирование Linux». Второе издание, О’Рейли. Проверено 23 мая 2022 г.
- Мадунуван, Думинду. 2021. «Почему Ржавчина?» Изучение Rust, 27 апреля. По состоянию на 30 мая 2022 г.
- Макдэниел, Патрик. 2015. «Модуль: Системное программирование». CMPSC 311-Введение в системное программирование, Penn State Univ. Проверено 23 мая 2022 г.
- ПКМаг. 2022. «Системное программное обеспечение». Энциклопедия, PCMag. Проверено 26 мая 2022 г.
- Перкинс, С. 2012. «Эволюция системного программирования». Лекция 11 по передовым операционным системам, Школа компьютерных наук, по состоянию на 23 мая 2022 г.
- Ричи, Деннис М. 1984. «Эволюция системы разделения времени Unix». Lucent Technologies Inc. Дата обращения: 23 мая 2022 г.
- Шапиро, Джонатан. 2006. «Проблемы языка программирования в системных кодах: почему системные программисты до сих пор используют C и что с этим делать». PLOS ’06: Материалы 3-го семинара «Языки программирования и операционные системы: лингвистическая поддержка современных операционных систем», октябрь. дои: 10.1145/1215995.1216004. Проверено 30 мая 2022 г.
- Шоу, Алан С. 1966. «Конспект лекций по курсу системного программирования». Технический отчет № 52, кафедра CS, Стэнфордский университет, 9 декабря. По состоянию на 23 мая 2022 г.
- Суда, Джон. 2015. «Остановить утечку». Блог, Jon’s Musings, 25 июля. По состоянию на 30 мая 2022 г.
- Быстрый. 2022. «Про Свифт». Быстрый. Проверено 26 мая 2022 г.
- ТИОБЕ. 2022. «Индекс TIOBE за май 2022 года». ТИОБЕ. Проверено 30 мая 2022 г.
- Техопедия. 2015. «Системное программирование». Techopedia, 28 сентября. По состоянию на 23 мая 2022 г.
- Трейбер, Р. Кент. 1986. «Системное программирование: борьба с параллелизмом». Отчет об исследовании, RJ 5118, Исследовательский центр IBM Almaden, 23 апреля. По состоянию на 23 мая 2022 г.
- Уоттс, Стивен. 2020. «Что такое системное программирование?» Блог, BMC, 24 апреля. По состоянию на 23 мая 2022 г.
- Вейкер, Райнхольд П. 1984. «Dhrystone: тест синтетического системного программирования». Сообщения ACM, vol. 27, нет. 10, стр. 1013-1030, октябрь. Проверено 23 мая 2022 г.
- Вейкер, Р. П. 1990. «Обзор общих показателей». Компьютер IEEE, том. 23, нет. 12, стр. 65-75, 1990, doi: 10.1109/2.62094. Проверено 23 мая 2022 г.
- Вайс, Стюарт. 2020. «Глава 1: Введение в системное программирование». Конспект лекций, UNIX-приложения и системное программирование, факультет компьютерных наук, Хантер-колледж. Проверено 23 мая 2022 г.
- Википедия. 2022. «Язык системного программирования». Википедия, 22 апреля. По состоянию на 23 мая 2022 г.
- Вулф, Джеймс Л. 1992. «Возрождение системного программирования». Бюллетень ACM SIGCSE, том. 24, нет. 1, стр. 255–258, март. Проверено 23 мая 2022 г.
- Вульф, В.А., Д.Б. Рассел и А.Н. Хаберманн. 1971. «BLISS: язык системного программирования». Сообщения ACM, vol. 14, нет. 12, стр. 780-790, декабрь. Проверено 23 мая 2022 г.
Дополнительная литература
- Крайтон, Уилл. 2018. «Что такое системное программирование на самом деле?» 9 сентября. По состоянию на 23 мая 2022 г.
- Донован, Джон Дж. 1972. «Системное программирование». Tata McGraw-Hill Edition (1991), The McGraw-Hill, Inc., по состоянию на 23 мая 2022 г.
- Юнг, Ральф, Жак-Анри Журдан, Робберт Кребберс и Дерек Дрейер. 2021. «Безопасное системное программирование на Rust». Сообщения ACM, vol. 64, нет. 4, стр. 144-152, апрель. Проверено 24 мая 2022 г.
- Ли, Пэн. 2004. «Языки программирования безопасных систем». Департамент компьютерных и информационных наук Пенсильванского университета, 6 октября. По состоянию на 23 мая 2022 г.
- Перкинс, С. 2012. «Эволюция системного программирования». Лекция 11 по передовым операционным системам, Школа компьютерных наук, по состоянию на 23 мая 2022 г.
- Роббинс, Кей А. и Стивен Роббинс. 2003. Программирование систем Unix™: связь, параллелизм и потоки». Пирсон. По состоянию на 23 мая 2022 г. .
Статистика статей
1801
Слова
2
Авторов
4
Правки
1
Нравится
1681
Просмотров
Процитировать как
Девопедия. 2022. «Системное программирование». Версия 4, 30 мая. По состоянию на 09.10.2022. https://devopedia.org/systems-programming
c# — Разница между языком системного программирования и языками прикладного программирования
спросил
Изменено 8 лет, 1 месяц назад
Просмотрено 14 тысяч раз
В чем разница между языком системного программирования
и языком прикладного программирования
?
- c#
- java
- python
- perl
- языки программирования
2
На мой взгляд, следует принять во внимание несколько факторов
В языке системного программирования вы должны быть в состоянии достичь низкоуровневых вещей, приближаясь к реальному аппаратному миру. Вместо этого в языке приложений есть своего рода «виртуальный мир» (надеюсь, более приятный и удобный для взаимодействия), который был разработан с помощью языка, и вам нужно только уметь с этим справляться.
В языке системного программирования не должно быть уступок в плане производительности. Нужно уметь писать код, выжимающий из железа все соки. Это не самая большая проблема в языке программирования приложений, где большую роль играет время, необходимое для фактического написания программы.
Из-за 2 язык системного программирования может предполагать, что программист не делает ошибок, и поэтому не будет защиты от «ошибок времени выполнения». Например, индексирование массива будет означать конец света, если аппаратное обеспечение не предоставит эти проверки бесплатно (но в этом случае вы, вероятно, могли бы вместо этого выбрать менее дорогое или более быстрое оборудование). Идея в том, что если вы предполагаете, что код правильный, нет смысла платить даже маленькую цену за проверку невозможного. Кроме того, язык системного программирования не должен мешать, пытаясь запретить программисту делать что-то, что он/она хочет сделать намеренно… предполагается, что он/она знает, что это правильно. Вместо этого в языке прикладного программирования считается хорошим помочь программисту с проверкой кода, а также попытаться заставить код использовать определенные философские схемы. В языках прикладного программирования такими вещами, как скорость выполнения, время ввода и размер кода, можно пожертвовать, пытаясь помочь программистам избежать самострела.
Из-за 3 язык системного программирования будет намного сложнее изучить экспериментальным путем. В каком-то смысле это мощные, но опасные инструменты, которые нужно использовать, тщательно обдумывая каждое утверждение, и по той же причине это языки, отладка которых намного сложнее. Вместо этого в языках прикладного программирования подход «попробуй и посмотри» может быть разумным (если абстракция виртуального мира не слишком сильно утекает), и допустимым вариантом считается допустить ошибки, чтобы удалить их позже.
Как и во многих других областях ИТ, грань размыта. Например, C начал свою жизнь как язык системного программирования (и использовался для реализации Unix), но также использовался и используется для разработки приложений.
При этом очевидно, что некоторые языки лучше подходят для системного программирования, чем другие (например, C/C++ лучше подходят для системного программирования, чем COBOL/FORTRAN). Точно так же есть языки, которые лучше подходят для разработки приложений, а не для системного программирования, например. ВБ.NET.
Функции языка, которые выделяются из приведенных выше примеров, являются низкоуровневыми функциями языков системного программирования, таких как C/C++ (например, указатели, операторы манипулирования битами и т. д.). Конечно, существует старая шутка о том, что C — это язык уровня «море» (находящийся где-то между уровнем ассемблера и «высоким» уровнем).
Предупреждение: я подхожу к системному программированию с точки зрения разработчика ОС/разработчика инструментов ОС.
Я думаю, будет справедливо сказать, несмотря на проекты по разработке ОС с помощью Java (хотя я считаю, что в основном они скомпилированы в собственном коде, а не в байт-код и обработаны/интерпретированы JIT), что языки системного программирования нацелены на собственный машинный код своих целевые платформы. Таким образом, языки, которые в первую очередь предназначены для управляемого кода/интерпретируемого кода, с меньшей вероятностью будут использоваться для системного программирования.
Впрочем, этого достаточно, чтобы вызвать комментарии как в поддержку, так и против 🙂
3
Это не точные понятия, но по сути, языки системного программирования подходят для написания операционных систем (поэтому в них есть низкоуровневые понятия, такие как указатели, интеграция с ассемблером, типы данных, соответствующие памяти и организации регистров), а приложение языки программирования больше подходят для написания приложений, поэтому они обычно используют концепции более высокого уровня для представления вычислений (такие как ООП, замыкания, встроенные сложные типы данных и т. д.).
Как правило, язык системного программирования находится на более низком уровне, чем языки прикладного программирования. Однако сам язык здесь ни при чем… это больше особенности реализации языка.
Например, Pascal начал свою жизнь как язык обучения и был в значительной степени исключительно прикладным языком. Однако он превратился в системный язык и использовался для создания ранних версий MacOS и Windows.
C#, как правило, не является системным языком, потому что он не может выполнять низкоуровневую работу, хотя даже эта грань стирается по мере появления управляемых операционных систем.
Я не думаю, что здесь есть окончательный ответ.
perl и python поставляются по умолчанию почти с каждым дистрибутивом Linux… оба могут встраивать C… оба могут выполнять управление заданиями и другие «низкоуровневые» задачи… многопоточность и т. д.
любой язык с хорошим набором привязки системных вызовов и/или FFI должны быть так же хорошо осведомлены о системе, как C или C++.