Какие расширяемые языки люди используют сегодня?

Википедия говорит:

Расширяемое программирование — это термин, используемый в информатике для описания стиля компьютерного программирования, который фокусируется на механизмах расширения языка программирования, компилятора и среды выполнения.

Например, Tcl позволяет вам писать собственные управляющие структуры. См. здесь.

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


person Community    schedule 17.12.2009    source источник
comment
Вот еще один список языков программирования с расширяемыми грамматиками.   -  person Anderson Green    schedule 04.02.2016


Ответы (7)


Языки семейства LISP (Common Lisp, Guile и т. д.) чрезвычайно расширяемы — больше, чем любой другой язык, который я когда-либо использовал. Думайте об этом как о макросистеме C на стероидах. Если вам было достаточно скучно, вы могли бы переопределить оператор + как вычитание: вот это расширяемость!

LISP во многих местах вышел из моды, но Guile (диалект Scheme ) является официальным языком расширения проекта GNU.

person Community    schedule 17.12.2009
comment
Но вы не можете расширить синтаксис LISP. В конце концов, все сводится к скобкам и атомам. Я слышал, что некоторые диалекты, такие как Racket, позволяют расширить их синтаксис, но в конечном итоге вам придется писать свой собственный синтаксический анализатор в S-выражениях LISP. То, что каждый фрагмент кода LISP выглядит одинаково, может быть интересным, но это также может ухудшить читабельность (учитывая, что некоторые конструкции легче читать и поддерживать, используя другой формат). - person Louis-Jacob Lebel; 16.05.2020

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

Во всяком случае, люди на самом деле используют Ruby :-)

person Community    schedule 17.12.2009

Scala также не является строго расширяемым, но вы можете определить, что выглядит как операторы. Например, при определении карты вы можете использовать:

val romanNumeral = Map(
    1 -> "I", 2 -> "II", 3 -> "III"
)

-> на самом деле является методом, вызываемым для объекта 1, но выглядит как оператор.

person Community    schedule 17.12.2009

Jetbrains MPS (система метапрограммирования) предлагает расширяемую языковую рабочую среду на основе проекционного редактора. Это поможет вам в создании редакторов, систем типов, ограничений, рефакторингов и генераторов кода для расширений вашего языка. Он поставляется с некоторыми реализациями и расширениями языка Java.

mbeddr — это реализация C, использующая эту технологию. Он имеет систему компонентов, интерфейсы отправки/получения + клиент/сервер, внедрение зависимостей, конечные автоматы, тестирование и расширения PLE. Он также содержит расширяемую систему отладки, поэтому вы можете сопоставлять свои расширения с gdb и обеспечивать удобную отладку. Почти все функции языка C отображаются, поэтому генерация кода в основном может выполняться путем сокращения до конструкций C вместо глупых преобразований M2T.

Aynth — это простой монофонический синтезатор, написанный с использованием mbeddr для демонстрации компонентов и интерфейсов отправки/получения.

В любом случае, первое, что вы заметите, если будете его использовать, это то, что во многих случаях проекционное редактирование не так удобно, как редактирование текста. Мы так привыкли к текстовому редактированию. Но расширяемые языки имеют много преимуществ.

person Community    schedule 13.05.2013

В статье Википедии о расширяемом программировании упоминается язык Seed7. Статья Википедии о Seed7 описывает это как:

В дополнение ко многим другим функциям он предоставляет механизм расширения. Seed7 поддерживает введение нового синтаксиса и их семантики в язык и позволяет определять новые языковые конструкции с использованием самого языка Seed7. Например: программисты могут вводить синтаксис и семантику новых операторов, а также определяемые пользователем символы операторов.

Seed7 разработан как расширяемый язык с нуля. Весь язык не жестко закодирован в компиляторе. Вместо этого Seed7 определяется в библиотеках, которые загружаются при компиляции программы. ИМХО Seed7 - единственный язык, где расширяемость - базовая фича и все остальное на ней основано. В других подходах используется обычный язык, в котором компилятор использует жестко закодированный синтаксис и семантический анализ, а также закрепляет на нем некоторый механизм расширения.

person Community    schedule 18.06.2014

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

Он используется исключительно для описания вещей, прямо сейчас...

Но расширяемый язык программирования можно очень легко построить поверх Jeebox.

(Я создаю обычный нерасширяемый язык программирования поверх Jeebox просто потому, что встраивание расширяемости в язык программирования — это больше, чем просто функция языка. Здесь нужна своего рода рекурсия, когда вы пишете код, который может создать больше кода. И правильное выполнение этого потребует больше времени, чем у меня есть. Но приятно знать, что язык, который я использую, Jeebox, может поддерживать это, когда у меня есть время для этого.)

person Community    schedule 16.03.2013

TCL язык — это динамический язык с несколькими фундаментальными правилами< /а>:

Дух Tcl таков: "Все есть строка", "все есть команда", даже конструкции управления потоком.

Например, давайте заменим цикл while на пользовательский.

# rename original while to orig_while for future usage.
rename while orig_while; 

#redefine while
proc while {cond body} {
# add customization code

# calculate while call count.
global while_call_count;
incr while_call_count;

# call original while in uper level stack 
 uplevel orig_while $cond $body;

# add customization code
}

Tcl имеет интерфейс языка C, который позволяет очень легко интегрировать Tcl в существующую программу. Tcl очень широко используется в инструментах EDA.

И, наконец, TCL настолько мощный, что невозможно определить Tcl BNF, что приносит много головной боли.

person Community    schedule 03.12.2014