"การสนับสนุนดั้งเดิมสำหรับคุณสมบัติ" ในภาษาการเขียนโปรแกรมคืออะไร


15

ฉันดูผ่านสายบ้างเช่นนี้ "PHP ไม่มีการสนับสนุน Unicode" ฉันยังอ่านว่า Python มีการสนับสนุน Unicode อยู่แล้ว ตอนนี้คุณสามารถเรียกใช้ฟังก์ชันutf8_encode()ใน PHP เพื่อเข้ารหัสสตริงเป็น Unicode และคุณสามารถใช้ฟังก์ชันunicode()ใน Python เพื่อแปลงสตริงเป็น Unicode ดังนั้นการสนับสนุน Unicode จึงหมายความว่าอย่างไร นอกจากนี้บางภาษามีการสนับสนุนพร้อมกันในขณะที่บางภาษาไม่มีการสนับสนุนแบบดั้งเดิม ดังนั้นสิ่งที่มีความหมายโดย

ภาษา X นั้นรองรับคุณสมบัติ Y


ในความเป็นจริงแล้ว Python 3 รองรับ Unicode ได้ เช่นเดียวกับ 2.7
nmichaels

คำตอบ:


16

หมายความว่าเพื่อสนับสนุนคุณลักษณะที่กำหนดผู้พัฒนาไม่จำเป็นต้องใช้ส่วนประกอบที่ไม่ได้ฝังอยู่ในภาษานั้น ๆ เช่นส่วนขยายหรือผลิตภัณฑ์ของบุคคลที่สาม

ตัวอย่างเช่น PHP ไม่มีการสนับสนุน unicode ดั้งเดิมเนื่องจากทุกฟังก์ชั่นที่เกี่ยวข้องกับสตริงใน PHP นั้นไม่รองรับ unicode ตัวอย่างเช่นในการรับสตริงย่อยคุณไม่สามารถใช้substrแต่จำเป็นต้องใช้mb_substrซึ่งจำเป็นต้องใช้ส่วนขยาย Multibyte String

หากต้องการได้รับการสนับสนุนคุณลักษณะที่ให้มาแบบดั้งเดิมนั้นไม่เพียงพอที่จะรวมส่วนขยายไว้ในลำต้นรหัสแหล่งที่มา PHP จะมีการสนับสนุนดั้งเดิมสำหรับ unicode ถ้า unicode เป็นการเข้ารหัสเริ่มต้นเช่นใน C # หรือ Java


1
ดังนั้นมันเกี่ยวกับว่าส่วนประกอบเป็นส่วนหนึ่งของภาษาหรือไม่ ฉันหมายถึงถ้าพวกเขารวมmb_stringฟังก์ชั่นของแหล่ง PHP มันจะกลายเป็นพื้นเมือง?
lovesh

1
@ leshesh: มันไม่ง่ายอย่างนั้น หากพวกเขารวมส่วนขยายในลำตัว PHP แต่ไม่ทำให้ยูนิโค้ดเป็นค่าเริ่มต้นการเข้ารหัสฉันไม่แน่ใจว่ามันจะได้รับการพิจารณาว่าเป็นเจ้าของภาษาหรือไม่ ถ้ายูนิโค้ดแทนจะกลายเป็นการเข้ารหัสเริ่มต้นเช่นเดียวกับใน C # ใช่แล้วนี่จะเป็นการสนับสนุนแบบเนทีฟ
Arseni Mourzenko

หรือคุณอาจบอกว่ามันรองรับแบบดั้งเดิม แต่ไม่ธรรมดา / ไม่ใช่ค่าเริ่มต้น มันเป็นแค่ความหมาย
BlueRaja - Danny Pflughoeft

2
สำหรับภาษาnativelyสนับสนุนชนิดของสตริงบางอย่างผมอย่างน้อยจะต้องให้มีไวยากรณ์สำหรับตัวอักษรสตริงสำหรับชนิดของสตริงที่ ตัวอย่างเช่นจะมีบางสิ่งบางอย่างเหมือนs = "Müsliriegel"mb;แทนที่จะเป็นอย่างอื่นs = toMb("Müsliriegel");(ซึ่งแน่นอนว่าทุกภาษาที่ใช้ UTF8 เป็นการเข้ารหัสเริ่มต้น
เล็กน้อย

11

"ภาษา X สนับสนุนคุณลักษณะดั้งเดิม Y" หมายความว่าคุณสามารถใช้คุณสมบัติ Y ได้โดยไม่ต้องมีส่วนขยายหรือความพยายามอื่นใดเพื่อให้สามารถใช้งานได้ มันสามารถใช้งานได้โดยตรงจากภาษาเอง

ตัวอย่างเช่นคุณสามารถพูดได้ว่า

"ภาษา C ++ รองรับการโอเวอร์โหลดตัวดำเนินการ"

"ภาษาจาวาสนับสนุนการเก็บขยะอัตโนมัติ" เพราะคุณไม่จำเป็นต้องใช้ไลบรารีหรือเครื่องมืออื่นใดที่ทำการรวบรวมขยะอัตโนมัติ มันมาพร้อมกับตัวของตัวเอง (และแพลตฟอร์ม)


9

ฉันอ่านภาษาในบริบทที่คุณพูดถึงในตัว หากภาษาไม่ได้ให้การสนับสนุนพื้นเมืองสำหรับคุณสมบัติบางอย่างคุณจะต้องใช้งานด้วยตัวคุณเองหรือค้นหาห้องสมุดหรือโมดูลที่ให้บริการ

ตามบริบทที่คุณจะเห็นอีกพื้นเมืองมากคือส่วนที่เกี่ยวกับการใช้งานบนแพลตฟอร์มบางส่วนหรืออื่น ๆ ในกรณีเหล่านั้นหมายถึงการรวบรวมสำหรับแพลตฟอร์มซึ่งต่างจากการตีความหรือแปลอย่างใด แอป iOS พื้นเมืองเป็นหนึ่งที่เขียนในภาษาเช่นวัตถุประสงค์ -C และรวบรวมเพื่อรหัสที่วิ่งโดยตรงในครอบครัวของตัวประมวลผล ARM (ซึ่งเป็นสิ่งที่คุณพบในอุปกรณ์ iOS)


5

ฉันคิดว่าการใช้คำผิดในทางที่ผิด สำหรับบางสิ่งที่จะเป็น "เจ้าของภาษา" ในภาษานั้นจะต้องมีสิ่งอำนวยความสะดวกสำหรับมัน การสนับสนุนดั้งเดิมสำหรับบางอย่างเช่นยูนิโค้ดจะมีประเภทดิบในภาษาที่ใช้ unicode ในบางวิธี โดยทั่วไปแล้วนี่ไม่ใช่ส่วนหนึ่งของภาษา แต่เป็นส่วนหนึ่งของห้องสมุด

IMHO เรียกสิ่งที่ปรากฏในไลบรารีเริ่มต้นของภาษาหรือไม่ทำให้บางอย่างเป็นภาษาแม่หรือไม่

ตัวอย่างบางส่วน:

C ++ มีการสนับสนุนดั้งเดิมสำหรับคลาส C ไม่ได้ ไม่มีคำหลักภาษาหรือเครื่องมืออำนวยความสะดวกสำหรับพิมพ์ที่เปิดใช้งานการเขียนและการใช้คลาสคุณต้องเขียนโค้ดด้วยตนเอง

ฉันจะบอกว่า C ++ ไม่ได้มีประเภทสตริงพื้นเมืองกว่า C มีเท็มเพลต basic_string ในไลบรารีมาตรฐาน แต่นี่ไม่ใช่สิ่งอำนวยความสะดวกด้านภาษา

C ++ 11 ดูเหมือนว่าจะเพิ่มการสนับสนุน Unicode จริง ๆ เนื่องจากมีการเพิ่มคำหลักและประเภท raw ใหม่เข้าไปในภาษาเพื่อช่วยในการทำงานกับค่า Unicode

หวังว่าจะชี้แจงความแตกต่างที่ฉันเห็น


การใช้คำว่า "ประเภทดิบ" ของคุณทำให้ฉันสับสน คุณช่วยอธิบายได้ไหม
Jeremy Heiler

ใน Python 3 สตริงทั้งหมดเป็นยูนิโค้ด (มีbytesประเภทแยกต่างหาก) ดังนั้นฉันคิดว่ามันยุติธรรมที่จะพูดว่า Python รองรับ unicode
เบรนแดนลอง

Python 2 ใช้งานได้ดีในunicodeประเภทนี้แม้ว่ามันจะเจ็บปวดกว่าการใช้งานมากกว่า Python 3 C ++ เป็นสัตว์ประหลาดในสิ่งที่เป็นส่วนหนึ่งของภาษาที่อยู่ในห้องสมุด
Gort the Robot

@JeremyHeiler: ปรากฏว่า "ประเภทดิบ" เป็นพื้นฐานประเภทไม่คอมโพสิตไม่ใช่ประเภทห้องสมุด ตัวอย่างเช่น C จะมีประเภทสตริง ( char[]) และแม้กระทั่งตัวอักษรสตริง ไม่ใช่ "ประเภทดิบ" ทั้งหมดที่จำเป็นต้องมีตัวอักษรที่ตรงกันเช่นพอยน์เตอร์ใน C เป็นต้น ( NULLเท่านั้นที่สามารถแปลงไปint*)
MSalters

-1

"การสนับสนุนแบบเนทีฟ" อย่างน้อยในภาษาที่แปลหรือโดยทั่วไปแล้ว JIT จะแปลรหัสซึ่งโดยทั่วไปจะเป็นเพียงลิงค์ไปยังฟังก์ชั่นการคอมไพล์แล้วที่อยู่ด้านล่างล่าม

ตัวอย่างเช่นใน JavaScript หากคุณแจ้งเตือนหน้าต่างเปิดใน Firefox คุณอาจเห็นฟังก์ชั่นที่อวัยวะภายในพูดบางอย่างเช่น "[native code]" ในขณะที่การอ้างอิงทั้งหมดจะถูกส่งไปยังล่ามและขั้นตอนจะต้องดำเนินการเพื่อสร้างบริบทและขอบเขตอวัยวะภายในจะได้รับการแคชโดยทั่วไปและพร้อมที่จะไป window.open ยกตัวอย่างเช่นอาจเรียกบางอย่างจากสภาพแวดล้อมแบบรันไทม์ของเบราว์เซอร์

ซึ่งแตกต่างจากวัตถุและวิธีการที่ไม่ใช่เจ้าของภาษาหรือคุณหรือคนอื่นเขียนเพราะในกรณีเหล่านั้นงบทั้งหมดของคุณจะต้องตีความ / ประเมิน

หากมีใครบางคนกำลังใช้คำที่อ้างอิงถึงภาษาที่คอมไพล์ล่วงหน้าฉันจะสมมติว่าพวกมันหมายถึงภาษาแกนกลางทั้งหมดที่คอมไพเลอร์โทเค็นจริง ๆ แล้วแปลงเป็นรหัสเครื่องเทียบกับสิ่งที่คุณกำหนดด้วยตัวคุณเอง โครงสร้างและการอ้างอิงที่ใช้เชื่อมโยงมันเข้าด้วยกัน


1
นั่นไม่ใช่การสนับสนุนดั้งเดิมในภาษา นั่นคือการสนับสนุนดั้งเดิมในห้องสมุด
SLAKS

จุดไหนที่คุณไม่เห็นด้วย? ไม่ว่าคุณจะอ่านผิดฉันหรือฉันไม่เข้าใจแนวคิดหลักบางอย่าง แต่นั่นก็คลุมเครือ
Erik Reppen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.