Какие расширяемые языки люди используют сегодня? - PullRequest
3 голосов
/ 17 декабря 2009

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

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

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

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

Ответы [ 7 ]

4 голосов
/ 17 декабря 2009

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

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

3 голосов
/ 17 декабря 2009

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

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

1 голос
/ 18 июня 2014

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

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

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

1 голос
/ 13 мая 2013

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

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

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

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

1 голос
/ 17 декабря 2009

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

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

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

0 голосов
/ 03 декабря 2014

Язык 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 , который приносит много головных болей .

0 голосов
/ 16 марта 2013

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

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

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

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

...