Ваш код довольно , он не изменяет .
Как правило, не используйте NS...
классы в Swift, если есть собственный эквивалент, и словарь JSON всегда является типом значения ([String:Any]
).
Я рекомендую добавить перечисление Error
, сделать так, чтобы функция могла выдать , декодировать сериализованный токен с помощью Decodable
и вернуть экземпляр Token
в случае успеха
Рекомендуется сохранить метку параметра в объявлении метода
enum TokenError : Error {
case invalidJWTFormat, invalidBase64EncodedData
}
func decode(token: String) throws -> Token {
let components = token.components(separatedBy: ".")
guard components.count == 3 else { throw TokenError.invalidJWTFormat }
var decodedString = components[1]
.replacingOccurrences(of: "-", with: "+")
.replacingOccurrences(of: "_", with: "/")
while decodedString.utf16.count % 4 != 0 {
decodedString += "="
}
guard let decodedData = Data(base64Encoded: decodedString) else { throw TokenError.invalidBase64EncodedData }
return try JSONDecoder().decode(Token.self, from: decodedData)
}
и вызывать его
do {
let userID = try decode(token: "eyJ0eXAi.....").data.user.id
} catch { print(error) }
Проверьте список рассылки ядра Linux FAQ для общих вопросов (который относился бы к любой разработке ядра), и не становитесь обескураженными этой точкой.
Единственная ОС любого значительного размера, о котором я знаю, это было запрограммировано в C++ вниз к "чистому металлу", операционная система AS/400 ОС/400 (после v3r6).
Нет ничего особенного, что препятствует тому, чтобы Вы делали любую ОС в C++ - особенно, когда Вы вспоминаете, что ванилью C является "почти" допустимый C++ так или иначе. То, что становится интересным, делает new
/delete
на самых низких уровнях, потому что Вы не должны гарантировать утечки и такой. Это приводит к потребности повторно реализовать new
функции.
Я помог сделать v3r6, но это были приблизительно 13 лет, и я не помню волосатые детали. Я не знаю ни о каких публикациях по нему, но если Вам действительно интересно, попытайтесь писать Marshall Cline по http://www.parashift.com.
(Augh. "удалите" "бесплатный" недостаток.)
Я не рекомендовал бы использовать C++ при создании монолитного ядра, период. Однако при рассмотрении дизайна микроядра Вы могли бы записать серверы (сети, консоль, фс, vfs, и т.д.) в C++, в то время как хранение самого ядра, трудного с C/, встраивает asm.
С другой стороны, если Ваше просто движение для x86, это не имеет значения так же.
Каковы цели дизайна Вашей ОС?
Все. Это не тривиальная задача, необходимо изучить большинство фасетов языка, я рекомендовал бы искать программирование ядра. От взглядов его я искал бы логические теории и парадигмы для языков программирования прежде, чем встроить себя в синтаксис. Существуют аппаратные слои, и именно так так необходимо будет узнать о намного больше, чем из ответа, Вы собираетесь войти в этот сайт или путем выполнения поиска Google.
Удачи!
Newos является хорошим ядром C++. Так eCos и L4. Newos является микроядром бывшим разработчиком BeOS. L4 является также микроядром, известным его невероятно быстрой передачей сообщений. И eCos является монолитным ядром.
Я предлагаю смотреть на начо (Не Другая Абсолютно Эвристическая Операционная система). Это - обучающая ОС, которую мы использовали для моего курса операционных систем в колледже.
Существует только один вид, который должен помочь сузить его. Запустите путем изучения руководств архитектуры ЦП, Intel доступны бесплатно. Получение документации для BIOS будет твердой частью.
Я рекомендовал бы прямой C для разработки Ядра. С разработкой ОС Вы действительно хотите знать то, что происходит 'под покрытиями'. Я чувствую, что C++ скрывается слишком много для разработки низкого уровня.
Хорошие ресурсы:
Я рекомендую посмотреть на Wiki OSDev. Это - фантастический источник информации относительно программирования ОС на многих языках, включая C++.
А именно, посмотрите этот раздел, который говорит Вам примерно все необходимое для начинаний с ядром C++ с помощью gcc.
Наконец, проверьте форумы OSDev, существует много пользователей там в пределах от новичков к высококвалифицированному. Они обычно более, чем рады помочь людям (пока они показывают, что попробовали перед выяснением :-P)
проверьте nanoos, проект ОС в C++!
В ответе на Ваш вопрос:
Операционная система (обычно сокращаемый или до ОС или до O/S) является интерфейсом между аппаратными средствами и приложениями; это ответственно за управление и координацию операций и совместного использования ограниченных ресурсов компьютера. Операционная система действует как хост к приложениям, которые запущены на машине. Таким образом, необходимо изучить биты в C++, которые позволяют программе (ОС) взаимодействовать с аппаратными средствами, это будет работать.
Затем это должно пойти вне взаимодействия с аппаратными средствами и обеспечения использования пользователю.
Для этого возвратитесь еще раз и посмотрите то, что предпринимается в nanoos как начальная точка (для потребностей изучения C++ того, что создание ОС в C++ повлекло бы за собой),
Функции нашли в nanoos:
Время выполнения C++
32-разрядный Диспетчер памяти защищенного режима
Обнаружение ЦП, обнаружение Памяти и обнаружение жесткого диска с интерфейсом IDE
Чтение жесткого диска с интерфейсом IDE
В основном, для записи Операционной системы просто проверьте то, что должна сделать ОС (или что это),
Если бы я должен был записать ОС, прежде даже рассмотреть язык, то я попытался бы понять, какова ОС, это - замечательная книга: Разработка и реализация Операционных систем.
Имейте чтение.Удачи
У меня есть друг, который записал ядро ОС в C++:
http://sourceforge.net/projects/ekp/
Таким образом, это определенно возможно. (В некоторых комментариях выше говорится, что это невозможно. Неправильно.)
Можно даже хотеть украсть его начальную загрузку и код сборки, так, чтобы можно было просто погрузиться прямо в и начать реализовывать "забавный материал".
Учитывая Ваш выбор сегодня нет абсолютно никакой причины "сделать" ОС. Выучите язык действительно хорошо и станьте действительно довольными Windows или изменением Linux. C или C++ является большим учиться.
Редактирование для разъяснения - моя точка - то, что это - и нереалистичное и пограничное безумие, чтобы попытаться выучить язык впервые путем создания Операционной системы. В минимуме действительно хорошие знания в C являются требованием, иначе запустите приложения создания и усильте питание существующей ОС прежде, чем попытаться к самокрутке.
Для многих технических причин Linux не программируется ни на каком языке помимо C. По различным политическим причинам немногими другими os'es является запрограммированный C++.
Если Вы хотите узнать о программировании ядер, операционная система Minix / микроядро явно разработана для изучения дизайна операционной системы. Это является маленьким и минимальным. Это также программируется в C.