Übersetzen Sie

Translate to EnglishÜbersetzen Sie zum Deutsch/GermanΜεταφράστε στα ελληνικά/GreekПереведите к русскому/RussianOversetter til Norsk/NorwegianÖversätta till Svensk/Swedishहिनà¥à¤¦à¥€ अनà¥à¤µà¤¾à¤¦ करने के लिà¤/Hindi
Tradueix al català/CatalanTulkot uz latviešu/LatvianPreložiť do slovenčiny/SlovakVertaal aan het Nederlands/Dutchترجمة الى العربية/ArabicTraduzca al Español/SpanishTraduisez au Français/French
Traduca ad Italiano/ItalianTraduza ao Português/Portuguese日本語に翻訳しなさい /Japanese한국어에게 번역하십시오/Korean中文翻译/Chinese Simplified中文翻译/Chinese TraditionalПереклад на українську/Ukrainian
Bild der androiden drahtlosen Anwendungsentwicklung
Bild der Linux-Kern-Entwicklung (3. Ausgabe)
Bild von XSLT 2.0 und XPath 2.0 von Hinweis des Programmierers (Programmierer zum Programmierer)
Bild von RHCE Red Hat bestätigte Ingenieur-Linux-Studien-Führer (Prüfung RH302) (Bescheinigung-Presse)

Javascript Shell Microsoft-SUA

Vor kurzem musste ich irgendeinen Javascriptcode auf einem entscheidenden Betriebssystem Microsofts Vista unter Verwendung der Befehlszeile prüfen. Dieses ist etwas, das ich vorher auf Linuxplattformen unter Verwendung eines Javascriptoberteils getan habe, aber hatte nie auf einer Microsoft-Plattform getan. Für die, die nicht mit einem Javascriptoberteil vertraut sind, ist es eine Befehlszeile Schnittstelle zu einer Javascriptmaschine. Ähnlich Pythonschlange oder Rubin, hat das Javascriptoberteil Betriebsart zwei. Sie können es als wechselwirkendes Oberteil verwenden, in dem Sie Javascriptcode an einer Aufforderung schreiben und sofortige Resultate erhalten, oder Sie können ein Javascriptprogramm anrufen.

Die einfachste Weise, der ich weiß von, um ein Javascriptoberteil zu errichten, ist herunterzuladen und errichtet die SpiderMonkey Javascriptmaschine, die mit einem Javascript Shell kommt. SpiderMonkey ist eine von zwei Javascriptmaschinen, die das Mozilla Software-Projekt stützt. Es wird im Firefox Browser und anderwohin verwendet. Die andere Javascriptmaschine ist Nashorn. Nashorn wird unter Verwendung der Java-Sprache geschrieben, während SpiderMonkey eine reine Spracheimplementierung ist, die an ECMA-262 die Ausgabe sich anpaßt 3., die in SpiderMonkey eingeschlossen ist, ist ein Javascript oberteil. Quellencode für beide Javascriptmaschinen ist auf der Mozilla Web site leicht verfügbar.

Für Microsoft Vista hatte ich eine Wahl jedes Gebäudes gebürtiges Windows, das vollziehbar ist, das über das Vista-Befehlseingabeformat (ähnlich der alten DOS-Aufforderung) oder, weil entscheidendes Vista mit Subsystem für Unix-based Anwendungen (SUA) kommt, ein Oberteil erreicht werden könnte, das über ein vertrauteres Unix-wie Umwelt zugänglich war. Wahl I, zum zu gehen der SUA Weg.

Viele Leute sind Microsofts SUA vom Angebot ahnungslos. Im Allgemeinen ist es ein POSIX-gefälliges Vollfunktionssubsystem für Windows NT-gegründete Betriebssysteme. Aus ihren eigenen Gründen begrenzt Microsoft das availablity von SUA auf bestimmte Produkte wie Vista-Unternehmen und entscheidende Ausgaben und Windows-Server 2008. Es kommt mit Hunderten Dienstprogrammen einschließlich die GNU-Compileransammlung, das Korn Oberteil und die Entwicklungsüberschriften und -bibliotheken. Sehen Sie hier für weitere Informationen.

SUA ist ein Subsystem, das gebürtig auf den Windows-Kern läuft. welches orginally von Softway Systems entwickelt wurde. Der ursprüngliche Name für das Produkt war OpenNT, aber der wurde später zu Interix geändert. Interix und die meisten der Entwicklungsmannschaft wurden von Microsoft 1999 erworben und das Produkt wurde Services für Unix (SFU) 2005 umbenannt. Mit der Freigabe von Microsft Vista, war es in das Betriebssystem als unterschiedlicher installierbarer Bestandteil integriert und wurde Subsystem für Unix-based Anwendungen umbenannt. Es gibt eine aktive Benutzergemeinschaft um SUA, das von Interop Systems bewirtet wird und von Microsoft gefördert.

Dieses ist der Makefile, dem ich zusammen zerhackte, um die statischen js zu errichten, die vom SpiderMonkey 1.8 Quellen für Gebrauch mit Microsoft Vista SUA vollziehbar sind.

JSVERSION = js-1.8.0

CC = gcc

OS_ARCH    := $(subst /,_,$(shell uname -s | sed /\ /s//_/))
OS_RELEASE := $(shell uname -r)
OS_CONFIG  := $(OS_ARCH)$(OS_RELEASE)
OBJDIR      = ./$(OS_CONFIG)

DEFINES     = -DXP_UNIX -DPOSIX_SOURCE -DHAVE_LOCALTIME_R

LIBDIR     := lib
INCLUDES   += -I$(OBJDIR)
RANLIB      = ranlib
LDFLAGS     = -lm

OPTIMIZER   =
INTERP_OPTIMIZER =

CFLAGS          =  $(OPTIMIZER) $(DEFINES) $(INCLUDES)
INTERP_CFLAGS   = $(INTERP_OPTIMIZER) $(DEFINES) $(INCLUDES)

PREDIRS += editline
DEFINES += -DEDITLINE

JS_CFILES =     jsapi.c jsarena.c jsarray.c jsatom.c jsbool.c jscntxt.c jsdate.c \
                jsdbgapi.c jsdhash.c jsdtoa.c jsemit.c jsexn.c jsfun.c jsgc.c jshash.c \
                jsinterp.c jsinvoke.c jsiter.c jslock.c jslog2.c jslong.c jsmath.c \
                jsnum.c jsobj.c jsopcode.c jsparse.c jsprf.c jsregexp.c jsscan.c \
                jsscope.c jsscript.c jsstr.c jsutil.c jsxdrapi.c jsxml.c prmjtime.c

JS_HFILES =     jsarray.h jsatom.h jsbool.h jsconfig.h jscntxt.h jsdate.h \
                jsemit.h jsexn.h jsfun.h jsgc.h jsinterp.h jsiter.h jslibmath.h \
                jslock.h jsmath.h jsnum.h jsobj.h jsopcode.h jsparse.h jsarena.h \
                jsclist.h jsdhash.h jsdtoa.h jshash.h jslong.h jstypes.h jsprvtd.h \
                jspubtd.h jsregexp.h jsscan.h jsscope.h jsscript.h jsstr.h jsutil.h \
                jsxdrapi.h jsxml.h

API_HFILES =    jsapi.h jsdbgapi.h

OTHER_HFILES =  jsbit.h jscompat.h jscpucfg.h jsotypes.h jsstddef.h jsopcode.tbl \
                jsproto.tbl js.msg jsshell.msg jskeyword.tbl prmjtime.h resource.h

ifdef JS_HAS_FILE_OBJECT
JS_CFILES += jsfile.c
JS_HFILES += jsfile.h
endif

LIB_CFILES  = $(JS_CFILES)
PROG_CFILES = js.c

LIB_OBJS  = $(addprefix $(OBJDIR)/, $(LIB_CFILES:.c=.o))
PROG_OBJS = $(addprefix $(OBJDIR)/, $(PROG_CFILES:.c=.o))

CFILES = $(LIB_CFILES) $(PROG_CFILES)
OBJS   = $(LIB_OBJS) $(PROG_OBJS)

LIBRARY = $(OBJDIR)/libjs.a
PROGRAM = $(OBJDIR)/js
TARGETS = $(PROGRAM)

EDIT_LIBRARY  = $(OBJDIR)/libedit.a
EDIT_DIR      = ./editline
EDIT_CFILES   = $(EDIT_DIR)/editline.c $(EDIT_DIR)/sysunix.c
EDIT_OBJS     = $(OBJDIR)/editline.o $(OBJDIR)/sysunix.o
EDIT_CFLAGS   = -DANSI_ARROWS -DHAVE_TCGETATTR -DHIDE -DUSE_DIRENT -DSYS_UNIX \
                -DHAVE_STDLIB -DUNIQUE_HISTORY $(DEFINES) -I$(EDIT_DIR)

define MAKE_OBJDIR
if test ! -d $(@D); then rm -rf $(@D); mkdir -p $(@D); fi
endef

all:
        $(MAKE) $(TARGETS)

$(PROGRAM): $(PROG_OBJS) $(LIBRARY) $(EDIT_LIBRARY)
        $(CC) -o $@ $(CFLAGS) $(PROG_OBJS) $(LIBRARY) $(EDIT_LIBRARY) $(LDFLAGS)

$(OBJDIR)/%.o: %.c %.h
        @$(MAKE_OBJDIR)
        $(CC) -o $@ -c $(CFLAGS) $*.c

$(OBJDIR)/editline.o: $(EDIT_DIR)/editline.c $(EDIT_DIR)/editline.h
        @$(MAKE_OBJDIR)
        $(CC) -o $@ -c $(EDIT_CFLAGS) $(EDIT_DIR)/editline.c

$(OBJDIR)/sysunix.o: $(EDIT_DIR)/sysunix.c $(EDIT_DIR)/editline.h
        @$(MAKE_OBJDIR)
        $(CC) -o $@ -c $(EDIT_CFLAGS) $(EDIT_DIR)/sysunix.c

$(OBJDIR)/%.o: %.c
        @$(MAKE_OBJDIR)
        $(CC) -o $(OBJDIR)/jscpucfg jscpucfg.c
        $(OBJDIR)/jscpucfg > $(OBJDIR)/jsautocfg.h
        $(CC) -o $(OBJDIR)/jskwgen jskwgen.c
        $(OBJDIR)/jskwgen $(OBJDIR)/jsautokw.h
        $(CC) -o $@ -c $(CFLAGS) $*.c

$(OBJDIR)/jsinterp.o: jsinterp.c jsinterp.h
        @$(MAKE_OBJDIR)
        $(CC) -o $@ -c $(INTERP_CFLAGS) jsinterp.c

$(EDIT_LIBRARY): $(EDIT_OBJS)
        $(AR) rv $@ $?
        $(RANLIB) $@

$(LIBRARY): $(LIB_OBJS)
        $(AR) rv $@ $?
        $(RANLIB) $@

clean:
        rm -rf $(OBJS)

clobber:
        rm -rf $(OBJDIR)

tarball:
        mkdir -p ./$(JSVERSION)/editline
        cp *.[ch] ./$(JSVERSION)
        cp *.tbl ./$(JSVERSION)
        cp *.js ./$(JSVERSION)
        cp *.msg ./$(JSVERSION)
        cp Makefile ./$(JSVERSION)
        cp README ./$(JSVERSION)
        cp editline/*.[ch] ./$(JSVERSION)/editline
        cp editline/README ./$(JSVERSION)/editline
        cp editline/editline.3 ./$(JSVERSION)/editline
        tar cvf $(JSVERSION).tar ./$(JSVERSION)
        gzip $(JSVERSION).tar
        rm -rf ./$(JSVERSION)


Anmerkung, die Sie GCC 4.2 anstelle von GCC, 3.2 benutzen müssen anders Sie ein unbestimmtes _JS_DHashTableOperate Symbol wegen einer obsure GCC-Wanze erhalten. Jedoch mit GCC 4.2, sehen Sie, dass viele Compilerwarnungen in Bezug auf Ausrichtung größer als maximale Objektdatei ist. Glücklicherweise können Sie sie sicher ignorieren. Übrigens beschließe ich, ein statisches vollziehbares zu errichten, weil, gemeinsam benutzte Bibliotheken auf SUA unter Verwendung GCC zu errichten ein wenig problematisch ist.

Sobald Sie Bau ein vollziehbares haben, ist ein einfaches smoketest, das vollziehbare zu verwenden, um den prefect.js Javascriptindex durchzuführen, der mit dem SpiderMonkey Quellencode eingeschlossen ist. Sie sollten Ausgang ähnlich erhalten dem folgenden:

$ ./Interix6.0/js perfect.js

A number is 'perfect' if it is equal to the sum of its
divisors (excluding itself).

The perfect numbers up to 500 are:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
That's all.
$


Gut sollte dieses genug sein, zum Sie zu ermöglichen, Ihr eigenes Javascriptoberteil auf Microsofts Subsystem für Unix-based Anwendungen zu errichten. Viel Glueck!
 

Anmerkungen sind geschlossen.