Silicon что это за программа

Saved searches

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

The Silicon Programming Language

License

silicon-lang/silicon

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

README.md

Silicon is a programming language highly inspired by JavaScript and more specifically TypeScript, aiming to provide more efficiency and reliability while keeping the syntax as simple as possible.

Table of Contents

  • LLVM (v9) — source
  • Silicon Parser (v0.3.0) — source
  • Ardalan AminiCore Maintainer — @ardalanamini

See also the list of contributors who participated in this project.

This project is licensed under the Apache License 2.0. See the LICENSE file for more details.

About

The Silicon Programming Language

Microsoft начала тестировать Skype, оптимизированный для чипов Apple Silicon

Microsoft начала тестировать нативную версию приложения Skype для чипов Apple Silicon. Сборка пока доступна исключительно в ветке приложения для инсайдеров.

Текущая версия приложения Skype для macOS разработана для устройств на базе процессоров Intel. На Mac нового поколения с чипами Apple Silicon приложение запускается с помощью утилиты Rosetta 2. Теперь же Microsoft начала тестировать нативную версию Skype, которая будет работать быстрее.

Версия Skype Insider 8.94.76.302 теперь поставляется вместе со сборкой под процессоры M-серии от Apple. Доступ к приложению пока есть только у участников инсайдерской программы Microsoft. Полноценный релиз ожидается в первом квартале этого года.

Помимо нативной версии для Apple Silicon компания внесла ряд изменений:

  • исправили ошибку с чтением файлов на iOS;
  • теперь приложение для iOS не вылетает при переходе в галерею;
  • уведомления Skype в браузере Edge отображаются без ошибок;
  • имена пользователей в приложениях для iOS, Android и Windows выводятся без ошибок.
  • Мессенджеры
  • Разработка под MacOS

Фреймворк Silicon — WebAPI на C++

Прим. переводчика: в синтаксисе C++ напрочь отсутствуют несколько ограниченны средства построения предметно-ориентированных языков. В итоге их мало кто на С++ пытается использовать, а попытки всё же это сделать вызывают интерес, тем более, когда в итоге получается нечто стройно выглядящее и практически полезное. Одним из таких открытий для меня стал фреймворк Silicon, пытающаяся средствами современного С++ дать возможность быстро и гибко реализовать WebAPI в своём проекте. Давайте посмотрим, насколько просто это выглядит.

Hello World на Silicon — программа, которая на HTTP-запрос к

http://host/hello/world

ответит кодом 200 с текстом «hello world»:

auto my_api = http_api(GET / _hello / _world = [] () < return "hello world";>); mhd_json_serve(my_api, 80); 

Неплохо, правда? my_api здесь это описание нашего API, а mhd_json_serve — это бекэнд фреймворка Silicon, реализующий данный API с использованием встроенного вебсервера (на выбор microhttpd или LWAN).

Давайте посмотрим, что ещё умеет Silicon.

Возвращаем JSON

GET / _hi = [] ()

Обработка параметров всех типов

POST / _hello / _id[int()] // URL-параметры * get_parameters(_name) // GET-параметры * post_parameters(_age = int()) // POST-параметры = [] (auto p) // p содержит три параметра

Опциональные параметры

GET / _hello * get_parameters(_id = optional(int(42))) 

Связующий слой
Если вы пишете WebAPI, то с большой вероятностью вам может понадобиться доступ к базе данных. На Silicon это выглядит вот так:

auto my_api = http_api( GET / _username / _id[int()] = [] (auto p, mysql_connection& db) < std::string name; db("SELECT name from User where >> name; return D(_name = name); > ); auto middlewares = std::make_tuple( mysql_connection_factory("localhost", "user", "password", "database_name") ); mhd_json_serve(my_api, middlewares, 8080); 

Поддерживаются MySQL и Sqlite.

Ошибки
Для возврата кодов ошибок HTTP-протокола используются исключения:

GET / _test / _id[int()] = [] (auto p) < if (p.id != 42) // Отправляет код 401 (Unauthorized) throw error::unauthorized("Wrong ID"); return "success"; >

Сессии
Мы, конечно же, можем помнить сессии пользователей (в базе данных или в памяти):

struct session < int id; >; auto api = http_api( GET / _set_id / _id[int()] = [] (auto p, session& s) < s.id = p.id; >, GET / _get_id = [] (session& s) < return D(_id = s.id); >); auto middlewares = std::make_tuple( hashmap_session_factory() ); mhd_json_serve(my_api, middlewares, 8080); 

Тестирование созданного WebAPI
Мало толку от WebAPI, если все его методы не протестированы. К счастью, Silicon позволяет на основе описанного API получить клиент на базе libcurl_json_client, с уже готовыми функциями для вызова методов нашего API. Может использоваться как для тестирования, так и в реальном клиенте.

// Описываем API auto my_api = http_api( POST / _hello / _world / _id[int()] * get_parameters(_name, _city) = [] (auto p) < return D(_id = p.id, _name = p.name, _city = p.city); >); // Запускаем сервер auto server = sl::mhd_json_serve(hello_api, 8080, _non_blocking); // Создаём клиент auto c = libcurl_json_client(my_api, "127.0.0.1", 8080); // c.http_get содержит GET-процедуры // c.http_post содержит POST-процедуры // c.http_put содержит PUT-процедуры // c.http_delete содержит DELETE-процедуры // Благодаря интроспекции клиент знает пути и параметры запроса auto r = c.http_post.hello.world(_id = 42, _name = "John", _city = "Paris"); assert(r.status == 200); assert(r.response.id == 42); assert(r.response.name == "John"); assert(r.response.city == "Paris"); 
  • Блог компании Инфопульс Украина
  • Программирование
  • C++
  • API

При подготовке материала использовались источники:
https://github.com/silicon-lang/silicon
https://habr.com/ru/news/715228/
https://habr.com/ru/companies/infopulse/articles/280214/

Оцените статью