Jump to content

SenseTalk

SenseTalk
Парадигма Человеко-ориентированное программирование , Мультипарадигмальность , Объектно-ориентированное
Семья Язык сценариев
Разработано Дуглас Саймонс
Разработчик Баклажан (программное обеспечение)
Впервые появился 1992 год ; 32 года назад ( 1992 )
Стабильная версия
2.18 / июнь 2024 г .; 2 месяца назад ( 2024-06 )
Дисциплина набора текста Утка
Лицензия Собственный
Расширения имен файлов
  • .script
  • .st
Веб-сайт www .senstalk
Под влиянием
xTalk , ГиперТок

SenseTalk — это высокого уровня англоподобный язык сценариев из семейства XTalk , который поддерживает как процедурные, так и объектно-ориентированные парадигмы. Сценарии SenseTalk предназначены для чтения обычными людьми, в том числе теми, кто практически не имеет подготовки в программировании.

С этой целью SenseTalk включает ряд языковых элементов, которые обеспечивают функциональность, ориентированную на человеческие задачи, а не на базовое поведение машины. Например, чтобы проверить, делится ли количество на 3, сценарий может использовать выражение if quantity is divisible by 3 или if quantity is a multiple of 3 , с упором на читабельность и человеческую концепцию делимости. [1] Сравните это с более традиционными языками программирования (C, Java, Python и т. д.), где тот же тест обычно записывается как if (quantity % 3) == 0 , при этом основное внимание уделяется машинным операциям, необходимым для определения результата. [2]

Такое смещение акцента с лежащих в основе машинных вычислений на англоподобное описание поведения в человеческих терминах приводит к описанию SenseTalk как «языка программирования, ориентированного на людей». [3]

Отличительные характеристики

[ редактировать ]

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

Регистронезависимый

[ редактировать ]

Ключевые слова SenseTalk и имена переменных нечувствительны к регистру. Это позволяет людям небрежно использовать заглавные буквы без каких-либо изменений в поведении.

Put 12 Into Apples
put 5 into Bananas
PUT "Total Pieces of Fruit: " & apples+bananas --> displays "Total Pieces of Fruit: 17"

Это также относится к именам свойств в списке свойств (имя SenseTalk для словаря или хеш-таблицы).

Put {Name:"Green", HexCode:"#00FF00"} into AColor
put aColor's name --> displays "Green"
put the HEXcode of acolor --> displays "#00FF00"

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

Set name to "McMaster"
put name contains "master" --> displays True (case is ignored)
put name contains "master" considering case --> displays False

Типы жидкостей

[ редактировать ]

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

Эта гибкость выходит за рамки « утиной типизации », существующей в других языках, где данная переменная имеет тип, который устанавливается, когда переменной присваивается значение. В SenseTalk переменная считается «контейнером», который может содержать значения любого типа. Тип значения, которое содержит переменная, может измениться во время выполнения сценария, поэтому одна и та же переменная может сначала содержать число, затем строку, а затем список значений. Такая «гибкость типов» позволяет людям работать очень гибко, манипулируя значениями по своему желанию и рассматривая каждое значение в соответствии с тем, как оно используется в данном месте сценария.

Одним из следствий бестиповых переменных SenseTalk является отсутствие «перегруженных» операторов, то есть операторов, которые выполняют разные операции в зависимости от типа переменной, с которой они работают. Например, в некоторых языках + Оператор будет выполнять сложение, когда он используется с числовыми операндами, и будет выполнять конкатенацию строк, когда он используется со строковыми операндами. В SenseTalk все операнды являются гибкими, поэтому для выполнения сложения необходим один оператор ( +, который будет обрабатывать свои операнды как числа) и еще один оператор конкатенации строк ( &, который будет обрабатывать свои операнды как строки).

Put 1 + 2 & 3 + 4 --> displays 37

В этом примере + оператор имеет более высокий приоритет, чем & оператор, поэтому выражение эквивалентно «(1 + 2) и (3 + 4)» или «3 и 7», что дает «37». Если для выполнения операции использовались круглые скобки & сначала оператор, затем «1 + (2 и 3) + 4» станет 1 + «23» + 4, что даст результат 28.

Предопределенные переменные

[ редактировать ]

SenseTalk включает сотни «предопределенных переменных». Это имена переменных, которые можно использовать как обычные переменные, но которые начинаются с предопределенного значения, если они используются без предварительного сохранения в них значения. Некоторые из предопределенных значений являются числами, например число «пи» или ноль. Многие из них являются специальными символами или символами, например euroSign , CopyrightSign или hotBeverage . А некоторые имеют другие типы значений, например jsonListFormat , который представляет собой список свойств, содержащий несколько пар ключ/значение, которые можно использовать для установки глобального свойства listFormat.

Put "Area of a circle with radius 5 is: " & pi * 5 squared

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

Put CookieCount --> displays "CookieCount"
Add 3 dozen to CookieCount --> treated as empty, or 0
put CookieCount --> displays 36

SenseTalk включает полную поддержку множества различных типов единиц (длина, масса, продолжительность времени, объем, частота и т. д.). Числовые значения могут иметь связанные единицы измерения. Значения единиц преобразуются по мере необходимости при выполнении арифметических операций.

Put 5 yds + 2 ft --> displays 17 feet

Переменные могут содержать значения с единицами измерения. Единицы переносятся вместе со значением и применяются в последующих расчетах.

Put 5 yds into length
add 2 ft to length -- the value in length is converted to a compatible unit to perform the addition
put length --> displays 17 feet
put 42 inches into width
set area to length * width
put area --> displays 59.5 square feet

Также поддерживаются более сложные единицы измерения, такие как скорость (мили в час или метры в секунду) или ускорение (м/с^2).


SenseTalk распознает дату и время в самых разных форматах и ​​поддерживает вычисления даты и времени.

Put "8:22" - "8:15" --> displays 420 seconds

Значения даты/времени могут храниться в переменных, а форматы поддерживаются посредством вычислений.

Put "March 3" + 34 days --> displays "April 6"
Put "2021-03-04" into nextDate

Add 4 weeks to nextDate
put nextDate --> displays "2021-04-01"

Add 4 months to nextDate
put nextDate --> displays “2021-08-01”


Выражения фрагментов

[ редактировать ]

Выражения фрагментов SenseTalk происходят из его наследия как члена семейства XTalk языков , производного от HyperTalk . Выражения фрагментов позволяют работать с фрагментами текста, используя знакомые английские термины: символы, слова, элементы, строки. SenseTalk расширяет исходный синтаксис фрагментов и расширяет их использование за пределы текста, включая элементы в списке, а также байты в двоичных данных.

Put characters 7 to 11 of "Rumpelstiltskin" --> displays" stilt"
Put the first 3 chars of the second word of book catalog --> displays “cat”

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

Put "Rumpelstiltskin" into funnyName

Put bump into characters 7 to 12 of funnyName

put funnyName --> displays “Rumpelbumpkin”


SenseTalk включает команды для открытия, чтения и записи файлов. Текстовый файл можно рассматривать как контейнер (например, переменную), поэтому содержимое файла можно прочитать, просто поместив файл в переменную. Аналогично, запись файла можно выполнить, поместив в него переменную или другое выражение.

Put file "/tmp/addressList.txt" into addresses

Put "Miriam,219 Sparrow Ln,Freeburgh,MA" & return after addresses

Put addresses into file "/tmp/addressList.txt"

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

Put return & "Earlybird,12 Elm St,Vista,NM" after line 1 of file "/tmp/addressList.txt"

Базы данных

[ редактировать ]

Доступ к записям в базе данных сложнее, чем чтение файла, но SenseTalk и здесь применяет концепцию контейнеров. Это позволяет подключиться к базе данных и обновить поле в конкретной записи с помощью очень небольшого количества кода.

Put {type:ODBC, DSN:customers, user:admin, password:sEcrEt} into custDB

Put table subscriptions of custDB into subs -- makes connection to a DB table

Add 12 months to expDate of the record of subs where CustNum is 83946-d -- updates a value in a particular record


Язык шаблонов

[ редактировать ]

«Язык шаблонов» SenseTalk [4] реализует регулярные выражения , используя удобочитаемый синтаксис, подобный английскому. В следующем примере создается шаблон для идентификации номера американского социального страхования (например, «999-99-9999»):

Set ssnPattern to <3 digits then dash then 2 digits then dash then 4 digits>

Узоры можно использовать по-разному.

if userEntry matches ssnPattern then set validSSN to true
put every occurrence of ssnPattern in file userData into ssnList
if clientInfo doesnt contain ssnPattern then put  <SSN missing> after clientInfo


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

set isolatedSSN to <ssnPattern not preceded by digit, not followed by digit>


Язык SenseTalk впервые появился в 1992 году в качестве языка сценариев в HyperSense, приложении для создания мультимедиа для платформы NeXTSTEP , созданном по образцу HyperCard . В то время этот язык представлял собой не более чем копию языка HyperTalk компании HyperCard . Более амбициозное переосмысление и перепроектирование языка привело к появлению нынешнего языка: версия 0.02 была выпущена в качестве языка сценариев в Eggplant V1.0 в 2002 году. Язык продолжал расти и развиваться с такими улучшениями, как добавление поддержка:

  • каждое выражение (аналогично «пониманию списков» на других языках) в версии 1.26 (2007 г.)
  • древовидные структуры данных (встроенная поддержка XML) в версии 1.30 (2008 г.)
  • итераторы в версии 1.36 (2008 г.)
  • диапазоны в версии 1.38 (2009 г.)
  • прямая поддержка HTTP и XML-RPC в версии 1.53 (2012 г.)
  • Базы данных SQL в версии 1.63 (2013 г.)
  • юниты в V1.67 (в 2014 г.)
  • язык шаблонов SenseTalk (читаемые регулярные выражения) в версии 1.81 (2018 г.)
  • форматы даты с читаемыми токенами в версии 1.91 (2019 г.)
  • операторы if с несколькими регистрами в версии 2.00 (2020 г.)
  • каждое выражение; использование каждого выражения для контейнеров в версии 2.04 (2021 г.)
  1. ^ «Математические операторы SenseTalk» .
  2. ^ «Проверка делимости в Python» .
  3. ^ «Человеческо-ориентированное программирование» .
  4. ^ «Язык шаблонов SenseTalk» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: dfa1ea2347d7a48dd8fd0218178bc0e6__1722268740
URL1:https://arc.ask3.ru/arc/aa/df/e6/dfa1ea2347d7a48dd8fd0218178bc0e6.html
Заголовок, (Title) документа по адресу, URL1:
SenseTalk - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)